ソースを参照

Add uwsgi Docker deployment

tanlie 6 日 前
コミット
d090e4db59
5 ファイル変更52 行追加1 行削除
  1. 17 0
      Dockerfile
  2. 1 0
      app/api/v1/user.py
  3. 21 0
      docker-compose.yaml
  4. 2 1
      requirements.txt
  5. 11 0
      uwsgi.ini

+ 17 - 0
Dockerfile

@@ -0,0 +1,17 @@
+FROM python:3.12-slim
+
+ENV PYTHONDONTWRITEBYTECODE=1 \
+    PYTHONUNBUFFERED=1 \
+    PIP_NO_CACHE_DIR=1
+
+WORKDIR /app
+
+COPY requirements.txt ./
+RUN python -m pip install --upgrade pip \
+    && python -m pip install --no-cache-dir -r requirements.txt
+
+COPY . .
+
+EXPOSE 5000
+
+CMD ["uwsgi", "--ini", "/app/uwsgi.ini"]

+ 1 - 0
app/api/v1/user.py

@@ -13,3 +13,4 @@ api = Redprint("user")
 def get_user():
     user = User.query.filter_by(id=1).first()
     return user.to_dict() if user else 'User not found'
+  

+ 21 - 0
docker-compose.yaml

@@ -0,0 +1,21 @@
+services:
+  web:
+    build:
+      context: .
+      dockerfile: Dockerfile
+    working_dir: /app
+    command: ["uwsgi", "--ini", "/app/uwsgi.ini"]
+    environment:
+      FLASK_ENV: production
+      SECRET_KEY: ${SECRET_KEY:-change-me}
+      MYSQL_HOST: ${MYSQL_HOST:-host.docker.internal}
+      MYSQL_PORT: ${MYSQL_PORT:-3306}
+      MYSQL_USER: ${MYSQL_USER:-root}
+      MYSQL_PASSWORD: ${MYSQL_PASSWORD:-}
+      MYSQL_DB: ${MYSQL_DB:-flask}
+      MYSQL_CHARSET: utf8mb4
+    extra_hosts:
+      - "host.docker.internal:host-gateway"
+    ports:
+      - "5000:5000"
+    restart: unless-stopped

+ 2 - 1
requirements.txt

@@ -13,10 +13,11 @@ packaging==26.3
 pluggy==1.6.0
 Pygments==2.21.0
 PyMySQL==1.2.0
-keyring==23.13.1
+keyring==25.7.0
 pytest==9.1.1
 python-dotenv==1.2.3
 SQLAlchemy==2.0.52
 typing_extensions==4.16.0
 Werkzeug==3.1.8
 WTForms==3.2.2
+uwsgi==2.0.30

+ 11 - 0
uwsgi.ini

@@ -0,0 +1,11 @@
+[uwsgi]
+chdir = /app
+module = ginger:app
+master = true
+processes = 4
+threads = 2
+http = 0.0.0.0:5000
+pidfile = /tmp/ginger.pid
+vacuum = true
+enable-threads = true
+lazy-apps = true