feat: add Redis connection diagnostics, VPN routing fixes, and Traefik middleware updates
This commit is contained in:
121
deployment/ansible/playbooks/test-redis-connection-direct.yml
Normal file
121
deployment/ansible/playbooks/test-redis-connection-direct.yml
Normal file
@@ -0,0 +1,121 @@
|
||||
---
|
||||
- name: Test Redis Connection Directly with php-redis Extension
|
||||
hosts: production
|
||||
gather_facts: yes
|
||||
become: no
|
||||
|
||||
tasks:
|
||||
- name: Check if php-redis extension is loaded
|
||||
shell: |
|
||||
docker exec app php -r "
|
||||
if (extension_loaded('redis')) {
|
||||
echo 'php-redis extension: LOADED' . PHP_EOL;
|
||||
echo 'Redis class available: ' . (class_exists('Redis') ? 'YES' : 'NO') . PHP_EOL;
|
||||
} else {
|
||||
echo 'php-redis extension: NOT LOADED' . PHP_EOL;
|
||||
}
|
||||
"
|
||||
args:
|
||||
executable: /bin/bash
|
||||
register: extension_check
|
||||
ignore_errors: yes
|
||||
failed_when: false
|
||||
|
||||
- name: Display extension check
|
||||
debug:
|
||||
msg: "{{ extension_check.stdout_lines }}"
|
||||
|
||||
- name: Test Redis connection with actual php-redis
|
||||
shell: |
|
||||
docker exec app php -r "
|
||||
// Get environment variables
|
||||
\$redis_host = getenv('REDIS_HOST') ?: 'redis';
|
||||
\$redis_port = (int)(getenv('REDIS_PORT') ?: 6379);
|
||||
\$redis_password = getenv('REDIS_PASSWORD');
|
||||
|
||||
echo '=== Redis Connection Test ===' . PHP_EOL;
|
||||
echo 'REDIS_HOST: ' . \$redis_host . PHP_EOL;
|
||||
echo 'REDIS_PORT: ' . \$redis_port . PHP_EOL;
|
||||
echo 'REDIS_PASSWORD: ' . (\$redis_password ? 'SET (length: ' . strlen(\$redis_password) . ')' : 'NOT SET') . PHP_EOL;
|
||||
echo PHP_EOL;
|
||||
|
||||
if (!extension_loaded('redis')) {
|
||||
echo 'ERROR: php-redis extension is not loaded!' . PHP_EOL;
|
||||
exit(1);
|
||||
}
|
||||
|
||||
if (!class_exists('Redis')) {
|
||||
echo 'ERROR: Redis class is not available!' . PHP_EOL;
|
||||
exit(1);
|
||||
}
|
||||
|
||||
try {
|
||||
\$redis = new Redis();
|
||||
echo 'Created Redis instance' . PHP_EOL;
|
||||
|
||||
// Connect
|
||||
\$success = \$redis->connect(\$redis_host, \$redis_port, 2.0);
|
||||
if (!\$success) {
|
||||
echo 'ERROR: Failed to connect to Redis server' . PHP_EOL;
|
||||
exit(1);
|
||||
}
|
||||
echo 'Connected to Redis server' . PHP_EOL;
|
||||
|
||||
// Authenticate if password is provided
|
||||
if (\$redis_password) {
|
||||
\$auth_result = \$redis->auth(\$redis_password);
|
||||
if (!\$auth_result) {
|
||||
echo 'ERROR: Redis authentication failed' . PHP_EOL;
|
||||
echo 'Password used: ' . substr(\$redis_password, 0, 5) . '...' . PHP_EOL;
|
||||
exit(1);
|
||||
}
|
||||
echo 'Authenticated with Redis' . PHP_EOL;
|
||||
}
|
||||
|
||||
// Test PING
|
||||
\$ping_result = \$redis->ping();
|
||||
echo 'Redis PING: ' . \$ping_result . PHP_EOL;
|
||||
|
||||
// Test SET/GET
|
||||
\$test_key = 'test_connection_' . time();
|
||||
\$test_value = 'test_value';
|
||||
\$set_result = \$redis->set(\$test_key, \$test_value);
|
||||
echo 'SET test: ' . (\$set_result ? 'OK' : 'FAILED') . PHP_EOL;
|
||||
|
||||
\$get_result = \$redis->get(\$test_key);
|
||||
echo 'GET test: ' . (\$get_result === \$test_value ? 'OK' : 'FAILED') . PHP_EOL;
|
||||
|
||||
// Cleanup
|
||||
\$redis->del(\$test_key);
|
||||
\$redis->close();
|
||||
|
||||
echo PHP_EOL . '? All tests passed!' . PHP_EOL;
|
||||
} catch (Exception \$e) {
|
||||
echo 'ERROR: ' . \$e->getMessage() . PHP_EOL;
|
||||
echo 'Exception type: ' . get_class(\$e) . PHP_EOL;
|
||||
exit(1);
|
||||
}
|
||||
"
|
||||
args:
|
||||
executable: /bin/bash
|
||||
register: redis_test
|
||||
ignore_errors: yes
|
||||
failed_when: false
|
||||
|
||||
- name: Display Redis connection test results
|
||||
debug:
|
||||
msg: "{{ redis_test.stdout_lines }}"
|
||||
|
||||
- name: Check for Redis errors in application logs
|
||||
shell: |
|
||||
cd ~/deployment/stacks/application
|
||||
docker compose logs app --tail=100 2>&1 | grep -i -E "(redis|connection|error)" | tail -20 || echo "No Redis errors found in logs"
|
||||
args:
|
||||
executable: /bin/bash
|
||||
register: error_logs
|
||||
ignore_errors: yes
|
||||
failed_when: false
|
||||
|
||||
- name: Display error logs
|
||||
debug:
|
||||
msg: "{{ error_logs.stdout_lines }}"
|
||||
Reference in New Issue
Block a user