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

Linuxサーバーを建ててdjangoをデプロイするまでの最小構成での手順備忘録です。

サーバーはConohaのVPSを用いて環境構築しています。

  • Ubuntu 20 lts
  • MySQL 5.7
  • Django
この記事におすすめの人
  • djangoアプリのデプロイを簡単にしてみたい人
  • データベースとの連携をしたい人
目次

サーバーの初期設定

まずはサーバーでの初期設定を行います。

サーバーの更新

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

設定ファイルを開き、PubkeyAuthenticationyesに変更します。

PubkeyAuthentication no
↓
PubkeyAuthentication yes

接続が確認出来たら完了です。

ssh -i id_rsa username@hostname

rootユーザーのログイン禁止設定

外部からrootでのログインを禁止し、パスワード認証を使用できないようにします。

sshの設定ファイルを編集し、PermitRootLoginnoにします。

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

もし仮想環境が作成できない場合には、エラーの表示通りに必要なパッケージをインストールしてください。
例:apt install python3.8-venv

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の修正

djangosettings.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

nginxgunicornを連携させます。

gunicorn --bind 127.0.0.1:8000 project_name.wsgi -D

gunicornのプロセスを切る場合にはpkill gunicornを実行します。

pkill gunicorn

独自ドメインの設定

独自ドメインを設定する場合には、nginxの設定ファイルのserver_nameにドメイン名を記載します。

SSL化

下記サイトの手順で自動でSSL化が可能です。

https://certbot.eff.org/

Django学習におすすめの教材

Django 記事一覧

Django

初期設定
モデルの作成(models.py)
デプロイ

Django REST framework

設定
Serializer

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!

コメント

コメントする

目次
閉じる