概要
dockerにてFlaskを動作する環境を作りたくて色々試行錯誤
そのときに他の記事を書いている方の内容を参考に作っていたのだがどうしても動作せず…。
なぜ…。
そのときに気づいた内容を自分の備忘録がてら記載しておく
ローカルでは動くけどdocker環境じゃうごかないのはなぜ?
flaskをつかってWebアプリを作っていたけどどうしてもDBを触る機会が出てきそうなので早いうちにdockerに移行してローカルを圧迫しないようにしたかった。
だけど実際動かすには、uwsgiが必要とのこと…。
今回は、詳しくは話さないのでuwsgiを詳しく知りたい人はこちらのサイトを見てください。
uWSGI入門
その中でどうしても動かない理由がわからなかったのでnginxやuwsgiの設定を確認していく中で必要項目があった。
それは…uwsgiの設定にアプリのプロジェクトルートを指定しろっということ
これdockerの開発環境を作っているだけじゃわからない事象でした…。
結局作ったコードは以下に記載する
uwsgi.ini
[uwsgi]
wsgi-file = main.py
callable = app
master = true
processes = 1
socket = :3031
chmod-socket = 666
vacuum = true
die-on-term = true
py-autoreload = 1
chdir = /var/www/ #<-これが大事
wsgi-file = /var/www/app.py
# log関係
logto = /var/log/uwsgi/%n.log
touch-logreopen = %(base)/.logreopen_trigger
このchdirがなければアプリのプロジェクトルートがわからなくてそもそも起動しないっぽい
正直どの記事も乗ってなくてuwsgiを確認していく中で見つかった…。
ハマっちまったよ…。
nginx.ini
user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
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 uwsgi:3031;
}
server {
listen 80;
charset utf-8;
location / {
include uwsgi_params;
uwsgi_pass uwsgi;
}
}
}
docker-compose.yml
version: "3"
services:
uwsgi:
build: ./python
volumes:
- ./app:/var/www
ports:
- 3031:3031
tty: true
command: uwsgi --ini /var/www/uwsgi.ini
environment:
TZ: "Asia/Tokyo"
web:
build: ./nginx
volumes:
- ./nginx/nginx.conf:/etc/nginx/nginx.conf
- /tmp/nginx_log:/var/log/nginx
links:
- uwsgi
ports:
- 4231:80
environment:
TZ: "Asia/Tokyo"
締め
今回改めて公式の必要性を感じた
こういうちょっとしたことでかなり詰まってしまうことなんて多々ある
公式や使うならちょっとドキュメントをさらっと読んでおくとちょっとした内容につまらなくて良くなる
ちゃんとしよう…。