Posted at

Flaskで記述されたサーバースクリプトをUbuntu上のnginxやApache2で動かす方法

Flaskで記述されたサーバースクリプトをUbuntu上のnginxやApache2で動かす方法についてまとめます。


前提


  • サーバースクリプトは既に作成済みであるとします。

  • 以下のソフトウェアはインストール済みであるとします。


    • Python

    • pip

    • サーバースクリプト内で使用しているライブラリ

    • nginx (nginxを使う場合)

    • Apache2 (Apache2を使う場合)




必要なパッケージのインストール



  1. pip install uwsgiコマンドを実行し、uWSGIをインストールします。


Apache2を使う場合



  1. sudo apt install libapache2-mod-proxy-uwsgiコマンドを実行し、mod_proxy_uwsgiをインストールします。


設定



  1. 以下のようにサーバースクリプトのプロジェクト内に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





  2. 以下のように/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を使う場合



  1. 以下のように/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;
    }
    }



  2. sudo ln -s /etc/nginx/sites-available/{ドメイン名} /etc/nginx/sites-enabled/{ドメイン名}コマンドを実行し、設定を有効化します。



Apache2を使う場合



  1. sudo a2enmod rewriteコマンドを実行し、mod_rewriteを有効化します。


  2. 以下のように/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>




  3. sudo a2ensite {ドメイン名}コマンドを実行し、設定を有効化します。



起動



  1. sudo systemctl start {サーバースクリプトのサービス名}コマンドを実行し、サーバースクリプトを起動します。


nginxを使う場合



  1. sudo systemctl start nginxコマンドを実行し、nginxを起動します。


Apache2を使う場合



  1. sudo systemctl start apache2コマンドを実行し、Apache2を起動します。


参考文献