安装Nginx proxy manager

因为之后几个容器起来之后都是要配反代的,所以我们先把NPM给装上,然后在docker内把他们都连进同一个网桥,可以不用每一个容器所需要的端口都暴露在公网上,使用NPM在docker内部互联即可。

以下内容参考使用 Nginx Proxy Manager 管理 Nginx 代理 | Verne in GitHub (einverne.github.io)

  • 首先创建 network
docker network create nginx-proxy
  • 接着我们自己来敲(复制粘贴)docker-compose配置
version: "3"
services:
  nginx-proxy-manager:
    image: 'jc21/nginx-proxy-manager:latest'
    restart: unless-stopped
    ports:
      # These ports are in format <host-port>:<container-port>
      - '80:80' # Public HTTP Port
      - '443:443' # Public HTTPS Port
      - '81:81' # Admin Web Port
      # Add any other Stream port you want to expose
      # - '21:21' # FTP
    environment:
      DB_SQLITE_FILE: "/data/database.sqlite"
      # Uncomment this if IPv6 is not enabled on your host
      # DISABLE_IPV6: 'true'
    volumes:
      - ./data:/data
      - ./letsencrypt:/etc/letsencrypt

networks:
  default:
    external: true
    name: nginx-proxy
  • 启动容器
docker-compose up -d

这个时候我们访问小鸡ip:81,可以进到NPM的后台管理登陆页面,默认的账户密码如下:

然后我们进去改成自己的用户名邮箱密码之后,就可以创建一个给NPM用的Proxy Host,填好域名,转发主机名/IP跟端口(这里是81)之后,再去Cloudflare设置二级域名解析到小鸡ip,生效之后就可以用域名访问NPM后台了,这个时候可以顺便把SSL给加上。

使用Docker network

细心的同学大概会发现我们在一开始创建的nginx-proxy根本没用上,这里要单独开一节出来讲,因为就算是官方他也没讲清楚这玩意怎么用,创建这东西是为了避免容器端口直接暴露在公网,增强安全性,下面以NPM本身来讲一下这玩意怎么用。

  • 首先看一下NPM的docker-compose.yml的最底下这几行
networks:
  default:
    external: true
    name: nginx-proxy

我们只要在yml里加上这段就可以把这个容器放到nginx-proxy网络下面,然后我们在刚刚安装的时候就已经写好了,于是接下来这么操作。

docker ps -a

首先用以上命令获得NPM容器的容器名字,一般显示在最后NAME一列,把他复制下来。

然后我们进去NPM的Web后台,编辑刚刚给NPM写的那条Proxy Host,将Forward Hostname改成刚刚复制的容器名后保存。

然后我们Shift+F5强制刷新一下页面,看看Web后台可不可以正常使用域名访问,没问题的话继续下一步。

  • 还是NPM的docker-compose.yml,但是删掉一点东西
version: "3"
services:
  nginx-proxy-manager:
    image: 'jc21/nginx-proxy-manager:latest'
    restart: unless-stopped
    ports:
      # These ports are in format <host-port>:<container-port>
      - '80:80' # Public HTTP Port
      - '443:443' # Public HTTPS Port
      # - '81:81' # Admin Web Port
      # Add any other Stream port you want to expose
      # - '21:21' # FTP
    environment:
      DB_SQLITE_FILE: "/data/database.sqlite"
      # Uncomment this if IPv6 is not enabled on your host
      # DISABLE_IPV6: 'true'
    volumes:
      - ./data:/data
      - ./letsencrypt:/etc/letsencrypt

networks:
  default:
    external: true
    name: nginx-proxy

将容器暴露81端口这行注释掉,保存。

  • 更新容器
docker-compose up -d

然后我们再Shift+F5刷新一下Web后台可不可以正常使用域名访问,如果能正常访问,那么之后所有的容器我们都按这个流程操作,这个时候你输入小鸡ip:81你会发现已经不能访问Web后台了,只能通过域名访问,这个就算是我们想达到的效果,后面所有的其他容器都如法炮制。

页: 1 2 3 4 5 6 7