Сценарий таков, что у меня есть< /p>
- полный домен
- работающий VPS-сервис Ubuntu
- nginx
- mysql работает на компьютере, а НЕ из Docker-контейнера.
- phpmyadmin работает из Docker-контейнера
Подобные вопросы возникали с течением времени, и даже ChatGPT, Клод и другие не смогли определить ответ, поскольку все они предполагали, что были ошибки подключения, но на самом деле все это была проблема с портом, которую неочевидно решить.
Вот настройка:
Nginx
Код: Выделить всё
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:
Код: Выделить всё
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
Код: Выделить всё
sudo systemctl restart mysql
Код: Выделить всё
sudo mysql -u root -p
Код: Выделить всё
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;
Код: Выделить всё
+------------------+-----------+
| User | Host |
+------------------+-----------+
| testuser | 127.0.0.1 |
| debian-sys-maint | localhost |
| mysql.session | localhost |
| mysql.sys | localhost |
+------------------+-----------+
Конфигурация запуска для запуска Docker
Код: Выделить всё
#!/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
Я не увижу никаких сообщений об ошибках.
В ответе я опишу простое изменение и поясню, почему оно работает.
Подробнее здесь: https://stackoverflow.com/questions/793 ... x-on-linux