Chuyên mục
Self Hosting

Sửa lỗi Bad Gateway – Không thể đăng nhập Dashboard của Nginx Proxy Manager

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/mysqlCode 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 stopCode 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/mysqlCode language: YAML (yaml)

Sau đó kích hoạt lại Nginx Proxy Manager

docker compose up -dCode language: Nginx (nginx)

Truy cập lại Dashboard, giờ đã có thể đăng nhập lại ngon lành.

Tham khảo: Github

Nếu bài viết của mình mang đến thông tin, kiến thức hữu ích cho bạn, đừng ngại mời mình ly bia để có thêm động lực chia sẻ nhiều hơn nữa. Cám ơn bạn!

Lưu ý: Nếu bạn cần hỗ trợ kỹ thuật, 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 sớm. Đừng mò vào hỏi trong fanpage Yêu Chạy Bộ, sẽ không có phản hồi đâu!

Bởi Thuận Bùi

Runner at Yêu Chạy Bộ. Blogger at Ba Lô & Dép Lào. Web Developer at TB's Blog.
Follow me: Facebook / Instagram

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *