VPSを用いたDjangoアプリケーションのデプロイ

Linuxサーバーを建ててdjangoをデプロイするまでの最小構成での手順備忘録です。
サーバーはConohaのVPSを用いて環境構築しています。
- Ubuntu 20 lts
- MySQL 5.7
- Django
- djangoアプリのデプロイを簡単にしてみたい人
- データベースとの連携をしたい人
Django/DjangoRESTframeworkについて記事まとめ
サーバーの初期設定
まずはサーバーでの初期設定を行います。
サーバーの更新
sudo apt update
sudo apt upgradeupdateでパッケージ情報(リポジトリ)の更新、upgradeでパッケージの更新を行っています。
ユーザーの追加
root権限で操作するのはセキュリティ的に問題があるので、作業用ユーザーを作成します。
ユーザー作成には、対話型で作成できるadduserとユーザーのみを作成するuseraddがあります。
今回はuseraddで作成しpasswdでパスワード付与、sudo権限を付与します。

ユーザーを作成し
useradd user1パスワードを設定します。
passwd user1sudo権限を付与します。
usermod -G sudo user1ssh公開鍵認証の有効化
まずは先ほど作成したユーザーで、パスワードではなく公開鍵認証でssh接続できるようにします。

ssh-keygenで作成した公開鍵をサーバーに設置します。
scp .ssh/id_rsa.pub username@server:~/.ssh
cat id_rsa.pub >> authorized_keys公開鍵が設置出来たら、公開鍵認証を有効化します。
vim /etc/ssh/sshd_config設定ファイルを開き、PubkeyAuthenticationをyesに変更します。
PubkeyAuthentication no
↓
PubkeyAuthentication yes接続が確認出来たら完了です。
ssh -i id_rsa username@hostnamerootユーザーのログイン禁止設定
外部からrootでのログインを禁止し、パスワード認証を使用できないようにします。
sshの設定ファイルを編集し、PermitRootLoginをnoにします。
vim /etc/ssh/sshd_configPermitRootLogin noデータベースの作成
DBサーバーには、MySQL互換のMariaDBを用います。
下記リンク手順に従って進めます。
MariaDBのインストール
sudo apt install mariadb-serverインストール完了後、初期設定を行います。
sudo mysql_secure_installation
Django用のデータベースの作成
データベースにログインします。
sudo mariadbデータベースにログイン後、django用のデータベースを作成します。
MariaDB [(none)]> create database django;データベース作成後には、show databasesで確認できます。
MariaDB [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| django |
| information_schema |
| mysql |
| performance_schema |
+--------------------+
4 rows in set (0.001 sec)django用のユーザー作成
djnago用のユーザーを作成します。
MariaDB [(none)]> create user 'username'@'localhost' identified by 'password';ユーザー作成後、ユーザーが登録されているか確認します。
MariaDB [(none)]> select user, host from mysql.user;
+--------+-----------+
| user | host |
+--------+-----------+
| django | localhost |
| root | localhost |
+--------+-----------+
2 rows in set (0.000 sec)データベースへの権限付与
作成したユーザーに、データベースへの操作権限を付与します。
MariaDB [(none)]> grant all on django.* to django@localhost;ユーザーの権限付与状況は上記で確認出来ます。
show grants django@localhost;Djangoの設定
home/usernameのディレクトリにdjangoのプロジェクトを作成します。
もしディレクトの権限がユーザー権限ではない場合には
sudo chown -R username usernameでディレクトリ権限を変更してください。

プロジェクトのコピー
作成済みのdjangoプロジェクトをgitでクローンします。
git clone xxxxxxxx
python仮想環境の作成
python仮想環境を作成します。

python3 -m venv myvenv
source myvenv/bin/activatepythonパッケージのインストール
djangoプロジェクトにあるrequirements.txtから必要なパッケージをインストールします。
pip install pip --upgrade
pip install -r requirements.txtdjangoの起動
試しにrunserverで起動してみます。
python3 manage.py runserver起動が確認できましたら切ってOKです。
データベースの設定
予め必要なパッケージをインストールしておきます。下記参照ください。
https://pypi.org/project/mysqlclient/
sudo apt-get install python3-dev default-libmysqlclient-dev build-essentialpip install mysqlclientsettings.pyの修正
djangoのsettings.pyの
- DEBUG
- ALLOWED_HOSTS
- DATABASES
- STATIC_ROOT
を編集します。
DEBUG = False
ALLOWED_HOSTS = ['YOUR_IP_ADRESS']
~~~
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'database_name', # データベース名
'USER': 'username', # ユーザー名
'PASSWORD': '',
'HOST': '',
'PORT': '',
}
}
~~~
STATIC_ROOT = '/usr/share/nginx/html/static'適宜settings.pyに記載する値は、環境変数として設定してください。

マイグレーションの実行
データベースのマイグレーションを実行します。
python manage.py migrate
Operations to perform:
Apply all migrations: admin, auth, contenttypes, sessions
Running migrations:
Applying contenttypes.0001_initial... OK
Applying auth.0001_initial... OK
Applying admin.0001_initial... OK
Applying admin.0002_logentry_remove_auto_add... OK
Applying admin.0003_logentry_add_action_flag_choices... OK
Applying contenttypes.0002_remove_content_type_name... OK
Applying auth.0002_alter_permission_name_max_length... OK
Applying auth.0003_alter_user_email_max_length... OK
Applying auth.0004_alter_user_username_opts... OK
Applying auth.0005_alter_user_last_login_null... OK
Applying auth.0006_require_contenttypes_0002... OK
Applying auth.0007_alter_validators_add_error_messages... OK
Applying auth.0008_alter_user_username_max_length... OK
Applying auth.0009_alter_user_last_name_max_length... OK
Applying auth.0010_alter_group_name_max_length... OK
Applying auth.0011_update_proxy_permissions... OK
Applying sessions.0001_initial... OKwebサーバーのnginxをインストールと設定
Webサーバーのnginxのインストールと設定を行います。
sudo apt install nginxnginxから配信する静的ファイルの配信先を指定します。
sudo mkdir /usr/share/nginx/html/static
sudo chown -R username /usr/share/nginxnginxの設定ファイルを書き換え
/etc/nginx/conf.d/に設定ファイルを追記します。
sudo vim /etc/nginx/conf.d/django.conf
server {
server_name your_ip_adress;
location /static {
alias /usr/share/nginx/html/static;
}
location / {
proxy_pass http://127.0.0.1:8000;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_set_header X-Forwarded-Proto $scheme;
}
}nginxを再起動します。
sudo systemctl restart nginxgunicornのインストールと起動
gunicornをインストールします。
pip install gunicornnginxとgunicornを連携させます。
gunicorn --bind 127.0.0.1:8000 project_name.wsgi -Dgunicornのプロセスを切る場合にはpkill gunicornを実行します。
pkill gunicorn独自ドメインの設定
独自ドメインを設定する場合には、nginxの設定ファイルのserver_nameにドメイン名を記載します。
SSL化
下記サイトの手順で自動でSSL化が可能です。

コメント