105 lines
3.0 KiB
Markdown
105 lines
3.0 KiB
Markdown
# Nginx 1.28 一键部署包
|
||
|
||
该目录用于在安装了 Docker 的 Linux 服务器上一键部署 Nginx 1.28。默认公网端口为 `80`,映射关系为 `80:80`,容器名为 `nginx-1.28`。
|
||
|
||
## 文件说明
|
||
|
||
- `Dockerfile`:以官方 `nginx:1.28` 为基础镜像构建本地镜像 `nginx-oneclick:1.28`。
|
||
- `build-image.sh`:构建镜像并导出为 `nginx-oneclick-1.28.tar.gz`,用于离线分发。
|
||
- `deploy.sh`:加载镜像包(或自动构建),创建/启动容器并进行 HTTP 验证。
|
||
- `docker-compose.yml`:可选的 Compose 部署方式。
|
||
- `nginx-oneclick-1.28.tar.gz`:如果随包提供,则优先离线加载,不需要访问 Docker Hub。
|
||
|
||
## 一键部署
|
||
|
||
将整个目录复制到目标服务器后执行:
|
||
|
||
```bash
|
||
cd nginx-1.28-deployment
|
||
chmod +x build-image.sh deploy.sh
|
||
./deploy.sh
|
||
```
|
||
|
||
部署脚本的行为是幂等的:
|
||
|
||
1. 如果目录中有镜像压缩包,优先执行 `docker load`。
|
||
2. 没有镜像包但本机已有镜像时直接复用。
|
||
3. 两者都没有时,以 `Dockerfile` 自动构建并拉取 `nginx:1.28` 基础镜像。
|
||
4. 创建或启动 `nginx-1.28`,设置 `unless-stopped` 自动重启。
|
||
5. 访问 `http://服务器公网IP/` 做 HTTP 检查。
|
||
|
||
## 构建并导出离线镜像
|
||
|
||
在可访问 Docker Hub 的 Docker 主机执行:
|
||
|
||
```bash
|
||
./build-image.sh
|
||
```
|
||
|
||
生成的 `nginx-oneclick-1.28.tar.gz` 和 `.sha256` 文件可以与脚本一起复制到无外网服务器。脚本会自动加载该镜像包。
|
||
|
||
本次服务器上的离线镜像包已生成在:
|
||
|
||
```text
|
||
/opt/nginx-1.28-deployment/nginx-oneclick-1.28.tar.gz
|
||
```
|
||
|
||
对应 SHA-256:`d322ba812dcd3e89fb8c0afd14f27e79e73432f7bc5a5a52324a0ca67e784014`。
|
||
|
||
## 端口和容器名
|
||
|
||
默认配置:
|
||
|
||
```text
|
||
公网地址:http://服务器公网IP/
|
||
主机端口:80
|
||
容器端口:80
|
||
容器名:nginx-1.28
|
||
```
|
||
|
||
如 80 端口已被占用,可临时改用主机端口 8080:
|
||
|
||
```bash
|
||
NGINX_HOST_PORT=8080 ./deploy.sh
|
||
```
|
||
|
||
此时访问 `http://服务器公网IP:8080/`。如要更换容器名:
|
||
|
||
```bash
|
||
NGINX_CONTAINER_NAME=nginx-prod ./deploy.sh
|
||
```
|
||
|
||
## 已存在容器的处理
|
||
|
||
脚本不会默认删除或覆盖同名但配置不同的容器。确认要重建时显式执行:
|
||
|
||
```bash
|
||
FORCE_RECREATE=1 ./deploy.sh
|
||
```
|
||
|
||
该操作会删除并重新创建 `NGINX_CONTAINER_NAME` 指定的容器,不会删除镜像。
|
||
|
||
## Compose 部署(可选)
|
||
|
||
```bash
|
||
docker compose up -d --build
|
||
docker compose ps
|
||
curl -I http://127.0.0.1/
|
||
```
|
||
|
||
## 常用运维命令
|
||
|
||
```bash
|
||
docker ps --filter name=nginx-1.28
|
||
docker logs --tail 100 nginx-1.28
|
||
docker exec nginx-1.28 nginx -v
|
||
docker restart nginx-1.28
|
||
docker stop nginx-1.28
|
||
```
|
||
|
||
## 安全与公网访问检查
|
||
|
||
只映射 HTTP 端口时,服务器防火墙/云安全组需要允许 TCP `80`(或自定义的 `NGINX_HOST_PORT`)。部署脚本只负责 Docker 端口发布,不会修改云厂商安全组规则。
|
||
|
||
不要把 SSH 密码、私钥或生产配置写入该目录。若通过 SSH 远程部署,请使用密钥或交互式认证,并在密码已经暴露后及时轮换。
|