安装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的后台管理登陆页面,默认的账户密码如下:
- [email protected]
- changeme
然后我们进去改成自己的用户名邮箱密码之后,就可以创建一个给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后台了,只能通过域名访问,这个就算是我们想达到的效果,后面所有的其他容器都如法炮制。
发表回复