9.3 KiB
9.3 KiB
家庭日报系统
一个轻量化的家庭日报系统,用于自动汇总昨日信息(阅读、收获),生成今日计划,注重生活化、个性化和低门槛使用。支持上传文件或视频作为附加内容,并可生成PDF报告定时发送至邮箱。
主要功能
-
昨日记录
- 阅读记录(支持书籍/文章/视频类型)
- 感悟记录
- 支持文件/视频上传
- 日期自动设置为当日,无需手动填写
-
家庭事项管理
- 事项添加、编辑、删除
- 按类型(采购/家务)、状态筛选
- 优先级管理
- 截止日期设置
-
今日计划生成
- 基于昨日状态和待处理事项自动生成
- 支持手动调整
- 完成状态标记
- 优先级管理
-
报告生成
- 自动整合昨日记录和今日计划
- 可视化统计图表
- 支持PDF格式导出
- 支持历史报告查看
-
邮件发送
- 支持手动发送PDF报告
- 支持定时发送
- 可配置SMTP服务器、端口、用户名、密码等
-
系统配置
- 邮件配置
- 发送时间设置
- 收件人邮箱设置
技术栈
- Python 3.9+:核心开发语言
- Django 5.1.4:Web框架
- SQLite:轻量化数据库
- Bootstrap 5:前端样式
- Chart.js:数据可视化
- WeasyPrint:PDF生成
- Celery:定时任务
- Redis:消息队列(用于Celery)
- django-celery-beat:定时任务管理
- loguru:日志记录
项目结构
diary-family/
├── diary_family/ # Django项目目录
├── core/ # 核心应用
│ ├── migrations/ # 数据库迁移
│ ├── models.py # 数据模型
│ ├── views.py # 视图函数
│ ├── forms.py # 表单定义
│ ├── templates/ # 模板文件
│ ├── static/ # 静态文件
│ ├── tasks.py # Celery任务
│ └── apps.py # 应用配置
├── media/ # 媒体文件存储
├── logs/ # 日志目录
├── reports/ # PDF报告存储
├── manage.py # Django管理脚本
└── requirements.txt # 依赖文件
本地开发
安装依赖
pip install -r requirements.txt
数据库迁移
python manage.py migrate
启动开发服务器
python manage.py runserver
访问系统
- 浏览器打开 http://127.0.0.1:8000/
- 管理员登录:http://127.0.0.1:8000/admin/ (用户名:admin,密码:admin123)
部署到Ubuntu服务器
1. 准备工作
1.1 安装必要软件
sudo apt update
sudo apt install -y python3-pip python3-venv git nginx supervisor redis-server
1.2 创建项目目录
# 注意:将 username 替换为您的实际用户名
sudo mkdir -p /var/www/diary-family
sudo chown username:username /var/www/diary-family
cd /var/www/diary-family
1.3 克隆代码
git clone http://14.103.237.41:16001/xiaji/diary-family.git .
2. 配置虚拟环境
# 创建虚拟环境
python3 -m venv venv
# 激活虚拟环境
source venv/bin/activate
# 安装依赖
pip install -r requirements.txt
3. 配置数据库
# 激活虚拟环境(如果未激活)
source venv/bin/activate
# 执行数据库迁移
python manage.py migrate
# 创建超级用户
python manage.py createsuperuser
# 收集静态文件(重要!确保admin页面有CSS样式)
python manage.py collectstatic --noinput
4. 配置Gunicorn
4.1 安装Gunicorn
source venv/bin/activate
pip install gunicorn
4.2 创建Gunicorn配置文件
nano /var/www/diary-family/gunicorn_config.py
内容如下:
# Gunicorn配置文件
# 使用Unix套接字连接(替代TCP套接字)
bind = "unix:/var/www/diary-family/gunicorn.sock"
# 工作进程数量
workers = 3
# 设置Django设置模块
django_settings_module = "diary_family.settings"
# 工作进程类型
worker_class = "sync"
# 超时时间
timeout = 30
# 日志级别
loglevel = "info"
# 访问日志
accesslog = "/var/log/diary-family/access.log"
# 错误日志
errorlog = "/var/log/diary-family/error.log"
5. 配置Supervisor
5.1 创建Supervisor配置文件
sudo nano /etc/supervisor/conf.d/diary-family.conf
内容如下:
[program:diary-family]
directory=/var/www/diary-family
command=/var/www/diary-family/venv/bin/gunicorn --config /var/www/diary-family/gunicorn_config.py diary_family.wsgi:application
autostart=true
autorestart=true
startretries=3
user=username
redirect_stderr=true
stdout_logfile=/var/log/diary-family.log
stderr_logfile=/var/log/diary-family.err.log
注意:将 user=username 中的 username 替换为您的实际用户名,确保该用户名不会与nginx默认用户(www-data)冲突。
5.2 配置Celery Worker
sudo nano /etc/supervisor/conf.d/diary-family-celery.conf
内容如下:
[program:diary-family-celery]
directory=/var/www/diary-family
command=/var/www/diary-family/venv/bin/celery -A diary_family worker --loglevel=info
autostart=true
autorestart=true
startretries=3
user=username
redirect_stderr=true
stdout_logfile=/var/log/diary-family-celery.log
stderr_logfile=/var/log/diary-family-celery.err.log
5.3 配置Celery Beat
sudo nano /etc/supervisor/conf.d/diary-family-celery-beat.conf
内容如下:
[program:diary-family-celery-beat]
directory=/var/www/diary-family
command=/var/www/diary-family/venv/bin/celery -A diary_family beat --loglevel=info
autostart=true
autorestart=true
startretries=3
user=username
redirect_stderr=true
stdout_logfile=/var/log/diary-family-celery-beat.log
stderr_logfile=/var/log/diary-family-celery-beat.err.log
5.4 重载Supervisor
sudo supervisorctl reread
sudo supervisorctl update
sudo supervisorctl start all
6. 配置Nginx
6.1 创建Nginx配置文件
sudo nano /etc/nginx/sites-available/diary-family
内容如下:
server {
listen 80;
server_name your_domain_or_ip;
location = /favicon.ico {
access_log off;
log_not_found off;
}
location /static/ {
alias /var/www/diary-family/staticfiles/;
}
location /media/ {
alias /var/www/diary-family/media/;
}
location /reports/ {
alias /var/www/diary-family/reports/;
}
location / {
proxy_pass http://unix:/var/www/diary-family/gunicorn.sock;
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;
}
}
注意:将 your_domain_or_ip 替换为您的域名或IP地址。
6.2 启用Nginx配置
sudo ln -s /etc/nginx/sites-available/diary-family /etc/nginx/sites-enabled/
# 检查配置语法
sudo nginx -t
# 重启Nginx
sudo systemctl restart nginx
7. 配置文件权限
# 创建必要的目录
sudo mkdir -p /var/www/diary-family/media /var/www/diary-family/logs /var/www/diary-family/reports /var/log/diary-family
# 设置目录权限
sudo chown -R username:username /var/www/diary-family/media /var/www/diary-family/logs /var/www/diary-family/reports
# 设置日志目录权限
sudo chown -R username:www-data /var/log/diary-family
8. 配置防火墙
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable
代码更新
当需要更新代码时,可以使用以下命令:
cd /var/www/diary-family
# 1. 先拉取远程最新代码(只获取,不合并)
git fetch origin
# 2. 硬重置本地分支到远程分支的最新版本(会覆盖所有本地未提交修改)
# 注意:将 main 替换为你的分支名(如 master、dev 等)
git reset --hard origin/main
# 3. 拉取最新代码
git pull http://14.103.237.41:16001/xiaji/diary-family.git
# 激活虚拟环境
source venv/bin/activate
# 安装新依赖(如果有)
pip install -r requirements.txt
# 执行数据库迁移
python manage.py migrate
# 重启服务
sudo supervisorctl restart all
sudo systemctl restart nginx
系统访问
- 访问系统:在浏览器中打开
http://your_domain_or_ip - 管理员登录:访问
http://your_domain_or_ip/admin/,使用创建的超级用户登录 - 配置邮件:在系统配置页面设置SMTP服务器、端口、用户名、密码、发送时间和收件人邮箱
注意事项
-
WeasyPrint依赖:如果PDF生成功能无法使用,需要安装WeasyPrint的系统依赖:
sudo apt install -y libgobject-2.0-0 libcairo2-dev libpango1.0-dev libjpeg-dev libgif-dev librsvg2-dev -
Redis服务:确保Redis服务正常运行,否则Celery任务无法执行
-
Nginx用户冲突:确保部署时使用的用户名不会与nginx默认用户(www-data)冲突
-
文件权限:确保媒体文件、日志文件和报告文件目录有正确的读写权限
-
定期备份:建议定期备份数据库文件(db.sqlite3)
技术支持
如有问题,请联系系统管理员。
© 2024 家庭日报系统 - 专注于家庭生活的轻量级日报系统