Das Szenario ist, dass ich< /p>
- eine vollqualifizierte Domäne
- ein laufender VPS-Dienst ubuntu
- nginx
- MySQL läuft auf der Maschine, NICHT aus einem Docker-Container.
- phpmyadmin läuft aus einem Docker-Container
Im Laufe der Zeit gab es ähnliche Fragen und selbst ChatGPT, Claude und andere konnten die Antwort nicht herausfinden, da sie alle davon ausgingen Verbindungsfehler, aber in Wirklichkeit handelte es sich lediglich um ein Portproblem, dessen Lösung nicht offensichtlich ist.
Hier ist das Setup:
Nginx
Code: Select all
server {
server_name database.your-domain.com;
location / {
proxy_pass http://127.0.0.1:8081;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Port $server_port;
# Add these headers for secure cookies
proxy_cookie_path / "/; secure; HttpOnly; SameSite=strict";
# Optional: Set timeouts to prevent long idle connections
proxy_connect_timeout 60s;
proxy_read_timeout 60s;
proxy_send_timeout 60s;
}
listen [::]:443 ssl ipv6only=on; # managed by Certbot
listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/database.your-domain.com/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/database.your-domain.com/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}
server {
if ($host = database.your-domain.com) {
return 301 https://$host$request_uri;
} # managed by Certbot
listen 80;
listen [::]:80;
server_name database.your-domain.com;
return 404; # managed by Certbot
}
Der Port und die Bind-Adresse in MySQL sind
Code: Select all
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
#... set in file (you can adjust the port - but just make sure it is aligned with the phpmysql start script)
port = 3306
bind-address = 127.0.0.1
Code: Select all
sudo systemctl restart mysql
Code: Select all
sudo mysql -u root -p
Code: Select all
CREATE USER 'testuser'@'127.0.0.1' IDENTIFIED BY 'created_user_password';
GRANT ALL PRIVILEGES ON *.* TO 'testuser'@'127.0.0.1';
FLUSH PRIVILEGES;
SELECT User, Host FROM mysql.user;
Code: Select all
+------------------+-----------+
| User | Host |
+------------------+-----------+
| testuser | 127.0.0.1 |
| debian-sys-maint | localhost |
| mysql.session | localhost |
| mysql.sys | localhost |
+------------------+-----------+
Die Startkonfiguration für Docker-Ausführung
Code: Select all
#!/bin/bash
docker run -d \
--name phpmyadmin \
-p 127.0.0.1:8081:80 \
-e PMA_HOST=127.0.0.1 \
-e PMA_PORT=3306 \
-e PMA_ABSOLUTE_URI=https://database.your-domain.com/ \
phpmyadmin/phpmyadmin
Es werden keine Fehlermeldungen angezeigt, die ich sehen konnte.
In der Antwort werde ich die einfache Änderung erläutern und erklären, warum sie funktioniert.