作者 GitHub 仓库https://github.com/lucasdillmann/nginx-ignition

1. 为什么把 nginx-ignition 当作建站管理工具

  • 可视化配置:不再频繁手写 nginx.conf,通过控制台能直观修改 upstream、server、location 等配置并可预览生效影响。
  • 快速部署:一键重载/回滚配置,适合频繁的小幅改动(feature flags、临时 redirect、A/B 测试路由调整)。
  • 日志集中与可查:内置请求/错误日志查看,便于快速定位 4xx/5xx 问题,减少切换到 SSH 看日志的步骤。
  • 适配小型团队:对没有专职 SRE 的开发团队特别友好,可以把常见 Nginx 运维下沉到开发/产品手上,同时保留审计与回滚。

2. 核心功能与价值点

  • 配置管理(创建/编辑/测试/回滚)
  • 可视化面板(请求统计、状态页、缓存命中率、上游健康)
  • 快速镜像/静态站点托管支持(将静态目录映射为 site)
  • 基础访问控制(HTTP Basic、IP 白名单)与临时维护页支持
  • 与外部组件集成(反向代理、Let's Encrypt、日志导出到 SIEM)
  • 轻量化:可源码构建或以官方镜像运行,资源占用低

3. 适用场景

  • 快速原型/开发环境:前端静态站、微服务反向代理、临时域名映射。
  • 中小型生产站点:企业官网、文档站、博客、营销页。
  • 运维加速器:日常的重定向、流量分流、灰度发布与回滚。
  • 教育/演示环境:教学或产品 demo 时快速在一台 VM/云主机上部署多个站点并可视化管理。

4. 在 Ubuntu 上安装 Docker / Docker Compose

# 更新、安装依赖
sudo apt update && sudo apt upgrade -y
sudo apt install -y ca-certificates curl gnupg lsb-release

# 添加 Docker 官方 GPG key 与 repo
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin

# 启动并启用 Docker
sudo systemctl enable --now docker

# 测试
sudo docker version
sudo docker run --rm hello-world
注:上面安装的是 Docker Engine + Compose 插件(docker compose 命令)。若你偏好 docker-compose 二进制也可以安装。

1) 快速测试:用 docker run 启动(适用于快速验证)

# 拉取并运行官方镜像(示例镜像名)
sudo docker pull dillmann/nginx-ignition:latest

sudo docker run -d --name nginx-ignition-test \
  -p 8090:8090 -p 80:80 \
  -v /opt/nginx-ignition/data:/data \
  -v /opt/nginx-ignition/config:/config \
  --restart unless-stopped \
  dillmann/nginx-ignition:latest
  • 访问:http://<服务器IP>:8090(或 80 端口根据镜像行为)
  • docker logs -f nginx-ignition-test 查看启动日志。

这个方式适合开发/验证。生产请使用 docker-compose 管理多个容器与数据库。

2) 推荐:生产级 docker-compose.yml(含 PostgreSQL、持久卷、健康检查)

把以下文件放在 /opt/nginx-ignition-deploy

文件结构示例

/opt/nginx-ignition-deploy
  ├─ docker-compose.yml
  └─ .env

.env(示例)

# .env - 请把密码与密钥换成强密码
POSTGRES_USER=ignition_user
POSTGRES_PASSWORD=ChangeMeStrong!2025
POSTGRES_DB=ignition
POSTGRES_PORT=5432

IGNITION_HTTP_PORT=8090
IGNITION_IMAGE=dillmann/nginx-ignition:latest

docker-compose.yml

version: "3.8"

services:
  postgres:
    image: postgres:15-alpine
    container_name: nginx_ignition_postgres
    restart: unless-stopped
    env_file: .env
    environment:
      - POSTGRES_USER=${POSTGRES_USER}
      - POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
      - POSTGRES_DB=${POSTGRES_DB}
    volumes:
      - pgdata:/var/lib/postgresql/data
    networks:
      - ignition_net
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER}"]
      interval: 10s
      timeout: 5s
      retries: 5

  nginx-ignition:
    image: ${IGNITION_IMAGE}
    container_name: nginx_ignition_app
    restart: unless-stopped
    depends_on:
      postgres:
        condition: service_healthy
    env_file: .env
    environment:
      # 下面只是示例环境变量键名,实际以项目支持的 env 为准
      - DATABASE_DRIVER=postgres
      - DATABASE_HOST=postgres
      - DATABASE_PORT=${POSTGRES_PORT}
      - DATABASE_USER=${POSTGRES_USER}
      - DATABASE_PASSWORD=${POSTGRES_PASSWORD}
      - DATABASE_NAME=${POSTGRES_DB}
      - PORT=${IGNITION_HTTP_PORT}
    ports:
      - "${IGNITION_HTTP_PORT}:8090"  # 容器内监听 8090(根据实际镜像)
    volumes:
      - ignition_data:/data
      - ignition_config:/config
      - /var/log/nginx-ignition:/var/log/nginx-ignition   # 可选:把日志映射到宿主
    networks:
      - ignition_net
    healthcheck:
      test: ["CMD-SHELL", "curl -f http://localhost:8090/health || exit 1"]
      interval: 15s
      timeout: 5s
      retries: 5

volumes:
  pgdata:
    driver: local
  ignition_data:
    driver: local
  ignition_config:
    driver: local

networks:
  ignition_net:
    driver: bridge
注意:DATABASE_*PORT 等环境变量的具体名字取决于 nginx-ignition 镜像或源码支持的配置项,部署前请核对仓库 README 或镜像文档并修改 .envdocker-compose.yml 中相应键名。如果镜像默认用 SQLite,则可去掉 postgres 服务并仅绑定卷存储 SQLite 文件到宿主目录。

启动:

cd /opt/nginx-ignition-deploy
docker compose up -d
docker compose logs -f nginx-ignition