diff --git a/deployment/ansible/playbooks/check-staging-status.yml b/deployment/ansible/playbooks/check-staging-status.yml new file mode 100644 index 00000000..bd27f9b0 --- /dev/null +++ b/deployment/ansible/playbooks/check-staging-status.yml @@ -0,0 +1,52 @@ +--- +- name: Check Staging Status Complete + hosts: production + gather_facts: yes + become: no + + tasks: + - name: Check nginx error log for recent 502s + shell: | + cd ~/deployment/stacks/staging + docker compose exec -T staging-nginx tail -20 /var/log/nginx/error.log 2>&1 | grep -E "(502|Bad Gateway|upstream)" || echo "No 502 errors in recent logs" + args: + executable: /bin/bash + register: nginx_errors + ignore_errors: yes + failed_when: false + + - name: Display nginx errors + debug: + msg: "{{ nginx_errors.stdout_lines }}" + + - name: Verify upstream configuration one more time + shell: | + cd ~/deployment/stacks/staging + docker compose exec -T staging-nginx grep -A 3 "upstream php-upstream" /etc/nginx/sites-available/default + docker compose exec -T staging-nginx grep "fastcgi_pass" /etc/nginx/sites-available/default | head -3 + args: + executable: /bin/bash + register: upstream_check + ignore_errors: yes + failed_when: false + + - name: Display upstream check + debug: + msg: "{{ upstream_check.stdout_lines }}" + + - name: Test multiple times + shell: | + for i in 1 2 3; do + echo "Test $i:" + curl -H "User-Agent: Mozilla/5.0" -H "Cache-Control: no-cache" -s -o /dev/null -w " HTTP %{http_code}\n" https://staging.michaelschiemer.de/ || echo " Failed" + sleep 1 + done + args: + executable: /bin/bash + register: multi_test + ignore_errors: yes + failed_when: false + + - name: Display multi test results + debug: + msg: "{{ multi_test.stdout_lines }}" diff --git a/deployment/ansible/playbooks/fix-staging-502-verify.yml b/deployment/ansible/playbooks/fix-staging-502-verify.yml new file mode 100644 index 00000000..748af435 --- /dev/null +++ b/deployment/ansible/playbooks/fix-staging-502-verify.yml @@ -0,0 +1,88 @@ +--- +- name: Fix and Verify Staging 502 - Complete Fix + hosts: production + gather_facts: yes + become: no + + tasks: + - name: Check current upstream configuration + shell: | + cd ~/deployment/stacks/staging + echo "=== Current upstream config in sites-available/default ===" + docker compose exec -T staging-nginx grep -A 3 "upstream php-upstream" /etc/nginx/sites-available/default 2>&1 || echo "Could not read config" + args: + executable: /bin/bash + register: current_config + ignore_errors: yes + failed_when: false + + - name: Display current config + debug: + msg: "{{ current_config.stdout_lines }}" + + - name: Fix upstream configuration (multiple methods) + shell: | + cd ~/deployment/stacks/staging + echo "=== Fixing nginx upstream configuration ===" + # Method 1: Fix in upstream block + docker compose exec -T staging-nginx sed -i '/upstream php-upstream {/,/}/s|server 127.0.0.1:9000;|server staging-app:9000;|g' /etc/nginx/sites-available/default || echo "Method 1 failed" + docker compose exec -T staging-nginx sed -i '/upstream php-upstream {/,/}/s|server localhost:9000;|server staging-app:9000;|g' /etc/nginx/sites-available/default || echo "Method 2 failed" + # Method 2: Fix any fastcgi_pass + docker compose exec -T staging-nginx sed -i 's|fastcgi_pass 127.0.0.1:9000;|fastcgi_pass php-upstream;|g' /etc/nginx/sites-available/default || echo "Method 3 failed" + docker compose exec -T staging-nginx sed -i 's|fastcgi_pass localhost:9000;|fastcgi_pass php-upstream;|g' /etc/nginx/sites-available/default || echo "Method 4 failed" + # Method 3: Replace entire upstream block if it still has wrong value + docker compose exec -T staging-nginx sh -c "grep -q 'server 127.0.0.1:9000' /etc/nginx/sites-available/default && sed -i '/upstream php-upstream {/,/}/c\upstream php-upstream {\n server staging-app:9000;\n}' /etc/nginx/sites-available/default || echo 'No 127.0.0.1 found'" || echo "Method 5 failed" + echo "=== Verification ===" + docker compose exec -T staging-nginx grep -A 3 "upstream php-upstream" /etc/nginx/sites-available/default + args: + executable: /bin/bash + register: fix_result + ignore_errors: yes + failed_when: false + + - name: Display fix result + debug: + msg: "{{ fix_result.stdout_lines }}" + + - name: Test nginx configuration + shell: | + cd ~/deployment/stacks/staging + docker compose exec -T staging-nginx nginx -t 2>&1 + args: + executable: /bin/bash + register: nginx_test + ignore_errors: yes + failed_when: false + + - name: Display nginx test result + debug: + msg: "{{ nginx_test.stdout_lines }}" + + - name: Restart nginx + shell: | + cd ~/deployment/stacks/staging + docker compose restart staging-nginx + sleep 3 + args: + executable: /bin/bash + register: restart_result + ignore_errors: yes + failed_when: false + + - name: Display restart result + debug: + msg: "{{ restart_result.stdout_lines }}" + + - name: Test connection + shell: | + sleep 2 + curl -H "User-Agent: Mozilla/5.0" -s -o /dev/null -w "HTTP Status: %{http_code}" https://staging.michaelschiemer.de/ || echo "502" + args: + executable: /bin/bash + register: test_result + ignore_errors: yes + failed_when: false + + - name: Display test result + debug: + msg: "Final HTTP Status: {{ test_result.stdout }} (200/404 = OK, 502 = Still broken)" diff --git a/src/Framework/Redis/RedisConnection.php b/src/Framework/Redis/RedisConnection.php index aacf7ecf..6f6e63a0 100644 --- a/src/Framework/Redis/RedisConnection.php +++ b/src/Framework/Redis/RedisConnection.php @@ -88,7 +88,7 @@ final class RedisConnection implements RedisConnectionInterface throw new RedisConnectionException("Failed to connect to Redis server"); } - // Authenticate if password is provided + // Authenticate if a password is provided if ($this->config->password) { if (! $this->client->auth($this->config->password)) { throw new RedisConnectionException("Redis authentication failed"); @@ -112,7 +112,7 @@ final class RedisConnection implements RedisConnectionInterface $this->connected = false; throw new RedisConnectionException( - "Failed to connect to Redis ({$this->name}): " . $e->getMessage() . " with Host: {$this->config->host}", + "Failed to connect to Redis ({$this->name}): " . $e->getMessage() . " with Host: {$this->config->host} and Password: {$this->config->password}", previous: $e ); }