[安装Docker](snippetslab://snippet/9905EF55-5456-44D7-A572-B527928DBBE7)
## 安装NPM
### 新建docker-compose.yml
> mkdir Nginx_Proxy_Manager && cd Nginx_Proxy_Manager && vim docker-compose.yml
```docker
version: '3.8'
services:
app:
# image: 'jc21/nginx-proxy-manager:latest'
image: 'chishin/nginx-proxy-manager-zh:release'
restart: unless-stopped
ports:
- '80:80'
- '81:81'
- '443:443'
volumes:
- ./data:/data
- ./letsencrypt:/etc/letsencrypt
environment:
- TZ=Asia/Shanghai
```
### 部署运行(文件路径不能有中文,又碰到坑)
```
docker-compose up -d
```
## 使用
### 登录管理页面
```
http://服务器IP:81
```
#### 默认管理员信息
```
Email: admin@example.com
Password: changeme
```
#### 申请Let's Encrypt通配符证书(每隔2个月Nginx Proxy Manager会自动更新)
### 自定义 Nginx 配置
```
如果您是更高级的用户,您可能会渴望额外的 Nginx 可定制性。
NPM 能够在不同的位置包含不同的自定义配置片段。
您可以添加自定义配置片段文件,/data/nginx/custom如下所示:
/data/nginx/custom/root.conf: 包含在 nginx.conf 的最后
/data/nginx/custom/http_top.conf:包含在主 http 块的顶部
/data/nginx/custom/http.conf:包含在主 http 块的末尾
/data/nginx/custom/events.conf:包含在事件块的末尾
/data/nginx/custom/stream.conf:包含在主流块的末尾
/data/nginx/custom/server_proxy.conf:包含在每个代理服务器块的末尾
/data/nginx/custom/server_redirect.conf:包含在每个重定向服务器块的末尾
/data/nginx/custom/server_stream.conf:包含在每个流服务器块的末尾
/data/nginx/custom/server_stream_tcp.conf:包含在每个 TCP 流服务器块的末尾
/data/nginx/custom/server_stream_udp.conf:包含在每个 UDP 流服务器块的末尾
每个文件都是可选的。
```
## 官方文档
[Nginx Proxy Manager](https://nginxproxymanager.com/guide/)
## Django项目的docker-compose.yml(多一个挂载静态文件的目录到NPM容器里面)
```docker
version: '3.8'
services:
app:
image: 'chishin/nginx-proxy-manager-zh:release'
restart: unless-stopped
ports:
- '80:80'
- '81:81'
- '443:443'
volumes:
- ./data:/data
- ./letsencrypt:/etc/letsencrypt
- ~/Django/DigitalCardSales/collected_static:/www/sales
environment:
- TZ=Asia/Shanghai
```
## 托管静态文件方式
```nginx
location ^~ /static/ {
expires max;
alias /www/sales/;
}
```
> 转发主机填写公网IP、内网IP、docker的IP都可以的。(如果填写docker的IP需与Nginx Proxy Manager容器在同网关下)
## 补充说明
> 配置好`Nginx Proxy Manager`与`Portainer`的域名绑定后,就可以去云服务器的安全组把`81`与`9000`的`Tcp`入站端口给关了,这样又能避免通过`IP+端口`访问,又能提升安全性。
> 小的tips:反向代理`Portainer`需要勾选`支持WebSockets`否则无法在`Portainer`面板`docker exec -it ID/Name /bin/bash`进入容器。