systemd(systemctlコマンド)でdjangoを自動起動する

systemdDjango
この記事は約5分で読めます。
スポンサードリンク

はじめに

コンピュータが起動するときの流れは、ざっくり説明すると、まずBIOSが立ち上がり、次にブートローダがinitプロセスを起動することでOSシステム全体が立ち上がります。

Ubuntu12までは、このためのinitシステムにおいてupstartが採用されていましたが、Ubuntu16以降ではsystemdに移行されました。

以前までは、upstartを使ってプログラムの自動起動なんかをやっていたのですが、今後は移行の波に合わせてsystemdで自動起動する必要があります。

今回は、systemctlコマンドでdjangoサーバーを起動してみたので、その方法をまとめておきます。(systemdは、systemctlコマンドでコントロールすることができます。)

ちなみに、upstartを使って起動する場合の方法についてはこちらの記事を参考にしてください。

【はじめてのDjnagoデプロイ】nginx + gunicorn + upstartでdjangoを常時起動させる
はじめに Djnagoでつくったアプリケーションは、ロカールの開発環境であればアプリケーションdirectory内において、以下のコマンドで簡単に立ち上がります。 python manage.py runserver 今回は、Dj...

また、systemdの利点などについて知りたい方には、こちらの記事が参考になるかもしれません。

なぜsystemdなのか? | POSTD
*このブログ記事は2014年5月21日に行った私の講演の内容に基づいています。* ここ数年、GNU/LinuxのディストリビューションはSysV initを避ける傾向にあり、代わりに多種多様な新しいinitシステムへと移行が進んでいます。SysV

それでは、早速やっていきましょう。

作業の内容

やることは簡単です。

まず、起動時に読み込むためのserviceファイルを作成し、自動起動をするための設定などをこのファイルに記述します。

次に、そのserviceファイルをsystemctlコマンドで有効化し、自動起動時に読み込まれるように設定していきます。

serviceファイルを作成

まずは、serviceファイルを作っていきます。
/etc/systemd/systemに移動し、vimでファイルを作成します。

cd /etc/systemd/system/
vim app.service
# appは任意の名前で設定してください。

次に、serviceファイルの中身を以下のように記述していきます。

app.service

[Unit]
Description=gunicorn daemon
After=network.target

[Service]
User=ubuntu  # 実行するサーバーユーザーの名前を指定
Group=ubuntu # 実行するサーバーグループの名前を指定
WorkingDirectory=/path/to/django/app # django project へのpathを指定
ExecStart=/path/to/gunicorn -w 3 -b 127.0.0.1:8000 {#djangoappname#}.wsgi # gunicornによる起動コマンド

[Install]
WantedBy=multi-user.target

ファイルの中身を簡単に説明します。

djangoは、gunicornというWSGIサーバーを使って起動します。
したがって、gunicornでdjangoを起動するためのコマンドをExecStartに指定します。

このとき、djangoを起動するIPアドレスやapp nameは任意で設定して下さい。

注意点としては、gunicornをフルパスで指定することです。(ExecStart=path/to/gunicornの部分)

/path/to/gunicornに指定するフルパスは、以下のコマンドで取得できる値を設定すれば大丈夫です。

which gunicorn

ここまでの作業が完了したらEsc -> :wqで内容を保存しvimを閉じましょう。

systemctlで自動起動有効化と設定

次に、initプロセスにおいて、上で作成したserviceファイルが読み込まれるように設定していきましょう。以下のsystemctlコマンドは、一行目で自動起動の有効化、二行目で起動をしています。

systemctl enable app
systemctl start app

appの部分は、serviceファイルの名前{app}.serviceのappの部分を任意で指定して下さい。

例えば、serviceファイル名をdjango.serviceと設定した場合、appをdjangoで置き換える必要があります。

その他のsystemctlコマンド

systemctlによる停止コマンド

sysmtemctl stop app

systemctlによる起動状態のステータスの取得は、

sysmtemctl status app

app.serviceファイルの中身をvimなどで修正した場合は、以下のコマンドで変更を反映することができます。

sysmtemctl daemon-reload

関連記事

実際のウェブサーバーの設定などを含めたデプロイの方法などについては、こちらの記事にまとめています。

・systemdを使ってデプロイする場合(Ubuntu16以降推奨)

【はじめてのDjnagoデプロイ】nginx + gunicorn + systemdでdjangoを常時起動させる
はじめに Djnagoでつくったアプリケーションは、ロカールの開発環境であればアプリケーションdirectory内において、以下のコマンドで簡単に立ち上がります。 python manage.py runserver 今回は、Dj...

・upstartを使ってデプロイする場合(Ubuntu12推奨)

【はじめてのDjnagoデプロイ】nginx + gunicorn + upstartでdjangoを常時起動させる
はじめに Djnagoでつくったアプリケーションは、ロカールの開発環境であればアプリケーションdirectory内において、以下のコマンドで簡単に立ち上がります。 python manage.py runserver 今回は、Dj...

参考

How To Set Up Django with Postgres, Nginx, and Gunicorn on CentOS 7 | DigitalOcean
Django is a powerful web framework that can help you get your Python application or website off the ground. Django includes a simplified development server for ...

オススメのプログラミングスクール紹介

【TechAcademy】自宅で学べる!プログラミングスクール

まずは無料体験からでも始められます

★ここがポイント!

 自宅にいながらオンラインで勉強できる
◎ パーソナルメンターがついて指導!

◎ チャットで質問もOK
◎ あなたのオリジナルサービスの開発をサポート!

Djangoプログラミング
スポンサードリンク
あれは魔法だろうか?
タイトルとURLをコピーしました