Nginx Proxy Manager là một trong những ứng dụng Docker mình cài đặt đầu tiên khi bắt đầu tìm hiểu về Homelab / Virtualization. Mới đây, mình đã không thể truy cập vào Dashboard của NPM sau khi nâng cấp lên phiên bản mới.
Đăng nhập bị báo lỗi Bad Gateway như hình dưới đây.
Kiểm tra logs bằng lệnh docker compose logs
thì thấy báo lỗi liên quan đến database.
nginxproxymanager-app-1 | [5/3/2023] [9:14:15 AM] [Global ] › ✖ error create table `migrations` (`id` int unsigned not null auto_increment primary key, `name` varchar(255), `batch` int, `migration_time` timestamp) - ER_CANT_CREATE_TABLE: Can't create table `npm`.`migrations` (errno: 13 "Permission denied")
Code language: JavaScript (javascript)
Sau 1 vòng Google, mình đã tìm ra issue này trên Github: https://github.com/NginxProxyManager/nginx-proxy-manager/issues/2774. Lỗi này do phiên bản NPM mới có sự thay đổi về phân quyền, khiến database container không truy cập được database.
Cách khắc phục
Mình cài đặt Nginx Proxy Manager theo hướng dẫn từ cách đây 2 năm. Khi đó NPM yêu cầu phải kết hợp thêm với MariaDB container. File docker-compose.yml
có cấu trúc như sau
version: '3'
services:
app:
image: 'jc21/nginx-proxy-manager:latest'
restart: unless-stopped
ports:
- '80:80'
- '81:81'
- '443:443'
environment:
DB_MYSQL_HOST: "db"
DB_MYSQL_PORT: 3306
DB_MYSQL_USER: "npm"
DB_MYSQL_PASSWORD: "npm"
DB_MYSQL_NAME: "npm"
volumes:
- ./data:/data
- ./letsencrypt:/etc/letsencrypt
db:
image: 'jc21/mariadb-aria:latest'
restart: unless-stopped
environment:
MYSQL_ROOT_PASSWORD: 'npm'
MYSQL_DATABASE: 'npm'
MYSQL_USER: 'npm'
MYSQL_PASSWORD: 'npm'
volumes:
- ./data/mysql:/var/lib/mysql
Code language: YAML (yaml)
Theo cấu trúc này, dữ liệu của mariadb container (thư mục mysql
) nằm trong thư mục data
của nginx-proxy-manager. Do đó gây lỗi ownership khi kích hoạt.
Để tạm thời khắc phục lỗi, mình tạm ngưng Nginx Proxy Manager
cd nginxproxymanager
docker compose stop
Code language: Bash (bash)
Di chuyển thư mục mysql ra ngoài
sudo mv data/mysql .
Code language: Nginx (nginx)
Sửa lại file docker-compose.yml
, thay đổi dòng 28 thành - ./mysql:/var/lib/mysql
version: '3'
services:
app:
image: 'jc21/nginx-proxy-manager:latest'
restart: unless-stopped
ports:
- '80:80'
- '81:81'
- '443:443'
environment:
DB_MYSQL_HOST: "db"
DB_MYSQL_PORT: 3306
DB_MYSQL_USER: "npm"
DB_MYSQL_PASSWORD: "npm"
DB_MYSQL_NAME: "npm"
volumes:
- ./data:/data
- ./letsencrypt:/etc/letsencrypt
db:
image: 'jc21/mariadb-aria:latest'
restart: unless-stopped
environment:
MYSQL_ROOT_PASSWORD: 'npm'
MYSQL_DATABASE: 'npm'
MYSQL_USER: 'npm'
MYSQL_PASSWORD: 'npm'
volumes:
- ./mysql:/var/lib/mysql
Code language: YAML (yaml)
Sau đó kích hoạt lại Nginx Proxy Manager
docker compose up -d
Code language: Nginx (nginx)
Truy cập lại Dashboard, giờ đã có thể đăng nhập lại ngon lành.
Tham khảo: Github
Bài viết liên quan
Nếu bạn cần hỗ trợ kỹ thuật miễn phí, vui lòng gửi câu hỏi trực tiếp ở phần Thảo luận bên dưới, mình sẽ trả lời trong thời gian sớm nhất.
Bạn cần hỗ trợ kỹ thuật chuyên sâu?
Khám phá các gói dịch vụ giúp bạn tối ưu công việc và vận hành hệ thống hiệu quả hơn. Từ chăm sóc website đến hỗ trợ kỹ thuật, mọi thứ đều linh hoạt và phù hợp với nhu cầu của bạn.