LoginSignup
4
3

More than 3 years have passed since last update.

CodeStarで作成したDjangoアプリをRoute53でドメイン登録とHTTPS化

Posted at

CodeStarでDjangoアプリ作成

こちらの記事を参考にDjangoアプリを作成します。
https://qiita.com/SatoshiGachiFujimoto/items/404e45796ac4e0d7bf81

ドメイン登録

AWS ConsoleからRoute53を開きます。

「ドメインの登録」をクリックし、登録していきます。
image.png

ドメイン名を入力し、カートに入れます。
image.png

連絡先情報を入力します。メールアドレスの確認メールが来るので承認します。
image.png

ドメインの自動更新の有効化と規約に同意します。
image.png

ドメインの登録が完了しました。
image.png

今回は20分ほどで完了しました。
image.png

CodeStarで作成したDjangoアプリケーションのEC2にこのドメインを紐づけます。EC2はElastic IPを関連付けています。

ホストゾーンからドメイン名を選択し、レコードセットの作成をクリックします。
下記を入力し、作成をクリックします。
- 名前:www
- タイプ:IPv4 アドレス
- 値:EC2で関連付けたElastic IPを入力

image.png

登録済みドメインでDjangoアプリにアクセスできれば完了です。

HTTPS化

CodeStarで作成したDjangoアプリをHTTPS化します。

PuTTYでEC2にSSH接続します。django-sslserverライブラリをインストールします。Djangoのrequirements/common.txtにも加えておきましょう。

$ sudo su
$ source /home/ec2-user/environment/bin/activate
$ pip install django-sslserver

ec2django/settings.pyを編集します。

$ cd ec2django/
$ vi settings.py

下記を追記します。

INSTALLED_APPS = [
  ...
    'sslserver',
]

SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')
SECURE_SSL_REDIRECT = True
SESSION_COOKIE_SECURE = True
CSRF_COOKIE_SECURE = True

オレオレ証明書を作ります。

$ openssl genrsa 2048 > server.key
$ openssl req -new -key server.key > server.csr
$ openssl x509 -days 3650 -req -signkey server.key < server.csr > server.crt

supervisor.sonfを編集します。

command = /home/ec2-user/environment/bin/gunicorn -b 0.0.0.0:443 ec2django.wsgi --keyfile server.key --certfile server.crt

EC2のセキュリティーグループのインバウンドルールにHTTPSを追加します。
image.png

再起動すると、オレオレ証明書でDjangoアプリが見えると思います。

オレオレ証明書のserver.keyとserver.crtをLet's Encryptで作成したものに置き換えると良さそうです。certbotをインストールして、certbot-autoを実行し、証明書を取得しましょう。

しかし、いろいろエラーが出たので、試行錯誤しました。。

$ wget https://dl.eff.org/certbot-auto 
$ chmod +x certbot-auto 
$ ./certbot-auto --debug -v 
$ sudo /opt/eff.org/certbot/venv/bin/pip install cryptography
$ sudo /opt/eff.org/certbot/venv/bin/pip install interface
$ sudo /opt/eff.org/certbot/venv/bin/pip install zope
$ sudo /opt/eff.org/certbot/venv/bin/pip install parsedatetime==2.5

再現性の低い記事になってしまい、すみません。試行錯誤してcertbot-autoは実行できるようになりました。certbot-autoを実行する際に、Djangoの静的ファイルの場所に認証局が認証ファイルを読みにいけるように設定する必要があるのですが、、

Djnagoが動いているサーバをletsencryptでHTTPS化

よくわからなかったので、apache(httpd)のみを入れ、certbot-autoを実行し証明書を取得しました。

AWSでDjangoのWEBサーバーを作る(Amazon Linux 2、HTTPS化)

sudo yum -y install httpd24

httpd2.2系依存のエラーが出ました。。アンインストールとかしてなんとかインストールできました。

/etc/httpd/conf/httpd.confのListen 80の下に追記します。

sudo vi /etc/httpd/conf/httpd.conf
<VirtualHost *:80>
    DocumentRoot "/var/www/html"
    ServerName "{ドメイン名}"
    ServerAlias "www.{ドメイン名}"
</VirtualHost>

apacheを起動します。

sudo service httpd start

./certbot-autoを実行し、できた.crtと.keyを置き換え、Djangoアプリを再起動で完了です。

$ sudo cp /etc/letsencrypt/live/www.ドメイン名/fullchain.pem /home/ec2-user/server.crt
$ sudo cp /etc/letsencrypt/live/www.ドメイン名/privkey.pem /home/ec2-user/server.key
$ service helloworld restart

お疲れ様でした。また最初からやったときにきれいにまとめたいと思います。

4
3
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3