Skip to content

Commit 210b649

Browse files
committed
Switch to gunicorn
1 parent 99c6bf1 commit 210b649

File tree

2 files changed

+30
-5
lines changed

2 files changed

+30
-5
lines changed

Dockerfile

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,22 @@
1-
FROM sourcepole/qwc-uwsgi-base:alpine-v2025.01.24
1+
FROM alpine:3.21
2+
3+
ENV SERVICE_UID=33
4+
ENV SERVICE_GID=33
5+
# http://uwsgi-docs.readthedocs.io/en/latest/Options.html#buffer-size
6+
ENV UWSGI_PROCESSES=1
7+
ENV UWSGI_THREADS=4
8+
ENV PGSERVICEFILE="/srv/pg_service.conf"
9+
10+
STOPSIGNAL SIGINT
211

312
WORKDIR /srv/qwc_service
413
ADD pyproject.toml uv.lock ./
514
ADD libs.txt /srv/qwc_service/libs.txt
615

16+
COPY --from=ghcr.io/astral-sh/uv:alpine3.20 /usr/local/bin/uv /usr/local/bin/uvx /bin/
17+
718
RUN \
19+
apk add --no-cache --update shadow python3 py3-pip py3-gunicorn && \
820
apk add --no-cache --update --virtual runtime-deps postgresql-libs openjdk21-jdk openjdk21-jre ttf-dejavu && \
921
apk add --no-cache --update --virtual build-deps postgresql-dev g++ python3-dev && \
1022
uv sync --frozen && \
@@ -18,5 +30,14 @@ ADD src /srv/qwc_service/
1830

1931
ENV LD_LIBRARY_PATH=/usr/lib/jvm/java-21-openjdk/lib/server
2032
ENV SERVICE_MOUNTPOINT=/api/v1/document
21-
# Respawn service after each request
22-
ENV UWSGI_EXTRA="--master --processes 1 --threads 1 --max-requests 1"
33+
34+
ENTRYPOINT ["/bin/sh", "-c", "\
35+
HOME=/tmp gunicorn --chdir /srv/qwc_service \
36+
--bind :9090 \
37+
--workers $UWSGI_PROCESSES \
38+
--threads $UWSGI_THREADS \
39+
--user $SERVICE_UID --group $SERVICE_GID \
40+
--worker-class gthread \
41+
--pythonpath /srv/qwc_service/.venv/lib/python*/site-packages \
42+
--access-logfile - \
43+
server:app"]

src/server.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
import tempfile
88
import traceback
99

10-
from flask import Flask, Response, request, jsonify, make_response
10+
from flask import Flask, Response, request, jsonify, make_response, Blueprint
1111
from flask_restx import Api, Resource
1212

1313
from qwc_services_core.app import app_nocache
@@ -21,8 +21,10 @@
2121

2222
# Flask application
2323
app = Flask(__name__)
24+
mounted_app = Blueprint('mounted_app', __name__, url_prefix=os.getenv('SERVICE_MOUNTPOINT', '/'))
25+
2426
app_nocache(app)
25-
api = Api(app, version='1.0', title='Document service API',
27+
api = Api(mounted_app, version='1.0', title='Document service API',
2628
description="""API for QWC Document service.
2729
2830
The document service delivers reports from the Jasper reporting service.
@@ -33,6 +35,8 @@
3335
# disable verbose 404 error message
3436
app.config['ERROR_404_HELP'] = False
3537

38+
app.register_blueprint(mounted_app)
39+
3640
auth = auth_manager(app, api)
3741

3842
tenant_handler = TenantHandler(app.logger)

0 commit comments

Comments
 (0)