0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Flask+nginx+uwsgiでの環境でchdirはつけろよな

Posted at

概要

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"

締め

今回改めて公式の必要性を感じた
こういうちょっとしたことでかなり詰まってしまうことなんて多々ある
公式や使うならちょっとドキュメントをさらっと読んでおくとちょっとした内容につまらなくて良くなる
ちゃんとしよう…。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?