
SafeLine 忘记或泄露数据库密码时如何用管理脚本重置 POSTGRES_PASSWORD 并重启容器【免费下载链接】SafeLineSafeLine is a self-hosted WAF(Web Application Firewall) / reverse proxy to protect your web apps from attacks and exploits.项目地址: https://gitcode.com/GitHub_Trending/sa/SafeLineSafeLine雷池的控制台配置存放在 PostgreSQL 里数据库容器的密码由安装目录.env文件中的POSTGRES_PASSWORD变量决定。如果这个密码被遗忘或者已经泄露需要把它换成一个新值并且让所有依赖该密码的容器重新加载。SafeLine 随仓库提供的管理脚本scripts/manage.py内置了修复 → 重置数据库密码功能它会自动生成新密码、改写.env、在数据库容器内执行ALTER USER同步修改并按提示重启全部 Docker 容器。适用前提SafeLine 已用 Docker Compose 安装在 Linuxx86_64 或 aarch64服务器上且操作者拥有 root 权限。POSTGRES_PASSWORD 在部署中的作用从 compose.yaml 可以看到POSTGRES_PASSWORD不只是 postgres 服务的变量postgres服务通过POSTGRES_PASSWORD${POSTGRES_PASSWORD:?postgres password required}初始化数据库账号safeline-ce镜像为safeline-postgres15.2mgt服务的MGT_PG、luigi服务的LUIGI_PG、chaos服务的DB_ADDR三条连接串都内嵌了${POSTGRES_PASSWORD}。这意味着只改.env或只改数据库都不够环境变量是容器启动时注入的改完密码后必须重启容器新密码才会对所有服务生效。这也是管理脚本在重置完密码后会询问是否重启容器的原因。另外脚本在生成/更新配置时会校验POSTGRES_PASSWORD必须为纯字母数字见 generate_config。如果现有密码包含特殊字符脚本会直接提示POSTGRES_PASSWORD 变量包含特殊字符请选择修复重置密码并中止此时同样要走下面的修复流程。运行环境准备管理脚本自身有硬性检查不满足会直接报错退出见 mainroot 权限运行在交互式终端标准 TTY中运行不支持管道输入Linux 系统处理器为 x86_64/AMD64 或 aarch64Python 3.5 以上脚本 shebang 为python3。脚本会自动定位安装目录它执行docker inspect读取safeline-mgt容器上的com.docker.compose.project.working_dir标签如果取不到会提示手动输入 SafeLine 安装目录例如默认的/data/safeline。安装目录下必须存在.env文件否则会报未找到 .env 文件。如果选择重启容器还要求 Docker Compose 2.x脚本会执行docker compose version检查低于 2 会提示版本过低并询问是否安装 Docker。执行重置流程在终端中运行管理脚本以仓库中的 管理脚本 为例sudo python3 scripts/manage.py主菜单显示选择你要执行的动作选项为 1.安装 2.升级 3.卸载 4.修复 5.重启英文环境为 INSTALL/UPGRADE/UNINSTALL/REPAIR/RESTART输入4进入修复。修复子菜单见 repair提供两个选项重置 tengine 配置重置数据库密码输入2。脚本随后按 reset_postgres 执行读取安装目录下的.env生成一个 20 位随机字母数字串作为新密码覆盖写回.env中的POSTGRES_PASSWORD该流程不会先创建.env.bak备份而安装/升级流程会在safeline-pg容器内执行同步改密实际命令为docker exec safeline-pg psql -U safeline-ce -c ALTER USER \safeline-ce\ WITH PASSWORD 新密码;其中新密码是脚本刚写入.env的那个值由脚本自动拼接无需手工输入。任何一步失败都会输出对应错误信息并停止如重置数据库密码失败。改密成功后脚本询问是否需要重启雷池 WAF 的容器英文Do you want to restart SafeLine WAF Docker container输入y。选择y的副作用要清楚脚本会先执行docker compose down再执行docker compose up -d --remove-orphans见 docker_restart_all即所有 SafeLine 容器tengine、mgt、detector、postgres 等都会停止并重新启动期间 WAF 服务中断需要 Docker Compose 2.x 可用。如果输入n.env和数据库里的密码已经改为新值但mgt、luigi、chaos容器的MGT_PG/LUIGI_PG/DB_ADDR环境变量仍是启动时注入的旧密码数据库连接会失效。此时可以重新运行脚本选 4 → 2 走完流程选y或直接选主菜单5重启单独执行一次全容器重启。流程正常结束时脚本输出重置数据库密码完成Reset postgres password completed。验证结果打开安装目录下的.env例如默认目录/data/safeline/.env确认POSTGRES_PASSWORD一行已变为 20 位字母数字新密码重启完成后可以用脚本自身在 init_mgt 中使用的同款命令检查管理容器健康状态脚本在安装/升级后就是靠它判断启动完成的期望输出healthydocker inspect --format{{.State.Health.Status}} safeline-mgtpostgres 容器的健康检查在 compose.yaml 中定义为pg_isready -U safeline-ce -d safeline-ce重启后safeline-pg的健康状态恢复正常说明新密码下数据库可正常连接。常见报错与限制脚本输出含义与处理方式未找到 .env 文件定位到的安装目录下没有.env检查安装目录是否正确或手动输入正确路径后重试重置数据库密码失败safeline-pg内执行ALTER USER失败检查safeline-pg容器是否在运行当前环境不符合…安装条件选择重启时 Docker Compose 检查未通过如版本低于 2停止 Docker 容器失败 / 启动 Docker 容器失败docker compose down/up执行失败up若报iptables failed脚本会询问是否重启 Docker 服务后重试最后一点边界修复子菜单里的另一项重置 tengine 配置只处理 Nginx 配置目录与本流程互不影响重置数据库密码流程不修改任何业务数据只改密码并重启容器。【免费下载链接】SafeLineSafeLine is a self-hosted WAF(Web Application Firewall) / reverse proxy to protect your web apps from attacks and exploits.项目地址: https://gitcode.com/GitHub_Trending/sa/SafeLine创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考