diff --git a/fix_port_immediate.sh b/fix_port_immediate.sh new file mode 100644 index 0000000..f58efc4 --- /dev/null +++ b/fix_port_immediate.sh @@ -0,0 +1,140 @@ +#!/bin/bash +# Immediate fix for Waitress port issue - run on VPS +# This script fixes the service file to use hardcoded port from .env + +set -e + +echo "=== Immediate Fix for Waitress Port Issue ===" +echo + +APP_DIR="/opt/mockapi" +SERVICE_FILE="/etc/systemd/system/mockapi.service" +ENV_FILE="${APP_DIR}/.env" + +# Check if running as root or with sudo +if [[ $EUID -eq 0 ]]; then + echo "Running as root." +elif sudo -n true 2>/dev/null; then + echo "Has sudo privileges." +else + echo "ERROR: This script needs sudo privileges." + echo "Run with: sudo bash $0" + exit 1 +fi + +# Step 1: Check files exist +if [[ ! -f "$ENV_FILE" ]]; then + echo "ERROR: .env file not found at $ENV_FILE" + exit 1 +fi + +if [[ ! -f "$SERVICE_FILE" ]]; then + echo "ERROR: Service file not found at $SERVICE_FILE" + exit 1 +fi + +# Step 2: Read port from .env +PORT=$(grep "^PORT=" "$ENV_FILE" | cut -d'=' -f2 || echo "8000") +HOST=$(grep "^HOST=" "$ENV_FILE" | cut -d'=' -f2 || echo "0.0.0.0") + +# Validate port is numeric +if [[ ! "$PORT" =~ ^[0-9]+$ ]]; then + echo "WARNING: PORT '$PORT' is not numeric. Using 8000." + PORT="8000" + # Fix .env + sed -i "s/^PORT=.*/PORT=8000/" "$ENV_FILE" 2>/dev/null || \ + echo "PORT=8000" >> "$ENV_FILE" +fi + +echo "Found in .env: HOST=$HOST, PORT=$PORT" +echo + +# Step 3: Backup service file +BACKUP="${SERVICE_FILE}.backup.$(date +%s)" +cp "$SERVICE_FILE" "$BACKUP" +echo "Backup created: $BACKUP" + +# Step 4: Update service file +echo "Updating service file..." +# Get virtual environment path from current service file or use default +VENV_DIR=$(grep "Environment=\"PATH=" "$SERVICE_FILE" | cut -d'=' -f2 | cut -d':' -f1 | sed 's/"//g' || echo "/opt/mockapi/venv") + +# Extract other settings from current file +SERVICE_USER=$(grep "^User=" "$SERVICE_FILE" | cut -d'=' -f2) +SERVICE_GROUP=$(grep "^Group=" "$SERVICE_FILE" | cut -d'=' -f2) + +# Create fixed service file +cat > /tmp/mockapi_fixed.service << EOF +[Unit] +Description=Mock API Service +After=network.target +Wants=network.target + +[Service] +Type=simple +User=$SERVICE_USER +Group=$SERVICE_GROUP +WorkingDirectory=$APP_DIR +Environment="PATH=$VENV_DIR/bin" +Environment="PYTHONPATH=$APP_DIR" +EnvironmentFile=$APP_DIR/.env +# Fixed: Hardcoded port from .env +ExecStart=$VENV_DIR/bin/waitress-serve --host=$HOST --port=$PORT wsgi:wsgi_app +Restart=always +RestartSec=10 +StandardOutput=syslog +StandardError=syslog +SyslogIdentifier=mockapi + +# Security hardening +NoNewPrivileges=true +PrivateTmp=true +ProtectSystem=strict +ReadWritePaths=$APP_DIR + +[Install] +WantedBy=multi-user.target +EOF + +# Replace service file +cp /tmp/mockapi_fixed.service "$SERVICE_FILE" +rm /tmp/mockapi_fixed.service + +echo "Service file updated with hardcoded port $PORT." +echo + +# Step 5: Reload and restart +echo "Reloading systemd..." +systemctl daemon-reload + +echo "Restarting service..." +if systemctl restart mockapi; then + echo "Service restart initiated." + + # Wait and check + sleep 3 + + if systemctl is-active --quiet mockapi; then + echo "SUCCESS: Service is running!" + echo + echo "MockAPI should now be accessible at:" + echo " http://$(hostname -I | awk '{print $1}'):$PORT" + echo " http://localhost:$PORT" + echo + echo "Test with: curl http://localhost:$PORT/health" + else + echo "WARNING: Service not active after restart." + echo "Checking logs..." + journalctl -u mockapi -n 20 --no-pager + fi +else + echo "ERROR: Failed to restart service." + systemctl status mockapi --no-pager -l +fi + +echo +echo "=== Fix completed ===" +echo "If issues persist, restore backup:" +echo " cp $BACKUP $SERVICE_FILE" +echo " systemctl daemon-reload" +echo " systemctl restart mockapi" \ No newline at end of file diff --git a/fix_service_port.sh b/fix_service_port.sh new file mode 100644 index 0000000..8672bc0 --- /dev/null +++ b/fix_service_port.sh @@ -0,0 +1,128 @@ +#!/bin/bash +# Fix service port issue where $PORT is not being expanded properly + +set -e + +echo "=== Fixing MockAPI Service Port Issue ===" +echo + +APP_DIR="/opt/mockapi" +SERVICE_FILE="/etc/systemd/system/mockapi.service" + +print_status() { + echo -e "\033[0;32m[+]\033[0m $1" +} + +print_warning() { + echo -e "\033[1;33m[!]\033[0m $1" +} + +print_error() { + echo -e "\033[0;31m[!]\033[0m $1" +} + +# Step 1: Check if service file exists +if [[ ! -f "$SERVICE_FILE" ]]; then + print_error "Service file not found: $SERVICE_FILE" + print_warning "Make sure MockAPI is installed first." + exit 1 +fi + +# Step 2: Backup service file +print_status "Backing up service file..." +BACKUP_FILE="${SERVICE_FILE}.backup.$(date +%s)" +sudo cp "$SERVICE_FILE" "$BACKUP_FILE" +print_status "Backup created: $BACKUP_FILE" + +# Step 3: Check current ExecStart line +print_status "Checking current ExecStart configuration..." +CURRENT_EXEC=$(grep "^ExecStart=" "$SERVICE_FILE") +echo "Current ExecStart: $CURRENT_EXEC" + +# Check if we have the escaped \$PORT issue +if echo "$CURRENT_EXEC" | grep -q "\\\\\$PORT"; then + print_warning "Found escaped \$PORT in ExecStart line. This causes Waitress to parse '\$PORT' as a string." + print_status "Fixing ExecStart line..." + + # Create temporary file with fixed service config + TMP_SERVICE=$(mktemp) + + # Read and fix the service file + sudo cat "$SERVICE_FILE" | while IFS= read -r line; do + if [[ "$line" =~ ^ExecStart=.*waitress-serve.* ]]; then + # Remove backslashes before $HOST and $PORT + fixed_line=$(echo "$line" | sed 's/--host=\\\$HOST/--host=$HOST/g' | sed 's/--port=\\\$PORT/--port=$PORT/g') + echo "$fixed_line" + print_status "Fixed: $fixed_line" + else + echo "$line" + fi + done > "$TMP_SERVICE" + + # Replace service file + sudo mv "$TMP_SERVICE" "$SERVICE_FILE" + sudo chmod 644 "$SERVICE_FILE" + + print_status "Service file updated." +else + print_status "ExecStart line looks correct (no escaped \$PORT)." +fi + +# Step 4: Alternative approach - check if we should use environment variables directly +print_status "Checking if .env has PORT and HOST set..." +if [[ -f "${APP_DIR}/.env" ]]; then + ENV_PORT=$(grep "^PORT=" "${APP_DIR}/.env" | cut -d'=' -f2 || echo "8000") + ENV_HOST=$(grep "^HOST=" "${APP_DIR}/.env" | cut -d'=' -f2 || echo "0.0.0.0") + print_status "Found in .env: PORT=$ENV_PORT, HOST=$ENV_HOST" + + # Validate PORT is numeric + if [[ ! "$ENV_PORT" =~ ^[0-9]+$ ]]; then + print_error "PORT in .env is not numeric: '$ENV_PORT'" + print_status "Setting PORT to 8000" + sudo sed -i "s/^PORT=.*/PORT=8000/" "${APP_DIR}/.env" + fi +else + print_warning ".env file not found at ${APP_DIR}/.env" +fi + +# Step 5: Reload systemd and restart service +print_status "Reloading systemd daemon..." +sudo systemctl daemon-reload + +print_status "Restarting MockAPI service..." +if sudo systemctl restart mockapi; then + print_status "Service restart initiated." + + sleep 3 + + if sudo systemctl is-active --quiet mockapi; then + print_status "✓ Service is running successfully!" + + echo + print_status "Testing health endpoint..." + if curl -f -s http://localhost:${ENV_PORT:-8000}/health > /dev/null 2>&1; then + print_status "✓ Health check passed!" + echo + echo "Access your MockAPI:" + echo " Admin UI: http://localhost:${ENV_PORT:-8000}/admin/login" + echo " API Docs: http://localhost:${ENV_PORT:-8000}/docs" + echo " Health check: http://localhost:${ENV_PORT:-8000}/health" + else + print_warning "Health check failed. Checking service status..." + sudo systemctl status mockapi --no-pager -l + fi + else + print_error "Service failed to start after fix." + echo + print_warning "Checking service logs..." + sudo journalctl -u mockapi -n 30 --no-pager + fi +else + print_error "Failed to restart service." + sudo systemctl status mockapi --no-pager -l +fi + +echo +print_status "=== Fix completed ===" +echo "Backup service file: $BACKUP_FILE" +echo "If you encounter issues, restore with: sudo cp $BACKUP_FILE $SERVICE_FILE && sudo systemctl daemon-reload" \ No newline at end of file diff --git a/fix_vps_complete.sh b/fix_vps_complete.sh index 2a5af22..31d1293 100644 --- a/fix_vps_complete.sh +++ b/fix_vps_complete.sh @@ -297,6 +297,82 @@ else exit 1 fi +# Step 5.5: Fix service file port issue +print_status "Step 5.5: Fixing service file port configuration" + +SERVICE_FILE="/etc/systemd/system/mockapi.service" +if [[ -f "$SERVICE_FILE" ]]; then + print_status "Checking service file for port configuration issues..." + + # Check if service file has the escaped \$PORT issue + if grep -q "\\\\\$PORT" "$SERVICE_FILE" || grep -q "--port=\\\$PORT" "$SERVICE_FILE"; then + print_warning "Found escaped \$PORT in service file. Fixing..." + + # Read port from .env + SERVICE_PORT=$(grep "^PORT=" "$ENV_FILE" | cut -d'=' -f2 || echo "8000") + SERVICE_HOST=$(grep "^HOST=" "$ENV_FILE" | cut -d'=' -f2 || echo "0.0.0.0") + + # Validate port + if [[ ! "$SERVICE_PORT" =~ ^[0-9]+$ ]]; then + print_warning "PORT '$SERVICE_PORT' is not numeric. Using 8000." + SERVICE_PORT="8000" + sed -i "s/^PORT=.*/PORT=8000/" "$ENV_FILE" + fi + + print_status "Updating service file with hardcoded port: $SERVICE_PORT" + + # Backup service file + SERVICE_BACKUP="${SERVICE_FILE}.backup.$(date +%s)" + sudo cp "$SERVICE_FILE" "$SERVICE_BACKUP" + print_status "Service file backed up to: $SERVICE_BACKUP" + + # Get VENV_DIR from current service file + VENV_DIR=$(grep 'Environment="PATH=' "$SERVICE_FILE" | cut -d'=' -f2 | cut -d':' -f1 | sed 's/"//g' || echo "/opt/mockapi/venv") + + # Create fixed service file + sudo tee "$SERVICE_FILE" > /dev/null << EOF +[Unit] +Description=Mock API Service +After=network.target +Wants=network.target + +[Service] +Type=simple +User=$(grep "^User=" "$SERVICE_FILE" | cut -d'=' -f2) +Group=$(grep "^Group=" "$SERVICE_FILE" | cut -d'=' -f2) +WorkingDirectory=$APP_DIR +Environment="PATH=$VENV_DIR/bin" +Environment="PYTHONPATH=$APP_DIR" +EnvironmentFile=$APP_DIR/.env +# Fixed: Hardcoded port from .env +ExecStart=$VENV_DIR/bin/waitress-serve --host=$SERVICE_HOST --port=$SERVICE_PORT wsgi:wsgi_app +Restart=always +RestartSec=10 +StandardOutput=syslog +StandardError=syslog +SyslogIdentifier=mockapi + +# Security hardening +NoNewPrivileges=true +PrivateTmp=true +ProtectSystem=strict +ReadWritePaths=$APP_DIR + +[Install] +WantedBy=multi-user.target +EOF + + print_status "Service file updated with hardcoded port $SERVICE_PORT." + sudo systemctl daemon-reload + print_status "Systemd daemon reloaded." + else + print_status "Service file port configuration looks correct." + fi +else + print_warning "Service file not found: $SERVICE_FILE" + print_warning "Service won't be fixed. Install service first with install.sh." +fi + # Step 6: Restart the service print_status "Step 6: Restarting MockAPI service" sudo systemctl restart mockapi @@ -311,13 +387,19 @@ if sudo systemctl is-active --quiet mockapi; then echo print_status "Testing API endpoints..." - if curl -f -s http://localhost:8000/health > /dev/null 2>&1; then - print_status "✓ Health check passed: http://localhost:8000/health" + # Read port from .env for testing + TEST_PORT=$(grep "^PORT=" "$ENV_FILE" 2>/dev/null | cut -d'=' -f2 || echo "8000") + if [[ ! "$TEST_PORT" =~ ^[0-9]+$ ]]; then + TEST_PORT="8000" + fi + + if curl -f -s http://localhost:$TEST_PORT/health > /dev/null 2>&1; then + print_status "✓ Health check passed: http://localhost:$TEST_PORT/health" echo echo "Access your MockAPI:" - echo " Admin UI: http://localhost:8000/admin/login" - echo " API Docs: http://localhost:8000/docs" - echo " Health check: http://localhost:8000/health" + echo " Admin UI: http://localhost:$TEST_PORT/admin/login" + echo " API Docs: http://localhost:$TEST_PORT/docs" + echo " Health check: http://localhost:$TEST_PORT/health" else print_warning "Health check failed. Checking logs..." sudo journalctl -u mockapi -n 10 --no-pager diff --git a/fix_waitress_port.sh b/fix_waitress_port.sh new file mode 100644 index 0000000..4c4f348 --- /dev/null +++ b/fix_waitress_port.sh @@ -0,0 +1,262 @@ +#!/bin/bash +# Comprehensive fix for Waitress port parsing issue on VPS + +set -e + +echo "=== Fixing Waitress Port Parsing Issue ===" +echo + +APP_DIR="/opt/mockapi" +SERVICE_FILE="/etc/systemd/system/mockapi.service" +ENV_FILE="${APP_DIR}/.env" + +print_status() { + echo -e "\033[0;32m[+]\033[0m $1" +} + +print_warning() { + echo -e "\033[1;33m[!]\033[0m $1" +} + +print_error() { + echo -e "\033[0;31m[!]\033[0m $1" +} + +# Step 1: Check environment +print_status "Step 1: Checking environment" +if [[ ! -d "$APP_DIR" ]]; then + print_error "Application directory not found: $APP_DIR" + exit 1 +fi + +if [[ ! -f "$SERVICE_FILE" ]]; then + print_error "Service file not found: $SERVICE_FILE" + exit 1 +fi + +cd "$APP_DIR" + +# Step 2: Read current port from .env +print_status "Step 2: Reading current configuration" +PORT="8000" +HOST="0.0.0.0" + +if [[ -f "$ENV_FILE" ]]; then + if grep -q "^PORT=" "$ENV_FILE"; then + PORT=$(grep "^PORT=" "$ENV_FILE" | cut -d'=' -f2) + print_status "Found PORT in .env: $PORT" + + # Validate PORT is numeric + if [[ ! "$PORT" =~ ^[0-9]+$ ]]; then + print_error "PORT is not numeric: '$PORT'. Setting to 8000." + PORT="8000" + sudo sed -i "s/^PORT=.*/PORT=8000/" "$ENV_FILE" + fi + else + print_warning "PORT not found in .env, adding PORT=8000" + echo "PORT=8000" | sudo tee -a "$ENV_FILE" > /dev/null + fi + + if grep -q "^HOST=" "$ENV_FILE"; then + HOST=$(grep "^HOST=" "$ENV_FILE" | cut -d'=' -f2) + print_status "Found HOST in .env: $HOST" + else + print_warning "HOST not found in .env, adding HOST=0.0.0.0" + echo "HOST=0.0.0.0" | sudo tee -a "$ENV_FILE" > /dev/null + fi +else + print_error ".env file not found: $ENV_FILE" + exit 1 +fi + +# Step 3: Backup service file +print_status "Step 3: Backing up service file" +BACKUP_FILE="${SERVICE_FILE}.backup.$(date +%s)" +sudo cp "$SERVICE_FILE" "$BACKUP_FILE" +print_status "Backup created: $BACKUP_FILE" + +# Step 4: Fix service file - OPTION 1: Use shell expansion +print_status "Step 4: Fixing service file ExecStart command" +print_warning "Current issue: Waitress receives literal string '\$PORT' instead of expanded value" +print_status "Solution 1: Use /bin/sh -c to enable shell variable expansion" + +# Get the virtual environment path +VENV_DIR="${APP_DIR}/venv" +if [[ ! -d "$VENV_DIR" ]]; then + print_error "Virtual environment not found: $VENV_DIR" + exit 1 +fi + +# Read current service file to get other settings +CURRENT_USER=$(grep "^User=" "$SERVICE_FILE" | cut -d'=' -f2) +CURRENT_GROUP=$(grep "^Group=" "$SERVICE_FILE" | cut -d'=' -f2) +CURRENT_WORKDIR=$(grep "^WorkingDirectory=" "$SERVICE_FILE" | cut -d'=' -f2) + +print_status "Current service settings:" +print_status " User: $CURRENT_USER" +print_status " Group: $CURRENT_GROUP" +print_status " WorkingDirectory: $CURRENT_WORKDIR" + +# Create new service file with fixed ExecStart +print_status "Creating fixed service file..." +sudo tee "$SERVICE_FILE" > /dev/null << EOF +[Unit] +Description=Mock API Service +After=network.target +Wants=network.target + +[Service] +Type=simple +User=$CURRENT_USER +Group=$CURRENT_GROUP +WorkingDirectory=$CURRENT_WORKDIR +Environment="PATH=$VENV_DIR/bin" +Environment="PYTHONPATH=$APP_DIR" +EnvironmentFile=$APP_DIR/.env +# Use shell to expand environment variables +ExecStart=/bin/sh -c "$VENV_DIR/bin/waitress-serve --host=\$HOST --port=\$PORT wsgi:wsgi_app" +Restart=always +RestartSec=10 +StandardOutput=syslog +StandardError=syslog +SyslogIdentifier=mockapi + +# Security hardening +NoNewPrivileges=true +PrivateTmp=true +ProtectSystem=strict +ReadWritePaths=$APP_DIR + +[Install] +WantedBy=multi-user.target +EOF + +print_status "Service file updated with shell expansion." + +# Step 5: Alternative simpler fix - hardcode port based on .env value +print_status "Alternative approach available: Hardcode port in service file" +print_warning "Would you like to hardcode port $PORT in service file instead? (y/N)" +read -p "Choice: " -n 1 -r +echo + +if [[ $REPLY =~ ^[Yy]$ ]]; then + print_status "Hardcoding port $PORT in service file..." + sudo tee "$SERVICE_FILE" > /dev/null << EOF +[Unit] +Description=Mock API Service +After=network.target +Wants=network.target + +[Service] +Type=simple +User=$CURRENT_USER +Group=$CURRENT_GROUP +WorkingDirectory=$CURRENT_WORKDIR +Environment="PATH=$VENV_DIR/bin" +Environment="PYTHONPATH=$APP_DIR" +EnvironmentFile=$APP_DIR/.env +# Hardcoded port based on .env value +ExecStart=$VENV_DIR/bin/waitress-serve --host=$HOST --port=$PORT wsgi:wsgi_app +Restart=always +RestartSec=10 +StandardOutput=syslog +StandardError=syslog +SyslogIdentifier=mockapi + +# Security hardening +NoNewPrivileges=true +PrivateTmp=true +ProtectSystem=strict +ReadWritePaths=$APP_DIR + +[Install] +WantedBy=multi-user.target +EOF + print_status "Service file updated with hardcoded port $PORT." + print_warning "Note: If you change PORT in .env, you must update service file manually." +fi + +# Step 6: Reload and restart +print_status "Step 5: Reloading systemd daemon..." +sudo systemctl daemon-reload + +print_status "Step 6: Restarting service..." +sudo systemctl restart mockapi + +sleep 3 + +# Step 7: Verify +print_status "Step 7: Verifying service status..." +if sudo systemctl is-active --quiet mockapi; then + print_status "✓ Service is running!" + + echo + print_status "Testing health endpoint on port $PORT..." + if curl -f -s --max-time 10 http://localhost:$PORT/health > /dev/null 2>&1; then + print_status "✓ Health check passed!" + echo + echo "=== Service Fixed Successfully ===" + echo "MockAPI is now running on:" + echo " URL: http://localhost:$PORT" + echo " Admin: http://localhost:$PORT/admin/login" + echo " Docs: http://localhost:$PORT/docs" + echo " Health: http://localhost:$PORT/health" + else + print_warning "Health check failed (might be starting up). Checking logs..." + sleep 2 + if curl -f -s --max-time 5 http://localhost:$PORT/health > /dev/null 2>&1; then + print_status "✓ Health check passed on second attempt!" + else + print_warning "Service running but health check failing. Checking logs..." + sudo journalctl -u mockapi -n 20 --no-pager + fi + fi +else + print_error "Service failed to start after fix." + echo + print_warning "Checking service logs..." + sudo journalctl -u mockapi -n 30 --no-pager + echo + print_warning "Trying alternative approach with simplified service file..." + + # Try a simpler approach - just hardcode common values + print_status "Creating minimal service file..." + sudo tee "$SERVICE_FILE" > /dev/null << EOF +[Unit] +Description=Mock API Service +After=network.target + +[Service] +Type=simple +User=$CURRENT_USER +Group=$CURRENT_GROUP +WorkingDirectory=$APP_DIR +Environment="PATH=$VENV_DIR/bin" +ExecStart=$VENV_DIR/bin/waitress-serve --host=0.0.0.0 --port=8000 wsgi:wsgi_app +Restart=always +RestartSec=10 + +[Install] +WantedBy=multi-user.target +EOF + + sudo systemctl daemon-reload + sudo systemctl restart mockapi + + sleep 3 + + if sudo systemctl is-active --quiet mockapi; then + print_status "✓ Service started with hardcoded values!" + print_warning "Running on default port 8000. Update .env to match." + sudo sed -i "s/^PORT=.*/PORT=8000/" "$ENV_FILE" + else + print_error "All fixes failed. Please check manual configuration." + sudo journalctl -u mockapi -n 30 --no-pager + fi +fi + +echo +print_status "=== Fix script completed ===" +echo "Backup service file: $BACKUP_FILE" +echo "Current .env PORT: $PORT" +echo "Current .env HOST: $HOST" \ No newline at end of file diff --git a/install.sh b/install.sh index 7cac799..ce7305c 100644 --- a/install.sh +++ b/install.sh @@ -299,6 +299,36 @@ setup_systemd_service() { fi fi + # Read HOST and PORT from .env for service file + SERVICE_HOST="0.0.0.0" + SERVICE_PORT="8000" + + if [[ -f "${APP_DIR}/.env" ]]; then + # Read HOST from .env + if grep -q "^HOST=" "${APP_DIR}/.env"; then + SERVICE_HOST=$(grep "^HOST=" "${APP_DIR}/.env" | cut -d'=' -f2) + fi + + # Read PORT from .env (use current PORT variable as fallback) + if grep -q "^PORT=" "${APP_DIR}/.env"; then + SERVICE_PORT=$(grep "^PORT=" "${APP_DIR}/.env" | cut -d'=' -f2) + elif [[ -n "$PORT" ]]; then + SERVICE_PORT="$PORT" + fi + + # Validate PORT is numeric + if [[ ! "$SERVICE_PORT" =~ ^[0-9]+$ ]]; then + print_error "PORT in .env is not numeric: '$SERVICE_PORT'. Using 8000." + SERVICE_PORT="8000" + # Fix .env + sed -i "s/^PORT=.*/PORT=8000/" "${APP_DIR}/.env" + fi + else + SERVICE_PORT="$PORT" + fi + + print_status "Service will run on: $SERVICE_HOST:$SERVICE_PORT" + # Create systemd service file print_status "Creating systemd service file at $SERVICE_FILE..." @@ -316,7 +346,9 @@ WorkingDirectory=$APP_DIR Environment="PATH=$VENV_DIR/bin" Environment="PYTHONPATH=$APP_DIR" EnvironmentFile=$APP_DIR/.env -ExecStart=$VENV_DIR/bin/waitress-serve --host=\$HOST --port=\$PORT wsgi:wsgi_app +# Note: HOST and PORT are hardcoded from .env values at install time +# If you change PORT in .env, you must update this service file +ExecStart=$VENV_DIR/bin/waitress-serve --host=$SERVICE_HOST --port=$SERVICE_PORT wsgi:wsgi_app Restart=always RestartSec=10 StandardOutput=syslog