Journiv Docker Compose生产环境部署完整教程
Journiv是一款现代化的自托管私有日记应用,支持情绪追踪、媒体上传、数据分析等丰富功能。本教程将详细介绍如何使用Docker Compose在生产环境中部署Journiv,确保您获得稳定、高效的私有日记体验。
为什么选择Docker Compose部署? 🚀
Docker Compose是部署Journiv的最佳方式,它提供了以下优势:
- 一键部署:通过单个命令即可启动所有服务
- 环境隔离:每个服务在独立的容器中运行
- 资源管理:轻松配置CPU和内存限制
- 健康检查:自动监控服务状态
- 持久化存储:数据安全存储在本地卷中
- 易于维护:简单的更新和备份流程
准备工作 📋
系统要求
- 操作系统:Linux (Ubuntu/Debian/CentOS)、macOS或Windows(WSL2)
- Docker:版本20.10.0或更高
- Docker Compose:版本2.0.0或更高
- 内存:至少2GB RAM(推荐4GB)
- 存储:至少10GB可用空间
安装Docker和Docker Compose
如果您还没有安装Docker和Docker Compose,请先安装:
# 安装Docker
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
sudo usermod -aG docker $USER
# 安装Docker Compose
sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
快速开始Journiv部署 🚀
步骤1:克隆项目代码
# 创建项目目录
mkdir journiv-production
cd journiv-production
# 克隆Journiv仓库
git clone https://gitcode.com/gh_mirrors/jo/journiv-app .
步骤2:配置环境变量
Journiv使用环境变量文件进行配置。首先复制模板文件:
cp env.template .env
然后编辑.env文件,设置必要的配置:
nano .env
以下是必须配置的关键参数:
# 安全密钥 - 必须修改!
SECRET_KEY=your-very-long-and-secure-secret-key-here
# 域名或IP地址
DOMAIN_NAME=your-domain.com # 或服务器IP地址
# 数据库密码(PostgreSQL)
POSTGRES_PASSWORD=strong-database-password-here
# 生产环境设置
ENVIRONMENT=production
DOMAIN_SCHEME=https # 生产环境使用HTTPS
生成安全密钥的命令:
# 方法1:使用Python
python -c "import secrets; print(secrets.token_urlsafe(32))"
# 方法2:使用OpenSSL
openssl rand -base64 32
步骤3:启动Journiv服务
使用PostgreSQL作为数据库(推荐用于生产环境):
# 启动所有服务
docker compose up -d
如果您想使用SQLite(适合轻量级部署):
# 使用SQLite配置启动
docker compose -f docker-compose.sqlite.yml up -d
生产环境高级配置 ⚙️
优化资源配置
编辑docker-compose.yml文件,调整资源限制:
services:
app:
deploy:
resources:
limits:
cpus: "2.0"
memory: 2g
reservations:
memory: 512m
配置反向代理(Nginx示例)
创建Nginx配置文件/etc/nginx/sites-available/journiv:
server {
listen 80;
server_name your-domain.com;
# 重定向到HTTPS
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl http2;
server_name your-domain.com;
# SSL证书配置
ssl_certificate /etc/letsencrypt/live/your-domain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/your-domain.com/privkey.pem;
# SSL优化配置
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
# 反向代理到Journiv
location / {
proxy_pass http://localhost:8000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# WebSocket支持
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
启用HTTPS
使用Certbot获取免费SSL证书:
# 安装Certbot
sudo apt update
sudo apt install certbot python3-certbot-nginx
# 获取证书
sudo certbot --nginx -d your-domain.com
Journiv服务架构详解 🏗️
Journiv的Docker Compose部署包含以下核心服务:
1. PostgreSQL数据库服务
PostgreSQL作为主数据库,提供稳定可靠的数据存储:
- 容器名称:journiv-postgres-db
- 端口:5432(内部)
- 数据卷:
./data/postgres - 健康检查:自动监控数据库连接状态
2. Valkey缓存服务
Valkey(Redis兼容)用于缓存和消息队列:
- 容器名称:journiv-valkey-cache
- 端口:6379(内部)
- 数据卷:
./data/valkey - 用途:会话缓存、Celery消息队列
3. 主应用服务
Journiv核心应用,提供Web界面和API:
- 容器名称:journiv-postgres-app
- 端口:8000(映射到主机)
- 数据卷:
./data - 功能:用户界面、API接口、文件上传
4. Celery工作进程
处理后台异步任务:
- 容器名称:journiv-celery-worker
- 功能:导入/导出处理、数据分析
- 并发控制:可配置工作进程数量
5. Celery定时任务
管理定时任务和调度:
- 容器名称:journiv-celery-beat
- 功能:定期数据清理、统计计算
数据持久化与备份策略 💾
数据目录结构
journiv-production/
├── data/
│ ├── postgres/ # PostgreSQL数据库文件
│ ├── valkey/ # Valkey缓存数据
│ ├── media/ # 用户上传的媒体文件
│ └── logs/ # 应用日志
├── docker-compose.yml
└── .env
备份脚本示例
创建备份脚本backup-journiv.sh:
#!/bin/bash
BACKUP_DIR="/backup/journiv"
DATE=$(date +%Y%m%d_%H%M%S)
# 创建备份目录
mkdir -p $BACKUP_DIR
# 停止服务
cd /path/to/journiv-production
docker compose stop
# 备份PostgreSQL数据
docker run --rm -v journiv-production_data:/data -v $BACKUP_DIR:/backup alpine \
tar czf /backup/postgres_$DATE.tar.gz -C /data postgres
# 备份媒体文件
docker run --rm -v journiv-production_data:/data -v $BACKUP_DIR:/backup alpine \
tar czf /backup/media_$DATE.tar.gz -C /data media
# 启动服务
docker compose start
# 清理旧备份(保留最近30天)
find $BACKUP_DIR -name "*.tar.gz" -mtime +30 -delete
设置定时备份(每天凌晨2点):
# 编辑crontab
crontab -e
# 添加以下行
0 2 * * * /path/to/backup-journiv.sh
监控与维护 📊
检查服务状态
# 查看所有容器状态
docker compose ps
# 查看应用日志
docker compose logs app
# 查看数据库日志
docker compose logs postgres
# 实时监控日志
docker compose logs -f app
健康检查
所有服务都配置了健康检查,您可以通过以下方式验证:
# 检查应用健康状态
curl http://localhost:8000/api/v1/health
# 检查数据库连接
docker compose exec postgres pg_isready -U journiv -d journiv_prod
# 检查Valkey连接
docker compose exec valkey valkey-cli ping
性能监控
使用Docker内置监控:
# 查看资源使用情况
docker stats
# 查看容器详细信息
docker inspect journiv-postgres-app
故障排除指南 🔧
常见问题及解决方案
1. 容器启动失败
# 查看详细错误信息
docker compose logs
# 重新构建并启动
docker compose down
docker compose build --no-cache
docker compose up -d
2. 数据库连接问题
# 检查数据库服务状态
docker compose ps postgres
# 检查数据库日志
docker compose logs postgres
# 手动测试数据库连接
docker compose exec postgres psql -U journiv -d journiv_prod -c "SELECT 1;"
3. 端口冲突
如果端口8000已被占用,修改.env文件:
APP_PORT=8001
然后更新Docker Compose配置并重启。
日志分析
Journiv提供详细的日志记录,您可以通过以下方式查看:
# 查看应用日志
docker compose logs app
# 查看特定服务的错误日志
docker compose logs app --tail=100 | grep ERROR
# 查看最近1小时的日志
docker compose logs app --since 1h
安全最佳实践 🔒
1. 定期更新
# 拉取最新镜像
docker compose pull
# 重启服务
docker compose up -d
2. 网络安全配置
- 使用防火墙限制访问
- 仅开放必要的端口(80/443)
- 禁用root用户远程登录
3. 数据加密
- 使用HTTPS加密传输
- 定期备份加密数据
- 使用强密码策略
4. 监控安全日志
# 监控认证日志
docker compose logs app | grep -E "(failed|error|unauthorized)"
扩展与优化 🚀
添加更多工作进程
编辑.env文件增加Celery并发:
CELERY_WORKER_CONCURRENCY=4
配置邮件通知
在.env中添加邮件配置:
# 邮件服务器配置
EMAIL_HOST=smtp.gmail.com
EMAIL_PORT=587
EMAIL_USE_TLS=true
EMAIL_HOST_USER=your-email@gmail.com
EMAIL_HOST_PASSWORD=your-app-password
DEFAULT_FROM_EMAIL=journiv@your-domain.com
集成OIDC身份验证
启用OpenID Connect登录:
OIDC_ENABLED=true
OIDC_ISSUER=https://your-oidc-provider.com
OIDC_CLIENT_ID=journiv-app
OIDC_CLIENT_SECRET=your-client-secret
OIDC_REDIRECT_URI=https://your-domain.com/api/v1/auth/oidc/callback
升级Journiv版本 📦
平滑升级流程
# 1. 备份数据
./backup-journiv.sh
# 2. 停止服务
docker compose down
# 3. 拉取新版本
docker compose pull
# 4. 启动新版本
docker compose up -d
# 5. 运行数据库迁移(如果需要)
docker compose exec app alembic upgrade head
# 6. 验证升级
docker compose logs app --tail=50
版本回滚
# 1. 停止当前版本
docker compose down
# 2. 回滚到特定版本
docker compose up -d --image=swalabtech/journiv-app:v1.2.3
# 3. 恢复数据库备份(如果需要)
总结 🎯
通过本教程,您已经学会了如何:
- 准备环境:安装Docker和Docker Compose
- 配置Journiv:设置环境变量和安全密钥
- 部署服务:使用Docker Compose一键部署
- 配置生产环境:设置HTTPS、反向代理
- 数据管理:实现数据持久化和备份
- 监控维护:健康检查、日志分析、故障排除
- 安全优化:实施安全最佳实践
- 升级管理:平滑升级和版本回滚
Journiv作为自托管私有日记应用,为您提供完全控制的数据隐私和个性化体验。现在您可以开始使用Journiv记录生活、追踪情绪,享受安全私密的日记时光!
💡 提示:记得定期检查官方文档获取最新功能和更新:docs/official.md
🔧 高级功能:探索AI增强功能:plugins/ai/
开始您的Journiv之旅吧!📖✨
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



