Flaskで記述されたサーバースクリプトをUbuntu上のnginxやApache2で動かす方法についてまとめます。
前提
- サーバースクリプトは既に作成済みであるとします。
- 以下のソフトウェアはインストール済みであるとします。
- Python
- pip
- サーバースクリプト内で使用しているライブラリ
- nginx (nginxを使う場合)
- Apache2 (Apache2を使う場合)
必要なパッケージのインストール
-
pip install uwsgi
コマンドを実行し、uWSGIをインストールします。
Apache2を使う場合
-
sudo apt install libapache2-mod-proxy-uwsgi
コマンドを実行し、mod_proxy_uwsgi
をインストールします。
設定
-
以下のようにサーバースクリプトのプロジェクト内に
uwsgi.ini
を作成します。
※TODO
部の指示通りに書き換えを行ってください。uwsgi.ini[uwsgi] ; TODO: 以下を記述し、コメントアウトを解除 ; module = {サーバースクリプトのファイル名 (拡張子なし)}:{サーバースクリプト内のFlaskオブジェクトの変数名} ; socket = /tmp/{ソケット名 (任意)}.sock master = true processes = 1 chmod-socket = 666 vacuum = true die-on-term = true manage-script-name = true
-
以下のように
/etc/systemd/system/{サーバースクリプトのサービス名 (任意)}.service
を作成します。
※TODO
部の指示通りに書き換えを行ってください。/etc/systemd/system/{サーバースクリプトのサービス名}.service[Unit] # TODO: 以下を記述し、コメントアウトを解除 # Description={概要} After=network.target [Service] # TODO: 以下を記述し、コメントアウトを解除 # User={実行時のユーザー} # Group={実行時のグループ} # WorkingDirectory={サーバースクリプトが配置されているディレクトリのパス} # ExecStart=uwsgi --ini {uwsgi.iniのパス (サーバースクリプトが配置されているディレクトリからの相対パス)} [Install] WantedBy=multi-user.target
nginxを使う場合
-
以下のように
/etc/nginx/sites-available/{ドメイン名}
を作成します。
※TODO
部の指示通りに書き換えを行ってください。server { # TODO: 以下を記述し、コメントアウトを解除 # server_name {ドメイン名}; listen 80; # TODO: 以下を記述し、コメントアウトを解除 # location ~ ^/{サブドメイン名}(/.*)?$ { include uwsgi_params; # TODO: 以下を記述し、コメントアウトを解除 # uwsgi_pass unix:/tmp/{ソケット名}.sock; uwsgi_param PATH_INFO $1; } }
sudo ln -s /etc/nginx/sites-available/{ドメイン名} /etc/nginx/sites-enabled/{ドメイン名}
コマンドを実行し、設定を有効化します。
Apache2を使う場合
-
sudo a2enmod rewrite
コマンドを実行し、mod_rewrite
を有効化します。 -
以下のように
/etc/apache2/sites-available/{ドメイン名}.conf
を作成します。
※TODO
部の指示通りに書き換えを行ってください。/etc/apache2/sites-available/{ドメイン名}.conf# TODO: 以下を記述し、コメントアウトを解除 # <VirtualHost {ドメイン名}:80> # TODO: 以下を記述し、コメントアウトを解除 # <Location /{サブドメイン名}> RewriteEngine on # TODO: 以下を記述し、コメントアウトを解除 # ProxyPass unix:/tmp/{ソケット名}.sock|uwsgi://{URL (任意)} # RewriteRule ^/{サブドメイン名}(/.*)?$ $1 </Location> ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost>
sudo a2ensite {ドメイン名}
コマンドを実行し、設定を有効化します。
起動
-
sudo systemctl start {サーバースクリプトのサービス名}
コマンドを実行し、サーバースクリプトを起動します。
nginxを使う場合
-
sudo systemctl start nginx
コマンドを実行し、nginxを起動します。
Apache2を使う場合
-
sudo systemctl start apache2
コマンドを実行し、Apache2を起動します。