# OKR 绩效考核系统 — 生产部署清单 ## 部署前安全检查 在将系统部署到云主机前,**必须**完成以下安全配置: ### 1. 环境变量设置 ```bash # 生成随机密钥(至少 256-bit = 32 字节) export APP_JWT_SECRET=$(openssl rand -base64 32) # 设置超级管理员初始密码(部署后立即修改) export APP_SUPER_ADMIN_PASSWORD="请替换为强密码" # 数据库加密密钥(启用 SQLCipher 时必需) export DB_ENCRYPT_KEY=$(openssl rand -base64 32) # CORS 允许的域名(生产环境用实际域名) export APP_CORS_ORIGINS="https://okr.your-company.com" ``` ### 2. 系统服务配置(systemd) ```ini # /etc/systemd/system/okr-performance.service [Unit] Description=OKR Performance System After=network.target [Service] Type=simple User=appuser WorkingDirectory=/opt/okr-performance EnvironmentFile=/opt/okr-performance/env.prod ExecStart=/usr/bin/java -jar /opt/okr-performance/okr-performance.jar --spring.profiles.active=prod Restart=on-failure RestartSec=10 # 安全加固 NoNewPrivileges=yes ProtectSystem=strict ProtectHome=yes ReadWritePaths=/opt/okr-performance/data PrivateTmp=yes [Install] WantedBy=multi-user.target ``` ### 3. 数据库文件权限 ```bash chmod 700 /opt/okr-performance/data chmod 600 /opt/okr-performance/data/okr-performance.db chown -R appuser:appuser /opt/okr-performance ``` ### 4. 启用 SQLCipher 加密(推荐) 1. 取消 `pom.xml` 中 `sqlcipher-jdbc` 依赖的注释,重新构建 2. 修改 `application-prod.yml` 中 datasource 配置,使用 SQLCipher URL 3. 迁移现有明文数据库(如有): ```bash # 方案: 导出 → 启用加密 → 导入 sqlcipher data/okr-performance.db "PRAGMA key='${DB_ENCRYPT_KEY}';" ``` ### 5. Nginx + HTTPS ```bash # 安装 certbot apt install certbot python3-certbot-nginx # 复制 Nginx 配置 cp deployment/nginx-okr-performance.conf /etc/nginx/sites-available/ ln -s /etc/nginx/sites-available/nginx-okr-performance.conf /etc/nginx/sites-enabled/ # 获取 SSL 证书 certbot --nginx -d okr.your-company.com # 测试并重载 nginx -t && systemctl reload nginx ``` ### 6. 防火墙规则 ```bash # 仅开放 80/443 端口(Nginx) ufw allow 80/tcp ufw allow 443/tcp # 阻止直接访问应用端口 ufw deny 18080/tcp ufw enable ``` ### 7. 部署后验证清单 - [ ] HTTPS 可访问,HTTP 自动跳转 - [ ] 安全头齐全(检查 `curl -I https://okr.your-company.com`) - [ ] 使用 `admin` 登录后立即修改密码 - [ ] SQL 日志已关闭(检查日志文件无 SQL 输出) - [ ] 非管理员用户无法查看他人的评分详情 - [ ] 数据库文件权限为 600 - [ ] 环境变量未包含默认值(生产配置无 fallback) ## 应急响应 如怀疑数据泄露: 1. 立即轮换 `APP_JWT_SECRET`(所有用户需重新登录) 2. 检查 `/var/log/nginx/okr-access.log` 中的异常访问模式 3. 检查 `operation_log` 表中的可疑操作 4. 重置所有用户密码 5. 如数据库文件被拷贝,评估是否需要通知相关人员