Dockerizace! (zatím alespoň pro lokální vývoj) #37
5 changed files with 162 additions and 25 deletions
20
Dockerfile
20
Dockerfile
|
@ -1,7 +1,7 @@
|
||||||
FROM python:3.9.18-slim-bullseye
|
FROM python:3.9.18-slim-bullseye
|
||||||
|
|
||||||
# set work directory
|
# set work directory
|
||||||
WORKDIR /usr/src
|
WORKDIR /usr/mamweb-docker
|
||||||
|
|
||||||
# set environment variables
|
# set environment variables
|
||||||
ENV PIP_DISABLE_PIP_VERSION_CHECK 1
|
ENV PIP_DISABLE_PIP_VERSION_CHECK 1
|
||||||
|
@ -13,7 +13,9 @@ RUN apt-get update && apt-get install -y \
|
||||||
libpq-dev \
|
libpq-dev \
|
||||||
gcc \
|
gcc \
|
||||||
locales \
|
locales \
|
||||||
imagemagick
|
imagemagick \
|
||||||
|
netcat \
|
||||||
|
postgresql-client
|
||||||
RUN pip install --upgrade pip
|
RUN pip install --upgrade pip
|
||||||
COPY ./requirements.txt .
|
COPY ./requirements.txt .
|
||||||
COPY ./constraints.txt .
|
COPY ./constraints.txt .
|
||||||
|
@ -22,15 +24,13 @@ RUN pip install -r requirements.txt
|
||||||
# allow correct locales
|
# allow correct locales
|
||||||
RUN sed -i '/cs_CZ.UTF-8/s/^# //g' /etc/locale.gen && \
|
RUN sed -i '/cs_CZ.UTF-8/s/^# //g' /etc/locale.gen && \
|
||||||
locale-gen
|
locale-gen
|
||||||
ENV LANG cs_CZ.UTF-8 \
|
ENV LANG cs_CZ.UTF-8
|
||||||
LANGUAGE en_US:en \
|
ENV LANGUAGE en_US:en
|
||||||
LC_ALL cs_CZ.UTF-8
|
ENV LC_ALL cs_CZ.UTF-8
|
||||||
|
|
||||||
# copy project
|
# copy project
|
||||||
COPY . .
|
COPY . .
|
||||||
|
|
||||||
# create test data
|
# create test data once db is ready
|
||||||
RUN ./manage.py testdata
|
RUN chmod +x /usr/mamweb-docker/docker_entrypoint.sh
|
||||||
RUN ./manage.py loaddata data/*
|
ENTRYPOINT ["/usr/mamweb-docker/docker_entrypoint.sh"]
|
||||||
# make/sync_prod_flatpages && \
|
|
||||||
# ./manage.py load_org_permissions deploy_v2/admin_org_prava.json
|
|
|
@ -1,25 +1,23 @@
|
||||||
|
|
||||||
# TODO:
|
|
||||||
# - [ ] Pořídit vhodný django settings.py pro docker, aby to používalo postgress
|
|
||||||
services:
|
services:
|
||||||
web:
|
web:
|
||||||
build: .
|
build: .
|
||||||
command: python manage.py runserver 0.0.0.0:8000
|
command: python manage.py runserver 0.0.0.0:8000
|
||||||
volumes:
|
volumes:
|
||||||
- .:/usr/src
|
- .:/usr/mamweb-docker
|
||||||
ports:
|
ports:
|
||||||
- 8000:8000
|
- 8000:8000
|
||||||
# env_file:
|
depends_on:
|
||||||
# - ./.env.dev
|
- db
|
||||||
|
|
||||||
# db:
|
db:
|
||||||
# image: postgres:13-bullseye
|
image: postgres:13-bullseye
|
||||||
# volumes:
|
volumes:
|
||||||
# - postgres_data:/var/lib/postgresql/data/
|
- postgres_data:/var/lib/postgresql/data/
|
||||||
# environment:
|
environment:
|
||||||
# - POSTGRES_USER=hello_django
|
- POSTGRES_USER=mam-web
|
||||||
# - POSTGRES_PASSWORD=hello_django
|
- POSTGRES_PASSWORD=RoEGG5g7&b # Random generated string corresponding with Django settings
|
||||||
# - POSTGRES_DB=hello_django_dev
|
- POSTGRES_DB=mam_docker
|
||||||
|
|
||||||
# volumes:
|
volumes:
|
||||||
# postgres_data:
|
postgres_data:
|
19
docker_entrypoint.sh
Executable file
19
docker_entrypoint.sh
Executable file
|
@ -0,0 +1,19 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
echo "Waiting for Postgres..."
|
||||||
|
|
||||||
|
while ! nc -z "db" "5432"; do
|
||||||
|
sleep 0.1
|
||||||
|
done
|
||||||
|
|
||||||
|
echo "PostgreSQL started"
|
||||||
|
|
||||||
|
PGPASSWORD="RoEGG5g7&b" # Random generated, corresponds to the one in docker-compose.yml
|
||||||
|
if psql "postgresql://mam-web:$PGPASSWORD@db:5432/mam_docker" -t -c '\dt' | cut -d \| -f 2 | grep -qw "seminar_cisla"; then
|
||||||
|
echo "\nExistuje tabulka 'seminar_cisla' v db, testdata pravděpodobně byla vygenerována.\n"
|
||||||
|
else
|
||||||
|
python ./manage.py testdata
|
||||||
|
python ./manage.py loaddata data/*
|
||||||
|
fi
|
||||||
|
|
||||||
|
exec "$@"
|
|
@ -14,6 +14,9 @@ if "mamweb-test" in os.path.abspath(__file__):
|
||||||
elif "mamweb-prod" in os.path.abspath(__file__):
|
elif "mamweb-prod" in os.path.abspath(__file__):
|
||||||
from .settings_prod import *
|
from .settings_prod import *
|
||||||
|
|
||||||
|
elif "mamweb-docker" in os.path.abspath(__file__):
|
||||||
|
from .settings_docker import *
|
||||||
|
|
||||||
else:
|
else:
|
||||||
from .settings_local import *
|
from .settings_local import *
|
||||||
|
|
||||||
|
|
117
mamweb/settings_docker.py
Normal file
117
mamweb/settings_docker.py
Normal file
|
@ -0,0 +1,117 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
import os.path
|
||||||
|
|
||||||
|
#
|
||||||
|
# Docker nastaveni settings.py
|
||||||
|
#
|
||||||
|
# Pro vyber tohoto nastaveni muzete pouzit tez:
|
||||||
|
# DJANGO_SETTINGS_MODULE=mamweb.settings_docker ./manage.py ...
|
||||||
|
#
|
||||||
|
|
||||||
|
# Import common settings
|
||||||
|
from .settings_common import * # zatim nutne, casem snad vyresime # noqa
|
||||||
|
|
||||||
|
MIDDLEWARE += (
|
||||||
|
'debug_toolbar.middleware.DebugToolbarMiddleware',
|
||||||
|
)
|
||||||
|
|
||||||
|
# Quick-start development settings - unsuitable for production
|
||||||
|
# See https://docs.djangoproject.com/en/1.7/howto/deployment/checklist/
|
||||||
|
|
||||||
|
INSTALLED_APPS += (
|
||||||
|
'debug_toolbar',
|
||||||
|
'django_extensions',
|
||||||
|
)
|
||||||
|
|
||||||
|
# SECURITY WARNING: keep the secret key used in production secret!
|
||||||
|
SECRET_KEY = 'EZfSzeuDCycKr5ZjiCQ^45ZqFU@8Ke#YDwn9ThqerfEpu^yV#p'
|
||||||
|
|
||||||
|
# SECURITY WARNING: don't run with debug turned on in production!
|
||||||
|
DEBUG = True
|
||||||
|
INTERNAL_IPS = ['127.0.0.1']
|
||||||
|
|
||||||
|
TEMPLATES[0]['OPTIONS']['debug'] = True
|
||||||
|
|
||||||
|
from ipaddress import ip_network
|
||||||
|
ALLOWED_HOSTS = [str(ip) for ip in ip_network('192.168.0.0/16')]
|
||||||
|
ALLOWED_HOSTS.append('127.0.0.1')
|
||||||
|
ALLOWED_HOSTS.append('localhost')
|
||||||
|
|
||||||
|
# Database
|
||||||
|
# https://docs.djangoproject.com/en/1.7/ref/settings/#databases
|
||||||
|
|
||||||
|
DATABASES = {
|
||||||
|
'default': {
|
||||||
|
'ENGINE': 'django.db.backends.postgresql_psycopg2',
|
||||||
|
'NAME': 'mam_docker',
|
||||||
|
'USER': 'mam-web',
|
||||||
|
'PASSWORD': 'RoEGG5g7&b', # Random generated string corresponding with docker-compose
|
||||||
|
'TEST': {
|
||||||
|
'NAME': 'mam-docker-testdb',
|
||||||
|
},
|
||||||
|
"HOST": "db",
|
||||||
|
"PORT": "5432",
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
# import os
|
||||||
|
# SERVER_EMAIL = 'mamweb-test-errors@mam.mff.cuni.cz'
|
||||||
|
# ADMINS = [
|
||||||
|
# ('M&M ERRORs', 'mam-errors@mam.mff.cuni.cz'),
|
||||||
|
# ]
|
||||||
|
|
||||||
|
# SECURITY: only send sensitive cookies via HTTPS
|
||||||
|
# SESSION_COOKIE_SECURE = True
|
||||||
|
# CSRF_COOKIE_SECURE = True
|
||||||
|
|
||||||
|
# LOGGING
|
||||||
|
LOGGING = {
|
||||||
|
'version': 1,
|
||||||
|
'disable_existing_loggers': True,
|
||||||
|
'filters': {
|
||||||
|
'require_debug_false': {
|
||||||
|
'()': 'django.utils.log.RequireDebugFalse'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
'formatters': {
|
||||||
|
'simple': {
|
||||||
|
'format': '%(asctime)s - %(name)s - %(levelname)-8s - %(message)s',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
'handlers': {
|
||||||
|
'dummy': {
|
||||||
|
'class': 'logging.NullHandler',
|
||||||
|
},
|
||||||
|
'console': {
|
||||||
|
'level': 'DEBUG',
|
||||||
|
'class': 'logging.StreamHandler',
|
||||||
|
'formatter': 'simple',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
'loggers': {
|
||||||
|
# Vypisovani databazovych dotazu do konzole
|
||||||
|
#'django.db.backends': {
|
||||||
|
# 'level': 'DEBUG',
|
||||||
|
# 'handlers': ['console'],
|
||||||
|
# 'propagate': False,
|
||||||
|
#},
|
||||||
|
'werkzeug': {
|
||||||
|
'handlers': ['console'],
|
||||||
|
'level': 'DEBUG',
|
||||||
|
'propagate': True,
|
||||||
|
},
|
||||||
|
'': {
|
||||||
|
'handlers': ['console'],
|
||||||
|
'level': 'DEBUG',
|
||||||
|
'propagate': False,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
# FILE_UPLOAD_PERMISSIONS = 0o440
|
||||||
|
|
||||||
|
# Testování e-mailů
|
||||||
|
EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'
|
||||||
|
SEND_EMAIL_NOTIFICATIONS = True
|
||||||
|
LOCAL_TEST_PROD = "local"
|
Loading…
Reference in a new issue