diff --git a/deployment/data/nginx/run-nginx.sh b/deployment/data/nginx/run-nginx.sh new file mode 100755 index 000000000..12f64127c --- /dev/null +++ b/deployment/data/nginx/run-nginx.sh @@ -0,0 +1,20 @@ +# fill in the template +envsubst '$DOMAIN $SSL_CERT_FILE_NAME $SSL_CERT_KEY_FILE_NAME' < "/etc/nginx/conf.d/$1" > /etc/nginx/conf.d/app.conf + +# wait for the api_server to be ready +while true; do + # Use curl to send a request and capture the HTTP status code + status_code=$(curl -o /dev/null -s -w "%{http_code}\n" "http://api_server:8080/health") + + # Check if the status code is 200 + if [ "$status_code" -eq 200 ]; then + echo "API server responded with 200, starting nginx..." + break # Exit the loop + else + echo "API server responded with $status_code, retrying in 5 seconds..." + sleep 5 # Sleep for 5 seconds before retrying + fi +done + +# Start nginx and reload every 6 hours +while :; do sleep 6h & wait; nginx -s reload; done & nginx -g "daemon off;" diff --git a/deployment/docker_compose/docker-compose.dev.yml b/deployment/docker_compose/docker-compose.dev.yml index c533b1246..5e3bf1e04 100644 --- a/deployment/docker_compose/docker-compose.dev.yml +++ b/deployment/docker_compose/docker-compose.dev.yml @@ -219,13 +219,10 @@ services: options: max-size: "50m" max-file: "6" - # sleep a little bit to allow the web_server / api_server to start up. + # the specified script waits for the api_server to start up. # Without this we've seen issues where nginx shows no error logs but # does not recieve any traffic - command: > - /bin/sh -c "sleep 10 && - envsubst '$$\{DOMAIN\}' < /etc/nginx/conf.d/app.conf.template.dev > /etc/nginx/conf.d/app.conf && - while :; do sleep 6h & wait $${!}; nginx -s reload; done & nginx -g \"daemon off;\"" + command: "/bin/sh -c \"/etc/nginx/conf.d/run-nginx.sh app.conf.template.dev\"" # Run with --profile model-server to bring up the danswer-model-server container # Be sure to change MODEL_SERVER_HOST (see above) as well # ie. MODEL_SERVER_HOST="model_server" docker compose -f docker-compose.dev.yml -p danswer-stack --profile model-server up -d --build diff --git a/deployment/docker_compose/docker-compose.prod-no-letsencrypt.yml b/deployment/docker_compose/docker-compose.prod-no-letsencrypt.yml index c98eed433..2dfdac889 100644 --- a/deployment/docker_compose/docker-compose.prod-no-letsencrypt.yml +++ b/deployment/docker_compose/docker-compose.prod-no-letsencrypt.yml @@ -117,18 +117,15 @@ services: volumes: - ../data/nginx:/etc/nginx/conf.d - ../data/sslcerts:/etc/nginx/sslcerts - # sleep a little bit to allow the web_server / api_server to start up. - # Without this we've seen issues where nginx shows no error logs but - # does not recieve any traffic logging: driver: json-file options: max-size: "50m" max-file: "6" - command: > - /bin/sh -c "sleep 10 && - envsubst '$$\{DOMAIN\} $$\{SSL_CERT_FILE_NAME\} $$\{SSL_CERT_KEY_FILE_NAME\}' < /etc/nginx/conf.d/app.conf.template.no-letsencrypt > /etc/nginx/conf.d/app.conf && - while :; do sleep 6h & wait $${!}; nginx -s reload; done & nginx -g \"daemon off;\"" + # the specified script waits for the api_server to start up. + # Without this we've seen issues where nginx shows no error logs but + # does not recieve any traffic + command: "/bin/sh -c \"/etc/nginx/conf.d/run-nginx.sh app.conf.template.no-letsencrypt\"" env_file: - .env.nginx # Run with --profile model-server to bring up the danswer-model-server container diff --git a/deployment/docker_compose/docker-compose.prod.yml b/deployment/docker_compose/docker-compose.prod.yml index 2d9f3a099..0891c968c 100644 --- a/deployment/docker_compose/docker-compose.prod.yml +++ b/deployment/docker_compose/docker-compose.prod.yml @@ -126,10 +126,10 @@ services: options: max-size: "50m" max-file: "6" - command: > - /bin/sh -c "sleep 10 && - envsubst '$$\{DOMAIN\}' < /etc/nginx/conf.d/app.conf.template > /etc/nginx/conf.d/app.conf && - while :; do sleep 6h & wait $${!}; nginx -s reload; done & nginx -g \"daemon off;\"" + # the specified script waits for the api_server to start up. + # Without this we've seen issues where nginx shows no error logs but + # does not recieve any traffic + command: "/bin/sh -c \"/etc/nginx/conf.d/run-nginx.sh app.conf.template\"" env_file: - .env.nginx # follows https://pentacent.medium.com/nginx-and-lets-encrypt-with-docker-in-less-than-5-minutes-b4b8a60d3a71