【好玩的 Docker 项目】反向代理神器——“nginx-proxy-manager”

简介

Nginx Proxy Manager 是一个基于 Docker 的工具,提供简单而强大的界面来管理 Nginx 代理主机。它允许用户轻松配置反向代理、SSL证书和访问控制,使得管理网站和在线服务的代理变得更加便捷。这个开源项目特别适合那些寻找直观、高效代理管理解决方案的用户,无论是新手还是经验丰富的开发者。

本文写于 2024-01-27,当你看到时可能一些地方已经过期。

搭建

环境准备

目录结构

└─docker_fun
    └─npm
        ├─app
        │  ├─db_root_pwd.txt
        │  └─mysql_pwd.txt
        ├─docker-compose.yml
        ├─vols
        │  ├─cert
        │  ├─data
        │  └─db_data

Docker,启动!

进入 docker-compose.yml 所在目录执行

docker compose up -d

附一份简单的 docker-compose.yml

version: "3.9"

secrets:
  # Secrets 配置是单行文本文件,其中唯一的内容就是密码
  # 本例中的路径假定数据库密码保存在名为"./app"的本地文件夹中
  DB_ROOT_PWD:
    file: ./app/db_root_pwd.txt
  MYSQL_PWD:
    file: ./app/mysql_pwd.txt

services:
  nginx-app:
    image: 'jc21/nginx-proxy-manager:latest'
    container_name: nginx-app
    restart: unless-stopped
    ports:
      # HTTP 端口(左边为对外暴露的端口):
      - '80:80'
      # HTTPS 端口(左边为对外暴露的端口):
      - '443:443'
      # 后台管理端口(左边为对外暴露的端口):
      - '<YOUR_ADMIN_PORT>:81'
    environment:
      ### 以下是访问数据库的设置
      # 数据库主机,同下面配置的 nginx-db(docker 中同一 networks 配置下直接用别名)
      DB_MYSQL_HOST: "nginx-db"
      # 数据库端口
      DB_MYSQL_PORT: 3306
      # 数据库用户
      DB_MYSQL_USER: "pandoranext"
      # DB_MYSQL_PASSWORD: "pandoranext"  # 如果没有配置 MYSQL_PWD,则在配置文件中直接填密码,不是很安全
      DB_MYSQL_PASSWORD__FILE: /run/secrets/MYSQL_PWD
      DB_MYSQL_NAME: "pandoranext"
      # 如果您更愿意使用 Sqlite,请取消注释下面这行,并删除上面所有 DB_MYSQL_* 行
      # DB_SQLITE_FILE: "/data/database.sqlite"

      ### 其他设置
      # 如果主机未启用 IPv6,请取消此处的注释
      # DISABLE_IPV6: 'true'
      # 时区设置
      TZ: "Asia/Shanghai"
    volumes:
      # 同步主机时间
      # - /etc/localtime:/etc/localtime:ro
      # npm 的数据存储位置
      - ./vols/data:/data
      # letsencrypt 证书位置
      - ./vols/cert:/etc/letsencrypt
    secrets:
      # 如果使用密码文件,则需要在这里配置变量
      - MYSQL_PWD
    depends_on:
      # 配置启动顺序,在 nginx-db 之后启动
      - nginx-db
    networks:
      - pandora-next

  nginx-db:
    image: jc21/mariadb-aria
    container_name: nginx-db
    restart: unless-stopped
    environment:
      # MYSQL_ROOT_PASSWORD: "npm"  # use secret instead
      MYSQL_ROOT_PASSWORD__FILE: /run/secrets/DB_ROOT_PWD
      MYSQL_DATABASE: "npm"
      MYSQL_USER: "npm"
      # MYSQL_PASSWORD: "npm"  # use secret instead
      MYSQL_PASSWORD__FILE: /run/secrets/MYSQL_PWD
      TZ: "Asia/Shanghai"
    volumes:
      - ./vols/db_data/mysql:/var/lib/mysql
    secrets:
      - DB_ROOT_PWD
      - MYSQL_PWD
    networks:
      - pandora-next

networks:
  pandora-next:
    # 网络名称
    name: pandora-next
    driver: bridge

配置 ssl 证书

  • 点击添加证书按钮,选择 Let’s Encrypt。如果你有自己的证书可以选择 custom 上传

  • 配置参数

  1. Domain Names:这里申请的是泛域名,所以用了 *.<domain>,这样不用为每个 Proxy Host 去申请证书,也可以一个个填写。
  2. Email Address for Let's Encrypt:如果你之前申请过 Let's Encrypt 的证书,这里要跟之前的邮件一致。
  3. Use a DNS Challenge:使用 DNS 验证模式。
  4. DNS Provider:DNS 提供商,此处以 Cloudflare 为例。
  5. Credentials File Content
    • dns_cloudflare_api_token = <api_key>,这里的 api_key 是你从 Cloudflare 控制台获取的 Cloudflare API token。
  6. Propagation Seconds:传播秒数。留空以使用插件默认值。等待 DNS 传播的秒数。
  7. I Agree to the Let's Encrypt Terms of Service:同意 Let’s Encrypt 的服务;
  • 点击保存(save)

  • 申请完成,有效期3个月,到期会自动续期

使用

代理 hosts

  • 添加域名和代理地址端口

代理 stream

48 个赞

这个有别人改的中文镜像 但这个中文镜像已经年久失修 申请ssl时有问题(°∀°)b

3 个赞

有祖龙的 deeplx 服务,又有沉浸式翻译,要啥中文镜像 :rofl:,英文一把梭

24 个赞

我只是说这个(^.^)

2 个赞

:smiling_face_with_three_hearts:嗯嗯,谢谢分享

24 个赞

好家伙 写的我都在用 要不其他的你也帮我写写?

6 个赞

好家伙,相似度90%

24 个赞

这个是什么服务?

2 个赞

图里那么多你问哪个?

2 个赞

其实我想问显示这么多服务的面板是啥?刚才没表达清楚

2 个赞

Unraid 系统

2 个赞

了解了,大佬

2 个赞

不错,不过我是大佬,不需要使用

1 个赞

大佬,带带

25 个赞

#docker添加

23 个赞

能够在高级设置里配置自定义内容还是比较好了

24 个赞


你也帮我写了得了 :rofl:

2 个赞

哈哈,Portainer 还是可以写的,免费的 license 良心

24 个赞

我是说我那一共44个容器 :crazy_face:

2 个赞

驴都不敢接这活 :rofl: :rofl: :rofl:

24 个赞