diff --git a/deployment/docker_compose/init-letsencrypt.sh b/deployment/docker_compose/init-letsencrypt.sh index c58e1230f88..d821f28c071 100755 --- a/deployment/docker_compose/init-letsencrypt.sh +++ b/deployment/docker_compose/init-letsencrypt.sh @@ -6,10 +6,20 @@ set -o allexport source .env.nginx set +o allexport -if ! docker compose --version >/dev/null 2>&1; then - echo 'Error: docker compose is not installed.' >&2 - exit 1 -fi +# Function to determine correct docker compose command +docker_compose_cmd() { + if command -v docker-compose >/dev/null 2>&1; then + echo "docker-compose" + elif command -v docker compose >/dev/null 2>&1; then + echo "docker compose" + else + echo 'Error: docker-compose or docker compose is not installed.' >&2 + exit 1 + fi +} + +# Assign appropriate Docker Compose command +COMPOSE_CMD=$(docker_compose_cmd) domains=("$DOMAIN" "www.$DOMAIN") rsa_key_size=4096 @@ -36,7 +46,7 @@ fi echo "### Creating dummy certificate for $domains ..." path="/etc/letsencrypt/live/$domains" mkdir -p "$data_path/conf/live/$domains" -docker compose -f docker-compose.prod.yml run --name danswer-stack --rm --entrypoint "\ +$COMPOSE_CMD -f docker-compose.prod.yml run --name danswer-stack --rm --entrypoint "\ openssl req -x509 -nodes -newkey rsa:$rsa_key_size -days 1\ -keyout '$path/privkey.pem' \ -out '$path/fullchain.pem' \ @@ -45,11 +55,25 @@ echo echo "### Starting nginx ..." -docker compose -f docker-compose.prod.yml -p danswer-stack up --force-recreate -d nginx +$COMPOSE_CMD -f docker-compose.prod.yml -p danswer-stack up --force-recreate -d nginx echo +echo "Waiting for nginx to be ready, this may take a minute..." +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://localhost/api/health") + + # Check if the status code is 200 + if [ "$status_code" -eq 200 ]; then + break # Exit the loop + else + echo "Nginx is not ready yet, retrying in 5 seconds..." + sleep 5 # Sleep for 5 seconds before retrying + fi +done + echo "### Deleting dummy certificate for $domains ..." -docker compose -f docker-compose.prod.yml run --name danswer-stack --rm --entrypoint "\ +$COMPOSE_CMD -f docker-compose.prod.yml run --name danswer-stack --rm --entrypoint "\ rm -Rf /etc/letsencrypt/live/$domains && \ rm -Rf /etc/letsencrypt/archive/$domains && \ rm -Rf /etc/letsencrypt/renewal/$domains.conf" certbot @@ -72,7 +96,7 @@ esac # Enable staging mode if needed if [ $staging != "0" ]; then staging_arg="--staging"; fi -docker compose -f docker-compose.prod.yml run --name danswer-stack --rm --entrypoint "\ +$COMPOSE_CMD -f docker-compose.prod.yml run --name danswer-stack --rm --entrypoint "\ certbot certonly --webroot -w /var/www/certbot \ $staging_arg \ $email_arg \ @@ -83,4 +107,4 @@ docker compose -f docker-compose.prod.yml run --name danswer-stack --rm --entryp echo echo "### Reloading nginx ..." -docker compose -f docker-compose.prod.yml -p danswer-stack up --force-recreate -d nginx +$COMPOSE_CMD -f docker-compose.prod.yml -p danswer-stack up --force-recreate -d nginx