refactor: 管理员账号存储在数据库,生产环境使用宿主机目录存储数据
- 管理员账号在数据库初始化时创建,不再从环境变量读取 - 默认账号: admin / admin123 - 首次启动时自动创建,请在登录后修改密码 - 移除 ADMIN_USERNAME 和 ADMIN_PASSWORD 环境变量 - 生产环境 MySQL 数据直接存储在宿主机 /opt/vitals/mysql_data - 便于备份和恢复 - 更直观的数据管理 - 更新部署指南,添加 MySQL 数据目录创建和备份说明 - 更新 .env.example 和 README.md 反映新的配置方式 Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -170,11 +170,7 @@ vim .env
|
||||
编辑 `.env` 文件内容:
|
||||
|
||||
```bash
|
||||
# 管理员账户
|
||||
ADMIN_USERNAME=admin
|
||||
ADMIN_PASSWORD=YourStrongPassword123!
|
||||
|
||||
# JWT 密钥(粘贴上面生成的随机字符串)
|
||||
# JWT 密钥<E5AF86><E992A5>粘贴上面生成的随机字符串)
|
||||
JWT_SECRET=粘贴上面生成的64位随机字符串
|
||||
|
||||
# AI 食物识别(可选)
|
||||
@@ -182,10 +178,9 @@ DASHSCOPE_API_KEY=
|
||||
DEEPSEEK_API_KEY=
|
||||
```
|
||||
|
||||
**密码要求:**
|
||||
- 至少 12 位
|
||||
- 包含大小写字母和数字
|
||||
- 建议包含特殊字符
|
||||
**默认管理员账号**: `admin` / `admin123`
|
||||
|
||||
> 部署后请立即登录并修改默认密码!
|
||||
|
||||
---
|
||||
|
||||
@@ -198,16 +193,21 @@ cd /opt/vitals
|
||||
mkdir -p /opt/vitals/data
|
||||
chmod 755 /opt/vitals/data
|
||||
|
||||
# 2. 构建并启动
|
||||
docker compose up -d --build
|
||||
# 2. 创建 MySQL 数据目录(宿主机存储)
|
||||
mkdir -p /opt/vitals/mysql_data
|
||||
# MySQL 容器需要写权限,设置为 777 或使用特定用户
|
||||
chmod 777 /opt/vitals/mysql_data
|
||||
|
||||
# 3. 查看运行状态
|
||||
# 3. 构建并启动
|
||||
docker compose -f docker-compose.yml -f docker-compose.prod.yml up -d --build
|
||||
|
||||
# 4. 查看运行状态
|
||||
docker compose ps
|
||||
|
||||
# 4. 查看日志
|
||||
# 5. 查看日志
|
||||
docker compose logs -f
|
||||
|
||||
# 5. 测试是否正常运行
|
||||
# 6. 测试是否正常运行
|
||||
curl http://localhost:8080/api/today
|
||||
```
|
||||
|
||||
@@ -355,12 +355,17 @@ BACKUP_DIR="/opt/vitals/backups"
|
||||
DATE=$(date +%Y%m%d_%H%M%S)
|
||||
|
||||
mkdir -p $BACKUP_DIR
|
||||
cp /opt/vitals/data/vitals.db $BACKUP_DIR/vitals_$DATE.db
|
||||
|
||||
# 方式1: 使用 mysqldump 导出 SQL(推荐)
|
||||
docker compose exec -T mysql mysqldump -u root -p${MYSQL_ROOT_PASSWORD:-rootpassword} vitals > $BACKUP_DIR/vitals_$DATE.sql
|
||||
|
||||
# 方式2: 直接复制 mysql_data 目录(完整备份)
|
||||
# tar -czf $BACKUP_DIR/mysql_data_$DATE.tar.gz -C /opt/vitals mysql_data
|
||||
|
||||
# 保留最近 7 天的备份
|
||||
find $BACKUP_DIR -name "vitals_*.db" -mtime +7 -delete
|
||||
find $BACKUP_DIR -name "vitals_*.sql" -mtime +7 -delete
|
||||
|
||||
echo "$(date): Backup completed - vitals_$DATE.db"
|
||||
echo "$(date): Backup completed - vitals_$DATE.sql"
|
||||
```
|
||||
|
||||
### 10.2 设置定时任务
|
||||
@@ -376,14 +381,29 @@ crontab -e
|
||||
添加一行:
|
||||
|
||||
```
|
||||
0 3 * * * /opt/vitals/backup.sh >> /var/log/vitals-backup.log 2>&1
|
||||
0 3 * * * cd /opt/vitals && ./backup.sh >> /var/log/vitals-backup.log 2>&1
|
||||
```
|
||||
|
||||
### 10.3 验证备份
|
||||
|
||||
```bash
|
||||
# 手动执行一次
|
||||
/opt/vitals/backup.sh
|
||||
cd /opt/vitals && ./backup.sh
|
||||
|
||||
# 查看备份文件
|
||||
ls -la /opt/vitals/backups/
|
||||
```
|
||||
|
||||
### 10.4 恢复备份
|
||||
|
||||
```bash
|
||||
# 从 SQL 文件恢复
|
||||
docker compose exec -T mysql mysql -u root -p${MYSQL_ROOT_PASSWORD:-rootpassword} vitals < /opt/vitals/backups/vitals_20260123_120000.sql
|
||||
|
||||
# 或从 tar.gz 恢复(完整恢复)
|
||||
# tar -xzf /opt/vitals/backups/mysql_data_20260123_120000.tar.gz -C /opt/vitals
|
||||
# docker compose restart
|
||||
```
|
||||
|
||||
# 查看备份文件
|
||||
ls -la /opt/vitals/backups/
|
||||
@@ -472,12 +492,13 @@ ss -tlnp | grep 8080
|
||||
| 检查项 | 命令/操作 | 预期结果 |
|
||||
|--------|-----------|----------|
|
||||
| 服务运行 | `docker compose ps` | 状态为 running |
|
||||
| MySQL 数据目录 | `ls -la /opt/vitals/mysql_data/` | 有数据文件 |
|
||||
| API 响应 | `curl localhost:8080/api/today` | 返回 JSON |
|
||||
| HTTP 访问 | 浏览器打开 `http://IP` | 显示首页 |
|
||||
| HTTPS 访问 | 浏览器打开 `https://域名` | 显示首页,有锁图标 |
|
||||
| 登录功能 | 访问 `/login` 用 admin 登录 | 登录成功 |
|
||||
| 管理后台 | 访问 `/admin` | 显示管理面板 |
|
||||
| 自动备份 | `ls /opt/vitals/backups/` | 有备份文件 |
|
||||
| 备份脚本 | `ls -la /opt/vitals/backup.sh` | 文件存在且可执行 |
|
||||
|
||||
---
|
||||
|
||||
@@ -485,7 +506,7 @@ ss -tlnp | grep 8080
|
||||
|
||||
| 项目 | 要求 |
|
||||
|------|------|
|
||||
| 管理员密码 | 至少 12 位,包含大小写字母、数字、特殊字符 |
|
||||
| 管理员密码 | 部署后立即修改默认密码 (admin/admin123) |
|
||||
| JWT 密钥 | 使用 `openssl rand -hex 32` 生成的随机字符串 |
|
||||
| HTTPS | 生产环境必须启用 |
|
||||
| 防火墙 | 只开放必要端口 (22, 80, 443) |
|
||||
@@ -543,28 +564,34 @@ docker compose logs
|
||||
|
||||
### Q: 忘记管理员密码
|
||||
|
||||
管理员密码存储在 MySQL 数据库中,可以通过以下方式重置:
|
||||
|
||||
```bash
|
||||
cd /opt/vitals
|
||||
# 修改 .env 中的 ADMIN_PASSWORD
|
||||
vim .env
|
||||
# 重启服务
|
||||
docker compose restart
|
||||
# 进入 MySQL 容器
|
||||
docker compose exec mysql mysql -u root -p
|
||||
|
||||
# 选择数据库
|
||||
use vitals;
|
||||
|
||||
# 生成新的密码哈希(Python)
|
||||
# python -c "import bcrypt; print(bcrypt.hashpw(b'newpassword', bcrypt.gensalt()).decode())"
|
||||
|
||||
# 更新管理员密码(将下方哈希值替换为生成的)
|
||||
UPDATE users SET password_hash = '$2b$12$...' WHERE name = 'admin';
|
||||
```
|
||||
|
||||
### Q: 数据库损坏
|
||||
|
||||
从备份恢复:
|
||||
```bash
|
||||
# 停止服务
|
||||
docker compose down
|
||||
# 从 SQL 备份恢复
|
||||
docker compose exec -T mysql mysql -u root -p${MYSQL_ROOT_PASSWORD:-rootpassword} vitals < /opt/vitals/backups/vitals_20260123_120000.sql
|
||||
|
||||
# 恢复备份
|
||||
cp /opt/vitals/backups/vitals_最新日期.db /opt/vitals/data/vitals.db
|
||||
|
||||
# 启动服务
|
||||
docker compose up -d
|
||||
# 或直接复制数据目录恢复(需要重启)
|
||||
# tar -xzf /opt/vitals/backups/mysql_data_20260123_120000.tar.gz -C /opt/vitals
|
||||
# docker compose restart
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
*最后更新: 2026-01-22*
|
||||
*最后更新: 2026-01-23*
|
||||
|
||||
Reference in New Issue
Block a user