Nếu bạn đang tiếp xúc với bất kỳ dịch vụ nào trên mạng của mình, sử dụng reverse proxy là một cách tuyệt vời để tăng tính bảo mật và hiệu suất. Reverse proxy là một máy chủ nằm trước máy chủ web của bạn và chuyển tiếp các yêu cầu của khách hàng đến các máy chủ web. Như vậy, bạn chỉ cần một máy chủ (sử dụng cổng 80/443) và sẽ có thể sử dụng bao nhiêu web server tùy thích.

Một ví dụ về reverse proxy

Hướng dẫn này sẽ sử dụng Raspberry Pi, phù hợp cho việc sử dụng tại nhà, nhưng nếu bạn đang lưu trữ bất cứ thứ gì có nhiều lưu lượng truy cập, có lẽ bạn nên sử dụng một máy chủ có cấu hình tốt hơn.

Hướng dẫn cài đặt Nginx Proxy Manager trên Raspberry Pi

Bước 1: Cài đặt docker và docker-compose. Mình đã chuẩn bị một script tự động cài đặt docker, docker compose và cả portainer (tuỳ chọn) cho các bạn dễ dàng thực hiện.

Đầu tiên cần tải về bộ script này:

git clone https://github.com/duyasia/auto.git

Trong đây sẽ có 3 file ứng với từng nhu cầu. Do mình muốn sử dụng cả portainer để dễ quản lý các container nên mình sẽ làm như sau:

sudo sh auto/piDockerPortainer.sh
  • Nếu bạn chỉ muốn cài docker và docker compose thì thay bằng auto/piDocker.sh
  • Nếu chỉ muốn cài mỗi Portainer thì thay bằng auto/piPortainer.sh

Bước 2: Sau khi các lệnh hoàn tất cài đặt, bạn cần tạo một thư mục nơi các tệp config và docker-compose. Sau đó, bạn sẽ điều hướng đến thư mục đó và tạo một tệp có tên config.json.

mkdir nginx
cd nginx
nano config.json

Bước 3: paste đoạn code sau vào và nhấn Ctrl + o > Enter để lưu. Và Ctrl + x để thoát khỏi trình chỉnh sửa code

{
  "database": {
    "engine": "mysql",
    "host": "db",
    "name": "npm",
    "user": "npm",
    "password": "npm",
    "port": 3306
  }
}

Bước 4: Tạo file docker-compose.yml bằng lệnh sau:

nano docker-compose.yml

Bước 5: Dán nội dung bên dưới vào file docker-compose và lưu lại

version: '3'
services:
  app:
    image: 'jc21/nginx-proxy-manager:latest'
    ports:
      - '80:80'
      - '81:81'
      - '443:443'
    volumes:
      - ./config.json:/app/config/production.json
      - ./data:/data
      - ./letsencrypt:/etc/letsencrypt
  db:
    image: 'yobasystems/alpine-mariadb:latest'
    environment:
      MYSQL_ROOT_PASSWORD: 'npm'
      MYSQL_DATABASE: 'npm'
      MYSQL_USER: 'npm'
      MYSQL_PASSWORD: 'npm'
    volumes:
      - ./data/mysql:/var/lib/mysql

Bước 6: Lúc này sẽ có 2 tệp trong thư mục nginx. Chạy lệnh bên dưới để start docker container.

sudo docker-compose up -d

Bước 7: Các container bắt đầu tải xuống và cài đặt.

Đến khi thông báo như sau thì quá trình cài đặt hoàn tất:

Bước 8: Bây giờ bạn sẽ điều chỉnh cả hai container mà Nginx Proxy Manager sử dụng để tự động khởi động khi Raspberry Pi của bạn được khởi động lại.

sudo docker update --restart always nginx_app_1
sudo docker update --restart always nginx_db_1

Bước 9: Khởi động lại Raspberry Pi của bạn – (rất quan trọng)

sudo reboot now

Bước 10: Sau khi khởi động lại hoàn tất, các container sẽ mất vài phút để cài đặt đầy đủ. Bạn có thể chạy lệnh dưới đây để kiểm tra trạng thái của container. Ngoài ra, nếu bạn thiết lập Portainer, bạn có thể mở Portainer và kiểm tra trạng thái của container ở đó.

sudo docker ps

Kiểm tra ở Portainer sẽ như này:

Bước 11: Giờ bạn hãy truy cập vào IP của Raspberry Pi tại port 81:

http://[RASPBERRY_PI_IP]:81

Bước 12: Đăng nhâp với địa chỉ email mặc định là [email protected] và mật khẩu là changeme. Khi bạn đăng nhập, bạn sẽ được yêu cầu thay đổi thông tin này.

Bước 13: Như vậy là OK, Nginx Proxy Manager đã được cài đặt đầy đủ. Bạn sẽ cần mở port 80/443 trên bộ định tuyến để trỏ đến Raspberry Pi.