ローカルでは
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のインストールです。こちらを参考にしてください。
Djangoをインストールし、プロジェクトを立ち上げ、アプリを作ります。その手順はこちらを参考にしてください。
ftpサーバー
ローカルからファイルをアップロードするために、サーバーにftpサーバーをインストールします。
こちらを参考にしてください。yumはdnfと読み替えてください。
まず立ち上げてみる
それからローカルのファイルを転送します。
転送が終わったら、
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とします。こちらを参考にしてください。
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fcdn.qiita.com%2Fassets%2Fpublic%2Farticle-ogp-background-412672c5f0600ab9a64263b751f1bc81.png?ixlib=rb-4.0.0&w=1200&mark64=aHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTk3MiZoPTM3OCZ0eHQ9RGphbmdvJTIwJTJCJTIwdVdTR0klMjAlMkIlMjBuZ2lueCUyMCUyOHVXU0dJJUUzJTgzJTgxJUUzJTgzJUE1JUUzJTgzJUJDJUUzJTgzJTg4JUUzJTgzJUFBJUUzJTgyJUEyJUUzJTgzJUFCJUUzJTgxJUFFJUU1JTkyJThDJUU4JUE4JUIzJTI5JnR4dC1hbGlnbj1sZWZ0JTJDdG9wJnR4dC1jb2xvcj0lMjMyMTIxMjEmdHh0LWZvbnQ9SGlyYWdpbm8lMjBTYW5zJTIwVzYmdHh0LXNpemU9NTYmcz1iNDA5MmYwMGExNjgyMWQ1YzVmMWJmMGVlNTdmOTZkMQ&mark-x=142&mark-y=57&blend64=aHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZoPTc2Jnc9NzcwJnR4dD0lNDBOaW5nZW5zZWk4NDgmdHh0LWNvbG9yPSUyMzIxMjEyMSZ0eHQtZm9udD1IaXJhZ2lubyUyMFNhbnMlMjBXNiZ0eHQtc2l6ZT0zNiZ0eHQtYWxpZ249bGVmdCUyQ3RvcCZzPWEwMjYwNTU2YjRmZmJhYWVlZDk0ZGFkNTEwYzRkMDA4&blend-x=142&blend-y=486&blend-mode=normal&s=0b4a643323d66f1ca740b411169d6dee)
共用サーバー
次に、共用サーバーの例を書きます。
.htaccessとindex.cgi
共用サーバーの場合、この2つのファイルを設定する必要があります。
コアサーバーの場合は、こちらを参考にしてください。
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fcdn.qiita.com%2Fassets%2Fpublic%2Farticle-ogp-background-412672c5f0600ab9a64263b751f1bc81.png?ixlib=rb-4.0.0&w=1200&mark64=aHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTk3MiZoPTM3OCZ0eHQ9Q09SRVNFUlZFUiVFMyU4MSVBN0RqYW5nbyVFMyU4MSVBRSVFMyU4MiVCNSVFMyU4MiVBNCVFMyU4MyU4OCVFMyU4MiU5MiVFNCVCRCU5QyVFMyU4MiU4QiVFMyU4MSVCRSVFMyU4MSVBNyZ0eHQtYWxpZ249bGVmdCUyQ3RvcCZ0eHQtY29sb3I9JTIzMjEyMTIxJnR4dC1mb250PUhpcmFnaW5vJTIwU2FucyUyMFc2JnR4dC1zaXplPTU2JnM9ZWVlNDdiY2NjMjRkNTdjMGMzYjE5MDgzOGZiOTM3OGM&mark-x=142&mark-y=57&blend64=aHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZoPTc2Jnc9NzcwJnR4dD0lNDB0d2lub3plJnR4dC1jb2xvcj0lMjMyMTIxMjEmdHh0LWZvbnQ9SGlyYWdpbm8lMjBTYW5zJTIwVzYmdHh0LXNpemU9MzYmdHh0LWFsaWduPWxlZnQlMkN0b3Amcz05MmUzNWY5ODMxN2JhMjlkY2RiNjRhZWZhYTgzNzdmMg&blend-x=142&blend-y=486&blend-mode=normal&s=ceee7ca6ecf15157ab61f9e80795ed1a)
エックスサーバーの場合は、こちらを参考にしてください。
デプロイの後作業
デプロイした後も、Djangoには設定作業があります。
静的ファイル
筆者の書いた記事ですが、こちらを参考にして静的ファイルの設定をしてください。
![](https://shigotoswitch.com/wp-content/uploads/2020/10/agent246-300x141.png)
DEBUG
setting.pyのDEBUGはFalseにします。
DNS
ドメイン名でアクセスできるようにするために、DNSを設定する必要があります。
これは各サーバーによって見事に手順が違うので、ここでは詳細は書きません。
ただ、DNSサーバーを設定したらドメイン名でアクセスできるまで最大72時間かかります(そのサーバーの環境と自身のマシンの環境に依存します)。気長に待ちましょう。
https化
最後にhttps化です。
VPSは
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fcdn.qiita.com%2Fassets%2Fpublic%2Farticle-ogp-background-412672c5f0600ab9a64263b751f1bc81.png?ixlib=rb-4.0.0&w=1200&mark64=aHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTk3MiZoPTM3OCZ0eHQ9RGpuYWdvJUUzJTgxJThDJUU1JThCJTk1JUUzJTgxJTg0JUUzJTgxJUE2JUUzJTgxJTg0JUUzJTgyJThCJUUzJTgyJUI1JUUzJTgzJUJDJUUzJTgzJTkwJUUzJTgyJTkybGV0c2VuY3J5cHQlRTMlODElQTdIVFRQUyVFNSU4QyU5NiZ0eHQtYWxpZ249bGVmdCUyQ3RvcCZ0eHQtY29sb3I9JTIzMjEyMTIxJnR4dC1mb250PUhpcmFnaW5vJTIwU2FucyUyMFc2JnR4dC1zaXplPTU2JnM9OGY3MzY3MmYxYjEzYTFjM2Y5MWI4YWVjYzRhODJmODQ&mark-x=142&mark-y=57&blend64=aHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZoPTc2Jnc9NzcwJnR4dD0lNDBhaW9uJnR4dC1jb2xvcj0lMjMyMTIxMjEmdHh0LWZvbnQ9SGlyYWdpbm8lMjBTYW5zJTIwVzYmdHh0LXNpemU9MzYmdHh0LWFsaWduPWxlZnQlMkN0b3Amcz1mZmRmNTM5MjRjNTVlMGU1MmYyYWQyNzgzYWFiMGIyMg&blend-x=142&blend-y=486&blend-mode=normal&s=15b8fc329235bac17d041ad9741385e1)
こちらの2つのサイトを参考にしてください。
共用サーバーは、コントロールパネルから行えることがほとんどです。
ボタンをクリックでできるはずです。
まとめ
いかがでしたでしょうか。なかなか大変だということが分かったかと思います。
しかし、インフラは慣れです。Linuxの独特の短縮されたコマンドも、パスも、設定も、二度三度と繰り返すうちに慣れます。
どちらかと言えば経験がものを言う分野です。
プログラミングよりも慣れの部分は大きいかもしれません。最初は壁が高いと思いますが、何度かやってるうちに苦痛でなくなるはずです。
最後に書いておきますが、インフラの世界は日進月歩です。
1年前にスタンダードだった技術が陳腐化しているということはよくあります。
常に最新の情報を仕入れて、キャッチアップしていってください。