From 6a6a311b9cfbd92f565c8e4c889f3bdf220616eb Mon Sep 17 00:00:00 2001 From: Andreas Berthoud Date: Sun, 18 Jul 2021 18:01:55 +0200 Subject: [PATCH] WIP: create Docker image for backend --- backend/.dockerignore | 4 +++ backend/docker-compose.yml | 15 +++++++++++ backend/docker-entrypoint.sh | 5 ++++ backend/dockerfile | 50 ++++++++++++++++++++++++++++++++++++ backend/nginx.conf | 47 +++++++++++++++++++++++++++++++++ backend/uwsgi.ini | 12 +++++++++ 6 files changed, 133 insertions(+) create mode 100644 backend/.dockerignore create mode 100644 backend/docker-compose.yml create mode 100755 backend/docker-entrypoint.sh create mode 100644 backend/dockerfile create mode 100644 backend/nginx.conf create mode 100644 backend/uwsgi.ini diff --git a/backend/.dockerignore b/backend/.dockerignore new file mode 100644 index 0000000..66a3cdf --- /dev/null +++ b/backend/.dockerignore @@ -0,0 +1,4 @@ +**/__pycache__/ +build/ +dist/ +**/*.egg-info diff --git a/backend/docker-compose.yml b/backend/docker-compose.yml new file mode 100644 index 0000000..c6de491 --- /dev/null +++ b/backend/docker-compose.yml @@ -0,0 +1,15 @@ +version: "2" + +services: + monsun_backend: + build: . + container_name: monsun_backend + restart: always + ports: + - 80:80 + volumes: + - ./log:/app/log + - /dev/:/dev/ + command: ["bash", "./docker-entrypoint.sh"] + # devices: + # - "/dev/tty.usbmodem207E3283544E1:/dev/tty.usbmodem207E3283544E1" diff --git a/backend/docker-entrypoint.sh b/backend/docker-entrypoint.sh new file mode 100755 index 0000000..9e57901 --- /dev/null +++ b/backend/docker-entrypoint.sh @@ -0,0 +1,5 @@ +#!/usr/bin/env bash +source /opt/venv/bin/activate + +service nginx start +uwsgi --ini uwsgi.ini diff --git a/backend/dockerfile b/backend/dockerfile new file mode 100644 index 0000000..66a6db3 --- /dev/null +++ b/backend/dockerfile @@ -0,0 +1,50 @@ +# stage 1 +FROM python:3.7-slim-buster as backend-build + +VOLUME /app +WORKDIR /app + +RUN apt-get update \ + && apt-get -y install python3-dev \ + && apt-get -y install build-essential + # && apt-get -y install libglib2.0-0 \ + # && apt-get -y install libsm6 libxext6 libxrender-dev + +RUN python3 -m venv /opt/venv + +COPY . . + +RUN . /opt/venv/bin/activate \ + && pip install --upgrade setuptools wheel \ + && pip install -r requirements.txt \ + && python setup.py sdist bdist_wheel > build.log \ + && pip install monsun_backend --no-index --find-links file:///app/dist + +# stage 2 +FROM python:3.7-slim-buster + +RUN apt-get update \ + && apt-get -y install nginx \ + && apt-get -y install python3-dev \ + && apt-get -y install build-essential \ + && apt-get -qy install netcat + # && apt-get -y install libglib2.0-0 \ + # && apt-get -y install libsm6 libxext6 libxrender-dev + +# RUN mkdir /data +# VOLUME /data + +VOLUME /app +WORKDIR /app + +COPY --from=backend-build /app/build.log /app/build.log +COPY docker-entrypoint.sh /app/docker-entrypoint.sh +COPY wsgi.py /app/wsgi.py +COPY nginx.conf /etc/nginx +COPY uwsgi.ini /app/uwsgi.ini + +COPY config.yml /app/config.yml + +COPY --from=backend-build /opt/venv /opt/venv + +CMD ["bash", "./docker-entrypoint.sh"] diff --git a/backend/nginx.conf b/backend/nginx.conf new file mode 100644 index 0000000..0c42b0b --- /dev/null +++ b/backend/nginx.conf @@ -0,0 +1,47 @@ +user www-data; +worker_processes auto; +pid /run/nginx.pid; + +events { + worker_connections 1024; + use epoll; + multi_accept on; +} + +http { + access_log /dev/stdout; + error_log /dev/stdout; + + sendfile on; + tcp_nopush on; + tcp_nodelay on; + keepalive_timeout 65; + types_hash_max_size 2048; + + client_max_body_size 20M; + + include /etc/nginx/mime.types; + default_type application/octet-stream; + + index index.html index.htm; + + server { + listen 80 default_server; + listen [::]:80 default_server; + server_name localhost; + root /var/www/html; + + location / { + include uwsgi_params; + uwsgi_pass unix:/tmp/uwsgi.socket; + uwsgi_read_timeout 1h; + uwsgi_send_timeout 1h; + proxy_send_timeout 1h; + proxy_read_timeout 1h; + + proxy_buffer_size 128k; + proxy_buffers 4 256k; + proxy_busy_buffers_size 256k; + } + } +} diff --git a/backend/uwsgi.ini b/backend/uwsgi.ini new file mode 100644 index 0000000..0cefb04 --- /dev/null +++ b/backend/uwsgi.ini @@ -0,0 +1,12 @@ +[uwsgi] +wsgi-file = wsgi.py +uid = www-data +gid = www-data +master = true +processes = 5 + +socket = /tmp/uwsgi.socket +chmod-sock = 664 +vacuum = true + +die-on-term = true \ No newline at end of file