事前にローカルで作っておいたwebサイト(Django)を、aws のサーバーを使って公開するまでにやったことをまとめました。
ウェブサーバは Nginx, アプリケーションサーバは gunicorn を使いました。
ウェブサーバ、アプリケーションサーバの概念の理解には https://view-s.co.jp/product/webapp/concept/ がとても役に立ちました。
まとめるとやったこととしては
- EC2 インスタンスを作成して、IPアドレスにアクセスするとサイトが表示されるようにする
- ドメインを購入して、http://hogehoge.com にアクセスするとサイトが表示されるようにする
- SSL証明書を発行して、https://hogehge.com からサイトにアクセスできるようにする
- その他雑多なもの
AWS アカウントを作って、いろいろな初期設定をする
自分は適当な人間なので、この辺をおろそかにしたら後で後悔した。
AWS EC2 インスタンスを起動し、環境を構築
下URLを参照して、EC2インスタンス起動と環境構築を行った
- 前に作ったインスタンスのキーがあったので、ssh key は「既存のキーを利用する」を選択した
- PostgreSQL は入れなかった
EC2 セキュリティグループのインバウンドに自分のIPアドレスを設定
途中で急に ssh できなくなった。
$ ssh -i "aws-ubuntu.pem" ubuntu@****.compute.amazonaws.com
ssh: connect to host ****.compute.amazonaws.com port 22: Operation timed out
下を参考にセキュリティグループに編集を加えてみた。
しかし後から、インスタンスのパブリックDNSを間違えて指定して ssh しようとしていたことが原因だったと気づいた。なので、多分このセキュリティグループへの編集はいらなかったが、上の記事設定はそのままにしておいた。パブリックDNSはインスタンスの再起動で更新されるので、毎回取ってくる必要がある。Elastic IP を取得して紐付けたらその必要は多分ない。
.gitignore を追加
作ったwebアプリケーションのコードは git でバージョン管理をしていたが、基本的に個人で進めており雑な運用をしていたため、.gitignore を置いていなかった。サーバーにもコードを置いて、ローカルでコードを編集するとデータベースあたりでコンフリクトが起きて面倒なことになりそう。なので、.gitignore をしっかり置いてやることにした。
https://www.toptal.com/developers/gitignore で Django のための .gitignore コードを生成して使った。
一度 git add されたファイルはそのままだと .gitignore を無視してしまうので、下のようにキャッシュを全てクリアしてプッシュした。
git rm -r --cached .
git add -A
git commit -m "removed all cache to use .gitignore and reregistrated all files"
git push
SECRET_KEY を隠した
settings.py に記載されている SECRET_KEY は本来隠さないといけないものなので、おのおののローカルのみで管理されるように設定した。今更感はある。
EC2 サーバーで github に鍵認証
次の記事を参考に
ssh 接続を長持ちさせる
ssh 接続がわりとすぐ切れて面倒だったので、待機できる時間を長く設定した
上の記事は効かなかったので下を試した、機能している気がする
Django admin のユーザー登録をする
管理者ユーザを登録する
ドメインを取得して使えるようにする
お名前.comを使った
これにより、ブラウザに取得したドメイン名を打ち込むと自分のサイトが表示されるようになった。
設定をした直後は、welcome nginx みたいな画面が出るが数分待つと自分のサイトが表示されるようになる。
SSL証明を使う
ドメインにアクセスしたときに「安全ではありません」と出るのが気になった
これで https://*** からアクセスできるようになり、「安全ではありません」の代わりに鍵のマークがついた。google は http ではなく https を推奨しており、SEO 対策としてもこれをやっておくのは大事らしい。
vscode でサーバー上のコードを編集できるようにする
SSH remote の方がメジャーなようですが、SSH FS を使っています(理由はない)。