安裝 Nginx Proxy Manager(NPM) 當 Revers Proxy Server(Docker)

  • 編輯 yml 檔案

    cd ~
    mkdir -p nginx-proxy-manager
    cd nginx-proxy-manager
    vi docker-compose.yml
    version: '3'
    services:
      app:
        image: 'jc21/nginx-proxy-manager:latest'
        restart: unless-stopped
        ports:
          - '80:80'
          - '81:81'
          - '443:443'
        volumes:
          - ./data:/data
          - ./letsencrypt:/etc/letsencrypt

  • 啟動服務

    docker compose up -d

  • http://192.168.11.231:81 (預設帳號密碼 : [email protected] / changeme)
  • 登入後會要求更改與設定 Administrator 的帳號密碼

  • 新增一個 Proxy Host :
    • Hosts → Porxy Hosts → Add Proxy Host → Exp. www.ichiayi.com ichiayi.com
      • Detail → Exp. 內部實際主機的 IP 是 https://192.168.11.233
      • Custom locations → Add location → Exp. 將之前的 /wiki 導到現在的沒有 /wiki 的網址
      • SSL → Exp. 設定由 Let's Encrypt 簽發 SSL 憑證, 並透過 Cloudflare DNS 進行驗證
        • 需要至 Cloudflare 的管理介面產生一個可以修改 Domain Name 權限的 API Token

        • 將產生的 API Token 設定到 dns_cloudflare_api_token
        • 要勾選同意 Let's Encrypt 服務條款, 點下 Save 如果沒問題大概 10 秒左右就可以產生SSL憑證
  • 只要執行以下命令就可以直接更版

    docker compose pull && docker compose up -d

  • 查看啟動過程 Logs

    docker compose logs -f

  • 編輯 Proxy Host → Advanced → Custom Nginx Configuration 加入

    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_max_temp_file_size 16384m;
    client_max_body_size 0;
    location = /.well-known/carddav {
      return 301 $scheme://$host:$server_port/remote.php/dav;
    }
    location = /.well-known/caldav {
      return 301 $scheme://$host:$server_port/remote.php/dav;
    }

  • 無 IPv6 的環境啟動時 log 內會出現類似以下的錯誤訊息

    :
    app-1  | ❯ Starting nginx ...
    app-1  | nginx: [emerg] socket() [::]:80 failed (97: Address family not supported by protocol)
    app-1  | ❯ Starting nginx ...
    app-1  | nginx: [emerg] socket() [::]:80 failed (97: Address family not supported by protocol)
    :

  • 只要在 docker-compose.yml 內的環境變數加上 DISABLE_IPV6=true 即可 Exp.
    version: '3'
    services:
      app:
        image: 'jc21/nginx-proxy-manager:latest'
        restart: unless-stopped
        ports:
          - '80:80'
          - '81:81'
          - '443:443'
        environment:
          - DISABLE_IPV6=true
        volumes:
          - ./data:/data
          - ./letsencrypt:/etc/letsencrypt
  1. 在來源主機匯出

    cd nginx-proxy-manager
    tar -cvf data.tar data/
    tar -cvf letsencrypt.tar letsencrypt/

  2. 將 data.tar 與 letsencrypt.tar 複製到目標主機 Exp.

    scp *.tar 172.16.1.99:/root/

  3. 在目標主機匯入

    mv *.tar nginx-proxy-manager/
    cd nginx-proxy-manager
    
    docker compose down
    
    mv data data.org
    mv letsencrypt letsencrypt.org
    
    tar -xvf data.tar
    tar -xvf letsencrypt.tar
    
    docker compose up -d
    docker compose logs -f

  • tech/nginx_proxy_manager.txt
  • 上一次變更: 2024/05/02 17:47
  • jonathan