diff --git a/.env b/.env index e6f5f487c..69a217df0 100644 --- a/.env +++ b/.env @@ -32,3 +32,11 @@ DOCKER_DB_VOL=4cat_4cat_db DOCKER_DATA_VOL=4cat_4cat_data DOCKER_CONFIG_VOL=4cat_4cat_share DOCKER_LOGS_VOL=4cat_4cat_logs + +# Gunicorn settings +worker_tmp_dir=/dev/shm +workers=4 +threads=4 +worker_class=gthread +log_level=debug + diff --git a/docker-compose.yml b/docker-compose.yml index 3468b0380..0618227a5 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -39,6 +39,8 @@ services: image: digitalmethodsinitiative/4cat:${DOCKER_TAG} container_name: 4cat_frontend restart: unless-stopped + env_file: + - .env depends_on: - db - backend @@ -49,7 +51,7 @@ services: - 4cat_data:/usr/src/app/data/ - 4cat_config:/usr/src/app/config/ - 4cat_logs:/usr/src/app/logs/ - command: ["docker/wait-for-backend.sh", "gunicorn", "--worker-tmp-dir", "/dev/shm", "--workers", "2", "--threads", "4", "--worker-class", "gthread", "--access-logfile", "/usr/src/app/logs/access_gunicorn.log", "--log-level", "info", "--bind", "0.0.0.0:5000", "webtool:app"] + command: ["docker/wait-for-backend.sh"] volumes: 4cat_db: diff --git a/docker-compose_build.yml b/docker-compose_build.yml index 4b893ee97..bae3d886c 100644 --- a/docker-compose_build.yml +++ b/docker-compose_build.yml @@ -11,6 +11,7 @@ services: - POSTGRES_HOST_AUTH_METHOD=${POSTGRES_HOST_AUTH_METHOD} volumes: - ./data/postgres/:/var/lib/postgresql/data/ +# - 4cat_db:/var/lib/postgresql/data/ healthcheck: test: [ "CMD-SHELL", "pg_isready -U $${POSTGRES_USER}" ] interval: 5s @@ -34,11 +35,17 @@ services: - ./data/datasets/:/usr/src/app/data/ - ./data/config/:/usr/src/app/config/ - ./data/logs/:/usr/src/app/logs/ +# - 4cat_data:/usr/src/app/data/ +# - 4cat_config:/usr/src/app/config/ +# - 4cat_logs:/usr/src/app/logs/ + entrypoint: docker/docker-entrypoint.sh frontend: image: 4cat container_name: 4cat_frontend + env_file: + - .env depends_on: - db - backend @@ -49,7 +56,10 @@ services: - ./data/datasets/:/usr/src/app/data/ - ./data/config/:/usr/src/app/config/ - ./data/logs/:/usr/src/app/logs/ - command: ["docker/wait-for-backend.sh", "gunicorn", "--worker-tmp-dir", "/dev/shm", "--workers", "2", "--threads", "4", "--worker-class", "gthread", "--access-logfile", "/usr/src/app/logs/access_gunicorn.log", "--log-level", "info", "--bind", "0.0.0.0:5000", "webtool:app"] +# - 4cat_data:/usr/src/app/data/ +# - 4cat_config:/usr/src/app/config/ +# - 4cat_logs:/usr/src/app/logs/ + command: ["docker/wait-for-backend.sh"] volumes: 4cat_db: diff --git a/docker-compose_public_ip.yml b/docker-compose_public_ip.yml index 244e77e18..20e3b5ca3 100644 --- a/docker-compose_public_ip.yml +++ b/docker-compose_public_ip.yml @@ -49,6 +49,8 @@ services: image: digitalmethodsinitiative/4cat:${DOCKER_TAG} container_name: 4cat_frontend restart: unless-stopped + env_file: + - .env depends_on: - db - backend @@ -59,7 +61,7 @@ services: - 4cat_data:/usr/src/app/data/ - 4cat_config:/usr/src/app/config/ - 4cat_logs:/usr/src/app/logs/ - command: ["docker/wait-for-backend.sh", "gunicorn", "--worker-tmp-dir", "/dev/shm", "--workers", "2", "--threads", "4", "--worker-class", "gthread", "--access-logfile", "/usr/src/app/logs/access_gunicorn.log", "--log-level", "info", "--bind", "0.0.0.0:5000", "webtool:app"] + command: ["docker/wait-for-backend.sh"] volumes: 4cat_db: diff --git a/docker/wait-for-backend.sh b/docker/wait-for-backend.sh index 6d5844cc5..ff485620a 100644 --- a/docker/wait-for-backend.sh +++ b/docker/wait-for-backend.sh @@ -9,5 +9,16 @@ until python3 -m docker.wait-for-backend; do done >&2 echo "Backend is up" -sleep 2 -exec "$@" + +# Run migrate to ensure 4CAT is up to date if version file has changed +python3 -m helper-scripts.migrate.py -y --component frontend --current-version config/.current-version-frontend + +# Default values for Gunicorn (if not provided by environment) +: "${worker_tmp_dir:=/dev/shm}" +: "${workers:=4}" +: "${threads:=4}" +: "${worker_class:=gthread}" +: "${log_level:=info}" + +>&2 echo "Starting Gunicorn:" +exec `gunicorn --worker-tmp-dir $worker_tmp_dir --workers $workers --threads $threads --worker-class $worker_class --access-logfile /usr/src/app/logs/access_gunicorn.log --log-level $log_level --bind 0.0.0.0:5000 webtool:app`