docker: restructure, separate production and development setup
parent
62e2a40d07
commit
0ae03ab9dc
@ -0,0 +1,115 @@
|
|||||||
|
# Byte-compiled / optimized / DLL files
|
||||||
|
__pycache__/
|
||||||
|
*.py[cod]
|
||||||
|
*$py.class
|
||||||
|
|
||||||
|
# C extensions
|
||||||
|
*.so
|
||||||
|
|
||||||
|
# Distribution / packaging
|
||||||
|
.Python
|
||||||
|
env/
|
||||||
|
build/
|
||||||
|
develop-eggs/
|
||||||
|
dist/
|
||||||
|
downloads/
|
||||||
|
eggs/
|
||||||
|
.eggs/
|
||||||
|
lib/
|
||||||
|
lib64/
|
||||||
|
parts/
|
||||||
|
sdist/
|
||||||
|
var/
|
||||||
|
*.egg-info/
|
||||||
|
.installed.cfg
|
||||||
|
*.egg
|
||||||
|
|
||||||
|
# PyInstaller
|
||||||
|
# Usually these files are written by a python script from a template
|
||||||
|
# before PyInstaller builds the exe, so as to inject date/other infos into it.
|
||||||
|
*.manifest
|
||||||
|
*.spec
|
||||||
|
|
||||||
|
# Installer logs
|
||||||
|
pip-log.txt
|
||||||
|
pip-delete-this-directory.txt
|
||||||
|
|
||||||
|
# Unit test / coverage reports
|
||||||
|
htmlcov/
|
||||||
|
.tox/
|
||||||
|
.coverage
|
||||||
|
.coverage.*
|
||||||
|
.cache
|
||||||
|
nosetests.xml
|
||||||
|
coverage.xml
|
||||||
|
*,cover
|
||||||
|
.hypothesis/
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
*.mo
|
||||||
|
*.pot
|
||||||
|
|
||||||
|
# Django stuff:
|
||||||
|
*.log
|
||||||
|
local_settings.py
|
||||||
|
|
||||||
|
# Flask stuff:
|
||||||
|
instance/
|
||||||
|
.webassets-cache
|
||||||
|
|
||||||
|
# Scrapy stuff:
|
||||||
|
.scrapy
|
||||||
|
|
||||||
|
# Sphinx documentation
|
||||||
|
docs/_build/
|
||||||
|
|
||||||
|
# PyBuilder
|
||||||
|
target/
|
||||||
|
|
||||||
|
# IPython Notebook
|
||||||
|
.ipynb_checkpoints
|
||||||
|
|
||||||
|
# pyenv
|
||||||
|
.python-version
|
||||||
|
|
||||||
|
# celery beat schedule file
|
||||||
|
celerybeat-schedule
|
||||||
|
|
||||||
|
# dotenv
|
||||||
|
.env
|
||||||
|
|
||||||
|
# virtualenv
|
||||||
|
venv/
|
||||||
|
ENV/
|
||||||
|
|
||||||
|
# Spyder project settings
|
||||||
|
.spyderproject
|
||||||
|
|
||||||
|
# Rope project settings
|
||||||
|
.ropeproject
|
||||||
|
jdav_web/db.sqlite3
|
||||||
|
*.swp
|
||||||
|
|
||||||
|
# test images for file upload
|
||||||
|
#*.jpeg
|
||||||
|
#*.png
|
||||||
|
jdav_web/media
|
||||||
|
jdav_web/*/migrations
|
||||||
|
*.py.swp
|
||||||
|
|
||||||
|
# django database migrations
|
||||||
|
*/*/migrations/*
|
||||||
|
/static/
|
||||||
|
/media/
|
||||||
|
|
||||||
|
# database configuration
|
||||||
|
jdav_web/my.cnf
|
||||||
|
|
||||||
|
# sass cache
|
||||||
|
jdav_web/static/jet/css/themes/*/.sass-cache/*
|
||||||
|
|
||||||
|
# test config
|
||||||
|
config
|
||||||
|
|
||||||
|
# celerybeat schedule database
|
||||||
|
jdav_web/celerybeat-schedule.db
|
||||||
@ -1,28 +0,0 @@
|
|||||||
version: "3.9"
|
|
||||||
services:
|
|
||||||
nginx:
|
|
||||||
build: ./nginx/
|
|
||||||
restart: always
|
|
||||||
volumes:
|
|
||||||
- uwsgi_data:/tmp/uwsgi/
|
|
||||||
- web_static:/var/www/jdav_web/assets/:ro
|
|
||||||
ports:
|
|
||||||
- "8888:80"
|
|
||||||
depends_on:
|
|
||||||
- django
|
|
||||||
|
|
||||||
django:
|
|
||||||
build: ./jdav_web/
|
|
||||||
env_file: docker.env
|
|
||||||
restart: always
|
|
||||||
command: >
|
|
||||||
sh -c "python manage.py collectstatic --noinput
|
|
||||||
&& uwsgi --ini kompass.uwsgi.ini"
|
|
||||||
volumes:
|
|
||||||
- uwsgi_data:/tmp/uwsgi/
|
|
||||||
- web_static:/code/static/
|
|
||||||
- web_static:/var/www/jdav_web/assets/
|
|
||||||
|
|
||||||
volumes:
|
|
||||||
uwsgi_data:
|
|
||||||
web_static:
|
|
||||||
@ -1,18 +0,0 @@
|
|||||||
DJANGO_ALLOWED_HOST='*'
|
|
||||||
DJANGO_BASE_URL='localhost:8008'
|
|
||||||
DJANGO_PROTOCOL='http'
|
|
||||||
|
|
||||||
EMAIL_HOST='hartley.uberspace.de'
|
|
||||||
EMAIL_HOST_USER='post@flavigny.de'
|
|
||||||
EMAIL_HOST_PASSWORD='Post00Flavigny..'
|
|
||||||
EMAIL_SENDING_ADDRESS='post@flavigny.de'
|
|
||||||
|
|
||||||
DJANGO_DEPLOY=1
|
|
||||||
|
|
||||||
DJANGO_DATABASE_NAME='jdav_db'
|
|
||||||
DJANGO_DATABASE_USER='jdav_db'
|
|
||||||
DJANGO_DATABASE_PASSWORD='jdav00jdav'
|
|
||||||
DJANGO_DATABASE_HOST='172.17.0.1'
|
|
||||||
|
|
||||||
DJANGO_SETTINGS_MODULE='jdav_web.settings'
|
|
||||||
DJANGO_STATIC_ROOT='/var/www/jdav_web/assets'
|
|
||||||
@ -0,0 +1,12 @@
|
|||||||
|
FROM python:3.9-bullseye
|
||||||
|
|
||||||
|
# install additional dependencies
|
||||||
|
RUN apt-get update && apt-get install -y gettext
|
||||||
|
|
||||||
|
WORKDIR /app
|
||||||
|
|
||||||
|
# install requirements
|
||||||
|
COPY ./requirements.txt /app/requirements.txt
|
||||||
|
RUN pip install -r requirements.txt
|
||||||
|
|
||||||
|
COPY ./docker /app/docker
|
||||||
@ -0,0 +1,40 @@
|
|||||||
|
version: "3.9"
|
||||||
|
|
||||||
|
x-kompass:
|
||||||
|
&kompass
|
||||||
|
image: kompass:development
|
||||||
|
build:
|
||||||
|
context: ./../../
|
||||||
|
dockerfile: docker/development/Dockerfile
|
||||||
|
env_file: docker.env
|
||||||
|
restart: always
|
||||||
|
depends_on:
|
||||||
|
- redis
|
||||||
|
- cache
|
||||||
|
- db
|
||||||
|
|
||||||
|
services:
|
||||||
|
master:
|
||||||
|
<<: *kompass
|
||||||
|
entrypoint: /app/docker/development/entrypoint-master.sh
|
||||||
|
stdin_open: true # docker run -i
|
||||||
|
tty: true # docker run -t
|
||||||
|
volumes:
|
||||||
|
- ./../../jdav_web:/app/jdav_web
|
||||||
|
ports:
|
||||||
|
- "8000:8000"
|
||||||
|
|
||||||
|
cache:
|
||||||
|
restart: always
|
||||||
|
image: memcached:alpine
|
||||||
|
|
||||||
|
redis:
|
||||||
|
restart: always
|
||||||
|
image: redis:6-alpine
|
||||||
|
|
||||||
|
db:
|
||||||
|
restart: always
|
||||||
|
image: mariadb
|
||||||
|
volumes:
|
||||||
|
- /tmp/db:/var/lib/mysql
|
||||||
|
env_file: docker.env
|
||||||
@ -0,0 +1,23 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
set -o errexit
|
||||||
|
|
||||||
|
sleep 5
|
||||||
|
|
||||||
|
cd /app
|
||||||
|
|
||||||
|
if ! [ -f completed_initial_run ]; then
|
||||||
|
echo 'Initialising kompass master container'
|
||||||
|
|
||||||
|
python jdav_web/manage.py compilemessages --locale de
|
||||||
|
|
||||||
|
# python jdav_web/manage.py makemigrations
|
||||||
|
python jdav_web/manage.py migrate
|
||||||
|
|
||||||
|
touch completed_initial_run
|
||||||
|
fi
|
||||||
|
|
||||||
|
cd jdav_web
|
||||||
|
|
||||||
|
celery -A jdav_web worker -B --scheduler django_celery_beat.schedulers:DatabaseScheduler -l info &
|
||||||
|
python manage.py runserver 0.0.0.0:8000
|
||||||
@ -0,0 +1,30 @@
|
|||||||
|
FROM python:3.9-bullseye
|
||||||
|
|
||||||
|
# install additional dependencies
|
||||||
|
RUN apt-get update && apt-get install -y gettext
|
||||||
|
|
||||||
|
# create user
|
||||||
|
RUN groupadd -g 501 app && useradd -g 501 -u 501 -m -d /app app
|
||||||
|
|
||||||
|
# create static directory and set permissions, when doing this before mounting a named volume
|
||||||
|
# in docker-compose.yaml, the permissions are inherited during the mount.
|
||||||
|
RUN mkdir -p /var/www/jdav_web/assets && chown -R app:app /var/www/jdav_web/assets
|
||||||
|
|
||||||
|
# create static directory and set permissions, when doing this before mounting a named volume
|
||||||
|
# in docker-compose.yaml, the permissions are inherited during the mount.
|
||||||
|
RUN mkdir -p /tmp/uwsgi && chown -R app:app /tmp/uwsgi
|
||||||
|
|
||||||
|
WORKDIR /app
|
||||||
|
USER app
|
||||||
|
|
||||||
|
# add .local/bin to PATH
|
||||||
|
ENV PATH="/app/.local/bin:$PATH"
|
||||||
|
|
||||||
|
# install requirements
|
||||||
|
COPY --chown=app:app ./requirements.txt /app/requirements.txt
|
||||||
|
RUN pip install -r requirements.txt
|
||||||
|
|
||||||
|
# for production, install uwsgi
|
||||||
|
RUN pip install uwsgi
|
||||||
|
|
||||||
|
COPY --chown=app:app . /app
|
||||||
@ -0,0 +1,53 @@
|
|||||||
|
version: "3.9"
|
||||||
|
|
||||||
|
x-kompass:
|
||||||
|
&kompass
|
||||||
|
image: kompass:production
|
||||||
|
build:
|
||||||
|
context: ./../../
|
||||||
|
dockerfile: docker/production/Dockerfile
|
||||||
|
env_file: docker.env
|
||||||
|
restart: always
|
||||||
|
depends_on:
|
||||||
|
- redis
|
||||||
|
- cache
|
||||||
|
|
||||||
|
services:
|
||||||
|
master:
|
||||||
|
<<: *kompass
|
||||||
|
entrypoint: /app/docker/production/entrypoint-master.sh
|
||||||
|
volumes:
|
||||||
|
- uwsgi_data:/tmp/uwsgi/
|
||||||
|
- web_static:/app/static/
|
||||||
|
- web_static:/var/www/jdav_web/assets/
|
||||||
|
|
||||||
|
nginx:
|
||||||
|
build: ./nginx/
|
||||||
|
restart: always
|
||||||
|
volumes:
|
||||||
|
- uwsgi_data:/tmp/uwsgi/
|
||||||
|
- web_static:/var/www/jdav_web/assets/:ro
|
||||||
|
ports:
|
||||||
|
- "3000:80"
|
||||||
|
depends_on:
|
||||||
|
- master
|
||||||
|
|
||||||
|
cache:
|
||||||
|
restart: always
|
||||||
|
image: memcached:alpine
|
||||||
|
|
||||||
|
redis:
|
||||||
|
restart: always
|
||||||
|
image: redis:6-alpine
|
||||||
|
|
||||||
|
celery_worker:
|
||||||
|
<<: *kompass
|
||||||
|
entrypoint: /app/docker/production/entrypoint-celery-worker.sh
|
||||||
|
|
||||||
|
celery_beat:
|
||||||
|
<<: *kompass
|
||||||
|
entrypoint: /app/docker/production/entrypoint-celery-beat.sh
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
uwsgi_data:
|
||||||
|
web_static:
|
||||||
@ -0,0 +1,5 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
cd /app/jdav_web
|
||||||
|
|
||||||
|
celery -A jdav_web beat --scheduler django_celery_beat.schedulers:DatabaseScheduler -l info
|
||||||
@ -0,0 +1,5 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
cd /app/jdav_web
|
||||||
|
|
||||||
|
celery -A jdav_web worker -l info
|
||||||
@ -0,0 +1,18 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
set -o errexit
|
||||||
|
|
||||||
|
cd /app
|
||||||
|
|
||||||
|
if ! [ -f completed_initial_run ]; then
|
||||||
|
echo 'Initialising kompass master container'
|
||||||
|
|
||||||
|
python jdav_web/manage.py collectstatic --noinput
|
||||||
|
python jdav_web/manage.py compilemessages --locale de
|
||||||
|
|
||||||
|
python jdav_web/manage.py migrate
|
||||||
|
|
||||||
|
touch completed_initial_run
|
||||||
|
fi
|
||||||
|
|
||||||
|
uwsgi --ini docker/production/kompass.uwsgi.ini
|
||||||
@ -1,6 +1,7 @@
|
|||||||
[uwsgi]
|
[uwsgi]
|
||||||
|
|
||||||
socket = /tmp/uwsgi/kompass.sock
|
socket = /tmp/uwsgi/kompass.sock
|
||||||
|
chdir = /app/jdav_web/
|
||||||
module = jdav_web.wsgi
|
module = jdav_web.wsgi
|
||||||
master = true
|
master = true
|
||||||
processes = 2
|
processes = 2
|
||||||
@ -1,10 +0,0 @@
|
|||||||
FROM python:3.9-bullseye
|
|
||||||
RUN mkdir /code
|
|
||||||
WORKDIR /code
|
|
||||||
COPY . /code
|
|
||||||
|
|
||||||
# uwsgi setup
|
|
||||||
RUN apt-get install libmariadb-dev
|
|
||||||
RUN pip install uwsgi
|
|
||||||
RUN pip install -r requirements.txt
|
|
||||||
CMD ["uwsgi", "--ini", "/web/kompass.uwsgi.ini"]
|
|
||||||
Loading…
Reference in New Issue