見出し画像

Djangoを使ったWebアプリの作り方 ⑥レンタルサーバーで公開編

今までは、ローカル環境(自分のPC)でDjangoアプリを動かしていました。今回は、さくらvpsにて作成したDjangoプロジェクトを公開していきます。

手順は以下となります。

1. さくらVPSの契約

さくらVPSのウェブサイトからアカウントを作成し、必要なプランを選択します。

さくらvps申し込み画面

サーバーを選択する

OSはCentOSとしました。また、今回は試しなので、一番リーズナブルなプランにしました。

サーバープラン選択画面

リージョンも一番リーズナブルな東京第2としました。

リージョン設定画面

パスワード設定と、SSH接続できるように公開鍵を設定します。

パスワード、SSH接続設定

自分のPCで、SSHの公開鍵、秘密鍵を生成する方法は以下リンクを参考にしてください。

次に、サーバの名前を設定して”お支払い方法選択へ”をクリックします。

サーバー名設定画面

クレジットカード決済で申し込みます。2週間お試しも選択します。

クレジットカード登録画面

最初は、2か月分の利用料金がかかります。

請求内容画面

この内容でよければ、支払いを確定します。

支払い画面

以上でサーバーが作成されます。少し時間がかかりますが、しばらくすると作成されたサーバーを確認することができます。

サーバー一覧

最初はサーバーが停止しているので起動>実行します。

サーバー起動画面

以上でvpsサーバーを契約して、起動するところまでできました。

2. SSH接続

今回は、Teratermを使って接続します。サーバーのIPアドレス(IPv4)を入力して、OKを押します。

最初は、警告画面がでますが続行を押します。

Teraterm警告画面

次に、サーバーの契約時に設定したパスワードと公開鍵を設定して接続します。(ユーザー名は、デフォルト"centos"です)

SSH認証

以上で、サーバーにSSH接続できました。さらにセキュリティ向上する場合は、以下サイトを参考に設定してみてください。

3. Dockerのインストール

Dockerは主に次の2つのバージョンがあります。今回は、Docker CEをインストールします。

  1. Docker CE (Community Edition)

    • 誰でも無料で使えるバージョン。

    • 主に個人ユーザーや小規模なチーム向け。

    • 新しい機能や更新が比較的早くリリースされます。

    • コミュニティ(開発者グループ)がサポートしています。

  2. Docker EE (Enterprise Edition)

    • 企業向けの有料バージョン。

    • セキュリティやサポートが強化されています。

    • 大企業や大規模なプロジェクトに適しています。

3.1 必要なパッケージのインストール

Dockerをインストールする前に、必要なシステムツールをインストールします。

  • yum-utils: パッケージ管理に便利なツール。

  • device-mapper-persistent-data と lvm2: ストレージ管理に関連するパッケージ。

$ sudo yum install -y yum-utils \
  device-mapper-persistent-data \
  lvm2

3.2 Dockerリポジトリを追加

CentOSにDocker公式リポジトリを追加します。 リポジトリとは、特定のソフトウェアをインストールするためのサーバーのことです。
(以下のコマンドを使って 安定版 (stable)リポジトリをセットアップします)

  • yum-config-manager: yumの設定を変更するツール。

  • --add-repo: 指定したリポジトリを追加します。

$ sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo

3.3 Docker本体のインストール

Dockerの本体(docker-ce = Community Edition)をインストールします。

$ sudo yum install docker-ce

上記コードで、最新版がインストールされます。特定のバージョンをインストールしたい場合は以下を参考にしてください。

3.3.1 特定バージョンのDocker CEをインストールする場合(任意)

開発する環境によっては、 Docker CE の最新版を利用するようなことはせずに、特定バージョンをインストールする場合があると思います。以下では、特定のバージョンのインストール方法を記載します。

インストール可能なDockerのバージョン一覧を確認します。

  • --showduplicates: 同じ名前の複数バージョンを表示。

  • sort -r: 結果を降順(新しいバージョンが上)に並べ替え。

$ yum list docker-ce.x86_64 --showduplicates | sort -r

特定のバージョンのDockerをインストールします。(例:docker-ce-<バージョン番号>)

$ sudo yum install docker-ce.x86_64

3.4 Dockerサービスを起動

Dockerのサービスを起動します。

  • systemctl: サービスを管理するコマンド。

  • start: サービスを開始する。

$ sudo systemctl start docker

3.5 現在のユーザーをdockerグループに追加

Dockerデーモンは通常、rootユーザーか、dockerというグループのメンバーにだけアクセスが許可されています。そのため、現状は、以下のように、Dockerコマンドを実行する際にsudoを付けることで、管理者権限で実行できます。

sudo docker ps -a

ただ、毎回sudoをつけるのは面倒なので、sudoなしでDockerを実行できるようにします。
Dockerをインストールすると、通常はdockerというグループが作成されます。このグループに現在のユーザーを追加することで、sudoなしでDockerコマンドを実行できるようになります。

・dockerグループに現在のユーザーを追加

sudo usermod -aG docker $USER

'''
# コード説明
$USERは、現在ログインしているユーザー名を自動的に取得します。

手動でユーザー名を指定する場合:
sudo usermod -aG docker centos
'''

・変更を反映するためにログアウト & 再ログイン

一度ログアウトしてから再ログインする必要があります。
もし、コマンドラインを再起動したくない場合は、以下のコマンドで変更を即座に反映できます。

newgrp docker

'''
# コードの説明
newgrp docker は、ユーザーを docker グループに追加した後、その変更をすぐに反映するためのコマンドです。
通常、ユーザーをグループに追加した場合、再ログインしないと新しいグループ権限が適用されませんが、このコマンドを使うと再ログインなしで反映できます。
'''

・権限を確認

ユーザーが正しくグループに追加されたか確認するために、次のコマンドを実行します。

groups

出力にdockerが含まれていればOKです。

4. Docker-Composeのインストール

Docker Composeは「Docker CLI」(Dockerのコマンドラインツール)と一緒に使う場合(プラグイン版)と、Docker CLIをインストールせずに、Docker Composeだけを使う場合(スタンドアロン版)があります。今回は、Docker Composeだけを使うスタンドアロン版の設定方法を記載します。

Docker Compolseを手動でダウンロードしますが、バージョンを指定する必要があります。バージョンは以下リンクから確認できます。

今回は、以下最新版(v2.30.3)をダウンロードします。

バージョン確認画面

以下コードを実行することで、所定の場所(/usr/local/bin/docker-compose)にDocker Composeをダウンロードすることができます。

sudo curl -SL https://github.com/docker/compose/releases/download/v2.30.3/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose

'''
# コードの説明
sudo
>管理者権限を使うためのコマンド。

curl
>インターネットからデータを取得するためのツール。

-SL
>-S: ダウンロード中のエラーを画面に表示します。
>-L: リンクがリダイレクト(他のURLに転送)される場合も、最終的なダウンロード先まで追跡します。

https://github.com/docker/compose/releases/download/v2.30.3/docker-compose-linux-x86_64
>ダウンロード元のURL。

-o /usr/local/bin/docker-compose
>-o: ダウンロードしたファイルをどこに保存するかを指定します。
'''

次に権限を設定します。

sudo chmod +x /usr/local/bin/docker-compose

'''
# コードの説明
sudo
>管理者権限を使うためのコマンド。

chmod
>ファイルやフォルダの「権限(Permission)」を変更するコマンド。

+x
>ファイルに「実行可能(executable)」な権限を追加するという指定。

/usr/local/bin/docker-compose
>権限を変更する対象のファイル(Docker Composeの実行ファイル)。
'''

以下コードを実行して、バージョンが確認できればOKです。

docker-compose --version
> Docker Compose version v2.30.3

5. Djangoプロジェクトの準備

今回は、以下で作成した、Docker対応したDjangoプロジェクトを使用します。

上記サイトで作成したDjangoプロジェクトは、以下階層をしています。

'''
# ディレクトリ構成
├── Django_Project                   # << カレントディレクトリ
    ├── manage.py
    ├── db.sqlite3
    ├── Pipfile
    ├── Pipfile.lock
    ├── docker-compose.yml
    ├── docker-compose.prod.yml
    ├── .env
    ├── .gitignore 
    ├── containers/
    |   ├── django
    |      ├── Dcokerfile
    |      ├── entorypoint.sh
    |   ├── postgres
    |      ├── Dcokerfile
    |   ├── nginx/
    |      ├── Dcokerfile
    |      ├── conf.d/
    |         ├── default.conf
    │
    ├── mysite/
    │   ├── __init__.py
    │   ├── settings.py
    │   ├── urls.py
    │   └── wsgi.py
    │   └── asgi.py
    │
    └── myapp/
        ├── migrations/
        ├── templates/
        ├── __init__.py
        ├── admin.py
        ├── apps.py
        ├── forms.py
        ├── models.py
        ├── tests.py
        ├── urls.py
        └── views.py
'''

このDjangoプロジェクトを、さくらvps上にコピーします。SCP接続でコピーしても良いですが、今回は、Githubに登録されたDjangoプロジェクトをpullする方法をとります。

5.1 Gitのインストール

今回はsakuravpsに簡単な方法でgitをインストールします。簡単な方法でGitをインストールする場合、最新版がインストールされるわけではないです。でも、大きな問題はないと思いますので、今回は簡単な方法を記載します。

sudo yum update
sudo yum install git

'''
# コードの説明
# sudo yum update
 >>システム全体を最新状態にします。
   これにより、他のツールとの互換性が保たれます。

# sudo yum install git
  >>新しくGitをインストールします。
    事前にシステムが最新だと、インストール後の動作も安定します。
'''

5.2 DjangoプロジェクトをCloneする

GithubからDjangoプロジェクトをCloneします。ただ、SSH接続で取得するには、公開鍵の登録が必要となります。下記サイトを参考に設定をします。

SSH接続の設定が終わったら、GitHubの以下ULRをコピーします。

ターミナルに以下を入力して、DjangoプロジェクトをCloneします。

git clone git@github.com:******/Django_Project.git

5.3 .envファイルを作成

次に、環境変数の設定がされている.envファイルを作成します。.envファイルはGitの管理対象外のため、このファイルだけは手動で作成する必要があります。(または、ローカル(自分のPC)にある、.envファイルをさくらvpsにアップロードします)

今回.envファイルに記載する内容は、データベース(POSTGRES)の設定と、DEBUGの設定、DjangoのSECRET_KEYです。以下内容を.envファイルに記載します。

POSTGRES_NAME=postgres
POSTGRES_USER=postgres
POSTGRES_PASSWORD=postgres
POSTGRES_HOST=db
POSTGRES_PORT=5432

DEBUG=False
SECRET_KEY='hogehgoe'

'''
# ディレクトリ構成
├── Django_Project                   # << カレントディレクトリ
    ├── manage.py
    ├── db.sqlite3
    ├── Pipfile
    ├── Pipfile.lock
    ├── docker-compose.yml
    ├── .env                         # << 作成
    ├── .gitignore 
    ├── containers/
    |   ├── django
    |      ├── Dcokerfile
    |      ├── entorypoint.sh
    |   ├── postgres
    |      ├── Dcokerfile
    │
    ├── mysite/
    │   ├── __init__.py
    │   ├── settings.py
    │   ├── urls.py
    │   └── wsgi.py
    │   └── asgi.py
    │
    └── myapp/
        ├── migrations/
        ├── templates/
        ├── __init__.py
        ├── admin.py
        ├── apps.py
        ├── forms.py
        ├── models.py
        ├── tests.py
        ├── urls.py
        └── views.py
'''

.envファイルを作成するコードは以下です。

touch .env
vi .env

'''
# コードの説明
touch .env
>>.envファイルを作成します。

vi .env
>>.envファイルの中身を編集します。
vi .envでファイルを開いたら、i キーを押して編集モードに入ります。
上記のPOSTGRESの環境変数を入力する。
編集が終わったら、以下を順に実行します。
 Esc キーを押して編集モードを終了
 :wq と入力してエンターキーを押す(w は保存、q は終了を意味します)
'''

6. Djangoプロジェクトの設定変更

さくらvpsでDjangoプロジェクトを公開する場合は、settings.pyの設定を変更する必要があります。変更する部分は、ALLOWED_HOSTS部分です。以下のように、さくらvpsのIPアドレス(IPv4)を指定します。

ALLOWED_HOSTS = ['さくらvpsのIPアドレス']

'''
# コードの説明
Djangoの**ALLOWED_HOSTS**は、Djangoアプリケーションにアクセスを許可する「ドメイン名」や「IPアドレス」を指定する設定です。
ALLOWED_HOSTSにさくらvpsのIPアドレスを設定しておくと、DjangoはこのURLからのアクセスを許可します。
それ以外のドメイン(例えばfakewebsite.com)からのアクセスは「不正なアクセス」とみなされて拒否されます。

理由は、ホストヘッダー攻撃と呼ばれる手法を防ぐためです。
不正なリクエストが他のドメインやIPアドレスを通じてアプリにアクセスするのを防ぎます。
例えば、攻撃者が偽のホスト名を使ってDjangoアプリにアクセスすると、意図しないデータ漏洩や挙動が発生する可能性があります。
'''

7. さくらのVPSでポートの許可(80番)

コントロールパネルから、さくらのVPSで80番ポートを許可します。
下図より、パケットフィルターを設定をクリックします。

パケットフィルター設定を追加するをクリックします。

以下のように設定して、設定を保存します。

8. コンテナのビルドと起動

以下のコマンドを実行して、Dockerイメージをビルドし、コンテナを起動します。今回は、docker-compose.prod.ymlファイルからビルドを行うため、以下コードを実行します。

docker-compose -f docker-compose.prod.yml up -d --build

'''
# コードの説明
docker-compose up:
>>Docker Composeで定義されたサービス(コンテナ)を起動します。

-d(デタッチドモード):
>>コンテナをバックグラウンドで実行します。
 つまり、ターミナルを占有せずに他の作業ができます。

--build:
>>各サービスのDockerイメージをビルドしてから起動します。
 Dockerfileやコードに変更があった場合、新しいイメージを作成します。

-f:
>>使用するComposeファイルを指定します。
通常、Docker Composeはデフォルトでdocker-compose.ymlを使用します。
ここではdocker-compose.prod.ymlという別のファイルを指定しています。
'''

以上を行うと、作成したDjangoプロジェクトを公開することができます。
http://さくらvpsのIPアドレス(IPv4):80 にアクセスするとアプリが正常に起動しているのが確認できます。

アプリ画面

9. まとめ

以上で、さくらvpsでDjangoプロジェクトを公開する流れを説明しました。少し長くなりましたが、これで、作成したDjangoプロジェクトを誰でも見れる状態に公開することができました。
最後まで目を通していただきありがとうございます。
スマホからでもPCからでも、どこからでも見れる状態になると、うれしくなりますね!

この後は、独自ドメイン、https対応を行っていこうと思います。

10. 参考


いいなと思ったら応援しよう!