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
|
||||
|
||||
# set work directory
|
||||
WORKDIR /usr/src
|
||||
WORKDIR /usr/mamweb-docker
|
||||
|
||||
# set environment variables
|
||||
ENV PIP_DISABLE_PIP_VERSION_CHECK 1
|
||||
|
@ -13,7 +13,9 @@ RUN apt-get update && apt-get install -y \
|
|||
libpq-dev \
|
||||
gcc \
|
||||
locales \
|
||||
imagemagick
|
||||
imagemagick \
|
||||
netcat \
|
||||
postgresql-client
|
||||
RUN pip install --upgrade pip
|
||||
COPY ./requirements.txt .
|
||||
COPY ./constraints.txt .
|
||||
|
@ -22,15 +24,13 @@ RUN pip install -r requirements.txt
|
|||
# allow correct locales
|
||||
RUN sed -i '/cs_CZ.UTF-8/s/^# //g' /etc/locale.gen && \
|
||||
locale-gen
|
||||
ENV LANG cs_CZ.UTF-8 \
|
||||
LANGUAGE en_US:en \
|
||||
LC_ALL cs_CZ.UTF-8
|
||||
ENV LANG cs_CZ.UTF-8
|
||||
ENV LANGUAGE en_US:en
|
||||
ENV LC_ALL cs_CZ.UTF-8
|
||||
|
||||
# copy project
|
||||
COPY . .
|
||||
|
||||
# create test data
|
||||
RUN ./manage.py testdata
|
||||
RUN ./manage.py loaddata data/*
|
||||
# make/sync_prod_flatpages && \
|
||||
# ./manage.py load_org_permissions deploy_v2/admin_org_prava.json
|
||||
# create test data once db is ready
|
||||
RUN chmod +x /usr/mamweb-docker/docker_entrypoint.sh
|
||||
ENTRYPOINT ["/usr/mamweb-docker/docker_entrypoint.sh"]
|
|
@ -1,25 +1,23 @@
|
|||
|
||||
# TODO:
|
||||
# - [ ] Pořídit vhodný django settings.py pro docker, aby to používalo postgress
|
||||
services:
|
||||
web:
|
||||
build: .
|
||||
command: python manage.py runserver 0.0.0.0:8000
|
||||
volumes:
|
||||
- .:/usr/src
|
||||
- .:/usr/mamweb-docker
|
||||
ports:
|
||||
- 8000:8000
|
||||
# env_file:
|
||||
# - ./.env.dev
|
||||
depends_on:
|
||||
- db
|
||||
|
||||
# db:
|
||||
# image: postgres:13-bullseye
|
||||
# volumes:
|
||||
# - postgres_data:/var/lib/postgresql/data/
|
||||
# environment:
|
||||
# - POSTGRES_USER=hello_django
|
||||
# - POSTGRES_PASSWORD=hello_django
|
||||
# - POSTGRES_DB=hello_django_dev
|
||||
db:
|
||||
image: postgres:13-bullseye
|
||||
volumes:
|
||||
- postgres_data:/var/lib/postgresql/data/
|
||||
environment:
|
||||
- POSTGRES_USER=mam-web
|
||||
- POSTGRES_PASSWORD=RoEGG5g7&b # Random generated string corresponding with Django settings
|
||||
- POSTGRES_DB=mam_docker
|
||||
|
||||
# volumes:
|
||||
# postgres_data:
|
||||
volumes:
|
||||
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__):
|
||||
from .settings_prod import *
|
||||
|
||||
elif "mamweb-docker" in os.path.abspath(__file__):
|
||||
from .settings_docker import *
|
||||
|
||||
else:
|
||||
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