I am unable to directly write the file due to tool limitations. I will provide the article content here, which you can save as nginx-proxy-manager-docker-compose.md.
Here is the article:
“`markdown
Nginx Proxy Manager Docker Compose:安装与使用
在现代的Web应用部署中,反向代理是不可或缺的一环。它不仅能够提供负载均衡、缓存、安全性增强等功能,还能简化SSL证书的管理。Nginx Proxy Manager (NPM) 是一个基于Nginx的强大反向代理管理工具,它通过一个友好的Web界面,让非专业人士也能轻松配置代理主机、SSL证书(通过Let’s Encrypt)以及重定向等。结合Docker Compose,我们可以快速、便捷地部署和管理NPM。
本文将详细介绍如何使用Docker Compose安装Nginx Proxy Manager,并提供其基本使用指南。
1. 什么是Nginx Proxy Manager?
Nginx Proxy Manager 是一个完整的Nginx配置管理系统,它提供了一个直观的Web界面来:
* 管理代理主机 (Proxy Hosts):轻松将域名指向内部服务。
* 管理重定向 (Redirection Hosts):将一个域名重定向到另一个。
* 管理静态资产 (Static Assets Hosts):服务静态文件。
* SSL证书管理:通过Let’s Encrypt自动申请和续订SSL证书,并支持强制HTTPS。
* 访问控制:为代理主机设置基本身份验证。
* 自定义Nginx配置:为高级用户提供额外的Nginx配置选项。
2. 为什么选择Docker Compose?
Docker Compose 允许我们通过一个简单的YAML文件定义和运行多容器Docker应用程序。使用Docker Compose部署NPM有以下优点:
* 易于部署:只需几条命令即可启动整个NPM环境。
* 可移植性:docker-compose.yml 文件可以在任何安装了Docker和Docker Compose的机器上使用。
* 环境隔离:NPM及其依赖(如数据库)运行在独立的容器中,不会干扰宿主机系统。
* 易于管理:更新、备份和恢复都相对简单。
3. 前提条件
在开始安装之前,请确保您的系统满足以下条件:
* Docker:已安装并运行Docker Engine。
* Docker Compose:已安装Docker Compose(通常在安装Docker Desktop时会一并安装)。
* 域名:您需要一个或多个已注册的域名,并将其DNS记录指向您的服务器IP地址。
4. Docker Compose 文件 (docker-compose.yml)
创建一个名为 docker-compose.yml 的文件,并粘贴以下内容。这个配置将启动Nginx Proxy Manager服务和一个MariaDB数据库服务,NPM使用MariaDB来存储其配置数据。
“`yaml
version: ‘3.8’
services:
app:
image: ‘jc21/nginx-proxy-manager:latest’
restart: unless-stopped
ports:
# These ports are for the Nginx Proxy Manager Web Interface
– ’80:80′ # HTTP
– ‘443:443′ # HTTPS
– ’81:81’ # Admin Panel
environment:
DB_MYSQL_HOST: db
DB_MYSQL_PORT: 3306
DB_MYSQL_USER: npm
DB_MYSQL_PASSWORD: YOUR_DB_PASSWORD # !!! CHANGE THIS PASSWORD !!!
DB_MYSQL_NAME: npm
volumes:
– ./data:/data
– ./letsencrypt:/etc/letsencrypt
depends_on:
– db
db:
image: ‘jc21/mariadb-alpine:latest’
restart: unless-stopped
environment:
MYSQL_ROOT_PASSWORD: YOUR_MYSQL_ROOT_PASSWORD # !!! CHANGE THIS PASSWORD !!!
MYSQL_DATABASE: npm
MYSQL_USER: npm
MYSQL_PASSWORD: YOUR_DB_PASSWORD # !!! USE THE SAME PASSWORD AS ABOVE !!!
volumes:
– ./mysql:/var/lib/mysql
“`
配置说明:
version: '3.8': 指定Docker Compose文件格式版本。services: 定义应用程序的服务。app(Nginx Proxy Manager 服务):image: 'jc21/nginx-proxy-manager:latest': 使用官方提供的最新NPM Docker镜像。restart: unless-stopped: 容器在退出时会自动重启,除非手动停止。ports: 端口映射。80:80: 将宿主机的80端口映射到容器的80端口,用于HTTP流量。443:443: 将宿主机的443端口映射到容器的443端口,用于HTTPS流量。81:81: 将宿主机的81端口映射到容器的81端口,用于NPM的管理面板。
environment: 环境变量,用于配置NPM连接到MariaDB数据库。务必修改DB_MYSQL_PASSWORD为一个强密码!volumes: 卷映射,用于持久化数据。./data:/data: 将宿主机当前目录下的data文件夹映射到容器的/data,NPM的配置和SSL证书等将存储在这里。./letsencrypt:/etc/letsencrypt: Let’s Encrypt证书的存储路径。
depends_on: - db: 表示app服务依赖于db服务,db服务会先于app启动。
db(MariaDB 数据库服务):image: 'jc21/mariadb-alpine:latest': 使用官方提供的MariaDB Docker镜像。restart: unless-stopped: 容器在退出时会自动重启。environment: 环境变量,用于配置MariaDB数据库。务必修改MYSQL_ROOT_PASSWORD和MYSQL_PASSWORD为强密码,并且MYSQL_PASSWORD必须与app服务中的DB_MYSQL_PASSWORD保持一致!volumes: 卷映射,用于持久化数据库数据。./mysql:/var/lib/mysql: 将宿主机当前目录下的mysql文件夹映射到容器的/var/lib/mysql,数据库文件将存储在这里。
5. 安装步骤
-
创建
docker-compose.yml文件: 在您选择的目录(例如~/nginx-proxy-manager)中创建docker-compose.yml文件,并将上述内容复制进去。切记修改所有占位符密码!bash
mkdir -p ~/nginx-proxy-manager
cd ~/nginx-proxy-manager
nano docker-compose.yml # 或使用您喜欢的编辑器 -
启动服务: 在
docker-compose.yml文件所在的目录下,运行以下命令启动Nginx Proxy Manager及其数据库服务:bash
docker compose up -d
*-d参数表示在后台运行容器。 -
验证安装:
- 运行
docker compose ps命令,您应该会看到app和db两个服务都处于Up状态。 - 访问
http://YOUR_SERVER_IP:81,您应该能看到Nginx Proxy Manager的登录界面。
- 运行
6. 基本使用
6.1 首次登录Nginx Proxy Manager
首次登录时,使用以下默认凭据:
- 邮箱 (Email):
[email protected] - 密码 (Password):
changeme
登录后,系统会立即要求您修改邮箱和密码。请务必修改为安全的凭据!
6.2 添加代理主机 (Proxy Host)
代理主机是NPM最核心的功能。它允许您将外部域名请求转发到您内网的某个服务。
- 点击 “Hosts” -> “Proxy Hosts” -> “Add Proxy Host”。
- Domain Names (域名): 输入您想要代理的域名,例如
your-app.example.com。 - Scheme (协议): 选择
http或https,这取决于您的后端服务使用的协议。 - Forward Hostname / IP (转发主机名/IP): 输入后端服务的IP地址或Docker容器名称(如果您将NPM和后端服务放在同一个Docker网络中)。例如,如果您的Web应用程序在同一服务器上的
8080端口运行,IP可能是127.0.0.1。 - Forward Port (转发端口): 输入后端服务监听的端口,例如
8080。 - Block Common Exploits (阻止常见攻击): 推荐勾选,提供基本的安全防护。
- Websockets Support (Websockets支持): 如果您的后端服务使用Websockets(如某些聊天应用),请勾选此项。
- 点击 “Save”。
现在,当您访问 http://your-app.example.com 时,请求将被NPM转发到您的后端服务。
6.3 配置SSL证书 (Let’s Encrypt)
NPM与Let’s Encrypt集成,可以自动为您的域名申请和续订免费的SSL证书。
- 在添加或编辑代理主机时,切换到 “SSL” 标签页。
- SSL Certificate (SSL证书): 选择 “
“ 。 - Force SSL (强制SSL): 推荐勾选,这将强制所有HTTP请求重定向到HTTPS。
- Email Address for Let’s Encrypt (Let’s Encrypt邮箱地址): 输入您的邮箱地址,用于接收证书通知。
- I Agree to the Let’s Encrypt Terms of Service (我同意Let’s Encrypt服务条款): 勾选此项。
- HTTP/2 Support (HTTP/2支持): 推荐勾选,提供更快的性能。
- 点击 “Save”。
NPM将尝试为您的域名申请SSL证书。这个过程可能需要一些时间。如果一切顺利,您的代理主机将通过HTTPS访问。
重要提示: 确保您的域名DNS记录已正确指向NPM服务器的公共IP地址,并且服务器的80和443端口是开放的,这样Let’s Encrypt才能验证您的域名。
7. 停止与删除
- 停止服务: 在
docker-compose.yml所在的目录下运行:
bash
docker compose stop - 停止并删除容器(保留数据卷):
bash
docker compose down - 停止并删除所有容器、网络和数据卷(彻底删除): 请谨慎操作,这将删除所有配置和数据库数据!
bash
docker compose down -v
8. 总结
Nginx Proxy Manager结合Docker Compose提供了一个极其强大且用户友好的反向代理解决方案。它简化了复杂的Nginx配置和SSL证书管理,使部署Web应用程序变得前所未有的简单。无论是个人项目还是小型团队,NPM都是一个值得考虑的工具。通过遵循本文的指南,您应该能够成功安装并开始使用Nginx Proxy Manager,为您的服务提供安全、高效的访问。
“`