mirror of
https://github.com/stilleshan/dockerfiles.git
synced 2025-12-24 13:37:58 +08:00
create python:3.7-buster-uwsgi-nginx
This commit is contained in:
67
base/python/3.7-buster-uwsgi-nginx/Dockerfile
Normal file
67
base/python/3.7-buster-uwsgi-nginx/Dockerfile
Normal file
@@ -0,0 +1,67 @@
|
||||
FROM python:3.7-buster
|
||||
|
||||
LABEL maintainer="Sebastian Ramirez <tiangolo@gmail.com>"
|
||||
ENV VERSION python3.7
|
||||
COPY install-nginx-debian.sh /
|
||||
|
||||
RUN bash /install-nginx-debian.sh
|
||||
|
||||
EXPOSE 80
|
||||
|
||||
# Expose 443, in case of LTS / HTTPS
|
||||
EXPOSE 443
|
||||
|
||||
# Install uWSGI
|
||||
RUN pip install uwsgi
|
||||
|
||||
# Remove default configuration from Nginx
|
||||
RUN rm /etc/nginx/conf.d/default.conf
|
||||
# Copy the base uWSGI ini file to enable default dynamic uwsgi process number
|
||||
COPY uwsgi.ini /etc/uwsgi/
|
||||
|
||||
# Install Supervisord
|
||||
RUN apt-get update && apt-get install -y supervisor \
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
# Custom Supervisord config
|
||||
COPY supervisord-debian.conf /etc/supervisor/conf.d/supervisord.conf
|
||||
|
||||
# Which uWSGI .ini file should be used, to make it customizable
|
||||
ENV UWSGI_INI /app/uwsgi.ini
|
||||
|
||||
# By default, run 2 processes
|
||||
ENV UWSGI_CHEAPER 2
|
||||
|
||||
# By default, when on demand, run up to 16 processes
|
||||
ENV UWSGI_PROCESSES 16
|
||||
|
||||
# By default, allow unlimited file sizes, modify it to limit the file sizes
|
||||
# To have a maximum of 1 MB (Nginx's default) change the line to:
|
||||
# ENV NGINX_MAX_UPLOAD 1m
|
||||
ENV NGINX_MAX_UPLOAD 0
|
||||
|
||||
# By default, Nginx will run a single worker process, setting it to auto
|
||||
# will create a worker for each CPU core
|
||||
ENV NGINX_WORKER_PROCESSES 1
|
||||
|
||||
# By default, Nginx listens on port 80.
|
||||
# To modify this, change LISTEN_PORT environment variable.
|
||||
# (in a Dockerfile or with an option for `docker run`)
|
||||
ENV LISTEN_PORT 80
|
||||
|
||||
# Copy start.sh script that will check for a /app/prestart.sh script and run it before starting the app
|
||||
COPY start.sh /start.sh
|
||||
RUN chmod +x /start.sh
|
||||
|
||||
# Copy the entrypoint that will generate Nginx additional configs
|
||||
COPY entrypoint.sh /entrypoint.sh
|
||||
RUN chmod +x /entrypoint.sh
|
||||
|
||||
ENTRYPOINT ["/entrypoint.sh"]
|
||||
|
||||
# Add demo app
|
||||
COPY ./app /app
|
||||
WORKDIR /app
|
||||
|
||||
# Run the start script, it will check for an /app/prestart.sh script (e.g. for migrations)
|
||||
# And then will start Supervisor, which in turn will start Nginx and uWSGI
|
||||
CMD ["/start.sh"]
|
||||
15
base/python/3.7-buster-uwsgi-nginx/README.md
Normal file
15
base/python/3.7-buster-uwsgi-nginx/README.md
Normal file
@@ -0,0 +1,15 @@
|
||||
# uwsgi-nginx
|
||||
|
||||
GitHub [stilleshan/dockerfiles](https://github.com/stilleshan/dockerfiles)
|
||||
Docker [stilleshan/uwsgi-nginx](https://hub.docker.com/r/stilleshan/uwsgi-nginx)
|
||||
> *docker image support for X86 and ARM*
|
||||
|
||||
## 简介
|
||||
基于 uwsgi 和 nginx 环境的 docker 镜像.
|
||||
|
||||
## 更新
|
||||
**2021-06-09** 更新`python3.7`版 docker 镜像,新增同时支持 X86 和 ARM 架构.
|
||||
|
||||
## 参考
|
||||
GitHub [tiangolo/uwsgi-nginx-docker](https://github.com/tiangolo/uwsgi-nginx-docker)
|
||||
|
||||
10
base/python/3.7-buster-uwsgi-nginx/app/main.py
Normal file
10
base/python/3.7-buster-uwsgi-nginx/app/main.py
Normal file
@@ -0,0 +1,10 @@
|
||||
import sys
|
||||
|
||||
|
||||
def application(env, start_response):
|
||||
version = "{}.{}".format(sys.version_info.major, sys.version_info.minor)
|
||||
start_response("200 OK", [("Content-Type", "text/plain")])
|
||||
message = "Hello World from a default Nginx uWSGI Python {} app in a Docker container (default)".format(
|
||||
version
|
||||
)
|
||||
return [message.encode("utf-8")]
|
||||
12
base/python/3.7-buster-uwsgi-nginx/app/prestart.sh
Normal file
12
base/python/3.7-buster-uwsgi-nginx/app/prestart.sh
Normal file
@@ -0,0 +1,12 @@
|
||||
#! /usr/bin/env sh
|
||||
|
||||
echo "Running inside /app/prestart.sh, you could add migrations to this file, e.g.:"
|
||||
|
||||
echo "
|
||||
#! /usr/bin/env bash
|
||||
|
||||
# Let the DB start
|
||||
sleep 10;
|
||||
# Run migrations
|
||||
alembic upgrade head
|
||||
"
|
||||
2
base/python/3.7-buster-uwsgi-nginx/app/uwsgi.ini
Normal file
2
base/python/3.7-buster-uwsgi-nginx/app/uwsgi.ini
Normal file
@@ -0,0 +1,2 @@
|
||||
[uwsgi]
|
||||
wsgi-file=/app/main.py
|
||||
70
base/python/3.7-buster-uwsgi-nginx/entrypoint.sh
Normal file
70
base/python/3.7-buster-uwsgi-nginx/entrypoint.sh
Normal file
@@ -0,0 +1,70 @@
|
||||
#!/usr/bin/env sh
|
||||
set -e
|
||||
|
||||
# Get the maximum upload file size for Nginx, default to 0: unlimited
|
||||
USE_NGINX_MAX_UPLOAD=${NGINX_MAX_UPLOAD:-0}
|
||||
|
||||
# Get the number of workers for Nginx, default to 1
|
||||
USE_NGINX_WORKER_PROCESSES=${NGINX_WORKER_PROCESSES:-1}
|
||||
|
||||
# Set the max number of connections per worker for Nginx, if requested
|
||||
# Cannot exceed worker_rlimit_nofile, see NGINX_WORKER_OPEN_FILES below
|
||||
NGINX_WORKER_CONNECTIONS=${NGINX_WORKER_CONNECTIONS:-1024}
|
||||
|
||||
# Get the listen port for Nginx, default to 80
|
||||
USE_LISTEN_PORT=${LISTEN_PORT:-80}
|
||||
|
||||
if [ -f /app/nginx.conf ]; then
|
||||
cp /app/nginx.conf /etc/nginx/nginx.conf
|
||||
else
|
||||
content='user nginx;\n'
|
||||
# Set the number of worker processes in Nginx
|
||||
content=$content"worker_processes ${USE_NGINX_WORKER_PROCESSES};\n"
|
||||
content=$content'error_log /var/log/nginx/error.log warn;\n'
|
||||
content=$content'pid /var/run/nginx.pid;\n'
|
||||
content=$content'events {\n'
|
||||
content=$content" worker_connections ${NGINX_WORKER_CONNECTIONS};\n"
|
||||
content=$content'}\n'
|
||||
content=$content'http {\n'
|
||||
content=$content' include /etc/nginx/mime.types;\n'
|
||||
content=$content' default_type application/octet-stream;\n'
|
||||
content=$content' log_format main '"'\$remote_addr - \$remote_user [\$time_local] \"\$request\" '\n"
|
||||
content=$content' '"'\$status \$body_bytes_sent \"\$http_referer\" '\n"
|
||||
content=$content' '"'\"\$http_user_agent\" \"\$http_x_forwarded_for\"';\n"
|
||||
content=$content' access_log /var/log/nginx/access.log main;\n'
|
||||
content=$content' sendfile on;\n'
|
||||
content=$content' keepalive_timeout 65;\n'
|
||||
content=$content' include /etc/nginx/conf.d/*.conf;\n'
|
||||
content=$content'}\n'
|
||||
content=$content'daemon off;\n'
|
||||
# Set the max number of open file descriptors for Nginx workers, if requested
|
||||
if [ -n "${NGINX_WORKER_OPEN_FILES}" ] ; then
|
||||
content=$content"worker_rlimit_nofile ${NGINX_WORKER_OPEN_FILES};\n"
|
||||
fi
|
||||
# Save generated /etc/nginx/nginx.conf
|
||||
printf "$content" > /etc/nginx/nginx.conf
|
||||
|
||||
content_server='server {\n'
|
||||
content_server=$content_server" listen ${USE_LISTEN_PORT};\n"
|
||||
content_server=$content_server' location / {\n'
|
||||
content_server=$content_server' include uwsgi_params;\n'
|
||||
content_server=$content_server' uwsgi_pass unix:///tmp/uwsgi.sock;\n'
|
||||
content_server=$content_server' }\n'
|
||||
content_server=$content_server'}\n'
|
||||
# Save generated server /etc/nginx/conf.d/nginx.conf
|
||||
printf "$content_server" > /etc/nginx/conf.d/nginx.conf
|
||||
|
||||
# Generate Nginx config for maximum upload file size
|
||||
printf "client_max_body_size $USE_NGINX_MAX_UPLOAD;\n" > /etc/nginx/conf.d/upload.conf
|
||||
|
||||
# Remove default Nginx config from Alpine
|
||||
printf "" > /etc/nginx/conf.d/default.conf
|
||||
fi
|
||||
|
||||
# For Alpine:
|
||||
# Explicitly add installed Python packages and uWSGI Python packages to PYTHONPATH
|
||||
# Otherwise uWSGI can't import Flask
|
||||
if [ -n "$ALPINEPYTHON" ] ; then
|
||||
export PYTHONPATH=$PYTHONPATH:/usr/local/lib/$ALPINEPYTHON/site-packages:/usr/lib/$ALPINEPYTHON/site-packages
|
||||
fi
|
||||
exec "$@"
|
||||
95
base/python/3.7-buster-uwsgi-nginx/install-nginx-alpine.sh
Normal file
95
base/python/3.7-buster-uwsgi-nginx/install-nginx-alpine.sh
Normal file
@@ -0,0 +1,95 @@
|
||||
#! /usr/bin/env sh
|
||||
|
||||
# From official Nginx Docker image, as a script to re-use it, removing internal comments
|
||||
|
||||
# Standard set up Nginx Alpine
|
||||
# https://github.com/nginxinc/docker-nginx/blob/594ce7a8bc26c85af88495ac94d5cd0096b306f7/mainline/alpine/Dockerfile
|
||||
|
||||
export NGINX_VERSION=1.17.10
|
||||
export NJS_VERSION=0.3.9
|
||||
export PKG_RELEASE=1
|
||||
|
||||
set -x \
|
||||
&& apkArch="$(cat /etc/apk/arch)" \
|
||||
&& nginxPackages=" \
|
||||
nginx=${NGINX_VERSION}-r${PKG_RELEASE} \
|
||||
nginx-module-xslt=${NGINX_VERSION}-r${PKG_RELEASE} \
|
||||
nginx-module-geoip=${NGINX_VERSION}-r${PKG_RELEASE} \
|
||||
nginx-module-image-filter=${NGINX_VERSION}-r${PKG_RELEASE} \
|
||||
nginx-module-njs=${NGINX_VERSION}.${NJS_VERSION}-r${PKG_RELEASE} \
|
||||
" \
|
||||
&& case "$apkArch" in \
|
||||
x86_64) \
|
||||
set -x \
|
||||
&& KEY_SHA512="e7fa8303923d9b95db37a77ad46c68fd4755ff935d0a534d26eba83de193c76166c68bfe7f65471bf8881004ef4aa6df3e34689c305662750c0172fca5d8552a *stdin" \
|
||||
&& apk add --no-cache --virtual .cert-deps \
|
||||
openssl \
|
||||
&& wget -O /tmp/nginx_signing.rsa.pub https://nginx.org/keys/nginx_signing.rsa.pub \
|
||||
&& if [ "$(openssl rsa -pubin -in /tmp/nginx_signing.rsa.pub -text -noout | openssl sha512 -r)" = "$KEY_SHA512" ]; then \
|
||||
echo "key verification succeeded!"; \
|
||||
mv /tmp/nginx_signing.rsa.pub /etc/apk/keys/; \
|
||||
else \
|
||||
echo "key verification failed!"; \
|
||||
exit 1; \
|
||||
fi \
|
||||
&& apk del .cert-deps \
|
||||
&& apk add -X "https://nginx.org/packages/mainline/alpine/v$(egrep -o '^[0-9]+\.[0-9]+' /etc/alpine-release)/main" --no-cache $nginxPackages \
|
||||
;; \
|
||||
*) \
|
||||
set -x \
|
||||
&& tempDir="$(mktemp -d)" \
|
||||
&& chown nobody:nobody $tempDir \
|
||||
&& apk add --no-cache --virtual .build-deps \
|
||||
gcc \
|
||||
libc-dev \
|
||||
make \
|
||||
openssl-dev \
|
||||
pcre-dev \
|
||||
zlib-dev \
|
||||
linux-headers \
|
||||
libxslt-dev \
|
||||
gd-dev \
|
||||
geoip-dev \
|
||||
perl-dev \
|
||||
libedit-dev \
|
||||
mercurial \
|
||||
bash \
|
||||
alpine-sdk \
|
||||
findutils \
|
||||
&& su nobody -s /bin/sh -c " \
|
||||
export HOME=${tempDir} \
|
||||
&& cd ${tempDir} \
|
||||
&& hg clone https://hg.nginx.org/pkg-oss \
|
||||
&& cd pkg-oss \
|
||||
&& hg up ${NGINX_VERSION}-${PKG_RELEASE} \
|
||||
&& cd alpine \
|
||||
&& make all \
|
||||
&& apk index -o ${tempDir}/packages/alpine/${apkArch}/APKINDEX.tar.gz ${tempDir}/packages/alpine/${apkArch}/*.apk \
|
||||
&& abuild-sign -k ${tempDir}/.abuild/abuild-key.rsa ${tempDir}/packages/alpine/${apkArch}/APKINDEX.tar.gz \
|
||||
" \
|
||||
&& cp ${tempDir}/.abuild/abuild-key.rsa.pub /etc/apk/keys/ \
|
||||
&& apk del .build-deps \
|
||||
&& apk add -X ${tempDir}/packages/alpine/ --no-cache $nginxPackages \
|
||||
;; \
|
||||
esac \
|
||||
&& if [ -n "$tempDir" ]; then rm -rf "$tempDir"; fi \
|
||||
&& if [ -n "/etc/apk/keys/abuild-key.rsa.pub" ]; then rm -f /etc/apk/keys/abuild-key.rsa.pub; fi \
|
||||
&& if [ -n "/etc/apk/keys/nginx_signing.rsa.pub" ]; then rm -f /etc/apk/keys/nginx_signing.rsa.pub; fi \
|
||||
&& apk add --no-cache --virtual .gettext gettext \
|
||||
&& mv /usr/bin/envsubst /tmp/ \
|
||||
\
|
||||
&& runDeps="$( \
|
||||
scanelf --needed --nobanner /tmp/envsubst \
|
||||
| awk '{ gsub(/,/, "\nso:", $2); print "so:" $2 }' \
|
||||
| sort -u \
|
||||
| xargs -r apk info --installed \
|
||||
| sort -u \
|
||||
)" \
|
||||
&& apk add --no-cache $runDeps \
|
||||
&& apk del .gettext \
|
||||
&& mv /tmp/envsubst /usr/local/bin/ \
|
||||
&& apk add --no-cache tzdata \
|
||||
&& ln -sf /dev/stdout /var/log/nginx/access.log \
|
||||
&& ln -sf /dev/stderr /var/log/nginx/error.log
|
||||
|
||||
# Standard set up Nginx finished
|
||||
81
base/python/3.7-buster-uwsgi-nginx/install-nginx-debian.sh
Normal file
81
base/python/3.7-buster-uwsgi-nginx/install-nginx-debian.sh
Normal file
@@ -0,0 +1,81 @@
|
||||
#! /usr/bin/env bash
|
||||
|
||||
# From official Nginx Docker image, as a script to re-use it, removing internal comments
|
||||
# Ref: https://github.com/nginxinc/docker-nginx/blob/594ce7a8bc26c85af88495ac94d5cd0096b306f7/mainline/buster/Dockerfile
|
||||
|
||||
# Standard set up Nginx
|
||||
export NGINX_VERSION=1.17.10
|
||||
export NJS_VERSION=0.3.9
|
||||
export PKG_RELEASE=1~buster
|
||||
|
||||
set -x \
|
||||
&& apt-get update \
|
||||
&& apt-get install --no-install-recommends --no-install-suggests -y gnupg1 ca-certificates \
|
||||
&& \
|
||||
NGINX_GPGKEY=573BFD6B3D8FBC641079A6ABABF5BD827BD9BF62; \
|
||||
found=''; \
|
||||
for server in \
|
||||
ha.pool.sks-keyservers.net \
|
||||
hkp://keyserver.ubuntu.com:80 \
|
||||
hkp://p80.pool.sks-keyservers.net:80 \
|
||||
pgp.mit.edu \
|
||||
; do \
|
||||
echo "Fetching GPG key $NGINX_GPGKEY from $server"; \
|
||||
apt-key adv --keyserver "$server" --keyserver-options timeout=10 --recv-keys "$NGINX_GPGKEY" && found=yes && break; \
|
||||
done; \
|
||||
test -z "$found" && echo >&2 "error: failed to fetch GPG key $NGINX_GPGKEY" && exit 1; \
|
||||
apt-get remove --purge --auto-remove -y gnupg1 && rm -rf /var/lib/apt/lists/* \
|
||||
&& dpkgArch="$(dpkg --print-architecture)" \
|
||||
&& nginxPackages=" \
|
||||
nginx=${NGINX_VERSION}-${PKG_RELEASE} \
|
||||
nginx-module-xslt=${NGINX_VERSION}-${PKG_RELEASE} \
|
||||
nginx-module-geoip=${NGINX_VERSION}-${PKG_RELEASE} \
|
||||
nginx-module-image-filter=${NGINX_VERSION}-${PKG_RELEASE} \
|
||||
nginx-module-njs=${NGINX_VERSION}.${NJS_VERSION}-${PKG_RELEASE} \
|
||||
" \
|
||||
&& case "$dpkgArch" in \
|
||||
amd64|i386) \
|
||||
echo "deb https://nginx.org/packages/mainline/debian/ buster nginx" >> /etc/apt/sources.list.d/nginx.list \
|
||||
&& apt-get update \
|
||||
;; \
|
||||
*) \
|
||||
echo "deb-src https://nginx.org/packages/mainline/debian/ buster nginx" >> /etc/apt/sources.list.d/nginx.list \
|
||||
\
|
||||
&& tempDir="$(mktemp -d)" \
|
||||
&& chmod 777 "$tempDir" \
|
||||
\
|
||||
&& savedAptMark="$(apt-mark showmanual)" \
|
||||
\
|
||||
&& apt-get update \
|
||||
&& apt-get build-dep -y $nginxPackages \
|
||||
&& ( \
|
||||
cd "$tempDir" \
|
||||
&& DEB_BUILD_OPTIONS="nocheck parallel=$(nproc)" \
|
||||
apt-get source --compile $nginxPackages \
|
||||
) \
|
||||
\
|
||||
&& apt-mark showmanual | xargs apt-mark auto > /dev/null \
|
||||
&& { [ -z "$savedAptMark" ] || apt-mark manual $savedAptMark; } \
|
||||
\
|
||||
&& ls -lAFh "$tempDir" \
|
||||
&& ( cd "$tempDir" && dpkg-scanpackages . > Packages ) \
|
||||
&& grep '^Package: ' "$tempDir/Packages" \
|
||||
&& echo "deb [ trusted=yes ] file://$tempDir ./" > /etc/apt/sources.list.d/temp.list \
|
||||
&& apt-get -o Acquire::GzipIndexes=false update \
|
||||
;; \
|
||||
esac \
|
||||
\
|
||||
&& apt-get install --no-install-recommends --no-install-suggests -y \
|
||||
$nginxPackages \
|
||||
gettext-base \
|
||||
&& apt-get remove --purge --auto-remove -y ca-certificates && rm -rf /var/lib/apt/lists/* /etc/apt/sources.list.d/nginx.list \
|
||||
\
|
||||
&& if [ -n "$tempDir" ]; then \
|
||||
apt-get purge -y --auto-remove \
|
||||
&& rm -rf "$tempDir" /etc/apt/sources.list.d/temp.list; \
|
||||
fi
|
||||
|
||||
# forward request and error logs to docker log collector
|
||||
ln -sf /dev/stdout /var/log/nginx/access.log \
|
||||
&& ln -sf /dev/stderr /var/log/nginx/error.log
|
||||
# Standard set up Nginx finished
|
||||
67
base/python/3.7-buster-uwsgi-nginx/python2.7.dockerfile
Normal file
67
base/python/3.7-buster-uwsgi-nginx/python2.7.dockerfile
Normal file
@@ -0,0 +1,67 @@
|
||||
FROM python:2.7-buster
|
||||
|
||||
LABEL maintainer="Sebastian Ramirez <tiangolo@gmail.com>"
|
||||
|
||||
COPY install-nginx-debian.sh /
|
||||
|
||||
RUN bash /install-nginx-debian.sh
|
||||
|
||||
EXPOSE 80
|
||||
|
||||
# Expose 443, in case of LTS / HTTPS
|
||||
EXPOSE 443
|
||||
|
||||
# Install uWSGI
|
||||
RUN pip install uwsgi
|
||||
|
||||
# Remove default configuration from Nginx
|
||||
RUN rm /etc/nginx/conf.d/default.conf
|
||||
# Copy the base uWSGI ini file to enable default dynamic uwsgi process number
|
||||
COPY uwsgi.ini /etc/uwsgi/
|
||||
|
||||
# Install Supervisord
|
||||
RUN apt-get update && apt-get install -y supervisor \
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
# Custom Supervisord config
|
||||
COPY supervisord-debian.conf /etc/supervisor/conf.d/supervisord.conf
|
||||
|
||||
# Which uWSGI .ini file should be used, to make it customizable
|
||||
ENV UWSGI_INI /app/uwsgi.ini
|
||||
|
||||
# By default, run 2 processes
|
||||
ENV UWSGI_CHEAPER 2
|
||||
|
||||
# By default, when on demand, run up to 16 processes
|
||||
ENV UWSGI_PROCESSES 16
|
||||
|
||||
# By default, allow unlimited file sizes, modify it to limit the file sizes
|
||||
# To have a maximum of 1 MB (Nginx's default) change the line to:
|
||||
# ENV NGINX_MAX_UPLOAD 1m
|
||||
ENV NGINX_MAX_UPLOAD 0
|
||||
|
||||
# By default, Nginx will run a single worker process, setting it to auto
|
||||
# will create a worker for each CPU core
|
||||
ENV NGINX_WORKER_PROCESSES 1
|
||||
|
||||
# By default, Nginx listens on port 80.
|
||||
# To modify this, change LISTEN_PORT environment variable.
|
||||
# (in a Dockerfile or with an option for `docker run`)
|
||||
ENV LISTEN_PORT 80
|
||||
|
||||
# Copy start.sh script that will check for a /app/prestart.sh script and run it before starting the app
|
||||
COPY start.sh /start.sh
|
||||
RUN chmod +x /start.sh
|
||||
|
||||
# Copy the entrypoint that will generate Nginx additional configs
|
||||
COPY entrypoint.sh /entrypoint.sh
|
||||
RUN chmod +x /entrypoint.sh
|
||||
|
||||
ENTRYPOINT ["/entrypoint.sh"]
|
||||
|
||||
# Add demo app
|
||||
COPY ./app /app
|
||||
WORKDIR /app
|
||||
|
||||
# Run the start script, it will check for an /app/prestart.sh script (e.g. for migrations)
|
||||
# And then will start Supervisor, which in turn will start Nginx and uWSGI
|
||||
CMD ["/start.sh"]
|
||||
67
base/python/3.7-buster-uwsgi-nginx/python3.6.dockerfile
Normal file
67
base/python/3.7-buster-uwsgi-nginx/python3.6.dockerfile
Normal file
@@ -0,0 +1,67 @@
|
||||
FROM python:3.6-buster
|
||||
|
||||
LABEL maintainer="Sebastian Ramirez <tiangolo@gmail.com>"
|
||||
|
||||
COPY install-nginx-debian.sh /
|
||||
|
||||
RUN bash /install-nginx-debian.sh
|
||||
|
||||
EXPOSE 80
|
||||
|
||||
# Expose 443, in case of LTS / HTTPS
|
||||
EXPOSE 443
|
||||
|
||||
# Install uWSGI
|
||||
RUN pip install uwsgi
|
||||
|
||||
# Remove default configuration from Nginx
|
||||
RUN rm /etc/nginx/conf.d/default.conf
|
||||
# Copy the base uWSGI ini file to enable default dynamic uwsgi process number
|
||||
COPY uwsgi.ini /etc/uwsgi/
|
||||
|
||||
# Install Supervisord
|
||||
RUN apt-get update && apt-get install -y supervisor \
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
# Custom Supervisord config
|
||||
COPY supervisord-debian.conf /etc/supervisor/conf.d/supervisord.conf
|
||||
|
||||
# Which uWSGI .ini file should be used, to make it customizable
|
||||
ENV UWSGI_INI /app/uwsgi.ini
|
||||
|
||||
# By default, run 2 processes
|
||||
ENV UWSGI_CHEAPER 2
|
||||
|
||||
# By default, when on demand, run up to 16 processes
|
||||
ENV UWSGI_PROCESSES 16
|
||||
|
||||
# By default, allow unlimited file sizes, modify it to limit the file sizes
|
||||
# To have a maximum of 1 MB (Nginx's default) change the line to:
|
||||
# ENV NGINX_MAX_UPLOAD 1m
|
||||
ENV NGINX_MAX_UPLOAD 0
|
||||
|
||||
# By default, Nginx will run a single worker process, setting it to auto
|
||||
# will create a worker for each CPU core
|
||||
ENV NGINX_WORKER_PROCESSES 1
|
||||
|
||||
# By default, Nginx listens on port 80.
|
||||
# To modify this, change LISTEN_PORT environment variable.
|
||||
# (in a Dockerfile or with an option for `docker run`)
|
||||
ENV LISTEN_PORT 80
|
||||
|
||||
# Copy start.sh script that will check for a /app/prestart.sh script and run it before starting the app
|
||||
COPY start.sh /start.sh
|
||||
RUN chmod +x /start.sh
|
||||
|
||||
# Copy the entrypoint that will generate Nginx additional configs
|
||||
COPY entrypoint.sh /entrypoint.sh
|
||||
RUN chmod +x /entrypoint.sh
|
||||
|
||||
ENTRYPOINT ["/entrypoint.sh"]
|
||||
|
||||
# Add demo app
|
||||
COPY ./app /app
|
||||
WORKDIR /app
|
||||
|
||||
# Run the start script, it will check for an /app/prestart.sh script (e.g. for migrations)
|
||||
# And then will start Supervisor, which in turn will start Nginx and uWSGI
|
||||
CMD ["/start.sh"]
|
||||
67
base/python/3.7-buster-uwsgi-nginx/python3.7.dockerfile
Normal file
67
base/python/3.7-buster-uwsgi-nginx/python3.7.dockerfile
Normal file
@@ -0,0 +1,67 @@
|
||||
FROM python:3.7-buster
|
||||
|
||||
LABEL maintainer="Sebastian Ramirez <tiangolo@gmail.com>"
|
||||
|
||||
COPY install-nginx-debian.sh /
|
||||
|
||||
RUN bash /install-nginx-debian.sh
|
||||
|
||||
EXPOSE 80
|
||||
|
||||
# Expose 443, in case of LTS / HTTPS
|
||||
EXPOSE 443
|
||||
|
||||
# Install uWSGI
|
||||
RUN pip install uwsgi
|
||||
|
||||
# Remove default configuration from Nginx
|
||||
RUN rm /etc/nginx/conf.d/default.conf
|
||||
# Copy the base uWSGI ini file to enable default dynamic uwsgi process number
|
||||
COPY uwsgi.ini /etc/uwsgi/
|
||||
|
||||
# Install Supervisord
|
||||
RUN apt-get update && apt-get install -y supervisor \
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
# Custom Supervisord config
|
||||
COPY supervisord-debian.conf /etc/supervisor/conf.d/supervisord.conf
|
||||
|
||||
# Which uWSGI .ini file should be used, to make it customizable
|
||||
ENV UWSGI_INI /app/uwsgi.ini
|
||||
|
||||
# By default, run 2 processes
|
||||
ENV UWSGI_CHEAPER 2
|
||||
|
||||
# By default, when on demand, run up to 16 processes
|
||||
ENV UWSGI_PROCESSES 16
|
||||
|
||||
# By default, allow unlimited file sizes, modify it to limit the file sizes
|
||||
# To have a maximum of 1 MB (Nginx's default) change the line to:
|
||||
# ENV NGINX_MAX_UPLOAD 1m
|
||||
ENV NGINX_MAX_UPLOAD 0
|
||||
|
||||
# By default, Nginx will run a single worker process, setting it to auto
|
||||
# will create a worker for each CPU core
|
||||
ENV NGINX_WORKER_PROCESSES 1
|
||||
|
||||
# By default, Nginx listens on port 80.
|
||||
# To modify this, change LISTEN_PORT environment variable.
|
||||
# (in a Dockerfile or with an option for `docker run`)
|
||||
ENV LISTEN_PORT 80
|
||||
|
||||
# Copy start.sh script that will check for a /app/prestart.sh script and run it before starting the app
|
||||
COPY start.sh /start.sh
|
||||
RUN chmod +x /start.sh
|
||||
|
||||
# Copy the entrypoint that will generate Nginx additional configs
|
||||
COPY entrypoint.sh /entrypoint.sh
|
||||
RUN chmod +x /entrypoint.sh
|
||||
|
||||
ENTRYPOINT ["/entrypoint.sh"]
|
||||
|
||||
# Add demo app
|
||||
COPY ./app /app
|
||||
WORKDIR /app
|
||||
|
||||
# Run the start script, it will check for an /app/prestart.sh script (e.g. for migrations)
|
||||
# And then will start Supervisor, which in turn will start Nginx and uWSGI
|
||||
CMD ["/start.sh"]
|
||||
@@ -0,0 +1,72 @@
|
||||
FROM python:3.8-alpine3.11
|
||||
|
||||
LABEL maintainer="Sebastian Ramirez <tiangolo@gmail.com>"
|
||||
|
||||
COPY install-nginx-alpine.sh /
|
||||
|
||||
RUN sh /install-nginx-alpine.sh
|
||||
|
||||
EXPOSE 80
|
||||
|
||||
# # Expose 443, in case of LTS / HTTPS
|
||||
EXPOSE 443
|
||||
|
||||
# Install uWSGI
|
||||
RUN apk add --no-cache uwsgi-python3
|
||||
|
||||
# Copy the base uWSGI ini file to enable default dynamic uwsgi process number
|
||||
COPY uwsgi.ini /etc/uwsgi/
|
||||
|
||||
# Install Supervisord
|
||||
RUN apk add --no-cache supervisor
|
||||
# Custom Supervisord config
|
||||
COPY supervisord-alpine.ini /etc/supervisor.d/supervisord.ini
|
||||
|
||||
# uWSGI Python plugin
|
||||
# As an env var to re-use the config file
|
||||
ENV UWSGI_PLUGIN python3
|
||||
|
||||
# Which uWSGI .ini file should be used, to make it customizable
|
||||
ENV UWSGI_INI /app/uwsgi.ini
|
||||
|
||||
# By default, run 2 processes
|
||||
ENV UWSGI_CHEAPER 2
|
||||
|
||||
# By default, when on demand, run up to 16 processes
|
||||
ENV UWSGI_PROCESSES 16
|
||||
|
||||
# By default, allow unlimited file sizes, modify it to limit the file sizes
|
||||
# To have a maximum of 1 MB (Nginx's default) change the line to:
|
||||
# ENV NGINX_MAX_UPLOAD 1m
|
||||
ENV NGINX_MAX_UPLOAD 0
|
||||
|
||||
# By default, Nginx will run a single worker process, setting it to auto
|
||||
# will create a worker for each CPU core
|
||||
ENV NGINX_WORKER_PROCESSES 1
|
||||
|
||||
# By default, Nginx listens on port 80.
|
||||
# To modify this, change LISTEN_PORT environment variable.
|
||||
# (in a Dockerfile or with an option for `docker run`)
|
||||
ENV LISTEN_PORT 80
|
||||
|
||||
# Used by the entrypoint to explicitly add installed Python packages
|
||||
# and uWSGI Python packages to PYTHONPATH otherwise uWSGI can't import Flask
|
||||
ENV ALPINEPYTHON python3.8
|
||||
|
||||
# Copy start.sh script that will check for a /app/prestart.sh script and run it before starting the app
|
||||
COPY start.sh /start.sh
|
||||
RUN chmod +x /start.sh
|
||||
|
||||
# Copy the entrypoint that will generate Nginx additional configs
|
||||
COPY entrypoint.sh /entrypoint.sh
|
||||
RUN chmod +x /entrypoint.sh
|
||||
|
||||
ENTRYPOINT ["sh", "/entrypoint.sh"]
|
||||
|
||||
# Add demo app
|
||||
COPY ./app /app
|
||||
WORKDIR /app
|
||||
|
||||
# Run the start script, it will check for an /app/prestart.sh script (e.g. for migrations)
|
||||
# And then will start Supervisor, which in turn will start Nginx and uWSGI
|
||||
CMD ["/start.sh"]
|
||||
67
base/python/3.7-buster-uwsgi-nginx/python3.8.dockerfile
Normal file
67
base/python/3.7-buster-uwsgi-nginx/python3.8.dockerfile
Normal file
@@ -0,0 +1,67 @@
|
||||
FROM python:3.8-buster
|
||||
|
||||
LABEL maintainer="Sebastian Ramirez <tiangolo@gmail.com>"
|
||||
|
||||
COPY install-nginx-debian.sh /
|
||||
|
||||
RUN bash /install-nginx-debian.sh
|
||||
|
||||
EXPOSE 80
|
||||
|
||||
# Expose 443, in case of LTS / HTTPS
|
||||
EXPOSE 443
|
||||
|
||||
# Install uWSGI
|
||||
RUN pip install uwsgi
|
||||
|
||||
# Remove default configuration from Nginx
|
||||
RUN rm /etc/nginx/conf.d/default.conf
|
||||
# Copy the base uWSGI ini file to enable default dynamic uwsgi process number
|
||||
COPY uwsgi.ini /etc/uwsgi/
|
||||
|
||||
# Install Supervisord
|
||||
RUN apt-get update && apt-get install -y supervisor \
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
# Custom Supervisord config
|
||||
COPY supervisord-debian.conf /etc/supervisor/conf.d/supervisord.conf
|
||||
|
||||
# Which uWSGI .ini file should be used, to make it customizable
|
||||
ENV UWSGI_INI /app/uwsgi.ini
|
||||
|
||||
# By default, run 2 processes
|
||||
ENV UWSGI_CHEAPER 2
|
||||
|
||||
# By default, when on demand, run up to 16 processes
|
||||
ENV UWSGI_PROCESSES 16
|
||||
|
||||
# By default, allow unlimited file sizes, modify it to limit the file sizes
|
||||
# To have a maximum of 1 MB (Nginx's default) change the line to:
|
||||
# ENV NGINX_MAX_UPLOAD 1m
|
||||
ENV NGINX_MAX_UPLOAD 0
|
||||
|
||||
# By default, Nginx will run a single worker process, setting it to auto
|
||||
# will create a worker for each CPU core
|
||||
ENV NGINX_WORKER_PROCESSES 1
|
||||
|
||||
# By default, Nginx listens on port 80.
|
||||
# To modify this, change LISTEN_PORT environment variable.
|
||||
# (in a Dockerfile or with an option for `docker run`)
|
||||
ENV LISTEN_PORT 80
|
||||
|
||||
# Copy start.sh script that will check for a /app/prestart.sh script and run it before starting the app
|
||||
COPY start.sh /start.sh
|
||||
RUN chmod +x /start.sh
|
||||
|
||||
# Copy the entrypoint that will generate Nginx additional configs
|
||||
COPY entrypoint.sh /entrypoint.sh
|
||||
RUN chmod +x /entrypoint.sh
|
||||
|
||||
ENTRYPOINT ["/entrypoint.sh"]
|
||||
|
||||
# Add demo app
|
||||
COPY ./app /app
|
||||
WORKDIR /app
|
||||
|
||||
# Run the start script, it will check for an /app/prestart.sh script (e.g. for migrations)
|
||||
# And then will start Supervisor, which in turn will start Nginx and uWSGI
|
||||
CMD ["/start.sh"]
|
||||
15
base/python/3.7-buster-uwsgi-nginx/start.sh
Normal file
15
base/python/3.7-buster-uwsgi-nginx/start.sh
Normal file
@@ -0,0 +1,15 @@
|
||||
#! /usr/bin/env sh
|
||||
set -e
|
||||
|
||||
# If there's a prestart.sh script in the /app directory, run it before starting
|
||||
PRE_START_PATH=/app/prestart.sh
|
||||
echo "Checking for script in $PRE_START_PATH"
|
||||
if [ -f $PRE_START_PATH ] ; then
|
||||
echo "Running script $PRE_START_PATH"
|
||||
. $PRE_START_PATH
|
||||
else
|
||||
echo "There is no script $PRE_START_PATH"
|
||||
fi
|
||||
|
||||
# Start Supervisor, with Nginx and uWSGI
|
||||
exec /usr/bin/supervisord
|
||||
18
base/python/3.7-buster-uwsgi-nginx/supervisord-alpine.ini
Normal file
18
base/python/3.7-buster-uwsgi-nginx/supervisord-alpine.ini
Normal file
@@ -0,0 +1,18 @@
|
||||
[supervisord]
|
||||
nodaemon=true
|
||||
|
||||
[program:uwsgi]
|
||||
command=/usr/sbin/uwsgi --ini /etc/uwsgi/uwsgi.ini
|
||||
stdout_logfile=/dev/stdout
|
||||
stdout_logfile_maxbytes=0
|
||||
stderr_logfile=/dev/stderr
|
||||
stderr_logfile_maxbytes=0
|
||||
|
||||
[program:nginx]
|
||||
command=/usr/sbin/nginx
|
||||
stdout_logfile=/dev/stdout
|
||||
stdout_logfile_maxbytes=0
|
||||
stderr_logfile=/dev/stderr
|
||||
stderr_logfile_maxbytes=0
|
||||
# Graceful stop, see http://nginx.org/en/docs/control.html
|
||||
stopsignal=QUIT
|
||||
18
base/python/3.7-buster-uwsgi-nginx/supervisord-debian.conf
Normal file
18
base/python/3.7-buster-uwsgi-nginx/supervisord-debian.conf
Normal file
@@ -0,0 +1,18 @@
|
||||
[supervisord]
|
||||
nodaemon=true
|
||||
|
||||
[program:uwsgi]
|
||||
command=/usr/local/bin/uwsgi --ini /etc/uwsgi/uwsgi.ini
|
||||
stdout_logfile=/dev/stdout
|
||||
stdout_logfile_maxbytes=0
|
||||
stderr_logfile=/dev/stderr
|
||||
stderr_logfile_maxbytes=0
|
||||
|
||||
[program:nginx]
|
||||
command=/usr/sbin/nginx
|
||||
stdout_logfile=/dev/stdout
|
||||
stdout_logfile_maxbytes=0
|
||||
stderr_logfile=/dev/stderr
|
||||
stderr_logfile_maxbytes=0
|
||||
# Graceful stop, see http://nginx.org/en/docs/control.html
|
||||
stopsignal=QUIT
|
||||
10
base/python/3.7-buster-uwsgi-nginx/uwsgi.ini
Normal file
10
base/python/3.7-buster-uwsgi-nginx/uwsgi.ini
Normal file
@@ -0,0 +1,10 @@
|
||||
[uwsgi]
|
||||
socket = /tmp/uwsgi.sock
|
||||
chown-socket = nginx:nginx
|
||||
chmod-socket = 664
|
||||
# Graceful shutdown on SIGTERM, see https://github.com/unbit/uwsgi/issues/849#issuecomment-118869386
|
||||
hook-master-start = unix_signal:15 gracefully_kill_them_all
|
||||
need-app = true
|
||||
die-on-term = true
|
||||
# For debugging and testing
|
||||
show-config = true
|
||||
Reference in New Issue
Block a user