Skip to content

PostgreSQL 数据库初始化指南

适用场景:使用外部 PostgreSQL 数据库而非 Docker 内嵌数据库时,需提前手动创建数据库和用户。

步骤 1:创建用户和数据库

以 PostgreSQL 管理员(postgres)身份登录 psql:

bash
sudo -u postgres psql

查询现有数据库和用户

psql 中执行:

sql
-- 查看所有数据库
\l

-- 查看所有用户
\du

输入 \q 退出 psql。

创建用户和数据库

执行以下 SQL(每条语句必须以 ; 结尾):

sql
-- 创建应用用户
CREATE USER ssh_upgrade WITH PASSWORD 'your_password';

-- 创建数据库并指定所有者
CREATE DATABASE ssh_upgrade OWNER ssh_upgrade;

-- 授予数据库权限
GRANT ALL PRIVILEGES ON DATABASE ssh_upgrade TO ssh_upgrade;

继续在同一个 psql 会话中执行下一步授予 schema 权限。

步骤 2:授予 schema 权限

⚠️ 注意:PostgreSQL 15+ 移除了 public schema 对普通用户的默认 CREATE 权限,必须由 PostgreSQL 管理员(superuser)显式授予。此步骤直接在步骤 1 的 psql 会话中执行即可,不要断开重连。

sql
-- 授予 public schema 的使用和创建权限
GRANT USAGE, CREATE ON SCHEMA public TO ssh_upgrade;

-- 为 ssh_upgrade 用户创建的后续对象设置默认权限
ALTER DEFAULT PRIVILEGES FOR ROLE ssh_upgrade IN SCHEMA public
  GRANT ALL ON TABLES TO ssh_upgrade;
ALTER DEFAULT PRIVILEGES FOR ROLE ssh_upgrade IN SCHEMA public
  GRANT ALL ON SEQUENCES TO ssh_upgrade;

输入 \q 退出 psql。

连接参数

创建完成后,将以下参数填入服务端部署的环境变量中:

方式一:env.sh / .env 配置文件

bash
export DB_DRIVER=postgres
export DB_HOST=127.0.0.1        # 改为实际数据库地址
export DB_PORT=5432
export DB_USER=ssh_upgrade
export DB_PASSWORD=your_password # 改为实际密码
export DB_NAME=ssh_upgrade
export DB_SSLMODE=disable        # 生产环境建议 enable

方式二:docker-compose.yml 环境变量

yaml
environment:
  - DB_DRIVER=postgres
  - DB_HOST=127.0.0.1          # 改为实际数据库地址
  - DB_PORT=5432
  - DB_USER=ssh_upgrade
  - DB_PASSWORD=your_password  # 改为实际密码
  - DB_NAME=ssh_upgrade
  - DB_SSLMODE=disable         # 生产环境建议 enable

PostgreSQL 连接默认使用 UTF8 编码,已在 DSN 中自动配置 client_encoding=UTF8,无需手动设置。

快速验证连接

bash
psql -h 127.0.0.1 -p 5432 -U ssh_upgrade -d ssh_upgrade -c "SELECT 1"

输入密码后返回 1 即表示连接正常。

安全建议

限制 IP 访问

编辑 pg_hba.conf 文件(通常在 /etc/postgresql/*/main/pg_hba.conf),限制允许连接的主机:

# 仅允许 192.168.1.x 网段
host    ssh_upgrade    ssh_upgrade    192.168.1.0/24    scram-sha-256

# 仅允许本机
host    ssh_upgrade    ssh_upgrade    127.0.0.1/32      scram-sha-256

修改后重启 PostgreSQL:

bash
sudo systemctl restart postgresql

强密码

密码建议 16 位以上,包含大小写字母、数字和特殊字符。

首次启动提示

数据库创建完成后启动服务端,首次访问管理平台时会自动跳转至初始化引导页,在 Web 界面设置管理员账号即可。

如因 IP 白名单无法登录,可在启动时添加 --unlock 参数解除限制:

bash
docker compose exec ssh-upgrade-web /app/server --unlock

/usr/local/bin/ssh-upgrade-server --unlock

← 返回服务端部署