サーバーのホストOSをArch Linuxに変更+Dockerでサーバー構築
自分がConohaから借りているサーバーのホストOSをArch Linuxに変更したので、サーバーの再構築を行うことになりました。この記事では、再構築をどうやってしたのかについて書きたいと思います。
I. ConohaのコントロールパネルからOSを再インストール
これは簡単なので説明は省略します。コントロールパネルで簡単にArchLinuxを入れることができます。サーバーを停止させ、ArchLinuxを選択して再インストールを行いました。
2. DockerとDocker-Composeのインストール
dockerはpacmanで簡単に入手できます。
pacman -S docker
インストールしても自動的に起動しないのでsystemctlで起動しましょう。
systemctl start docker systemctl enable docker
docker-composeをレポジトリーからダウンロードします。
curl -L "https://github.com/docker/compose/releases/download/1.24.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose chmod +x /usr/local/bin/docker-compose
docker-composeが使えない場合、PATHに/usr/local/binを追加しましょう。 これでインストールは終わりです、。
3. mailuでメールサーバー構築
mailuは、Webメール、Antispam、基本的なメールサーバーの構成要素(SMTP, POP3, IMAPなど)を合わせて構築できるようにしたものです。 僕はこの記事を参考にして構築しましたが、versionを1.5.1にしても動作しなかったのでversionを1.5にします。1.6が最新版でありますが、設定方法が1.5と大幅に違うため、ここでは1.5を使うことにします。
4. pritunlでOpenVPNサーバー構築
pritunlは、OpenVPNサーバーをWebページで立ち上げて、ユーザーの管理もできるようにするツールです。 構築はこの記事を参考にしました。
3, 4共通事項
あとでReverse Proxyの設定を行うため、Webページと関係がある部分のホストのポート設定を80, 443ではなく8888, 3333など、違うポートに設定し、BIND_ADDRESSを127.0.0.1にします。これは、直接該当ポートを入力してアクセスすることを防止し、Reverse Proxyで80と443ポートが使えるようにするためです。
5. 自作Twitter botのDockerfile作成
自分が作成したTwitter botがありますが、これもDockerfileを作成して環境構築を自動化したいと思いました。Dockerfileは下記に示しています。
FROM python:3.6 COPY .ssh /root/.ssh RUN pip install tensorflow pillow keras opencv-python python-twitter wget RUN apt-get -y update RUN apt-get -y upgrade RUN apt-get install -y ssh WORKDIR /root RUN git clone #省略します WORKDIR /root/yurucamp_twitter_bot COPY information.json information.json CMD python app.py
privateのレポジトリーを使っているため、認証のためにレポジトリーに登録している公開鍵と公開鍵に対応する秘密鍵をコンテナーの中に入れる必要があります。python:3.6のイメージを用いることにして、pipで必要なライブラリをインストールします。あまりよろしくないライブラリの管理の仕方かもしれませんが、面倒いのでpipでインストールします。
そしてdocker-compose.ymlファイルを作成します。
version: '2' services: yurucamp_twitter_bot: container_name: yurucamp_twitter_bot restart: always build: ./ privileged: true tty: true
このdocker-composeファイルを作成することによって、docker-compose up -d --buildだけでTwitter botを立ち上げることができるようになります。
6. Reverse-Proxy構築
実はこれもdocker-composeで構築したかったですが、なぜかリダイレクトが上手くいかなかったのでこれはホストにインストールことにします。nginxも簡単にpacmanでインストールすることができます。
pacman -S nginx
apt, yumの同様に使えるので、みなさん是非Arch Linuxを使うことに躊躇せず使ってみてください!nginxがインストールされたら、/etc/nginx.confを修正し、Reverse Proxyの設定を行います。
worker_processes 2; events { worker_connections 256; } http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; server { listen 80; server_name domain1; location / { proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_redirect http://localhost:設定したポート domain1; proxy_pass http://localhost:設定したポート; } } server { listen 80; server_name domain2; location / { proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_redirect http://localhost:設定したポート http://domain2; proxy_pass http://localhost:設定したポート; } #return 301 https://$host$request_uri; } server { listen 443 ssl; server_name domain1; ssl_certificate /etc/letsencrypt/live/domain1/fullchain.pem; # managed by Certbot ssl_certificate_key /etc/letsencrypt/live/domain1/privkey.pem; # managed by Certbot ssl_session_cache shared:SSL:1m; ssl_session_timeout 5m; ssl_ciphers HIGH:!aNULL:!MD5; ssl_prefer_server_ciphers on; location / { proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_redirect https://localhost:設定したポート https://domain; proxy_pass https://localhost:設定したポート; } } server { listen 443 ssl; server_name domain2; ssl_certificate /etc/letsencrypt/live/domain2/fullchain.pem; # managed by Certbot ssl_certificate_key /etc/letsencrypt/live/domain2/privkey.pem; # managed by Certbot ssl_session_cache shared:SSL:1m; ssl_session_timeout 5m; ssl_ciphers HIGH:!aNULL:!MD5; ssl_prefer_server_ciphers on; location / { proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_redirect https://localhost:設定したポート https://domain2; proxy_pass https://localhost:設定したポート; } } }
7. 感想
初めてdockerを使ってサーバーを構築してみました。残念ながら、Reverse Proxyはホストで設定しましたが、それでも相当環境構築を自動的に行えるようになったので手間を省けることができました。