Merge pull request 'Dockerify pro-salute' (#10) from pro-salute into master
Reviewed-on: #10
This commit is contained in:
commit
c5026ad0eb
6 changed files with 170 additions and 8 deletions
104
Dockerfile
Normal file
104
Dockerfile
Normal file
|
@ -0,0 +1,104 @@
|
|||
#FROM python:3.10-alpine
|
||||
FROM docker.io/python:3.10-slim AS base
|
||||
|
||||
ENV \
|
||||
LANG=C.UTF-8 \
|
||||
LC_ALL=C.UTF-8 \
|
||||
# python:
|
||||
PYTHONFAULTHANDLER=1 \
|
||||
PYTHONUNBUFFERED=1 \
|
||||
PYTHONHASHSEED=random \
|
||||
PYTHONDONTWRITEBYTECODE=1
|
||||
|
||||
RUN apt-get update
|
||||
|
||||
RUN apt-get install -y --no-install-recommends libmagic-dev libglib2.0-dev libpango-1.0-0 libpangoft2-1.0-0
|
||||
|
||||
RUN apt-get update && \
|
||||
apt-get install -y curl gnupg && \
|
||||
curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - && \
|
||||
echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list && \
|
||||
apt-get update && \
|
||||
apt-get install -y yarn && \
|
||||
apt-get install -y --no-install-recommends build-essential gcc && \
|
||||
apt-get clean && \
|
||||
rm -rf /var/lib/apt/lists/*
|
||||
|
||||
ENV VIRTUAL_ENV=/venv
|
||||
|
||||
# Use production configuration.
|
||||
ENV DJANGO_SETTINGS_MODULE=publichealth.settings
|
||||
ENV DJANGO_CONFIGURATION=production
|
||||
|
||||
|
||||
### builder image
|
||||
|
||||
FROM base as build
|
||||
|
||||
ENV \
|
||||
# pip:
|
||||
PIP_NO_CACHE_DIR=off \
|
||||
PIP_DISABLE_PIP_VERSION_CHECK=on \
|
||||
PIP_DEFAULT_TIMEOUT=100
|
||||
|
||||
RUN python3 -m venv $VIRTUAL_ENV
|
||||
|
||||
RUN mkdir -p /build/static
|
||||
WORKDIR /build
|
||||
|
||||
# Install python dependencies.
|
||||
COPY requirements.txt requirements.txt ./
|
||||
RUN . /venv/bin/activate && pip install -r requirements.txt
|
||||
|
||||
# We will run dumb-init as pid 1.
|
||||
RUN . /venv/bin/activate && pip install dumb-init
|
||||
|
||||
# We will run our app using gunicorn.
|
||||
RUN . /venv/bin/activate && pip install gunicorn
|
||||
|
||||
# Copy local code into to the build image.
|
||||
COPY . /build
|
||||
|
||||
# Copy code required for runtime to the /app folder.
|
||||
RUN mkdir -p /app
|
||||
RUN cp -r publichealth feedler yarn.lock manage.py package.json Gruntfile.js setup_libs.sh /app/
|
||||
|
||||
|
||||
#RUN curl -fsSLO https://deb.nodesource.com/setup_18.x && chmod +x setup_18.x && ./setup_18.x
|
||||
#RUN apt install -y nodejs
|
||||
#RUN npm install -g grunt-cli
|
||||
|
||||
# Collect static data into /app/static.
|
||||
#RUN . /venv/bin/activate && \
|
||||
# DJANGO_STATIC_ROOT=/app/static SECRET_KEY=sl DJANGO_SETTINGS_MODULE=publichealth.settings.production ./manage.py collectstatic --no-input -i media
|
||||
|
||||
#RUN mkdir -p /app/publichealth/static/libs
|
||||
|
||||
#RUN cp -rf node_modules/@bower_components/* /app/publichealth/static/libs
|
||||
|
||||
|
||||
#RUN . /venv/bin/activate && \
|
||||
# DJANGO_STATIC_ROOT=/app/static SECRET_KEY=sl DJANGO_SETTINGS_MODULE=publichealth.settings.production ./manage.py compress --force
|
||||
|
||||
#RUN cp -r /build/static /app/static
|
||||
|
||||
### runtime image
|
||||
|
||||
FROM base as runtime
|
||||
|
||||
#RUN apt-get install -y --no-install-recommends libpango-1.0-0 libpangoft2-1.0-0
|
||||
#RUN apt-get install -y --no-install-recommends procps iproute2 curl
|
||||
|
||||
COPY --from=build /venv /venv
|
||||
COPY --from=build /app /app
|
||||
|
||||
WORKDIR /app
|
||||
|
||||
# Ensure exectutables from virtualenv are prefered.
|
||||
ENV PATH="/venv/bin:$PATH"
|
||||
ENTRYPOINT ["/venv/bin/dumb-init", "--", "gunicorn", \
|
||||
"-b [::]:8000", \
|
||||
"--log-file=-", \
|
||||
"--worker-tmp-dir", "/dev/shm", \
|
||||
"--workers=2", "--threads=4", "--worker-class=gthread"]
|
||||
CMD ["publichealth.wsgi"]
|
|
@ -1,6 +1,9 @@
|
|||
import logging
|
||||
import os
|
||||
import sys
|
||||
import dj_database_url
|
||||
|
||||
from logging.handlers import RotatingFileHandler
|
||||
from .base import *
|
||||
|
||||
# Do not set SECRET_KEY, Postgres or LDAP password or any other sensitive data here.
|
||||
|
@ -149,10 +152,19 @@ LOGGING = {
|
|||
'level': 'ERROR',
|
||||
'class': 'django.utils.log.AdminEmailHandler',
|
||||
},
|
||||
'console': {
|
||||
'level': 'DEBUG',
|
||||
'class': 'logging.StreamHandler',
|
||||
'stream': sys.stdout,
|
||||
'formatter': 'simple',
|
||||
},
|
||||
},
|
||||
'formatters': {
|
||||
'default': {
|
||||
'verbose': '[%(asctime)s] (%(process)d/%(thread)d) %(name)s %(levelname)s: %(message)s'
|
||||
},
|
||||
'simple': {
|
||||
'verbose': '[%(asctime)s] (%(process)d/%(thread)d) %(name)s %(levelname)s: %(message)s'
|
||||
}
|
||||
},
|
||||
'loggers': {
|
||||
|
@ -194,7 +206,7 @@ if 'LOG_DIR' in env:
|
|||
# Public Health Schweiz log
|
||||
LOGGING['handlers']['publichealth_file'] = {
|
||||
'level': 'INFO',
|
||||
'class': 'cloghandler.ConcurrentRotatingFileHandler',
|
||||
'class': 'logging.handlers.RotatingFileHandler',
|
||||
'filename': os.path.join(env['LOG_DIR'], 'publichealth.log'),
|
||||
'maxBytes': 5242880, # 5MB
|
||||
'backupCount': 5
|
||||
|
@ -204,7 +216,7 @@ if 'LOG_DIR' in env:
|
|||
# Wagtail log
|
||||
LOGGING['handlers']['wagtail_file'] = {
|
||||
'level': 'WARNING',
|
||||
'class': 'cloghandler.ConcurrentRotatingFileHandler',
|
||||
'class': 'logging.handlers.RotatingFileHandler',
|
||||
'filename': os.path.join(env['LOG_DIR'], 'wagtail.log'),
|
||||
'maxBytes': 5242880, # 5MB
|
||||
'backupCount': 5
|
||||
|
@ -214,7 +226,7 @@ if 'LOG_DIR' in env:
|
|||
# Error log
|
||||
LOGGING['handlers']['errors_file'] = {
|
||||
'level': 'ERROR',
|
||||
'class': 'cloghandler.ConcurrentRotatingFileHandler',
|
||||
'class': 'logging.handlers.RotatingFileHandler',
|
||||
'filename': os.path.join(env['LOG_DIR'], 'error.log'),
|
||||
'maxBytes': 5242880, # 5MB
|
||||
'backupCount': 5
|
||||
|
|
|
@ -49,6 +49,7 @@
|
|||
html[lang='fr'] .site-ngo-allianz-ebk .navbar-brand {
|
||||
background-image: url('/static/org/NGO-Allianz_Logo-fr.jpg');
|
||||
}
|
||||
|
||||
// -site-ngo-allianz-ebk
|
||||
|
||||
// Custom styles for gesundheitsmanifest.ch
|
||||
|
@ -61,3 +62,18 @@ html[lang='fr'] .site-ngo-allianz-ebk .navbar-brand {
|
|||
border-bottom: 1px solid #ddd;
|
||||
}
|
||||
}
|
||||
|
||||
.site-dev-pro-salutech {
|
||||
.navbar-brand {
|
||||
width: 240px;
|
||||
height: 64px;
|
||||
background-size: contain !important;
|
||||
background-repeat: no-repeat;
|
||||
background-image: url('/static/images/pro-salute-logo.png');
|
||||
|
||||
font-size: 0px !important;
|
||||
img { display: none !important; }
|
||||
}
|
||||
#carousel-banner .carousel-caption { display: none; }
|
||||
}
|
||||
|
||||
|
|
|
@ -2,6 +2,9 @@
|
|||
{% get_site_root as site_root %}
|
||||
{% get_site as the_site %}
|
||||
|
||||
|
||||
<style>
|
||||
</style>
|
||||
<nav class="navbar-pre navbar-fixed-top">
|
||||
<div class="container">
|
||||
<div class="nav">
|
||||
|
@ -27,9 +30,16 @@
|
|||
<span class="icon-bar"></span>
|
||||
<span class="icon-bar"></span>
|
||||
</button>
|
||||
<a class="navbar-brand" href="{% pageurl site_root %}">
|
||||
<img src="{% static 'images/public-health-logo-sign.png' %}" alt="[logo]">
|
||||
<span class="hidden-xs">{% contact_name the_site=the_site %}</span></a>
|
||||
|
||||
<a class="navbar-brand" href="{% pageurl site_root %}">
|
||||
|
||||
{% if the_site|default:""|truncatechars:"255" == "dev.pro-salute.ch"%}
|
||||
<img src="{% static 'images/pro-salute-logo.png' %}" alt="Pro Salute Logo">
|
||||
{% else %}
|
||||
<img src="{% static 'images/public-health-logo-sign.png' %}" alt="[logo]">
|
||||
{% endif %}
|
||||
|
||||
<span class="hidden-xs">{% contact_name the_site=the_site %}</span></a>
|
||||
</div>
|
||||
|
||||
{% block menu %}
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
# Updated: 21.07.2021
|
||||
# Updated: 22.05.2024
|
||||
|
||||
# Core
|
||||
wagtail==2.15.1
|
||||
|
@ -30,5 +30,7 @@ Pillow==8.4.0
|
|||
gunicorn
|
||||
whitenoise
|
||||
python-dotenv
|
||||
ConcurrentLogHandler
|
||||
#ConcurrentLogHandler
|
||||
unidecode
|
||||
|
||||
django-configurations
|
||||
|
|
18
setup_libs.sh
Executable file
18
setup_libs.sh
Executable file
|
@ -0,0 +1,18 @@
|
|||
#!/bin/bash
|
||||
|
||||
cd /app
|
||||
rm -rf node_modules
|
||||
yarn install
|
||||
mkdir -p /app/publichealth/static/libs
|
||||
echo "created /app/publichealth/static/libs contents "
|
||||
ls /app/publichealth/static/libs
|
||||
cp -rf node_modules/@bower_components/* /app/publichealth/static/libs/
|
||||
|
||||
# static resources
|
||||
python manage.py collectstatic --no-input -i media --settings=publichealth.settings.production
|
||||
python manage.py compress --force --settings=publichealth.settings.production
|
||||
|
||||
if [ -d /app/static ]; then
|
||||
echo "Copying"
|
||||
cp -a /app/static /pod
|
||||
fi
|
Loading…
Reference in a new issue