# tsazh **Repository Path**: zzroot123/tsazh ## Basic Information - **Project Name**: tsazh - **Description**: No description available - **Primary Language**: Unknown - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-09-21 - **Last Updated**: 2026-10-13 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 唐山市爱国拥军促进会归档系统 内部电子档案柜:7 类台账 + 统一附件管理 + 字典维护。不做审批、不做工作流、不做通知、不做复杂权限。 ## 技术栈 - 后端:JDK 17 + Spring Boot 3.2 + MyBatis-Plus + MySQL 8 + Sa-Token - 前端:Vue 3 + Vite + Element Plus - 部署:前端打包进 jar,单端口运行,Nginx 做 HTTPS 反向代理 ## 新设备从仓库拉取运行 ```bash git clone https://gitee.com/zzroot123/tsazh.git cd tsazh ``` 前置:JDK 17、Node 18+、MySQL 8。然后: ```bash # 1) 建库并导入(MySQL 8.0+,脚本内已含 CREATE DATABASE) mysql -u root -p < server/src/main/resources/db/schema.sql mysql -u root -p < server/src/main/resources/db/init_data.sql # 2) 启动后端(默认 8080,数据库账号密码可用环境变量覆盖) cd server DB_USERNAME=root DB_PASSWORD=你的密码 mvn spring-boot:run # 3) 前端开发模式(另开一个终端) cd web && npm install && npm run dev ``` 访问 http://localhost:8080 ,默认账号 `admin / admin123`(**登录后立即改密码**)。 > 注意:`server/src/main/resources/static/` 是前端构建产物,已被 gitignore, > 直接 `java -jar` 前需先执行 `scripts\build.bat`(Windows)或手动 > `cd web && npm run build` 后把 `web/dist` 拷入该目录。 ## 目录结构 ``` server/ 后端(Maven) src/main/resources/db/schema.sql 建表脚本 src/main/resources/db/init_data.sql 初始字典 + 默认账号 web/ 前端(Vite) scripts/ build.bat 一键构建(前端 + 后端 jar) backup.bat 每日备份(数据库 + 附件) ``` ## 首次部署 ### 1. 数据库 ```bash mysql -u root -p < server/src/main/resources/db/schema.sql mysql -u root -p < server/src/main/resources/db/init_data.sql ``` 默认账号:`admin / admin123`(**部署后必须立即修改密码**) ### 2. 配置文件 `server/src/main/resources/application.yml`,支持环境变量覆盖: | 环境变量 | 说明 | 默认值 | |---|---|---| | `DB_HOST` / `DB_PORT` / `DB_NAME` | 数据库地址 | 127.0.0.1 / 3306 / aijun_archive | | `DB_USERNAME` / `DB_PASSWORD` | 数据库账号 | root / root | | `ARCHIVE_STORAGE_ROOT` | 附件存储根目录 | ./data/uploads | 生产环境建议将 `ARCHIVE_STORAGE_ROOT` 指向独立磁盘目录,例如 `D:\archive-data\uploads`。 ### 3. 构建 ```bat scripts\build.bat ``` 产出:`server\target\aijun-archive.jar` ### 4. 启动 ```bat $env:JAVA_HOME='C:\Program Files\Java\jdk-17' java -jar d:\aijun-archive\server\target\aijun-archive.jar ``` 访问 `http://服务器IP:8080` 生产环境建议注册为 Windows 服务(NSSM)或 Linux systemd 托管。 ### 5. Nginx(外网访问必配) ```nginx server { listen 443 ssl; server_name your-domain.com; ssl_certificate /path/to/cert.pem; ssl_certificate_key /path/to/key.pem; # 大附件上传 client_max_body_size 200m; proxy_read_timeout 600s; proxy_send_timeout 600s; location / { proxy_pass http://127.0.0.1:8080; 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; } } ``` ## 服务器部署(Linux,完整命令) ### 1. 安装依赖 ```bash # Ubuntu / Debian sudo apt update && sudo apt install -y openjdk-17-jdk mysql-server nginx rsync # CentOS / Rocky / Alma sudo dnf install -y java-17-openjdk-devel mysql-server nginx rsync ``` ### 2. MySQL 建库建账号 ```bash sudo mysql_secure_installation sudo mysql -uroot -p <<'SQL' CREATE DATABASE aijun_archive DEFAULT CHARSET utf8mb4 COLLATE utf8mb4_general_ci; CREATE USER 'archive'@'localhost' IDENTIFIED BY '换成强密码'; GRANT ALL PRIVILEGES ON aijun_archive.* TO 'archive'@'localhost'; FLUSH PRIVILEGES; SQL ``` 导入表结构(先把 `db/schema.sql`、`db/init_data.sql` 上传到服务器): ```bash mysql -uarchive -p aijun_archive < schema.sql mysql -uarchive -p aijun_archive < init_data.sql ``` ### 3. 目录与账号 ```bash sudo mkdir -p /opt/aijun-archive /data/archive/uploads /data/archive-backup /var/log/aijun-archive sudo useradd -r -s /sbin/nologin archive sudo chown -R archive:archive /opt/aijun-archive /data/archive /var/log/aijun-archive ``` 上传 `aijun-archive.jar`;生产配置用仓库里的模板生成(真实配置含口令,已 gitignore): ```bash cp scripts/deploy/application-prod.yml.example /tmp/application-prod.yml vi /tmp/application-prod.yml # 只需改 spring.datasource.password ``` ### 4. systemd 托管 ```bash sudo cp scripts/deploy/archive.service /etc/systemd/system/ sudo systemctl daemon-reload sudo systemctl enable --now aijun-archive sudo journalctl -u aijun-archive -f # 看日志 ``` ### 5. Nginx + HTTPS ```bash sudo rm -f /etc/nginx/sites-enabled/default # 避免 80 端口 default_server 冲突 sudo cp scripts/deploy/nginx-archive.conf /etc/nginx/conf.d/archive.conf sudo sed -i 's/archive.example.com/你的域名/g' /etc/nginx/conf.d/archive.conf sudo nginx -t && sudo systemctl reload nginx # 申请证书 sudo apt install -y certbot python3-certbot-nginx # CentOS: dnf install certbot python3-certbot-nginx sudo certbot --nginx -d 你的域名 ``` ### 6. 防火墙 ```bash sudo ufw allow 80/tcp && sudo ufw allow 443/tcp # Ubuntu # CentOS: sudo firewall-cmd --permanent --add-service=http --add-service=https && sudo firewall-cmd --reload ``` ### 7. 定时备份 ```bash sudo cp scripts/backup.sh /opt/aijun-archive/ && sudo chmod +x /opt/aijun-archive/backup.sh sudo crontab -e # 加入:30 23 * * * /opt/aijun-archive/backup.sh >> /var/log/aijun-archive/backup.log 2>&1 ``` > 备份目录应与程序、附件不在同一块盘,否则磁盘损坏时一起丢失。 ### 上线后必做 - [ ] 立即修改 `admin` 密码 - [ ] 确认 `/data/archive/uploads` 所在分区空间充足(预估 20~100GB) - [ ] 手动执行一次 `backup.sh`,确认生成 `.sql.gz` 与附件备份 - [ ] 用外网域名访问,验证上传 / 下载 / 预览 ### Windows Server 部署 `scripts/deploy/` 下另有 Windows 模板:`start.bat`(前台启动)、`install-service.bat`(NSSM 注册服务,开机自启 + 崩溃自动重启)、`nginx.conf`。步骤与上面一致,附件目录建议 `D:\archive-data\uploads`。 ## 备份 修改 `scripts/backup.bat` 顶部的配置(MySQL 路径、数据库口令、附件目录、备份目录), 加入 Windows 任务计划程序每日执行: - 数据库:`mysqldump` 全量导出,保留 30 天 - 附件:robocopy 增量复制到备份盘 ## 功能说明 | 模块 | 说明 | |---|---| | 企业会员 / 个人会员 | 会员档案,支持标签多选、附件上传 | | 日常文档 / 会议记录 / 活动记录 / 其他归档 | 附件必填(至少 1 个) | | 活动记录 | 额外含「现场照片」附件组与「经费明细」子表,自动合计金额 | | 公示记录 | 可关联企业会员并自动带出企业信息快照 | | 字典设置 | 维护所属行业、活动类型、会议类型、费用类型、文档分类、会员标签等 | | 用户管理 | 仅用于创建登录账号,所有用户权限一致 | ### 附件机制 1. 打开新增表单时生成 `tempId`,附件先上传到临时区 2. 保存记录时附件绑定 `recordId`,后端校验「至少 1 个附件」 3. 未绑定记录的临时附件 24 小时后自动清理 4. 删除记录只做软删除,磁盘文件保留 5. 下载保留原始文件名;图片与 PDF 支持在线预览;支持整条记录附件打包下载 ZIP(上限 2GB) ### 限制 - 单个附件上限 50MB(可改 `archive.max-file-size`) - 不在白名单的扩展名(如 exe/sh/jsp)拒绝上传 - 登录失败 5 次锁定 10 分钟 ## 开发 ```bat cd web && npm run dev # 前端 5173,代理到后端 8080 cd server && mvn spring-boot:run ``` > 注意:Maven 需使用 JDK 17。若默认 JAVA_HOME 是 JDK 8,执行前先 > `set JAVA_HOME=C:\Program Files\Java\jdk-17`。