# PostgreSQL 与 Redis 接入手册 > 本文档补齐 `Document/10_TODO.md` 中“Postgres/Redis 接入文档与 IaC/脚本”的要求,统一描述连接信息、账号权限、运维流程,以及可复用的部署脚本位置。 ## 1. 运行环境总览 | 组件 | 地址/端口 | 主要数据库/实例 | 说明 | | --- | --- | --- | --- | | PostgreSQL | `120.53.222.17:5432` | `takeout_app_db`、`takeout_identity_db`、`takeout_dictionary_db`、`takeout_hangfire_db` | 线上实例,所有业务上下文共用。 | | Redis | `49.232.6.45:6379` | 单节点 | 业务缓存/登录限流/刷新令牌存储。 | > 注意:所有业务账号都只具备既有库的读写权限,无 `CREATEDB`。若需新库,需使用平台管理员账号(`postgres`)或联系 DBA。 ## 2. 账号与库映射 | 数据库 | 角色 | 密码 | 用途 | | --- | --- | --- | --- | | `takeout_app_db` | `app_user` | `AppUser112233` | 业务域 (`TakeoutAppDbContext`) | | `takeout_identity_db` | `identity_user` | `IdentityUser112233` | 身份域 (`IdentityDbContext`) | | `takeout_dictionary_db` | `dictionary_user` | `DictionaryUser112233` | 字典域 (`DictionaryDbContext`) | | `takeout_hangfire_db` | `hangfire_user` | `HangFire112233` | 后台调度/Hangfire | Redis 密码:`MsuMshk112233`,见 `appsettings.*.json -> Redis`。 ## 3. 环境变量/配置注入 ### PowerShell ```powershell $env:TAKEOUTSAAS_APPSETTINGS_DIR = "D:\HAZCode\TakeOut\src\Api\TakeoutSaaS.AdminApi" $env:TAKEOUTSAAS_APP_CONNECTION = "Host=120.53.222.17;Port=5432;Database=takeout_app_db;Username=app_user;Password=AppUser112233;Pooling=true" $env:TAKEOUTSAAS_IDENTITY_CONNECTION = "Host=120.53.222.17;Port=5432;Database=takeout_identity_db;Username=identity_user;Password=IdentityUser112233;Pooling=true" $env:TAKEOUTSAAS_DICTIONARY_CONNECTION = "Host=120.53.222.17;Port=5432;Database=takeout_dictionary_db;Username=dictionary_user;Password=DictionaryUser112233;Pooling=true" ``` ### Bash ```bash export TAKEOUTSAAS_APPSETTINGS_DIR=/home/user/TakeOut/src/Api/TakeoutSaaS.AdminApi export TAKEOUTSAAS_APP_CONNECTION="Host=120.53.222.17;Port=5432;Database=takeout_app_db;Username=app_user;Password=AppUser112233;Pooling=true" export TAKEOUTSAAS_IDENTITY_CONNECTION="Host=120.53.222.17;Port=5432;Database=takeout_identity_db;Username=identity_user;Password=IdentityUser112233;Pooling=true" export TAKEOUTSAAS_DICTIONARY_CONNECTION="Host=120.53.222.17;Port=5432;Database=takeout_dictionary_db;Username=dictionary_user;Password=DictionaryUser112233;Pooling=true" ``` Redis 连接字符串直接写入 `appsettings.*.json` 即可,如: ```jsonc "Redis": "49.232.6.45:6379,password=MsuMshk112233,abortConnect=false" ``` ## 4. 运维指南 ### PostgreSQL 1. **只读账号验证** ```powershell psql "host=120.53.222.17 port=5432 dbname=takeout_app_db user=app_user password=AppUser112233" ``` 2. **备份** ```bash pg_dump -h 120.53.222.17 -p 5432 -U postgres -F c -d takeout_app_db -f backup/takeout_app_db_$(date +%Y%m%d).dump pg_dumpall -h 120.53.222.17 -p 5432 -U postgres > backup/all_$(date +%Y%m%d).sql ``` 3. **恢复** ```bash pg_restore -h 120.53.222.17 -p 5432 -U postgres -d takeout_app_db backup/takeout_app_db_xxx.dump psql -h 120.53.222.17 -p 5432 -U postgres -f backup/all_yyyymmdd.sql ``` 4. **账号/权限策略** - `app_user` / `identity_user` / `dictionary_user` 拥有 `CONNECT`、`TEMP`、Schema `public` 的 CRUD 权限。 - `hangfire_user` 仅能访问 `takeout_hangfire_db`,不可访问业务库。 - 创建新表/列时,通过 EF Migration 自动添加 COMMENT。 ### Redis 1. **连接验证** ```bash redis-cli -h 49.232.6.45 -p 6379 -a MsuMshk112233 ping ``` 2. **备份** ```bash redis-cli -h 49.232.6.45 -p 6379 -a MsuMshk112233 save # 触发 RDB redis-cli -h 49.232.6.45 -p 6379 -a MsuMshk112233 bgsave # 后台 ``` RDB/AOF 文件在服务器 `redis.conf` 定义的目录(默认 `/var/lib/redis`)。 3. **常见运维项** - `CONFIG GET dir` / `CONFIG GET dbfilename` 可查看持久化路径。 - `INFO memory` 监控内存;开启 `maxmemory` + `allkeys-lru` 保护。 ## 5. IaC / 脚本 | 文件 | 说明 | | --- | --- | | `deploy/postgres/create_databases.sql` | 基于 `postgres` 管理员执行,创建四个业务库及角色、授予权限、补 COMMENT。 | | `deploy/postgres/bootstrap.ps1` | PowerShell 包装脚本,调用 `psql` 执行上面的 SQL(默认读取 `postgres` 管理员账号)。 | | `deploy/postgres/README.md` | 介绍如何在本地/测试环境执行 bootstrap 并校验连接。 | | `deploy/redis/docker-compose.yml` | 可复用的 Redis 部署(Redis 7 + AOF),便于本地或测试环境一键拉起。 | | `deploy/redis/redis.conf` | compose/裸机均可共用的配置(`requirepass`、持久化等已写好)。 | | `deploy/redis/README.md` | 说明如何使用 compose 或将 `redis.conf` 部署到现有实例。 | > 线上目前为裸机安装(非容器),如需创建新环境/快速恢复,可直接运行上述脚本达到同样配置;即使在现有机器上,也可把 SQL/配置当作“最终规范”确保环境一致性。