VPSを用いたDjangoアプリケーションのデプロイ
Linuxサーバーを建ててdjango
をデプロイするまでの最小構成での手順備忘録です。
サーバーはConohaのVPSを用いて環境構築しています。
- Ubuntu 20 lts
- MySQL 5.7
- Django
- djangoアプリのデプロイを簡単にしてみたい人
- データベースとの連携をしたい人
Django/DjangoRESTframeworkについて記事まとめ
サーバーの初期設定
まずはサーバーでの初期設定を行います。
サーバーの更新
sudo apt update
sudo apt upgrade
update
でパッケージ情報(リポジトリ)の更新、upgrade
でパッケージの更新を行っています。
ユーザーの追加
root権限で操作するのはセキュリティ的に問題があるので、作業用ユーザーを作成します。
ユーザー作成には、対話型で作成できるadduser
とユーザーのみを作成するuseradd
があります。
今回はuseradd
で作成しpasswd
でパスワード付与、sudo権限を付与します。
ユーザーを作成し
useradd user1
パスワードを設定します。
passwd user1
sudo
権限を付与します。
usermod -G sudo user1
ssh公開鍵認証の有効化
まずは先ほど作成したユーザーで、パスワードではなく公開鍵認証で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@hostname
rootユーザーのログイン禁止設定
外部からroot
でのログインを禁止し、パスワード認証を使用できないようにします。
ssh
の設定ファイルを編集し、PermitRootLogin
をno
にします。
vim /etc/ssh/sshd_config
PermitRootLogin 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/activate
pythonパッケージのインストール
django
プロジェクトにあるrequirements.txt
から必要なパッケージをインストールします。
pip install pip --upgrade
pip install -r requirements.txt
djangoの起動
試しにrunserver
で起動してみます。
python3 manage.py runserver
起動が確認できましたら切ってOKです。
データベースの設定
予め必要なパッケージをインストールしておきます。下記参照ください。
https://pypi.org/project/mysqlclient/
sudo apt-get install python3-dev default-libmysqlclient-dev build-essential
pip install mysqlclient
settings.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... OK
webサーバーのnginxをインストールと設定
Webサーバーのnginx
のインストールと設定を行います。
sudo apt install nginx
nginx
から配信する静的ファイルの配信先を指定します。
sudo mkdir /usr/share/nginx/html/static
sudo chown -R username /usr/share/nginx
nginxの設定ファイルを書き換え
/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 nginx
gunicornのインストールと起動
gunicorn
をインストールします。
pip install gunicorn
nginx
とgunicorn
を連携させます。
gunicorn --bind 127.0.0.1:8000 project_name.wsgi -D
gunicorn
のプロセスを切る場合にはpkill gunicorn
を実行します。
pkill gunicorn
独自ドメインの設定
独自ドメインを設定する場合には、nginxの設定ファイルのserver_nameにドメイン名を記載します。
SSL化
下記サイトの手順で自動でSSL化が可能です。
コメント