LinuxのUbuntuサーバー環境でNginx+uWSGI+Flaskの環境構築をする手順

皆様おはこんばんにちは、せなです

本日はLinux環境での開発環境構築方法を解説致します

初めに

構築には以下を使用します

  • Nginx
  • uWSGI
  • Flask

初めて環境構築する方に向けて、簡単にそれぞれの役割を解説いたします。

Nginxはクライアントとのやり取りを行うWebサーバーの一つです
類似したWebサーバーにApacheがありますが、そちらと比較して多人数からの同時アクセス処理に優れているなどの特徴があります

uWSGIはPythonのWebアプリケーションをWebサーバーとやり取りさせるためのアプリケーションサーバーの一つです

PythonにはWSGIと呼ばれる規約が存在しており、規約に則った方法でWebサーバーとアプリケーションサーバー間でのやり取りを行います
詳しく知りたい方は下記のリンクを参照してください
リンク: PEP3333

FlaskはPythonの小規模開発でよく使用される、フレームワークの一つです
詳しくは以下の記事にまとめていますのでご確認ください。
リンク:Python初心者向けの小規模なフレームワーク「Flask」のインストールと簡単な使い方

環境構築

準備

まずpipコマンドがインストールされていることを確認しましょう

pip3 --version

恐らく「pipコマンドが入っていないよ」とエラーが出るはずですので、以下のコマンドを使用してpipをインストールしましょう

sudo apt install python-pip3

念のためにpip3としておりますが、Python2系が入っていないならpipでも問題ないです

次にNginxのインストールを行います

sudo apt install nginx

これで正しくインストールされていれば以下のコマンドで「Active: active (running) 」と表示されます

sudo systemctl restart nginx.service
sudo systemctl status nginx.service

次はuWSGIをインストールします
インストール時にCコンパイラが必要ですので「clang」もインストールします

sudo apt install clang
CC=`which clang` pip3 install uwsgi
sudo apt install uwsgi-plugin-python3 libpcre3 libpcre3-dev

最後にFlaskをインストールします

sudo pip3 install flask

これで準備は完了です
次は設定ファイルを変更していきましょう

設定

Nginx

Nginxの設定ファイルは「/etc/nginx/」配下に全て格納します
デフォルトでは「/etc/nginx/nginx.conf」に設定が記載されていますので、そのファイルを修正しましょう
以下のコマンドでファイルを開きます

sudo vi /etc/nginx/nginx.conf

その中から以下の記載を探してください

include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;

「include /etc/nginx/sites-enabled/*;」については必要ないため、とりあえずコメントアウトにします

include /etc/nginx/conf.d/*.conf;
# include /etc/nginx/sites-enabled/*;

次にファイルを作成しましょう

sudo vi /etc/nginx/conf.d/default.conf
server {
    listen       80;
    location / {
        include uwsgi_params;
        uwsgi_pass unix:///usr/local/app/tmp/uwsgi.sock;
    }
}

簡単に行っていることを説明しておくと、listenで外部からのリクエストを受け付けるポートを指定して、
location内ではuWSGIにSoketを繋げています
(今は細かいことは気にせずにおまじない程度に考えておいてください)

uWSGI

次にuWSGIの設定ファイルですが、ファイルを作成して以下を記載してください

sudo vi /etc/nginx/conf.d/uwsgi.conf
server {
  listen 5050;
  error_log  /var/log/nginx/error.log warn;
  location / {
    include uwsgi_params;
    uwsgi_pass unix:///usr/local/app/tmp/uwsgi.sock;
    uwsgi_ignore_client_abort on;
  }
}

Flask

最後にFlaskの設定を行いますが、初めにFlask用にディレクトリを作りましょう

sudo mkdir /usr/local/app

次にuwsgi起動のためにファイルを作成します

sudo vi /usr/local/app/uwsgi.ini
[uwsgi]
plugins-dir = /usr/lib/uwsgi/plugins
plugin = python38
chdir = /usr/local/app
base = /usr/local/app
app = main
module = %(app)
# socket file's location
socket = /usr/local/app/tmp/uwsgi.sock
# permissions for the socket file
chmod-socket = 666
# the variable that holds a flask application inside the module imported at line #6
callable = app
# location of log files
logto = /var/log/uwsgi/%n.log
master = true
processes = 5
vacuum = true
die-on-term = true

「plugin =」には環境内のpythonバージョンを指定しましょう
「Python3 -V」で確認できます
上記は、python3.8なので「python38」としています

次に以下のファイルに記載して、uwsgiを起動できるようにしましょう

sudo vi /etc/systemd/system/uwsgi.service
[Unit]
Description=uWSGI instance to serve uwsgi
After=network.target
[Service]
User=root
Group=root
WorkingDirectory=/usr/local/app
Environment="LD_LIBRARY_PATH=/usr/lib"
ExecStart=/usr/bin/uwsgi  --ini uwsgi.ini
[Install]
WantedBy=multi-user.target

パーミッションについても修正を行います

sudo touch /etc/systemd/system/uwsgi.service
sudo chmod 664 /etc/systemd/system/uwsgi.service

最後に自動起動で設定しておきます

sudo systemctl enable uwsgi
sudo systemctl restart uwsgi.service
sudo systemctl status uwsgi.service

ここでは「Active: active (running) 」と表示されなくても問題ありません

最後にFlaskのアプリケーションを作成しましょう

Flaskアプリケーション

インストールと設定は終わりましたので、最後にアプリケーションを配置しましょう

まずは、ディレクトリの作成と所有者などを変更しましょう

sudo mkdir -p /usr/local/app/tmp
sudo chmod 777 /usr/local/app
sudo chown root:root /usr/local/app
sudo mkdir /var/log/uwsgi
sudo chown root:root /var/log/uwsgi

後は、「main.py」と「index.html」を指定のディレクトリに作成します

sudo vi /usr/local/app/main.py
from flask import Flask,render_template
app = Flask(__name__)
@app.route('/')
def index():
    return render_template('index.html')
if __name__ == "__main__":
    app.run()
sudo vi /usr/local/app/templates/index.html
<html>
  <head>
    <title>sample</title>
    <body>
      <h1>Hello world!</h1>
    </body>
  </head>
</html>

以上で完了です
使用中のサーバー環境のIPアドレスにアクセスすれば「Hello World!」が表示されると思います

最後に

ここまでお読みいただきありがとうございます
最近Linuxサーバーを借りて開発環境を構築した際の備忘録となります

今回の記事がお役に立てたなら幸いです
ではでは~

雑記

Posted by sena