Ubuntu 環境(さくらのVPS )で Django アプリケーションを作るまでに実際に辿ったステップ。こちらの記事の続編です。
今回はこれまでのステップで作成した Django アプリケーションの HTTPS 化、そして使用データベースを MySQL に変更します。
- ドメインの HTTPS 化
- ポート 443 の開放
- certbot と Nginx プラグインのインストール
- certbot の設定
- 変更内容の確認
- 使用データベースを MySQL に変更する
- MySQL のインストール
- 非 root ユーザーとデータベースの作成
- mysqlclient インストールの準備
- Python 仮想環境と MySQLdb の動作確認
1. サイトの HTTPS 化
サイトに https でアクセスできる様設定します。certbot を使えば Let's Encrypt の TLS/SSL 証明書の取得や設定を簡単に行うことができます。
ポート 443 の開放
さくらインターネットのパケットフィルタを使っている場合、ポート番号 443 が開放されている必要があります。
ファイアウォールで設定する場合は ufw コマンドで必要な設定を行ってください。
certbot と Nginx プラグインのインストール
certbot(Let's Encrypt 使用の HTTPS 自動設定パッケージ)と python3-certbot-nginx(Certbot 用 Nginx プラグイン)をインストールします。
$ sudo apt install certbot python3-certbot-nginx
certbot の設定
Nginx プラグインを使用して自動設定を走らせます。このプロセスによって自動的に sites-available ディレクトリ内の Nginx 設定ファイルに変更が加えられます。
コマンド内「-d」の後に HTTPS 化するドメインを入力します。Nginx の設定ファイル内、server_name に指定されているドメインと一致しているのを確認してください。
$ sudo certbot --nginx -d example.com -d www.example.com
これを実行すると緊急連絡用のメールアドレスの入力を求められ、入力して続けると利用規約への同意、お知らせメール送信の可否、そして最後に HTTP へのリクエストを HTTPS へリダイレクトするか否かを尋ねられるのでそれぞれ回答して進めていきます。
以上で完了です。https でのアクセスが可能になっているはずです。
変更内容の確認
完了後、Nginx 設定ファイルを確認すると「# managed by Certbot」のコメントと共に自動で追記された内容を確認できます。
既存の server ブロック内への追記内容
listen [::]:443 ssl; # managed by Certbot listen 443 ssl; # managed by Certbot ssl_certificate /etc/letsencrypt/live/graffuhs.com/fullchain.pem; # managed by Certbot ssl_certificate_key /etc/letsencrypt/live/graffuhs.com/privkey.pem; # managed by Certbot include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
新規作成された server ブロックの内容
server { if ($host = example.com) { return 301 https://$host$request_uri; } # managed by Certbot listen 80; listen [::]:80; server_name example.com; return 404; # managed by Certbot } server { if ($host = www.example.com) { return 301 https://$host$request_uri; } # managed by Certbot listen 80; listen [::]:80; server_name www.example.com; return 404; # managed by Certbot }
この設定によって「http://example.com」と「http://www.example.com」両方とも HTTPS へリダイレクトされる様になりました。
2. 使用データベースを MySQL に変更する
MySQL のインストール
コマンド「sudo apt install mysql-server」を実行し、MySQL をインストールします。
adminvps@xx1-234-56789:~$ sudo apt install mysql-server adminvps@xx1-234-56789:~$
コマンド「sudo mysql_secure_installation」を実行。
adminvps@xx1-234-56789:~$ sudo mysql_secure_installation adminvps@xx1-234-56789:~$
コマンド「sudo mysql」で MySQL へアクセスしてみます。
vpsadmin@xx1-234-56789:~$ sudo mysql Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 11 Server version: 8.0.23-0ubuntu0.20.04.1 (Ubuntu) Copyright (c) 2000, 2021, Oracle and/or its affiliates. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql>
無事アクセスできました。コマンド「exit」で MySQL から出ます。
mysql> exit Bye vpsadmin@xx1-234-56789:~$
非 root ユーザーとデータベースの作成
root で接続
sudo mysql -u root
create user ユーザー名 identified by 'パスワード';
GRANT ALL PRIVILEGES ON demodb.* to demouser@'%';
flush privileges;
ここで作成したユーザー名とパスワードを Django の settings.py で使います。
mysqlclient インストールの準備
libmysqlclient-dev と default-libmysqlclient-dev をインストールします。
adminvps@xx1-234-56789:~$ sudo apt install libmysqlclient-dev default-libmysqlclient-dev
Python 仮想環境と MySQLdb の動作確認
(sample) adminvps@xx1-234-56789:~/sample/bin$ pip install wheel Collecting wheel Downloading wheel-0.36.2-py2.py3-none-any.whl (35 kB) Installing collected packages: wheel Successfully installed wheel-0.36.2 (sample) adminvps@xx1-234-56789:~/sample/bin$ pip install mysqlclient Requirement already satisfied: mysqlclient in /home/adminvps/sample/lib/python3.9/site-packages (2.0.3) (sample) adminvps@xx1-234-56789:~/sample/bin$
ここで、Python の仮想環境と MySQLdb の動作確認をしてみます。
Python 仮想環境を作り、起動します。
vpsadmin@ss1-234-56789:~$ python3.9 -m venv testvenv vpsadmin@ss1-234-56789:~$ source testvenv/bin/activate (testvenv) vpsadmin@ss1-234-56789:~$
wheel をインストールします。
(testvenv) vpsadmin@ss1-234-56789:~$ pip install wheel Collecting wheel Using cached wheel-0.36.2-py2.py3-none-any.whl (35 kB) Installing collected packages: wheel Successfully installed wheel-0.36.2 (testvenv) vpsadmin@ss1-234-56789:~$
mysqlclient をインストールします。
(testvenv) vpsadmin@ss1-234-56789:~$ pip install mysqlclient Processing ./.cache/pip/wheels/43/55/d9/a2243d4b624c18c5cba30bf88e0521147498368068cb302532/mysqlclient-2.0.3-cp39-cp39-linux_x86_64.whl Installing collected packages: mysqlclient Successfully installed mysqlclient-2.0.3 (testvenv) vpsadmin@ss1-234-56789:~$
*pip install は「mysqlclient」ですが、python で import するときは「import MySQLdb」になります。(import mysqlclient ではない)誰も間違わないかもしれませんが僕はこれでハマってました。。。
Python を起動し、import MySQLdb ができるか確認します。
(testvenv) vpsadmin@ss1-234-56789:~$ python3.9 Python 3.9.0+ (default, Oct 20 2020, 08:43:38) [GCC 9.3.0] on linux Type "help", "copyright", "credits" or "license" for more information. >>> import MySQLdb >>>
無事 import できたので大丈夫そうです。
他の行程へ
- ▶︎ 1/3 Ubuntu OS の設定、Python のインストール、Web サーバーのインストール
- ▶︎ 2/3 Django のプロジェクト・アプリケーションの作成
- ▶︎ 3/3 Django アプリケーションの HTTPS 化、使用データベースを MySQL に変更
▶︎まずは2週間無料でお試し♪さくらのVPS