Djangoプロジェクトをサーバーでデプロイするための方法を解説

Python Python

ローカルでは

python manage.py runserver

http://lovalhost:8000

で動くDjangoプロジェクトですが、いざサーバーでデプロイしようとすると、様々な壁が立ちはだかります。

この記事では、Djangoプロジェクトをサーバーでデプロイするための知識を全てまとめます。

共用サーバーか、VPSか

Djangoプロジェクトをデプロイするためには、サーバーの選択から留意しないといけません。

現実的には、共用サーバーかVPSかということになります。

共用サーバーは使うプログラムの管理がすべてサーバー管理会社任せで、VPSは何もプログラムが入っていないものに自分でプログラムをインストールし、自分で管理するという違いがあります。

Djangoの場合、サーバーでPythonが使えても、設定に四苦八苦することが多いです。

従って、自分でプログラムをインストールできない共用サーバーはおすすめできません。

この記事では共用サーバーでのデプロイ方法も書きますが、特に条件がないのであればVPSを選択しましょう。

いきおい、インフラに関する知識も必要となりますが、それがDjangoの実際です。

なお、これも特に条件がないのであれば、Linux系のサーバーを選択してください。

Windowsのサーバーは非常に公開手順が面倒です(この記事ではWindowsのサーバーでのデプロイ方法は触れません)。

VPS(CentOS 8の場合)

それでは、CentOS 8の場合を例にとり、VPSでのデプロイ手順を書いていきます。

プロジェクトのパス

Djangoプロジェクトは、一般的には

/var/www

配下に置きます。

/var/www

は、「Webサイトに関するファイルの置き場所」ということになっています。

しかしながら、

/home

配下の自分のディレクトリに置いてもいいでしょう。どっちでも実害はありません。

けれども、/homeは慣習的に個人のディレクトリという感じが強いので、/var/wwwに置くことが一般的になっています。

Djangoインストール

まずPythonのインストールです。こちらを参考にしてください。

CentOs8 pythonインストール
pythonをCentOs8にインストールする。CentOs8ではPython3.6がデフォルトになったようです。

Djangoをインストールし、プロジェクトを立ち上げ、アプリを作ります。その手順はこちらを参考にしてください。

CentOs8 Python DjangoでWebアプリ開発環境の構築手順
pythonのWebアプリケーションフレームワークであるDjangoでの開発環境の構築手順です。

ftpサーバー

ローカルからファイルをアップロードするために、サーバーにftpサーバーをインストールします。
こちらを参考にしてください。yumはdnfと読み替えてください。

[vsftpd] インストールとCentOSのfirewallの設定 | Search Light(CakePHP PHP jQuery JavaScript CSS Linux MySQLMac)
FTPサーバーソフトのvsftpdをCentOS7にインストールします。yumでインストール後、firewallでftpのポートを開放すればFTPが使えるようになります。 インストールされたバージョンの確認

まず立ち上げてみる

それからローカルのファイルを転送します。

転送が終わったら、

python manage.py makemigrations
python manage.py migrate

しましょう。

ここまできたら、

python3 manage.py runserver 0.0.0.0:8000

でDjangoプロジェクトを立ち上げてみます。

http://IPアドレス:8000/

でアクセスできることを確かめてください。

(settings.pyのALLOWED_HOSTSにIPアドレスを追加するのを忘れずに)

httpサーバー

次に、サーバーにhttpサーバーを立ち上げます。ここではnginxとします。こちらを参考にしてください。

Django + uWSGI + nginx (uWSGIチュートリアルの和訳) - Qiita
はじめに Setting up Django and your web server with uWSGI and nginx — uWSGI 2.0 documentationを適宜和訳しつつ、Djangoでつくったアプリをサ...

共用サーバー

次に、共用サーバーの例を書きます。

.htaccessとindex.cgi

共用サーバーの場合、この2つのファイルを設定する必要があります。

コアサーバーの場合は、こちらを参考にしてください。

CORESERVERでDjangoのサイトを作るまで - Qiita
始めに DjangoでWebサイトを作成しようと思い、Webや書籍で情報を集めていました。 『Hello World!』を表示する所までですが、まずまず苦労したので記録に残しておきます。 CORESERVER レンタルサー...

エックスサーバーの場合は、こちらを参考にしてください。

エックスサーバーでDjangoを動かす
エックスサーバーでDjangoを動かす手順の説明です。

デプロイの後作業

デプロイした後も、Djangoには設定作業があります。

静的ファイル

筆者の書いた記事ですが、こちらを参考にして静的ファイルの設定をしてください。

Djangoでの静的ファイルの扱いで抑えておくべきポイント
Djangoで静的ファイル(css、JavaScript、画像など)を扱うのは難しいとされています。 この記事では...

DEBUG

setting.pyのDEBUGはFalseにします。

DNS

ドメイン名でアクセスできるようにするために、DNSを設定する必要があります。

これは各サーバーによって見事に手順が違うので、ここでは詳細は書きません。

ただ、DNSサーバーを設定したらドメイン名でアクセスできるまで最大72時間かかります(そのサーバーの環境と自身のマシンの環境に依存します)。気長に待ちましょう。

https化

最後にhttps化です。

VPSは

Djnagoが動いているサーバをletsencryptでHTTPS化 - Qiita
環境 Nginx + uwsgi + Djang 1.10 on CentOS 7 (さくらVPS) letsencryptとは? 無料でウェブサイトを暗号化通信HTTPSにできる.詳細はこちら どうやるか? Ce...
Let's Encrypt でサイトを SSL 化する( Django 編)
Django などのフレームワークを使っているサイトに対して Let's Encrypt のサーバー証明書を発行する方法をまとめました

こちらの2つのサイトを参考にしてください。

共用サーバーは、コントロールパネルから行えることがほとんどです。
ボタンをクリックでできるはずです。

まとめ

いかがでしたでしょうか。なかなか大変だということが分かったかと思います。

しかし、インフラは慣れです。Linuxの独特の短縮されたコマンドも、パスも、設定も、二度三度と繰り返すうちに慣れます。

どちらかと言えば経験がものを言う分野です。

プログラミングよりも慣れの部分は大きいかもしれません。最初は壁が高いと思いますが、何度かやってるうちに苦痛でなくなるはずです。

最後に書いておきますが、インフラの世界は日進月歩です。

1年前にスタンダードだった技術が陳腐化しているということはよくあります。

常に最新の情報を仕入れて、キャッチアップしていってください。

エージェントへの登録はお済みですか?

今すぐフリーランスにならなくてもエージェント登録は済ませておくことお勧めします。

現在の動向や相場を把握できますし、いざフリーランスになろうとした際に早期に手が打てます。エージェント登録は無料なので登録だけはしておくべきです。

フリーランスエージェント最大手はレバテックフリーランス。利用者18万人、平均年収862万、取引者数4,000社と優良案件が集まるので真っ先に登録すべきエージェントです。

レバテックフリーランスに登録する

Python
shigotoswitchをフォローする
しごとスイッチ