Fix #626: Load env file in config/.env automatically to avoid sourcing it by hand

This commit is contained in:
Eliot Berriot 2018-11-28 19:56:56 +01:00
parent 940147dc4c
commit 8679edb160
No known key found for this signature in database
GPG Key ID: DD6965E2476E5C27
4 changed files with 41 additions and 19 deletions

View File

@ -11,6 +11,8 @@ https://docs.djangoproject.com/en/dev/ref/settings/
from __future__ import absolute_import, unicode_literals
import datetime
import logging
from urllib.parse import urlparse, urlsplit
import environ
@ -18,14 +20,35 @@ from celery.schedules import crontab
from funkwhale_api import __version__
logger = logging.getLogger(__name__)
ROOT_DIR = environ.Path(__file__) - 3 # (/a/b/myfile.py - 3 = /)
APPS_DIR = ROOT_DIR.path("funkwhale_api")
env = environ.Env()
try:
env.read_env(ROOT_DIR.file(".env"))
except FileNotFoundError:
pass
env_file = env("ENV_FILE", default=None)
if env_file:
# we have an explicitely specified env file
# so we try to load and it fail loudly if it does not exist
print("ENV_FILE", env_file)
env.read_env(env_file)
else:
# we try to load from .env and config/.env
# but do not crash if those files don't exist
paths = [
# /srv/funwhale/api/.env
ROOT_DIR,
# /srv/funwhale/config/.env
((ROOT_DIR - 1) + "config"),
]
for path in paths:
try:
env_path = path.file(".env")
except FileNotFoundError:
logger.debug("No env file found at %s/.env", path)
continue
env.read_env(env_path)
logger.info("Loaded env file at %s/.env", path)
break
FUNKWHALE_HOSTNAME = None
FUNKWHALE_HOSTNAME_SUFFIX = env("FUNKWHALE_HOSTNAME_SUFFIX", default=None)

View File

@ -0,0 +1,10 @@
Load env file in config/.env automatically to avoid sourcing it by hand (#626)
Automatically load .env file
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
On non-docker deployments, earlier versions required you to source
the config/.env file before launching any Funkwhale command, with ``export $(cat config/.env | grep -v ^# | xargs)``
This led to more complex and error prode deployment / setup.
This is not the case anymore, and Funkwhale will automatically load this file if it's available.

View File

@ -112,11 +112,11 @@ Then we'll download the frontend files:
case, run
cd /srv
rm -r funkwhale
git clone -b master https://code.eliotberriot.com/funkwhale/funkwhale funkwhale
cd funkwhale
The above clone command uses the master branch instead of the default develop branch, as master is stable and more suited for production setups.
@ -228,18 +228,9 @@ Especially, populate the ``DATABASE_URL`` and ``CACHE_URL`` values based on
how you configured your PostgreSQL and Redis servers in
:doc:`external dependencies <./external_dependencies>`.
When you want to run command on the API server, such as to create the
database or compile static files, you have to ensure you source
the environment variables in that file.
This can be done like this::
export $(cat config/.env | grep -v ^# | xargs)
.. note::
Remember to reload these variables whenever you edit your .env file.
The environment file at config/.env is loaded automatically by Funkwhale processes.
Database setup
---------------

View File

@ -105,8 +105,6 @@ match what is described in :doc:`/installation/debian`:
# update os dependencies
sudo api/install_os_dependencies.sh install
# update python dependencies
source /srv/funkwhale/load_env
sudo -u funkwhale -E /srv/funkwhale/virtualenv/bin/pip install -r api/requirements.txt
# collect static files