单容器部署

单容器部署只运行 HAS-WAF 容器。控制面数据库默认使用容器内的 SQLite,访问日志可写入外部 ClickHouse 或容器内 SQLite;Redis、ClickHouse、MySQL 由你自行准备。适合已有中间件、需要统一运维或只做小流量接入的环境。

如果希望脚本同时部署 Redis、ClickHouse 和可选 MySQL,请使用全量安装。

准备工作

  • Docker Engine 与 Docker Compose v2。
  • 一个可被容器访问的 Redis 地址、端口和密码(无密码可留空)。
  • 访问日志使用 ClickHouse 时,准备 ClickHouse 地址、端口、用户、密码和数据库。
  • 使用外部 MySQL 时,提前创建控制面数据库,并确认 WAF 容器网络可以连接。
  • 规划宿主机端口:控制台、HTTP、HTTPS 和站点端口范围。

外部服务建议只允许 WAF 所在主机或内网访问,不要直接暴露到公网。

运行单容器安装向导

bash -c "$(curl -fsSL https://has-waf.haser.top/install.sh)" -- --standalone

向导会依次询问:

选项 说明
WAF 镜像源 registry.haser.top 或 registry.hasbin.top(全球加速)
主数据库 容器内 SQLite(默认),或外部 MySQL 连接串
访问日志存储 外部 ClickHouse(默认),或容器内 SQLite
Redis 地址、端口、数据库编号、密码
ClickHouse 地址、端口、用户、数据库、密码(选择 ClickHouse 时)
宿主机端口 控制台、HTTP、HTTPS、站点端口范围

密码输入不回显。脚本会生成独立的 JWT 密钥和初始化令牌,写入安装目录 .env,权限为 600。

默认安装目录 /opt/has-waf,默认端口:

用途 宿主机默认端口 容器内端口
控制台 8000 8000
HTTP 接入 8080 8080
HTTPS 接入 8443 8443
站点端口范围 5010-5015 5010-5015

容器内部监听端口固定,只有宿主机映射端口可以修改。控制台中为站点设置的监听端口必须落在已映射的站点端口范围内。

非交互安装

脚本也支持用参数和环境变量跳过菜单:

REDIS_HOST=10.0.0.10 REDIS_PORT=6379 REDIS_PASSWORD='redis-secret' \
CLICKHOUSE_HOST=10.0.0.11 CLICKHOUSE_PORT=8123 CLICKHOUSE_USER=default \
CLICKHOUSE_PASSWORD='clickhouse-secret' CLICKHOUSE_DATABASE=has_waf \
bash -c "$(curl -fsSL https://has-waf.haser.top/install.sh)" -- \
  --standalone --non-interactive --ui-port 8000 --http-port 8080 --https-port 8443

使用外部 MySQL 时,把连接串写入 DATABASE_URL 并选择 --database mysql:

DATABASE_URL='mysql+pymysql://has_waf:password@10.0.0.12:3306/has_waf' \
bash -c "$(curl -fsSL https://has-waf.haser.top/install.sh)" -- \
  --standalone --non-interactive --database mysql

连接串中的用户名和密码如含 @、:、/ 等字符,需要先做 URL 编码。脚本只接受 mysql+pymysql:// 前缀。

只想生成配置、暂不拉取镜像时,追加 --prepare-only。生成结果包括安装目录中的 .env 和 docker-compose.yml。

完成首次设置

访问 http://服务器IP:8000/setup,设置管理员账号和密码,填写 .env 中的初始化令牌 SETUP_ACCESS_TOKEN,并接受法律文档。之后按提示重启 WAF:

cd /opt/has-waf
docker compose -f docker-compose.yml restart has-waf

如果修改了 Redis、ClickHouse 或 MySQL 连接信息,也需要重启 WAF 容器。首次启动向导写入的运行配置优先级高于 .env,数据库和中间件地址会自动带入。

手动使用 Compose

下载 docker-compose.yml,在安装目录创建 .env。下载后可按安装部署页的 SHA-256 清单核对文件完整性。至少需要以下字段:

HAS_WAF_IMAGE=registry.haser.top/has-waf:0.15.8
JWT_SECRET_KEY=<至少32位随机字符串>
SETUP_ACCESS_TOKEN=<随机字符串>
REDIS_HOST=<Redis地址>
REDIS_PORT=6379
REDIS_DB=0
REDIS_PASSWORD=<Redis密码或留空>
LOG_STORAGE_BACKEND=clickhouse
CLICKHOUSE_HOST=<ClickHouse地址>
CLICKHOUSE_PORT=8123
CLICKHOUSE_USER=default
CLICKHOUSE_PASSWORD=<ClickHouse密码或留空>
CLICKHOUSE_DATABASE=has_waf

然后创建数据目录并启动:

mkdir -p data/db data/backups logs certs static-sites conf-data
docker compose -f docker-compose.yml up -d
docker compose -f docker-compose.yml ps

全部字段的含义见配置字段说明。不要使用默认或重复的 JWT 密钥;runtime.env 所在目录需要可写并持久化。

更新与停止

单容器部署同样使用更新脚本,脚本会根据 .env 判断部署方式并只拉取 WAF 镜像:

bash -c "$(curl -fsSL https://has-waf.haser.top/upgrade.sh)"

停止服务不会删除数据:

cd /opt/has-waf
docker compose -f docker-compose.yml stop

需要重新启动时执行 docker compose -f docker-compose.yml up -d。升级或迁移前,请备份 .env、conf-data/、data/、证书和业务数据库。

文档随 v0.15.8 同步生成返回顶部 ↑