Django のおすすめ VPS(仮想専用サーバー)は OS から選ぶべし

Django 開発はレンタルサーバーより VPS の方が楽

レンタルサーバーでは色々な管理は提供者側がやってくれるものの、オーナー権限もなく、結果的に環境構築の難易度が高くなってしまうため VPS がおすすめです。

その上で「じゃあどの VPS が良いのか」という疑問に答えていきたいと思います。

「おすすめ VPS」の前に「おすすめ OS」

実は Django 開発を行う上で、「どの VPS か」で違いが出る部分は少ないです。

その理由ですが、VPS を契約して初めに OS インストールまで終わってしまえば、サーバーの OS にログインしてひたすらコマンドを打っていく作業になり、VPS のコントロールパネルを操作する様なこともほとんどなくなるためどこの VPS かはあまり関係なくなります

パソコンの設定をする時でも Windows なのか Mac なのかは大事ですが、どこの電器屋で買ったかは関係ないですよね。

ただ、後述しますが VPS によって楽にインストールできる OS が違うので、 まず「どの OS か」を考えてその上で「どの VPS なら OS インストールが楽か」を気にする方が適切です。

Django 関連情報の多い Ubuntu、Debian、CentOS がおすすめ

では「どの OS か」についてですが、基本的に Django は Python3 が使えるメジャーな OS なら動きます。ただ、本当にどの OS でもいいかと言うとそうでもなく、トラブル発生時に参考になる情報が多い方が良いと思います。

つまり、Django のセットアップや開発をしていく中で必ず何かしらのエラーに直面するので、その時に使える情報がより多い方が開発をスムーズに行えます。

というわけで、Google 上で Django の関連記事が多い OS を調べてみます。

基本的な検索クエリ「"Django" "インストール"」に Django プロジェクト作成時に必ず実行する「"startproject"」コマンド、そしてそれぞれの OS を組み合わせて検索結果が何件返ってくるかをみてみました。

"Django" "インストール" "startproject" + OS 名検索結果数
Ubuntu16,200
Debian15,300
CentOS1,940
Fedora522
Windows Server514
FreeBSD312
Arch Linux232
openSUSE157
NetBSD52
OpenBSD8
CentOS Stream5
Rocky Linux4
*数字は 2021 年 12 月時点のものです

OS によってかなり差がありますね。あくまで目安ですが、Ubuntu、Debian、CentOS あたりの情報はそれなりに多いのでおすすめです。

ただ、CentOS に関しては CentOS 8 のサポートが 2021 年 12 月に終了し、CentOS Stream への移行が推奨されています。CentOS 7 のサポート期間は 2024 年 6 月まで続きますのでこれから使うなら CentOS 7 か、新しいもので試してみたい方は CentOS Stream で試すのもありです。

Ubuntu、Debian、CentOS のインストールが簡単な VPS

OS が絞れたところで、先述したとおり VPS によって特定の OS インストールをほぼ自動でやってくれるものがあります。

例えばさくらの VPS であればコントロールパネルで選択した OS を自動でインストールしてくれますし、GMO のクラウド VPS であれば契約時に選択した OS をインストールされた状態でサーバーが用意されます。

さらに ConoHa VPS に関しては Django のセットアップまである程度自動化されています。

なので Django 関連記事が多いこれらの OS を簡単にインストール出来る VPS を紹介します。

  1. ConoHa VPS
  2. さくらの VPS
  3. お名前.com VPS
  4. クラウドVPS by GMO
  5. KAGOYA Cloud VPS

1. ConoHa VPS

確認ポイント
自動インストール対象の OSCentOS 7.1 〜 7.9
CentOS Stream 8
CentOS Stream 9
Ubuntu 18.04
Ubuntu 20.04
Debian 9.13
Debian 10.10
Debian 11.0
自動インストールの方法サーバー追加時にテンプレートを選択することでサーバー作成と同時にOSのインストールやアプリケーションサーバーの構築が完了。

公式ページVPS を追加する
お得な情報初期費用無料

解説

今回紹介する中で最も対応 OS の種類が豊富なのがこちらの ConoHa VPS。

OS だけでなく Django のテンプレートもあり、簡単にセットアップが可能です。ちなみに Django のテンプレートを利用する場合は OS が自動的に CentOS になるそう。

自動インストール対象の OS の種類も多いですし、下の記事の様に公式が親切に色々な情報を載せているのもポイントです。

公式サイトConoha VPS

2. さくらの VPS

確認ポイント
自動インストール対象の OSUbuntu 18.04
Ubuntu 20.04
CentOS 7
CentOS Stream 8
自動インストールの方法VPSコントロールパネルからワンクリックで再インストールが可能。

公式ページさくらの VPS 新規追加(コントロールパネル)
お得な情報初期費用無料

解説

「Django VPS」で検索すると最も日本語記事が出てくるのが「さくらの VPS」。私自身も Django を動かすのにはさくらの VPS を使っています

公式サイトでも、VPS のセットアップの手順として CentOS を例に詳しく説明してくれているのもありがたいです。

ネコでもわかる!さくらのVPS講座 ~第二回「サーバーをさわってみよう!」

公式サイトさくらのVPS

3. お名前.com VPS

確認ポイント
自動インストール対象の OSUbuntu 18.04
Ubuntu 20.04
CentOS 7.5 ~ 7.9
CentOS Stream 8
Debian 9.13
Debian 10.10
自動インストールの方法VPSコントロールパネルのサーバーセットアップで OS とバージョンを選択可能。

公式ページサーバーを初期セットアップする
お得な情報初期費用無料

解説

OS の初期インストールの方法は下記の公式ページに記載があります。

公式サイトお名前.com VPS

4. クラウドVPS by GMO

確認ポイント
自動インストール対象の OSCentOS 7.9
CentOS 8.2
Ubuntu 20.04
Debian 10.0
自動インストールの方法契約時に選択した OS をインストールした状態でサーバーが用意される。

公式ページ新規サーバー申し込み方法
お得な情報初期費用 0 円

解説

契約時の OS 選択について下記の公式ページで解説が載っています。

公式サイトGMOクラウドのVPS 詳細はこちら

5. KAGOYA Cloud VPS

確認ポイント
自動インストール対象の OSCentOS 7
CentOS 8
CentOS Stream 8
Ubuntu 18.04
Ubuntu 20.04
自動インストールの方法専用コントロールパネルからテンプレートとアプリケーションを選択して環境構築可能。

公式ページインスタンス作成
お得な情報初期費用 0 円

解説

こちらもコントロールパネルからインスタンスを作成する際に任意の OS を指定することができます。

公式サイトKAGOYA Cloud VPS

Ubuntu を手軽に使える VPS おすすめ 7 選

最も有名な Linux ディストリビューションの一つである Ubuntu。プログラミング関連の書籍でも Ubuntu を採用しているものは少なくありません。

そして VPS の中には特定の OS に関して自動インストールの様な仕組みを用意しているため、好みの OS のサーバーを手軽に立ち上げることができますが、もちろん Ubuntu のセットアップが簡単な VPS とそうでない VPS があります。

今回は Ubuntu を手軽に使えるおすすめ VPS をご紹介します。

  1. さくらの VPS
  2. お名前.com VPS
  3. クラウド VPS by GMO
  4. ConoHa VPS
  5. KAGOYA Cloud VPS
  6. ABLENET VPS
  7. WebARENA Indigo

1. さくらの VPS

カテゴリコメント
公式サイトさくらのVPS
対応している Ubuntu のバージョン18.04, 20.04
自動インストール対応あり
ウェブ上の関連記事数かなり多い

解説

標準OSとして Ubuntu の提供があり、ワンクリックでインストール可能とのこと。

参考:ネコでもわかる!さくらの VPS 講座 〜第二回「サーバーをさわってみよう!」

ウェブ上の関連記事数は、「"さくら" "VPS" "Ubuntu"」の検索で 120,000 件程度返ってきました。先人たちが残した情報がかなりある様です。

公式サイトさくらのVPS

2. お名前.com VPS

カテゴリコメント
公式サイトお名前.com VPS
対応している Ubuntu のバージョン18.04, 20.04
自動インストール対応あり
ウェブ上の関連記事数かなり多い

解説

標準OSとして対応しており、サーバーセットアップの画面で選択すれば自動的にインストールしてくれるとのこと。

参考:サーバーを初期セットアップする

ウェブ上の関連記事数はかなり多く、「"お名前" "VPS" "Ubuntu"」の検索で 113,000 件程度の結果が返ってきました。

公式サイトお名前.com VPS

3. クラウド VPS by GMO

カテゴリコメント
公式サイトGMOクラウドのVPS 詳細はこちら
対応している Ubuntu のバージョン20.04
自動インストール対応あり
ウェブ上の関連記事数多い

解説

契約時に選択したOSをインストールした状態でサーバーを提供とのこと。

参考:VPS の OS

ウェブ上の関連記事数「"GMO" "VPS" "Ubuntu"」の検索で23,000 件程度で、そこそこ多い様です。

公式サイトGMOクラウドのVPS 詳細はこちら

4. ConoHa VPS

カテゴリコメント
公式サイトConoHa VPS
対応している Ubuntu のバージョン18.04, 20.04
自動インストール対応あり
ウェブ上の関連記事数多い

解説

OSやアプリケーションのテンプレートあり、インストール完了した状態で使用開始出来るそうです。

参考:豊富なテンプレート

ウェブ上の関連記事数は「"ConoHa" "VPS" "Ubuntu"」の検索で 27,800 件程度返ってきました。

公式サイトConoHa VPS

5. KAGOYA Cloud VPS

カテゴリコメント
公式サイトKAGOYA CLOUD VPS
対応している Ubuntu のバージョン18.04, 20.04
自動インストール対応あり
ウェブ上の関連記事数少ない

解説

コントロールパネルからテンプレート選択してアプリケーションのセットアップまで完了出来るとのこと。

参考:テンプレート

ウェブ上の関連記事数は「"KAGOYA" "VPS" "Ubuntu"」の検索で 3,200 件程度で、あまり多く無い様です。

公式サイトKAGOYA CLOUD VPS

6. ABLENET VPS

カテゴリコメント
公式サイト格安・高品質なサーバー【ABLENET VPS】
対応している Ubuntu のバージョン14.04, 16.04, 18.04, 19.10, 20.04
自動インストール対応なし
ウェブ上の関連記事数多い

解説

初期OS は CentOS か Windows Server となっており、Ubuntu のインストールは手動で自身で行う必要があります。

ウェブ上の関連記事数は「"ABLENET" "VPS" "Ubuntu"」の検索で 25,600 件程度となっており、そこそこ多い様です。

公式サイト格安・高品質なサーバー【ABLENET VPS】

7. WebARENA Indigo

カテゴリコメント
公式サイトWebARENA (Indigo)
対応している Ubuntu のバージョン18.04, 20.04
自動インストール対応なし
ウェブ上の関連記事数少ない

解説

OS の基本設定は自身で手動で行う必要がある様です。

参考:カーネルモジュールの提供をしてもらえるでしょうか?

ウェブ上の関連記事数は「"WebARENA" "VPS" "Ubuntu"」の検索で 3,600 件程度と、あまり多く無い様です。

公式サイトWebARENA (Indigo)

さくらの VPS (Ubuntu 20.04) で Django アプリを作る(1/3)

Ubuntu 環境(さくらのVPS )で Django アプリケーションを作るまでに実際に辿ったステップを記録します。

手順がかなり多いので途中あまり詳しく書いていないところもありますがご了承ください。

まずは VPS の契約から Ubuntu OS の設定Python のインストールWeb サーバーのインストールまで。

  1. VPS の契約(さくらの VPS)
  2. 独自ドメインの取得
  3. IP アドレスとドメイン名を紐付け
  4. OS (Ubuntu 20.04) のインストール
  5. Ubuntu の初期設定
    • ssh でサーバーへ接続
    • 非 root ユーザーの作成
    • パッケージリストを最新版へ更新
    • パッケージのアップグレード
    • サーバーの再起動
  6. FTP サーバーのインストール
  7. 開発パッケージのインストール
  8. Python と関連パッケージのインストール
    • 依存関係のインストール
    • Python 3.9 のインストール
    • python3.9-dev のインストール
    • 仮想環境(venv)のインストール
  9. Web サーバー(Nginx)のインストール

ちなみに、僕は初め下記の書籍に沿って Django の全体像を勉強しました。書籍の中では AWS を使ったデプロイにも触れられていますので参考にしてみてください。

動かして学ぶ! Python Django開発入門 (NEXT ONE)

1. VPS の契約(さくらの VPS)

まずは VPS の契約。私は月額 880 円〜の さくらのVPS 1G プランにしました。

公式ページさくらのVPS 1G

さくらの VPS 以外でも大丈夫

とはいうものの、実はさくらの VPS でなくても Ubuntu OS であればこちらの記事の手順で特に問題ないです。

コントロールパネルの見た目やファイアウォールの設定の部分だけは少し違いますが、それは一番初めの部分でそれ以降は OS に依存するので他の VPS でも変わりません。

Django におすすめの OS と VPS を下記の記事で紹介しているのでぜひ参考にしてみてください。

▶︎ Django のおすすめ VPS(仮想専用サーバー)は OS から選ぶべし
▶︎ Ubuntu を手軽に使える VPS おすすめ 7 選

2. 独自ドメインの取得

サイト公開用の独自ドメインを取得します。こちらもさくらのドメインで取得しました。

3. IP アドレスとドメイン名を紐付け

VPS コントロールパネルの「ネームサーバ登録」をクリックします。

遷移先のページで「ドメインリスト」をクリック後、対象のドメインの「ゾーン編集」をクリックし、情報を登録します。

ゾーン情報の設定に関しては下記の記事にもまとめているので参考にしてみてください。

4. OS (Ubuntu 20.04) のインストール

VPS コントロールパネルの「各種設定」そして「OSインストール」をクリックします。

今回は標準 OS の Ubuntu 20.04 をインストールします。

サーバーのファイアウォールを設定する代わりに、さくら VPS のパケットフィルタの機能でポートの開閉を設定しています。

ファイアウォールで設定する場合はパケットフィルタをオフにします。

「インストールを実行する」をクリックし、Ubuntu のインストールを開始します。

先ほどと重複しますが、Ubuntu 以外にも Django におすすめの OS を下記の記事で紹介しているのでもしよければ見てみてください。

▶︎ Django におすすめの OS と VPS の選び方

5. Ubuntu の初期設定

ssh でサーバーへ接続

ターミナルで「ssh 管理ユーザー名@ホスト名」と打ち込み接続します。ホスト名は下記の通りコントロールパネルの「ネットワーク情報」タブで確認できます。

下記の様にコマンド「ssh 管理ユーザー名@ホスト名」を入力します。

% ssh ubuntu@xx1-234-56789.vs.sakura.ne.jp

初めて接続する際に下記の様に「The authenticity of host 'xx1-234-56789.vs.sakura.ne.jp (123.456.78.90)' can't be established.」とメッセージが出ることがありますが特に問題ないので yes と打ち込みます。

The authenticity of host 'xx1-234-56789.vs.sakura.ne.jp (123.456.78.90)' can't be established.
ECDSA key fingerprint is XXX123:ABCDEFGHIJKLMNOPQRSTUVWXYZ.
Are you sure you want to continue connecting (yes/no/[fingerprint])? 
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added 'xx1-234-56789.vs.sakura.ne.jp.123.456.78.90' (ECDSA) to the list of known hosts.
% ssh ubuntu@xx1-234-56789.vs.sakura.ne.jp
ubuntu@xx1-234-56789.vs.sakura.ne.jp's password: 

パスワードを入力し無事 ssh で サーバーへログインできました。

% ssh ubuntu@xx1-234-56789.vs.sakura.ne.jp
ubuntu@xx1-234-56789.vs.sakura.ne.jp's password: 
Welcome to Ubuntu 20.04.1 LTS (GNU/Linux 5.4.0-52-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage

  System information as of Fri Apr  9 08:11:04 JST 2021

  System load:  0.0               Processes:             105
  Usage of /:   2.0% of 94.43GB   Users logged in:       0
  Memory usage: 16%               IPv4 address for ens3: 123.456.78.90
  Swap usage:   0%


66 updates can be installed immediately.
0 of these updates are security updates.
To see these additional updates run: apt list --upgradable


The list of available updates is more than a week old.
To check for new updates run: sudo apt update


The programs included with the Ubuntu system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by
applicable law.


SAKURA internet [Virtual Private Server SERVICE]

To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.

ubuntu@xx1-234-56789:~$ 

3行目に「Welcome to Ubuntu 20.04.1 LTS」と書かれてあります。それ以降の部分はサーバーの容量やアップデートなどの案内事項です。

非 root ユーザーの作成

ログインしたユーザーを root ユーザーへ昇格し、新たな sudo ユーザーを作成します。詳しくは下記の記事を参照してください。

パッケージリストを最新版へ更新

コマンド「sudo apt update」でパッケージリストを最新版に更新します。

ubuntu@xx1-234-56789:~$ sudo apt update
ubuntu@xx1-234-56789:~$ 

パッケージのアップグレード

コマンド「sudo apt upgrade」を実行し、サーバーに元々インストールされているパッケージに対してアップグレードを実施します。

ubuntu@xx1-234-56789:~$ sudo apt upgrade
ubuntu@xx1-234-56789:~$ 

サーバーの再起動

コマンド「sudo reboot」を実行し、サーバーを再起動します。

ubuntu@xx1-234-56789:~$ sudo reboot
Connection to xx1-234-56789.vs.sakura.ne.jp closed by remote host.
Connection to xx1-234-56789.vs.sakura.ne.jp closed.
% 

6. FTP サーバーのインストール

FTP 接続ができる様にしたいので vsftpd をインストールします。コマンド「sudo apt install vsftpd」を実行します。

ubuntu@ik1-437-50827:~$ sudo apt install vsftpd
ubuntu@ik1-437-50827:~$ 

Cyberduck で接続できました。

7. 開発パッケージのインストール

adminvps@xx1-234-56789:~$ sudo apt install build-essential
adminvps@xx1-234-56789:~$ 

8. Python と関連パッケージのインストール

コマンド「python3 -V」で Ubuntu 20.04 にもともと入っている Python のバージョンを確認します。

adminvps@xx1-234-56789:~$ python3 -V
Python 3.8.5
adminvps@xx1-234-56789:~$

Python 3.8.5 が入っていました。この後 Python 3.9 をインストールします。

依存関係のインストール

Python 自体をインストールする前に必要な依存関係をインストールします。コマンド「sudo apt install 〜」で様々なパッケージをインストールします。

adminvps@xx1-234-56789:~$ sudo apt install zlib1g-dev libncurses5-dev libgdbm-dev libnss3-dev libssl-dev libreadline-dev libffi-dev libsqlite3-dev wget libbz2-dev
adminvps@xx1-234-56789:~$ 

Python 3.9 のインストール

依存関係のインストールが完了したら、Python 3.9 をインストールします。

adminvps@xx1-234-56789:~$ sudo apt install python3.9
adminvps@xx1-234-56789:~$ 

python3.9-dev のインストール

adminvps@xx1-234-56789:~$ sudo apt install python3.9-dev
adminvps@xx1-234-56789:~$ 

仮想環境(venv)のインストール

Python の仮想環境である venv をインストールするためコマンド「sudo apt-get install python3.9-venv」を実行します。

adminvps@xx1-234-56789:~$ sudo apt-get install python3.9-venv
adminvps@xx1-234-56789:~$ 

9. Web サーバー(Nginx)のインストール

コマンド「sudo apt install nginx」で Nginx をインストールします。

adminvps@xx1-234-56789:~$ sudo apt install nginx
adminvps@xx1-234-56789:~$ 

ブラウザの URL バーにサーバーの IP アドレスを入れてみて、下記のページが出れば無事インストールされています。

とりあえず VPS に Ubuntu が入りPython と Nginx がインストールされた状態です。

他の行程へ

▶︎まずは2週間無料でお試し♪さくらのVPS

ローカル環境の Django を本番環境(Ubuntu)へデプロイする方法

Mac のローカル環境で作成した Django プロジェクトをさくらのVPSで用意した Ubuntu 環境へ反映する際の流れをメモしています。

下記が完了していることを想定しています。

  • Web サーバーの設定が完了済み(筆者は Nginx を使用)
  • 仮想環境を作るディレクトリが決めてある
  1. データベースを本番環境にコピーする
    • ローカル環境での作業
    • 本番環境での作業
  2. ローカル環境のパッケージを本番環境で再現
    • requirements.txt の作成
    • requirements.txt を本番環境へコピー
    • 本番環境で Python 仮想環境を作成
    • requirements.txt によるパッケージインストール
  3. settings.py の編集
    • ファイルを分割する必要性
    • 開発環境の runserver 実行時に settings_dev.py を指定
    • settings.py(本番環境用)の編集
  4. Django ソースコードを本番環境に配置
    • 本番環境への git のインストール
    • リモートリポジトリから本番環境へファイルをコピー
  5. gunicorn のインストール
  6. データベースのログイン情報をサーバーの環境変数に記述
  7. 静的ファイルの配置

1. データベースを本番環境にコピーする

検証環境で準備したデータベース、テーブル、そしてデータを本番環境でも反映します。

ここはうまくやれば一行スクリプト書いて終了する方法もある様ですが、色々とエラーが出て逆にめんどくさそうだったのでステップバイステップでやっていきます。

ローカル環境での作業

まずローカル環境でコマンド「mysqldump データベース名 > dump.txt」を実行し、dump ファイルを作成します。

% mysqldump graffuhs > dump.txt                                                              
%

それを FTP か何かで本番環境へアップロードします。

本番環境での作業

本番環境に接続し、本番環境の MySQL でデータベースを作成します。

mysql> create database データベース名;

そしてコマンド「sudo mysql データベース名 < dump.txt」を実行します。

$ sudo mysql データベース名 < dump.txt
$

これで本番環境の MySQL にもローカル環境と同じデータベース、テーブル、そしてデータがコピーされました。

2. ローカル環境のパッケージを本番環境で再現

ローカル環境の Python 関連パッケージを本番環境でも再現するため、ローカル環境で requirements.txt ファイルを作成し、それを元に本番環境でパッケージインストールをさせます。

requirements.txt の作成

ローカル環境の Python 仮想環境へ移り、コマンド「pip freeze > requirements.txt」を実行します。

% pip freeze > requirements.txt

requirements.txt を本番環境へコピー

コマンド「scp requirements.txt 本番環境のユーザー名@本番環境のホスト名(もしくは IP アドレス):保存先のディレクトリ」を実行します。

だいぶ長いですが下記の例だとすると。。。

  • 本番環境のユーザー名: vpsadmin
  • 本番環境のホスト名: xx1-234-56789.vs.sakura.ne.jp
  • 保存先のディレクトリ: /var/www/example.com/html

下記の様になります。

scp requirements.txt vpsadmin@xx1-234-56789.vs.sakura.ne.jp:/var/www/example.com/html

無事本番環境に requirements.txt がコピーされました。

$ ls
requirements.txt

本番環境で Python 仮想環境を作成

本番環境のディレクトリへ移動し、Python の仮想環境を作成します。

$ python3.9 -m venv pythonvenv
$ ls
pythonvenv  requirements.txt

requirements.txt によるパッケージインストール

本番環境の Python 仮想環境に入った状態で、コマンド「pip install -r requirements.txt」を実行します。

(pythonvenv) $ pip install -r requirements.txt

すると requirements.txt の内容を元に Django を含めローカル環境で使っていたものと同じパッケージがインストールされます。

3. settings.py の編集

ファイルを分割する必要性

settings.py は本番環境と開発環境で内容が異なる部分が出てくるので、下記の様にファイルを分ける必要があります。(ファイル名は任意)

  • settings_common.py:開発環境と本番環境で共通の部分を記述
  • settings.py:本番環境でのみ適用する部分を記述
  • settings_dev.py:開発環境でのみ適用する部分を記述

settings.py と settings_dev.py それぞれに「from .settings_common import *」と記述し、共通部分を settings_common.py から読み込む様設定します。

開発環境の runserver 実行時に settings_dev.py を指定

runserver 実行時、デフォルトでは settings.py が設定ファイルとして読み込まれますが、今後開発環境(ローカル環境)では settings_dev.py を使う必要があります。

そのため、今後開発環境で runserver を実行する際は settings_dev.py を「runserver --settings=プロジェクトディレクトリ名.settings_dev」の形式で渡して実行します。

(pythonvenv) % python manage.py runserver --settings=some_project.settings_dev

settings.py(本番環境用)の編集

DEBUG の変更

False に変更

DEBUG = False

ALLOWED_HOSTS の変更

ドメイン名を設定。

ALLOWED_HOSTS = ['example.com']

Web サーバーで www.example.com から example.com のリダイレクトを行っていれば example.com のみを設定するだけで大丈夫。

静的ファイルの本番環境での配置場所

STATIC_ROOT = '/var/www/examlpe.com/html/static'

4. Django ソースコードを本番環境に配置

本番環境への git のインストール

本番環境でコマンド「sudo apt update」を実行しパッケージリストを更新、その後「sudo apt install git」で git をインストールします。

$ sudo apt update
$ sudo apt install git
Reading package lists... Done
Building dependency tree       
Reading state information... Done
git is already the newest version (1:2.25.1-1ubuntu3.1).
git set to manually installed.
0 upgraded, 0 newly installed, 0 to remove and 18 not upgraded.

リモートリポジトリから本番環境へファイルをコピー

プロジェクトフォルダをリポジトリに設定しているので、プロジェクトフォルダを配置したい場所へ移動した上で git clone を実行します。

$ git clone https://github.com/ユーザー名/リポジトリ名.git

これで本番環境にもプロジェクトフォルダがコピーされました。

ローカル環境からリモートリポジトリへファイルを反映させる方法はこちら↓

Github で開発ローカル → リモートリポジトリ → 本番ローカルに反映させる手順

5. gunicorn のインストール

本番環境でのみ必要となるものとして、アプリケーションサーバーがあります。今回は gunicorn を使います。

Python 仮想環境内でアプリケーションサーバーの gunicorn をインストールします。

(pythonvenv) $ pip install gunicorn

socket の待ち受けを開始します。

(pythonvenv) $ systemctl start example_sub.socket
(pythonvenv) $ systemctl start example_sub.service

今後作業する際は何かにつけて「pkill gunicorn」で gunicorn を終わらせた方が良いです。エラーが起きた時にいくらコードを修正しても治らないまま数時間経って、「pkill gunicorn」一発で治ったこともありました。

6. データベースのログイン情報をサーバーの環境変数に記述

MySQL のデータベースを使用していて、settings.py ではユーザー名とパスワードを環境変数から取る様に設定しています。

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'データベース名',
        'USER': os.environ.get('DB_USER'),
        'PASSWORD': os.environ.get('DB_PASSWORD'),
        'HOST': '',
        'PORT': '',
    }
}

そのため、サーバーの環境変数として記述します。ホームディレクトリの .bashrc ファイルの最下部に下記を追加しました。

export DB_USER='ユーザー名'
export DB_PASSWORD='パスワード'

7. 静的ファイルの配置

コマンド「python manage.py collectstatic」を実行し、settings.py で STATIC_ROOT に設定したパスに静的ファイルを集約します。

$ python manage.py collectstatic

これでとりあえず本番環境でも動くと思います。