Apache хостинг Flask Не видно Docker Переменные среды - PullRequest
0 голосов
/ 17 июня 2020
Приложение

My Flask не может видеть переменные среды, установленные в docker -compose, но python в контейнере может. Есть идеи, как я могу получить Flask, чтобы их тоже увидеть? Я думаю, что проблема в том, что Apache не передает переменную среды, но я не могу заставить ее пройти.

Эта ошибка появляется, когда я запускаю веб-сервер apache внутри docker container:

Starting Apache httpd web server: apache2[Tue Jun 16 23:12:00.810164 2020] [env:warn] [pid 1311:tid 139882286290048] AH01506: PassEnv variable TEST was undefined

Я определяю свою переменную среды в docker compose, например:

ai:
image: ai:dev
environment:
  TEST: test

Затем я беру объект среды ОС в коде, выводю его и получите это:

environ({'APACHE_RUN_DIR': '/var/run/apache2', 'APACHE_PID_FILE': '/var/run/apache2/apache2.pid', 'PATH': '/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin', 'APACHE_LOCK_DIR': '/var/lock/apache2', 'LANG': 'C', 'APACHE_RUN_USER': 'www-data', 'APACHE_RUN_GROUP': 'www-data', 'APACHE_LOG_DIR': '/var/log/apache2', 'PWD': '/'})

Если я go в контейнер и загружу python и попробую, я получу следующее:

environ({'HOSTNAME': 'd3ce1f616cad', 'PYTHON_VERSION': '3.8.2', 'PWD': '/app', 'HOME': '/root', 'LANG': 'C.UTF-8', 'GPG_KEY': 'E3FF2839C048B25C084DEBE9B26995E310250568', 'PYTHONPATH': ':/app', 'TERM': 'xterm', 'SHLVL': '1', 'PYTHON_PIP_VERSION': '20.0.2', 'PYTHON_GET_PIP_SHA256': '421ac1d44c0cf9730a088e337867d974b91bdce4ea2636099275071878cc189e', 'PYTHON_GET_PIP_URL': 'https://github.com/pypa/get-pip/raw/d59197a3c169cef378a22428a3fa99d33e080a5d/get-pip.py', 'PATH': '/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin', 'TEST': 'test', '_': '/usr/local/bin/python'})

Тестовая переменная есть.

Почему python в контейнере может видеть переменную, а мое приложение flask в том же контейнере не может? Вот файлы wsgi и conf, если они помогут:

ai.wsgi:

`#!/usr/bin/python3.8
import sys
import logging
import os

logging.basicConfig(stream=sys.stderr)
sys.path.insert(0,"/var/www/ai/")

from ai import app as application`

ai.conf:

Listen 443
<VirtualHost *:443>
                ServerName 192.168.1.103
                ServerAdmin admin@tsames.ca
                WSGIScriptAlias / /var/www/ai/ai.wsgi
                <Directory /var/www/ai/ai/>
                        Order allow,deny
                        Allow from all
                </Directory>
                ErrorLog ${APACHE_LOG_DIR}/ai-error.log
                LogLevel warn
                CustomLog ${APACHE_LOG_DIR}/ai-access.log combined
                PassEnv TEST
</VirtualHost>

1 Ответ

0 голосов
/ 17 июня 2020

Ладно, разобрался. Позже я погуглил, и я наткнулся на этот пост , в котором объясняется, что делать.

Краткая версия моего сценария выше: проблема в том, что переменные среды недоступны для apache2 для передачи сеанс WSGI. Их нельзя поместить в файл conf, поскольку он не имеет доступа к bash. Решение состоит в том, чтобы добавить эту строку в файл среды в / etc / environment:

/etc/environment:
export TEST=${TEST}

Затем добавьте ее в / etc / apache2 / envvars, чтобы связать файл среды до apache, он имеет доступ к bash, чтобы он работал:

/etc/apache2/envvars:
... (Default file stuff)
. /etc/environment

Наконец, в файл conf, который вы вставили (как я сделал выше):

/etc/apache2/sites-enabled/ai.conf:
Listen 443
<VirtualHost *:443>
                ServerName 192.168.1.103
                ServerAdmin admin@admin.com
                WSGIScriptAlias / /var/www/ai/ai.wsgi
                <Directory /var/www/ai/ai/>
                        Order allow,deny
                        Allow from all
                </Directory>
                ErrorLog ${APACHE_LOG_DIR}/ai-error.log
                LogLevel warn
                CustomLog ${APACHE_LOG_DIR}/ai-access.log combined
                PassEnv TEST
</VirtualHost>

Обратите внимание на PassEnv , который будет работать теперь, когда apache имеет доступ к переменным среды. Также забавное замечание: не забывайте экранировать специальные символы в переменных окружения, иначе могут возникнуть странные проблемы!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...