40
loading...
This website collects cookies to deliver better user experience
export FIRST_NAME="The"
export LAST_NAME="Mandalorion"
# Transform JSON key:value pairs into export statements using jq
if [ -n "$DOPPLER_TOKEN" ]; then
echo '[info]: Appending environment variables to /etc/apache/envvars using Doppler CLI'
doppler secrets download --no-file | jq -r $'. | to_entries[] | "export \(.key)=\'\(.value)\'"' >> /etc/apache2/envvars
fi
ALLOWED_HOSTS = json.loads(os.environ['ALLOWED_HOSTS'])
if [ -f "$PWD/.env" ]; then
echo '[info]: Appending environment variables to /etc/apache/envvars from .env file'
cat "$PWD/.env" >> /etc/apache2/envvars
fi
CMD ["python", "src/app.py"]
/etc/apache2/envvars
before running Apache.#!/bin/bash
# apache-doppler-start
set -e
echo 'ServerName localhost' >> /etc/apache2/apache2.conf # Silence FQDN warning
# Doppler CLI
if [ -n "$DOPPLER_TOKEN" ]; then
echo '[info]: Appending environment variables to /etc/apache/envvars from Doppler CLI'
doppler secrets download --no-file | jq -r $'. | to_entries[] | "export \(.key)=\'\(.value)\'"' >> /etc/apache2/envvars
fi
# Mounted .env file
if [ -f "$PWD/.env" ]; then
echo '[info]: Appending environment variables to /etc/apache/envvars from .env file'
cat "$PWD/.env" >> /etc/apache2/envvars
fi
# Run Apache
apache2ctl -D FOREGROUND
# wsgi.conf
<VirtualHost *:80>
ServerName django-apache-mod-wsgi
ServerAlias django-apache-mod-wsgi
ServerAdmin webmaster@doppler
# Defining `WSGIDaemonProcess` and `WSGIProcessGroup` triggers daemon mode
WSGIDaemonProcess django-apache-mod-wsgi processes=2 threads=15 display-name=%{GROUP} python-path=/usr/local/lib/python3.9/site-packages:/usr/src/app
WSGIProcessGroup django-apache-mod-wsgi
WSGIScriptAlias / /usr/src/app/doppler/wsgi.py
<Directory /usr/src/app/doppler/>
<Files wsgi.py>
Require all granted
</Files>
</Directory>
# Redirect all logging to stdout for Docker
LogLevel INFO
ErrorLog /dev/stdout
TransferLog /dev/stdout
</VirtualHost>
FROM python:3.9-slim-buster
ENV PYTHONUNBUFFERED 1
ENV PYTHONDONTWRITEBYTECODE 1
# Install Doppler CLI and related dependencies
RUN apt-get -qq update && apt-get install -y apt-transport-https ca-certificates curl gnupg jq && \
curl -sLf --retry 3 --tlsv1.2 --proto "=https" 'https://packages.doppler.com/public/cli/gpg.DE2A7741A397C129.key' | apt-key add - && \
echo "deb https://packages.doppler.com/public/cli/deb/debian any-version main" | tee /etc/apt/sources.list.d/doppler-cli.list && \
apt-get -qq update && apt-get install doppler
# Install Apache and related dependencies
RUN apt-get install --yes apache2 apache2-dev libapache2-mod-wsgi-py3 && \
apt-get clean && \
apt-get remove --purge --auto-remove -y && \
rm -rf /var/lib/apt/lists/*
WORKDIR /usr/src/app
COPY requirements*.txt .
RUN pip install --quiet --no-cache-dir --upgrade pip && \
pip install --quiet --no-cache-dir -r requirements.txt
# Application source
COPY src/ ./
# Custom CMD script
COPY apache-doppler-start /usr/local/bin/
# Apache site config
COPY wsgi.conf /etc/apache2/sites-enabled/000-default.conf
EXPOSE 80 443
# https://httpd.apache.org/docs/2.4/stopping.html#gracefulstop
STOPSIGNAL SIGWINCH
CMD ["apache-doppler-start"]
docker image build -t django-apache-mod-wsgi:latest .
export DOPPLER_TOKEN="dp.st.xxxx" # Service token value created from Doppler dashboard
docker container run \
-it \
--init \
--name doppler-apache-mod-wsgi \
--rm \
-p 8080:80 \
-e DOPPLER_TOKEN="$DOPPLER_TOKEN" \
django-apache-mod-wsgi
# sample.env
export DJANGO_SETTINGS_MODULE='doppler.settings'
export DEBUG='yes'
export ALLOWED_HOSTS='["*"]'
export SECRET_KEY='bf5e1b31-6ba7-48e2-9175-f2293671e6df'
docker container run \
-it \
--init \
--name dotenv-apache-mod-wsgi \
--rm \
-v $(pwd)/sample.env:/usr/src/app/.env \
-p 8080:80 \
django-apache-mod-wsgi