这份教程面向"已经有服务器、要自己把 OA 跑起来"的运维同学。全流程大约 30–60 分钟,核心步骤只有四步。
| 项目 | 要求 |
|---|---|
| 操作系统 | Ubuntu 20.04+ / CentOS 7+(64 位) |
| 配置 | 20 人以内:2 核 4G;50–100 人:4 核 8G |
| 磁盘 | 40G 以上(含上传附件空间,按使用量预留) |
| 依赖(直接部署时) | Java 21、MySQL 8.0、Redis 7 |
用 Docker 方式部署则无需自己装 Java/MySQL/Redis,镜像内已包含,这也是推荐方式。
80、443(对外);8082 建议只对内部或反向代理开放前提:服务器已安装 Docker 与 Docker Compose。
# 1. 安装 Docker(Ubuntu 示例,已装可跳过)
curl -fsSL https://get.docker.com | sh
systemctl enable --now docker
# 2. 解压部署包
tar -xzf danzhu-oa-docker-v1.4.10.tar.gz
cd danzhu-oa-docker-v1.4.10
# 3. 执行一键安装脚本(会拉起 mysql、redis、backend、frontend)
bash docker-install.sh
# 4. 查看容器状态
docker compose ps
看到 oa-backend、oa-mysql、oa-redis 处于 Up 状态即启动成功。MySQL 首次启动健康检查需要 20–40 秒,请等待后再访问。
# 默认管理员账号(首次部署后请立即修改密码)
用户名:admin
密码: admin123
首次部署会自动创建 30 天全功能试用授权,到期后导入正式授权文件即可继续使用。
# 1. 准备数据库
mysql -uroot -p -e "CREATE DATABASE ganxian_police_oa DEFAULT CHARACTER SET utf8mb4;"
mysql -uroot -p ganxian_police_oa < database/full_schema.sql
mysql -uroot -p ganxian_police_oa < database/seed_data.sql
# 2. 启动后端(需 Java 21)
nohup java -Xmx512m -jar backend/target/ganxian-police-oa-backend-1.0.0.jar \
--server.port=8082 \
--spring.datasource.url='jdbc:mysql://127.0.0.1:3306/ganxian_police_oa?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai' \
--spring.datasource.username=root \
--spring.datasource.password=你的密码 > /var/log/oa-backend.log 2>&1 &
# 3. 部署前端静态文件到 nginx
cp -r frontend/dist/* /var/www/oa/
server {
listen 443 ssl;
server_name oa.example.com;
ssl_certificate /etc/letsencrypt/live/oa.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/oa.example.com/privkey.pem;
root /var/www/oa;
index index.html;
# 前端单页应用回退
location / {
try_files $uri $uri/ /index.html;
}
# 后端接口
location /api/ {
proxy_pass http://127.0.0.1:8082;
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;
client_max_body_size 50m; # 附件上传,按需调整
}
}
提醒:client_max_body_size 默认只有 1MB,不改的话传稍大的附件会报 413。
| 现象 | 原因与处理 |
|---|---|
| 页面能开但一直转圈 | 通常是某个接口未返回:打开浏览器 F12 → Network 看有没有 pending 请求,再检查后端日志 |
| 登录提示服务异常 | 数据库连不上:核对连接串、账号密码、MySQL 是否允许远程连接 |
| 上传附件报 413 | nginx client_max_body_size 调大 |
| 重启后数据没了 | Docker 方式要确认数据卷已挂载(docker volume ls),不要把数据写在容器内 |
| HTTPS 下接口 404 | 检查反代是否只配了 http 段,或 proxy_set_header Host 缺失 |
| 消息不推送 | 移动端推送需要服务器到推送服务的网络可达,检查出网策略 |
mysqldump + cron 即可)做到这三条,一套私有化 OA 就算稳定上线了。