Doppler : DockerにおけるApacheとModnum WSGIを用いたPython Djangoアプリケーションのための環境変数の設定方法
環境変数を使用してdjangoや他のPythonアプリケーションを設定するのは素晴らしいですが、DockerでApacheとModCount WSGIでそれらを使用するのはトリッキーなことです.
だからこそ、このステップバイステップのチュートリアルとsample application つの場所で必要なすべての情報を入れてください.
このチュートリアルはDockerとDjango用ですが、仮想マシンまたは別のPythonフレームワークを使用しているかどうか、同じ手順が適用されます.
好むだけでコードを読むか?添付のリポジトリにhttps://github.com/DopplerUniversity/django-apache-mod-wsgi
環境変数、Apacheと
Domangoのような、PythonのWSGI互換フレームワークをModClose WSGIでホストしている場合、OSで設定された環境変数だけです.environ辞書は、Apacheを起動するスクリプトの環境に存在するものです.しかし、Apacheのサービスマネージャの設定(例えばsystemdやsystemctl)を台無しにするのではなく、より良い方法があります.
ほとんどのApacheディストリビューションでは、MoMount WSGIなどのモジュールで利用できる環境変数を設定する目的でシェルスクリプトを提供しています.
このシェルスクリプトの位置を知ることは、Linuxディストリビューションによって異なるかもしれません.例えば、
環境変数ファイルへのapp - configと秘密の追加
基本的に秘密をキー/値のペアとして取り込んで、典型的なシェル環境変数の形式でenvvarsファイルに書きこみます.
export FIRST_NAME="The"
export LAST_NAME="Mandalorion"
しかし、どこから、どのように我々はアプリの設定と秘密を取得するファイルを入力するには?私はドップラーの開発者の提唱者として、私はDoppler CLI 例は、“フェッチの秘密は、その後、ファイルに追加”の力学は簡単に適応することができます.
まず、ドップラーであなたのプロジェクトを設定する必要がありますし、次のボタンを使用すると、一緒に従うことを開始する場合を得ることができます.
次に、ドッキングCLIをドロップスコンテナ内で使用して秘密を取得しますService Token value ):
# 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
私は1つの引用符ではなく、値の周りの二重引用符を使用している注意?それはあなたのために使用することができますDopplerでJSONなどの二重引用符で秘密を格納する柔軟性を与えるので、それはですdynamically set Django's ALLOWED_HOSTS 任意の環境のために動的に設定します.
ALLOWED_HOSTS = json.loads(os.environ['ALLOWED_HOSTS'])
また、を使用することができます.envファイルI wouldn't recommend it 代わりに、Aを使ってみるsecrets manager .しかし、それを脇に、ここでどのようにあなたはそれを使用することができますです.ENVファイル
if [ -f "$PWD/.env" ]; then
echo '[info]: Appending environment variables to /etc/apache/envvars from .env file'
cat "$PWD/.env" >> /etc/apache2/envvars
fi
ApacheからModHorse WSGIまでの環境変数を渡す方法を知っているので、Dockerでこの作業を進めましょう.のためのDocker設定
Apacheを使用してPythonのdjangoアプリケーションを構成するタスクを破壊しましょう.
これはDockerやApacheのチュートリアルではないので、私はあまり深く深くDockerfileやApacheのサイトの設定ファイルに潜入することはありませんが、質問を持っている場合はDoppler community forum そして、あなたを助けることができます.
1 .カスタムスタートスクリプト
dockerでのアプリケーションの実行は、通常CMDを設定する場合です.
CMD ["python", "src/app.py"]
しかし、我々が最初に環境変数を/etc/apache2/envvars
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
Apacheサイトの設定
以下は、DjangoアプリケーションのApacheサイト設定ファイルの例です.
# 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>
dockerfile
DockerFileは、Djangoのソースコード、カスタムスクリプト、およびApacheサイトをコピーする前に、Doppler CLIとApache依存関係をインストールするのが妥当です.
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イメージを構築することができますsample repository 続くdocker image build -t django-apache-mod-wsgi:latest .
今、我々はコンテナを実行する準備が整いました!DjangoアプリケーションをApacheとDrokerで実行する
それでは、ドップラーの例から始めましょう.envファイル.
Dopplerを使用すると、最初にDopplerRankトークン環境変数をService Token . これは、プロダクション環境で特定のDoppler設定への読み取り専用アクセスを提供するものです.
通常、これはあなたの配備環境(例えばGithubアクション秘密)によって安全に設定されますが、完全性とシンプルさのために、以下のように手動で設定します.
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
. envファイル
を実行します.envファイルのバージョンは、サンプルを使用します.からのenvファイルsample repository :
# 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
概要
最後にそれを作るの良い仕事!
ここでは、Apacheとアプリケーションの設定と秘密の環境変数を使用してDockerで実行しているModCount WSGIでホストされているPythonアプリケーションを設定する方法を知っています.
フィードバックは歓迎され、あなたは私たちに到達することができますCommunity forum , または私にメールを送ってください[email protected] .
Reference
この問題について(Doppler : DockerにおけるApacheとModnum WSGIを用いたPython Djangoアプリケーションのための環境変数の設定方法), 我々は、より多くの情報をここで見つけました https://dev.to/doppler/doppler-how-to-set-environment-variables-for-a-python-django-application-using-apache-and-modwsgi-in-docker-3oh1テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol