Journiv Docker Compose生产环境部署完整教程

Journiv Docker Compose生产环境部署完整教程

【免费下载链接】journiv-app Journiv - Self hosted private journaling app 【免费下载链接】journiv-app 项目地址: https://gitcode.com/gh_mirrors/jo/journiv-app

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. 恢复数据库备份(如果需要)

总结 🎯

通过本教程,您已经学会了如何:

  1. 准备环境:安装Docker和Docker Compose
  2. 配置Journiv:设置环境变量和安全密钥
  3. 部署服务:使用Docker Compose一键部署
  4. 配置生产环境:设置HTTPS、反向代理
  5. 数据管理:实现数据持久化和备份
  6. 监控维护:健康检查、日志分析、故障排除
  7. 安全优化:实施安全最佳实践
  8. 升级管理:平滑升级和版本回滚

Journiv作为自托管私有日记应用,为您提供完全控制的数据隐私和个性化体验。现在您可以开始使用Journiv记录生活、追踪情绪,享受安全私密的日记时光!

💡 提示:记得定期检查官方文档获取最新功能和更新:docs/official.md

🔧 高级功能:探索AI增强功能:plugins/ai/

开始您的Journiv之旅吧!📖✨

【免费下载链接】journiv-app Journiv - Self hosted private journaling app 【免费下载链接】journiv-app 项目地址: https://gitcode.com/gh_mirrors/jo/journiv-app

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值