VPSのWebArenaにDockerをインストールしてDjango/PostgreSQLのWebサービスを公開する

この記事では、WebARENA(VPSクラウド) に、Docker環境を構築し、PythonのWebフレームワークDjangoでサービスを開始するまでの手順を記載しています。

内容は以下の通りです。

  1. Webarenaを選んだ理由
  2. Webarenaへの申し込み
  3. VPSのセットアップ
  4. Dockerのインストール
  5. Gitからのクローン
  6. Dockerコンテナ起動(Webアプリケーション起動)

1、なぜWebArenaのVPSサーバを選んだか

最近は、アプリ開発でDockerを使用しています。

そのため、作成したサービスをそのまま本番で利用できるCaaS(Container as a Service)環境を探していました。

AWSのECSやFargateがありますが、 サービスを試作する上で、無料で始められ、追加の料金が発生しないArukasを利用することにしました。

しかし Arukasを使ってみましたが、Dockerコンテナ起動がうまくいきませんでした。CaaSでは、コンテナが起動しない結果は表示されるのですが、起動しない原因を調査することが難しく、利用を断念しました。(djangoは事前にテーブル準備のためのマイグレーションが必要など、コンテナ起動時の手順がちょっと複雑。)

その時の記事は以下になります。

関連記事:ArukasでDockerを使ったDjango/PostgreSQLのサービス公開手順(途中まで)

CaaSはあきらめて、VPSサーバを探しました。

ネットワーク使用量による追加料金が発生しない (データ転送量が無料) VPSを探しました。月額使用料を比較検討し、最終的にConoHa VPSとWebArenaのどちらに絞り込みました。

費用月額630円( 1.0円/時 )、初期費用無料
メモリ 512MB
CPU 1コア
SSD 20GB
費用月額360円、初期費用無料
メモリ 1GB
CPU 1コア
SSD 20GB

WebArenaに決めたポイントは、やはり月額料金が安かった点です。あと、NTTグループが提供しているので、まぁ大丈夫かな(なんとなく)と思いました。

さらに、2018/11/20より従来512MBであったメモリを値段据え置きで1GBに増強しました。それにより他のVPSサービスと比較してもコストパフォーマンスの良いサービスになっています。

ただ料金に関しては、ConoHa VPSにもメリットがあります。

ConoHa VPSは時間課金のため、サービスを停止している間は課金されません。1か月は720時間(30日 × 24時間)のため、バッチ処理などを一時的に実施する利用方法であれば月額630円未満も可能です。

ただし、今回は常時起動させるオンラインサービスであり24時間起動させるため、最大料金である630円になると考え、WebArenaにしました。

またWebArenaの環境構築では、OSにUbuntu/CentOSを選べるようになっています。それぞれコマンドの違いがあるため、参考にするサイトがどちらかは確認が必要です。本サイトはUbuntuで構築しています。(rootユーザ名の違いでハマることに。SSH接続以降は気を付けてください。)

2、WebArenaに申し込み

まずは、サイトにアクセスします。

WebARENA(VPSクラウド)

画面右上のVPSクラウドのメニューから、VPSクラウドを選び、お申し込みに進みます。

ゾーン2を選びます。ゾーン1はバックアップ機能とロードバランサー機能を利用できますが、月額が高くなっています。

プランを選びます。ここでは最安値の「プラン10」を選んでいます。

パスワード、メールアドレスを入力します。

必須項目にチェックをいれて、次へ進みます。

クレジットカード情報を入力します。

クレジットカード情報などの入力が完了すると、最終確認画面になります。問題なければ次に進みます。

電話番号認証に進みますので、SMS(ショートメッセージ)が受け取れる電話番号を入力します。

上記が完了すると、登録が完了し、サービスIDが発行されます。

3.WebArenaのVPSサーバセットアップ

ここではVPSのセットアップを行っていきます。セットアップ手順はPDFに記載の順番で進めていきます。手順が更新されていることもあると思いますので、一読したほうが良いかと思います。以下は、2019年5月初旬に実施しています。

vpsc_startup_simple_guide.pdf

作業概要は以下の通りです。作業概要にはApacheの起動が入っていますが、今回はDockerを利用しているため不要になります。

セットアップ手順

以下では、下記の順番で進めていきます。

  1. サーバ管理用コンパネへのログイン
  2. キーペアの作成
  3. セキュリティグループの作成
  4. インスタンス(仮想専用サーバ)の起動
  5. SSHアクセス

1.サーバ管理用コンパネへのログイン

VPSサービスのサービスコントロールパネルを開きます。

もし画面を閉じてしまった場合は、以下のURLからアクセスできます。

コントロールパネル

サービスIDとパスワードを入力してログインします。

2. キーペアの作成

キーペアはインスタンス(仮想専用サーバー)へSSHログオンする時に使用します 。

画面左のメニューから「キーペア」を選択します。

画面上部の「キーペアの作成」を選びます。

キーペアを作成したら、ダウンロードされますので、ファイルを保存してください。SSH接続の際に使用します。【SSH使用情報①】

なお、作成したキーペア ファイルは【再ダウンロードすることができない】ため、大切に保管してください。(ダウンロード 警告はブラウザに依存します)

3.セキュリティグループの作成

セキュリティグループはインスタンス(仮想専用サーバー)への適用が必須となるファイアウォ ール機能です 。

左メニューのセキュリティグループを押します。

必須項目の「セキュリティグループ名」と「ルール」を入力します。

セキュリティグループのルールについては、以下にマニュアルがあります。

https://web.arena.ne.jp/support/vps-cloud/manual/wakame-vdc.html

マニュアルを参照して、以下の設定をルールに記載しました。

tcp:22,22,ip4:0.0.0.0/0
tcp:80,80,ip4:0.0.0.0/0

4.インスタンス(仮想専用サーバ)の起動

画面左メニューの「マシンイメージ」を選択します。

イメージ には「新1G-SSDタイプ(KVM)」 を選択します。選択した状態で、インスタンスの起動を押します。

それぞれ、下記の情報を選択候補から選びます。選択したら、起動ボタンを押します。

  • インスタンス名
  • SSHキーペア(作成したキーペアがプルダウンから選択できるはずです)
  • セキュリティグループ(作成したセキュリティグループを選択)

画面左メニューのインスタンスを選択すると、作成したインスタンスが起動していると思います。作成したインスタンスのIPアドレスは、あとのSSH接続時に必要ですのでメモして下さい。 【SSH使用情報②】

また作成したインスタンスの編集ボタンを押すと、インスタンスIDを確認できます。

このインスタンスIDの、先頭の「i-」を除いた文字がubuntuユーザのパスワードになります。この後のSSH接続時に使用するのでメモしてください。 【SSH使用情報③】

5.SSHアクセス

ここでは、SSHの接続設定とセキュリティ設定の2つを実施します。

まずローカルPC端末から、作成したサーバのインスタンスにSSHでログインするための設定を行います。

必要な情報は、以下となります。

  • 【SSH使用情報①】 キーペア作成時にダウンロードしたpemファイル
  • 【SSH使用情報②】 作成したインスタンスのIPアドレス
  • 【SSH使用情報③】 ubuntuユーザ(rootユーザ)のパスワード

ちなみにTeraTermがなくても、PowerShellでもssh接続ができますので、ご参考までに。

https://mimimopu.com/powershell-ssh-client/

まず、ローカル端末のユーザのsshフォルダに移動し、ダウンロードしたpemファイルを配置します。

私がダウンロードした際は、ファイル名は「ssh-j*****.pem」でした。

ここで1つハマりポイントですが、接続のユーザ名は「root」ではなく「ubuntu」になります。

ssh ubuntu@[ipアドレス] -i [ダウンロードしたpemファイル]

接続に成功すれば、以下のメッセージが表示されます。

 PS C:\Users\*******\.ssh> ssh ubuntu@***.***.***.*** -i .\ssh-j*******.pem
Welcome to Ubuntu 18.04 LTS (GNU/Linux 4.15.0-20-generic x86_64)

Documentation: https://help.ubuntu.com
Management: https://landscape.canonical.com
Support: https://ubuntu.com/advantage System information as of Sun May 19 14:45:11 JST 2019 System load: 0.08
Usage of /: 25.3% of 19.56GB
Memory usage: 41%
Swap usage: 1%
Processes: 99
Users logged in: 1
IP address for ens3: ***.***.***.***
IP address for docker0: 172.17.0.1
IP address for br-739c7d708685: 172.18.0.1
Ubuntu's Kubernetes 1.14 distributions can bypass Docker and use containerd
directly, see https://bit.ly/ubuntu-containerd or try it now with snap install microk8s --classic
Canonical Livepatch is available for installation.
Reduce system reboots and improve kernel security. Activate at:
https://ubuntu.com/livepatch

230 packages can be updated.
107 updates are security updates.

Last login: Sun May 12 22:33:05 2019 from ***.***.***.***
ubuntu@*********:~$

ここからはセキュリティの設定をします。設定にあたっては以下のサイトを参考にさせて頂きました。

  1. VPSのOSをアップデートする
  2. rootユーザーでのログインを禁止する
  3. パスワードでログインできなくする(鍵認証)
  4. ポートを閉じて(変更して)侵入経路をふさぐ
  5. ファイアウォールを設定する
  6. denyhostsを導入して不正アクセスを試みるユーザーをブロックする

VPSのOSをアップデートする

ubuntuはdebian系ですので、apt-getになります。

# apt-get update 
# apt-get upgrade

新規ユーザを作成する

先に新しいユーザを追加します。(rootでのログインを禁止すると誰も入れなくなってしまいます。)

ここでコマンドに注意です。 「useradd」コマンドではホームディレクトリが作成されないので、Ubuntuではユーザー追加時は「adduser」コマンドを使うとパスワード発行からホームディレクトリ作製まで対話式に進むので、そのコマンドを利用してユーザーを作成します

# adduser USER_NAME
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully

作成したユーザに、sudoの実行権限を付与します。sudoはスーパーユーザの実行権限が必要なコマンド時に使用するコマンドです。

# usermod -aG sudo USER_NAME 

新たに追加したユーザが、SSH接続できるようにします。そのためにssh鍵を作成し、サーバに公開鍵を配置します。

ssh-keygen


公開鍵の配置はscpコマンドで行います。先ほど作成した新規ユーザのホームに.sshが作成されていなければ、事前に作成します。

mkdir /home/追加ユーザ名/.ssh

作成した公開鍵を転送します。ここはubuntuユーザで実行します。

scp -i .\ssh-j********.pem .\ id_rsa_*******.pub ubuntu@IPアドレス:/home/新ユーザ名/.ssh

公開鍵をサーバに登録します。手順としては、新たにauthorized_keysファイルを作成し、そこに転送した公開鍵を転記します。

cd /home/新ユーザ/.ssh
sudo touch authorized_keys
chown 新ユーザ名:新ユーザ名 authorized_keys
cat ras_********.pub authorized_keys

ここまでできたら、新しいユーザでSSH接続します。

ssh 新しいユーザ名@[ipアドレス] -i [作成した秘密鍵]

rootユーザーでのログインを禁止する/
パスワードでログインできなくする(鍵認証) /ポート番号を変更する

sudo vim /etc/ssh/sshd_config

以下を追記します。
変更後のポート番号には10001~65535の番号の間で入力するのがおすすめ。例えば[29112]みたいな。

#Port 22
Port 29112

PermitRootLogin no

#PasswordAuthentication yes
PasswordAuthentication no

sshdを再起動します。

sudo systemctl restart sshd 

先ほど変更したポート番号を、セキュリティグループのルールに追記します。

再度SSH接続して、以下のエラーがでればOKです。また変更後のポート番号でログインできることを核にします。

PS C:\Users\****.ssh> ssh ubuntu@***.***.***.*** -i .\ssh-*******.pem
ssh: connect to host ***.***.***.*** port 22: Connection refused


PS C:\Users\****.ssh> ssh ubuntu@***.***.***.*** -i .\ssh-*******.pem -p 29***
Welcome to Ubuntu 18.04 LTS (GNU/Linux 4.15.0-20-generic x86_64)
Documentation: https://help.ubuntu.com
Management: https://landscape.canonical.com
Support: https://ubuntu.com/advantage
System information as of Sun May 19 17:06:53 JST 2019
System load: 0.05
Usage of /: 25.3% of 19.56GB
Memory usage: 40%
Swap usage: 1%
Processes: 97
Users logged in: 1
IP address for ens3: ***.***.***.***
IP address for docker0: 172.17.0.1
IP address for br-739c7d708685: 172.18.0.1
Ubuntu's Kubernetes 1.14 distributions can bypass Docker and use containerd
directly, see https://bit.ly/ubuntu-containerd or try it now with
snap install microk8s --classic
Canonical Livepatch is available for installation.
Reduce system reboots and improve kernel security. Activate at:
https://ubuntu.com/livepatch
230 packages can be updated.
107 updates are security updates.

4.WebArenaにDockerをインストール

以下のサイトを参考にさせて頂きました。

SSHで接続後、

前提ソフトのインストール

sudo apt-get install -y \
apt-transport-https \
ca-certificates \
curl \
software-properties-common

GPG 公開鍵のインストール

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

aptリポジトリの設定

sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) \
stable"

docker-ceのインストール

sudo apt-get update 
sudo apt-get install -y docker-ce

dockerのバージョン確認

docker version

一般ユーザでの実行

sudo usermod -aG docker <アカウント名>

5.WebArenaにGitからアプリケーションをクローン

BitbuckeのGitに登録したソースをクローンします。

SSHで接続後、

ch /home/新規ユーザ/.ssh
ssh-keygen -t rsa -C  メールアドレス

作成された公開鍵をbitbucketのSSH鍵編集ページで張り付けます。

https://bitbucket.org/

ソースの格納フォルダを作成し、ソースをクローンします。

cd /home/新規ユーザ
mkdir git
cd git
git clone https://*******@bitbucket.org/*******/*********.git

6.WebArenaでDockerのサービス起動とコンテナ起動

以下のサイトを参考にさせて頂きました。

ここまでくれば、あとは開発環境の構築と同じです。

以下のコマンドを順次実行しましょう。

イメージからコンテナの作成

docker-composer.ymlファイルがあるフォルダへ移動して、

docker-compose up

テーブルとユーザ作成

docker ps を実行して、djangoを実行しているコンテナのIDを確認

docker ps

確認したコンテナIDに入って、マイグレーションを実行(以下はコンテナIDが5ac93cf5c6c8の場合)

docker exec -it 5ac93cf5c6c8 /bin/bash

マイグレーションとテーブルユーザの作成を実行

python manage.py migrate

python manage.py createsuperuser

ブラウザからアドレスにアクセス。以下のエラーが出たらsetting.pyを修正します。

Invalid HTTP_HOST header: …to ALLOWED_HOSTS.

settings.pyというファイルがあるので、それを開いて、

====================================
ALLOWED_HOSTS = []
====================================

に、インスタンスのIPアドレスを追記します。

====================================
ALLOWED_HOSTS = [‘***.***.***.***’]
====================================

http://IPアドレス/

にアクセスすると、アプリケーションが起動しました!

以上です。

所感

VPSの構築は難しいと思いこんでいましたが、全部含めて3~4時間で完了しました。WebARENA(VPSクラウド) は必要な機能は盛り込まれており、SSHの設定さえできてしまえば、あとは簡単だと思います。これで月額360円、データ転送料込みは安いです。

About: ken


コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください