Files
diary-family/README.md

400 lines
8.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 家庭日报系统
一个轻量化的家庭日报系统用于自动汇总昨日信息阅读、收获生成今日计划注重生活化、个性化和低门槛使用。支持上传文件或视频作为附加内容并可生成PDF报告定时发送至邮箱。
## 主要功能
1. **昨日记录**
- 阅读记录(支持书籍/文章/视频类型)
- 感悟记录
- 支持文件/视频上传
- 日期自动设置为当日,无需手动填写
2. **家庭事项管理**
- 事项添加、编辑、删除
- 按类型(采购/家务)、状态筛选
- 优先级管理
- 截止日期设置
3. **今日计划生成**
- 基于昨日状态和待处理事项自动生成
- 支持手动调整
- 完成状态标记
- 优先级管理
4. **报告生成**
- 自动整合昨日记录和今日计划
- 可视化统计图表
- 支持PDF格式导出
- 支持历史报告查看
5. **邮件发送**
- 支持手动发送PDF报告
- 支持定时发送
- 可配置SMTP服务器、端口、用户名、密码等
6. **系统配置**
- 邮件配置
- 发送时间设置
- 收件人邮箱设置
## 技术栈
- **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 # 依赖文件
```
## 本地开发
### 安装依赖
```bash
pip install -r requirements.txt
```
### 数据库迁移
```bash
python manage.py migrate
```
### 启动开发服务器
```bash
python manage.py runserver
```
### 访问系统
- 浏览器打开 http://127.0.0.1:8000/
- 管理员登录http://127.0.0.1:8000/admin/ 用户名admin密码admin123
## 部署到Ubuntu服务器
### 1. 准备工作
#### 1.1 安装必要软件
```bash
sudo apt update
sudo apt install -y python3-pip python3-venv git nginx supervisor redis-server
```
#### 1.2 创建项目目录
```bash
# 注意:将 username 替换为您的实际用户名
sudo mkdir -p /var/www/diary-family
sudo chown username:username /var/www/diary-family
cd /var/www/diary-family
```
#### 1.3 克隆代码
```bash
git clone http://14.103.237.41:16001/xiaji/diary-family.git .
```
### 2. 配置虚拟环境
```bash
# 创建虚拟环境
python3 -m venv venv
# 激活虚拟环境
source venv/bin/activate
# 安装依赖
pip install -r requirements.txt
```
### 3. 配置数据库
```bash
# 激活虚拟环境(如果未激活)
source venv/bin/activate
# 执行数据库迁移
python manage.py migrate
# 创建超级用户
python manage.py createsuperuser
```
### 4. 配置Gunicorn
#### 4.1 安装Gunicorn
```bash
source venv/bin/activate
pip install gunicorn
```
#### 4.2 创建Gunicorn配置文件
```bash
nano /var/www/diary-family/gunicorn_config.py
```
内容如下:
```python
# 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配置文件
```bash
sudo nano /etc/supervisor/conf.d/diary-family.conf
```
内容如下:
```ini
[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
```bash
sudo nano /etc/supervisor/conf.d/diary-family-celery.conf
```
内容如下:
```ini
[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
```bash
sudo nano /etc/supervisor/conf.d/diary-family-celery-beat.conf
```
内容如下:
```ini
[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
```bash
sudo supervisorctl reread
sudo supervisorctl update
sudo supervisorctl start all
```
### 6. 配置Nginx
#### 6.1 创建Nginx配置文件
```bash
sudo nano /etc/nginx/sites-available/diary-family
```
内容如下:
```nginx
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/static/;
}
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配置
```bash
sudo ln -s /etc/nginx/sites-available/diary-family /etc/nginx/sites-enabled/
# 检查配置语法
sudo nginx -t
# 重启Nginx
sudo systemctl restart nginx
```
### 7. 配置文件权限
```bash
# 创建必要的目录
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. 配置防火墙
```bash
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable
```
## 代码更新
当需要更新代码时,可以使用以下命令:
```bash
cd /var/www/diary-family
# 拉取最新代码
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
```
## 系统访问
1. **访问系统**:在浏览器中打开 `http://your_domain_or_ip`
2. **管理员登录**:访问 `http://your_domain_or_ip/admin/`,使用创建的超级用户登录
3. **配置邮件**在系统配置页面设置SMTP服务器、端口、用户名、密码、发送时间和收件人邮箱
## 注意事项
1. **WeasyPrint依赖**如果PDF生成功能无法使用需要安装WeasyPrint的系统依赖
```bash
sudo apt install -y libgobject-2.0-0 libcairo2-dev libpango1.0-dev libjpeg-dev libgif-dev librsvg2-dev
```
2. **Redis服务**确保Redis服务正常运行否则Celery任务无法执行
3. **Nginx用户冲突**确保部署时使用的用户名不会与nginx默认用户www-data冲突
4. **文件权限**:确保媒体文件、日志文件和报告文件目录有正确的读写权限
5. **定期备份**建议定期备份数据库文件db.sqlite3
## 技术支持
如有问题,请联系系统管理员。
---
© 2024 家庭日报系统 - 专注于家庭生活的轻量级日报系统