feat: 小菜记账 v1.0 - 完整功能实现
核心功能: - 记账CRUD(支出/收入/分类/备注/日期) - 统计分析(概览/分类占比/每日趋势) - 预算管理(按月设置/进度条/超支提醒) - 数据导出CSV 安全与认证: - HMAC-SHA256签名token认证 - 用户数据隔离 - 输入验证与错误处理 - CORS配置 前端优化: - 骨架屏加载 - 账单按日期分组 - 预算页面重构(快捷预设+Numpad) - SvgIcon组件(H5+微信双端适配) - 下拉刷新 后端优化: - 共享日期工具函数 - 数据库连接池优化 - 健康检查端点 - 优雅关闭处理 技术栈: - 前端:Uni-app (Vue 3 + Pinia) - 后端:Node.js + Express + MySQL
This commit is contained in:
14
deploy/backup.sh
Normal file
14
deploy/backup.sh
Normal file
@@ -0,0 +1,14 @@
|
||||
#!/bin/bash
|
||||
# 数据库备份脚本 (每天执行)
|
||||
|
||||
BACKUP_DIR="/var/backups/xiaocai"
|
||||
DATE=$(date +%Y%m%d_%H%M%S)
|
||||
|
||||
mkdir -p "$BACKUP_DIR"
|
||||
|
||||
mysqldump -u xiaocai -pxiaocai123 xiaocai | gzip > "$BACKUP_DIR/xiaocai_$DATE.sql.gz"
|
||||
|
||||
# 保留最近 7 天的备份
|
||||
find "$BACKUP_DIR" -name "*.sql.gz" -mtime +7 -delete
|
||||
|
||||
echo "备份完成: $BACKUP_DIR/xiaocai_$DATE.sql.gz"
|
||||
56
deploy/deploy.sh
Normal file
56
deploy/deploy.sh
Normal file
@@ -0,0 +1,56 @@
|
||||
#!/bin/bash
|
||||
# 小菜记账部署脚本
|
||||
|
||||
set -e
|
||||
|
||||
SERVER_DIR="/var/www/xiaocai"
|
||||
LOG_DIR="/var/log/xiaocai"
|
||||
|
||||
echo "=== 开始部署 ==="
|
||||
|
||||
# 进入项目目录
|
||||
cd "$(dirname "$0")/.."
|
||||
|
||||
# 构建服务端
|
||||
echo "1/4 构建服务端..."
|
||||
cd server
|
||||
npm install
|
||||
npm run build
|
||||
cd ..
|
||||
|
||||
# 复制文件到服务器目录
|
||||
echo "2/4 复制文件..."
|
||||
cp -r server/dist "$SERVER_DIR/"
|
||||
cp -r server/node_modules "$SERVER_DIR/"
|
||||
cp server/package.json "$SERVER_DIR/"
|
||||
cp deploy/ecosystem.config.js "$SERVER_DIR/"
|
||||
|
||||
# 初始化数据库
|
||||
echo "3/4 初始化数据库..."
|
||||
cd "$SERVER_DIR"
|
||||
mysql -u xiaocai -pxiaocai123 xiaocai < dist/db/schema.sql
|
||||
mysql -u xiaocai -pxiaocai123 xiaocai < dist/db/seed.sql 2>/dev/null || true
|
||||
cd -
|
||||
|
||||
# 配置 Nginx
|
||||
echo "4/4 配置 Nginx..."
|
||||
sudo cp deploy/nginx.conf /etc/nginx/sites-available/xiaocai
|
||||
sudo ln -sf /etc/nginx/sites-available/xiaocai /etc/nginx/sites-enabled/
|
||||
sudo rm -f /etc/nginx/sites-enabled/default
|
||||
sudo nginx -t
|
||||
sudo systemctl reload nginx
|
||||
|
||||
# 重启服务
|
||||
echo "重启 PM2 服务..."
|
||||
cd "$SERVER_DIR"
|
||||
pm2 delete xiaocai-server 2>/dev/null || true
|
||||
pm2 start ecosystem.config.js
|
||||
pm2 save
|
||||
|
||||
echo ""
|
||||
echo "=== 部署完成 ==="
|
||||
echo "服务地址: http://your-domain.com"
|
||||
echo "API 健康检查: http://your-domain.com/api/health"
|
||||
echo ""
|
||||
echo "查看日志: pm2 logs xiaocai-server"
|
||||
echo "查看状态: pm2 status"
|
||||
19
deploy/ecosystem.config.js
Normal file
19
deploy/ecosystem.config.js
Normal file
@@ -0,0 +1,19 @@
|
||||
module.exports = {
|
||||
apps: [
|
||||
{
|
||||
name: 'xiaocai-server',
|
||||
script: './dist/index.js',
|
||||
instances: 1,
|
||||
autorestart: true,
|
||||
watch: false,
|
||||
max_memory_restart: '300M',
|
||||
env: {
|
||||
NODE_ENV: 'production',
|
||||
PORT: 3000
|
||||
},
|
||||
error_file: '/var/log/xiaocai/error.log',
|
||||
out_file: '/var/log/xiaocai/out.log',
|
||||
log_date_format: 'YYYY-MM-DD HH:mm:ss'
|
||||
}
|
||||
]
|
||||
}
|
||||
26
deploy/nginx.conf
Normal file
26
deploy/nginx.conf
Normal file
@@ -0,0 +1,26 @@
|
||||
server {
|
||||
listen 80;
|
||||
server_name your-domain.com;
|
||||
|
||||
# 小程序 API
|
||||
location /api/ {
|
||||
proxy_pass http://127.0.0.1:3000;
|
||||
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;
|
||||
}
|
||||
|
||||
# 健康检查
|
||||
location /health {
|
||||
proxy_pass http://127.0.0.1:3000;
|
||||
}
|
||||
|
||||
# SSL 配置 (上线前取消注释)
|
||||
# listen 443 ssl;
|
||||
# ssl_certificate /etc/letsencrypt/live/your-domain.com/fullchain.pem;
|
||||
# ssl_certificate_key /etc/letsencrypt/live/your-domain.com/privkey.pem;
|
||||
|
||||
# HTTP 重定向到 HTTPS
|
||||
# return 301 https://$host$request_uri;
|
||||
}
|
||||
57
deploy/setup.sh
Normal file
57
deploy/setup.sh
Normal file
@@ -0,0 +1,57 @@
|
||||
#!/bin/bash
|
||||
# 小菜记账服务器初始化脚本
|
||||
# 适用于 Ubuntu 22.04 LTS + 阿里云 2H2G
|
||||
|
||||
set -e
|
||||
|
||||
echo "=== 小菜记账服务器初始化 ==="
|
||||
|
||||
# 更新系统
|
||||
echo "1/8 更新系统包..."
|
||||
sudo apt update && sudo apt upgrade -y
|
||||
|
||||
# 安装 Node.js 20
|
||||
echo "2/8 安装 Node.js 20..."
|
||||
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
|
||||
sudo apt install -y nodejs
|
||||
|
||||
# 安装 MySQL 8.0
|
||||
echo "3/8 安装 MySQL 8.0..."
|
||||
sudo apt install -y mysql-server
|
||||
|
||||
# 安全配置 MySQL
|
||||
echo "4/8 配置 MySQL..."
|
||||
sudo mysql -e "ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root_password';"
|
||||
sudo mysql -e "CREATE DATABASE IF NOT EXISTS xiaocai DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"
|
||||
sudo mysql -e "CREATE USER IF NOT EXISTS 'xiaocai'@'localhost' IDENTIFIED BY 'xiaocai123';"
|
||||
sudo mysql -e "GRANT ALL PRIVILEGES ON xiaocai.* TO 'xiaocai'@'localhost';"
|
||||
sudo mysql -e "FLUSH PRIVILEGES;"
|
||||
|
||||
# 安装 Nginx
|
||||
echo "5/8 安装 Nginx..."
|
||||
sudo apt install -y nginx
|
||||
|
||||
# 安装 PM2
|
||||
echo "6/8 安装 PM2..."
|
||||
sudo npm install -g pm2
|
||||
|
||||
# 创建部署目录
|
||||
echo "7/8 创建部署目录..."
|
||||
sudo mkdir -p /var/www/xiaocai
|
||||
sudo mkdir -p /var/log/xiaocai
|
||||
sudo chown -R $USER:$USER /var/www/xiaocai
|
||||
|
||||
# 配置防火墙
|
||||
echo "8/8 配置防火墙..."
|
||||
sudo ufw allow 22/tcp
|
||||
sudo ufw allow 80/tcp
|
||||
sudo ufw allow 443/tcp
|
||||
sudo ufw --force enable
|
||||
|
||||
echo ""
|
||||
echo "=== 服务器初始化完成 ==="
|
||||
echo "MySQL root 密码: root_password"
|
||||
echo "MySQL xiaocai 密码: xiaocai123"
|
||||
echo "请修改 deploy/ecosystem.config.js 中的数据库密码"
|
||||
echo ""
|
||||
echo "下一步: ./deploy.sh"
|
||||
Reference in New Issue
Block a user