docker-composeでflask+uwsgi+nginxの環境を構築する
おはこんばんにちは、せなです。
最近、個人で開発するときにdockerをよく使用するので、その際に使用しているテンプレートをメモがわりに記載します。
※ちなみに当方はM1 Macを使用していますので、参考までに
Contents
環境
Python3.8
flask
nginx
uWsgi
構造
/
docker-compose.yml
- app
- Dockerfile
- uwsgi.ini
- requirements.txt
- app.py
- views
- hogeview.py
- web
- Dockerfile
- nginx.conf
下にそれぞれのファイル内容を記載しますので、コピペで使用してみてください。
ファイル内容
docker-compose
version: "3"
services:
app:
restart: always
container_name: app-server
hostname: app-server
build: ./app
volumes:
- "./app:/var/www/"
ports:
- "3031:3031"
environment:
TZ: Asia/Tokyo
web:
container_name: web-server
hostname: web-server
build: ./web
volumes:
- "./web/nginx.conf:/etc/nginx/nginx.conf"
- "/tmp/nginx_log:/var/log/nginx"
ports:
- "4231:80"
environment:
TZ: Asia/Tokyo
app container
Dockerfile
# base image
FROM python:3.8.5
USER root
ARG project_dir=/var/www/
# workdir にファイル等追加
COPY requirements.txt $project_dir
# workdir
WORKDIR $project_dir
RUN apt-get update
RUN apt-get -y install locales && \
localedef -f UTF-8 -i ja_JP ja_JP.UTF-8
ENV LANG ja_JP.UTF-8
ENV LANGUAGE ja_JP:ja
ENV LC_ALL ja_JP.UTF-8
ENV TZ JST-9
ENV TERM xterm
RUN pip install --upgrade pip
RUN pip install --no-cache-dir -r requirements.txt
CMD ["uwsgi","--ini","/var/www/uwsgi.ini"]
requirements.txt
Flask
uwsgi
uwsgi.ini
[uwsgi]
# pythonモジュールのインポート
app = app:create_app()
module = %(app)
callable = app
master = true
processes = 1
socket = :3031
logto = /var/log/app-server.log
master = true
processes = 10
vaccum = true
die-on-term = true
max-requests = 100
harakiri = 60
reload-mercy = 5
worker-reload-mercy = 5
ignore-sigpipe=true
ignore-write-errors=true
disable-write-exception=true
app.py
from flask import Flask
from views import hogeview
def create_app():
app = Flask(__name__)
app.register_blueprint(hoge.bp)
return app
if __name__ == "__main__":
create_app().run(debug=True, host='0.0.0.0')
hogeview.py
from flask import Blueprint
bp = Blueprint('hoge', __name__, url_prefix='/hoge')
@bp.route('/', methods=['GET', 'POST'])
def hello():
return 'Hello World!'
web container
Dockerfile
# base image
FROM nginx:latest
CMD ["nginx", "-g", "daemon off;", "-c", "/etc/nginx/nginx.conf"]
nginx.conf
# 実行ユーザー
user nginx;
# 使用可能process数
worker_processes 1;
# エラーログの設定
error_log /var/log/nginx/error.log warn;
# processidの格納先
pid /var/run/nginx.pid;
# イベント処理モジュール
events {
# 最大接続数
worker_connections 1024;
}
# http関連のモジュール
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
#sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
upstream uwsgi {
server app-server:3031;
}
server {
listen 80;
charset utf-8;
location / {
include uwsgi_params;
uwsgi_pass uwsgi;
}
}
}
docker-composeの実行方法
色々なサイトで実行方法は載っているので簡単にコマンドをまとめておきます。
docker-compose.ymlのあるフォルダに移動してから以下のコマンドを行います。
- docker-compose build でビルドを行う
- docker-compose up -d で実行
- http://localhost:4231/test にアクセス
- Hello World と表示される
- docker-compose down で終了
logを見たいときには docker-compose exec app bash または docker-compose exec web bash
最後に
とりあえず、コピーして使用できる程度のものですが記載させて頂きました。
どなたかの役に立てば幸いです。
ではでは〜
ディスカッション
コメント一覧
まだ、コメントがありません