Wie konfiguriere ich den Docker-Container phpmyadmin und lokales MySQL + Nginx unter Linux?MySql

MySQL DBMS-Forum
Guest
 Wie konfiguriere ich den Docker-Container phpmyadmin und lokales MySQL + Nginx unter Linux?

Post by Guest »

Das ist eine Frage, die ich selbst beantworten werde, denn selbst in der Welt der KI habe ich viel zu lange gebraucht, um das zum Laufen zu bringen.
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
Ich bin auf den Fehler gestoßen, der viele Leute geplagt hat: mysqli_connect(): ( HY000/2002): Fehler „Verbindung abgelehnt“, obwohl der Zugriff direkt getestet wurde Die Maschine beweist, dass die Benutzer und Passwörter korrekt sind.
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
}
MySQL
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

Und MySQL neu starten:

Code: Select all

sudo systemctl restart mysql
MySQL-Benutzer-Setup:

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;

Ergebnis, das zeigt, dass ich einen Benutzer erstelle, der auf den Zugriff über eine bestimmte IP beschränkt ist (in diesem Fall die IP von localhost)

Code: Select all

+------------------+-----------+
| User             | Host      |
+------------------+-----------+
| testuser         | 127.0.0.1 |
| debian-sys-maint | localhost |
| mysql.session    | localhost |
| mysql.sys        | localhost |
+------------------+-----------+
Endlich phpmyadmin
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
Dies sollte ausreichen, um alles zum Laufen zu bringen, aber phpmyadmin ermöglicht Ihnen den Zugriff auf die Anmeldeseite, es wird keine Fehlermeldung angezeigt, aber leider bleibt es hängen, ohne etwas anderes als eine auszulösen 504-Zeitüberschreitung.
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.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post