本系统采用B/S架构,前端使用Vue.js,后端使用Spring Boot,数据库选用PostgreSQL,文件存储采用MinIO。这套技术栈成熟稳定,社区支持好,适合快速构建企业级应用。
首先确保服务器满足以下最低配置:CentOS 7.6+ 或 Ubuntu 18.04+,4核CPU,8GB内存,100GB硬盘空间。按顺序执行以下命令安装基础环境:
安装JDK 11:
sudo yum install -y java-11-openjdk-devel
java -version
安装Node.js 16:
curl -sL https://rpm.nodesource.com/setup_16.x | sudo bash -
sudo yum install -y nodejs
node -v
安装PostgreSQL 14:
sudo yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
sudo yum install -y postgresql14-server
sudo /usr/pgsql-14/bin/postgresql-14-setup initdb
sudo systemctl enable postgresql-14
sudo systemctl start postgresql-14
安装MinIO对象存储:
wget https://dl.min.io/server/minio/release/linux-amd64/minio
chmod +x minio
sudo mv minio /usr/local/bin/
mkdir ~/minio-data
nohup minio server ~/minio-data --console-address ":9001" > minio.log 2>&1 &
切换到postgres用户创建数据库和用户:
sudo -u postgres psql
CREATE DATABASE archive_db;
CREATE USER archive_user WITH ENCRYPTED PASSWORD 'YourStrongPassword123!';
GRANT ALL PRIVILEGES ON DATABASE archive_db TO archive_user;
\q
创建核心数据表,保存以下SQL为init_tables.sql并执行:
CREATE TABLE department (
id SERIAL PRIMARY KEY,
code VARCHAR(50) UNIQUE NOT NULL,
name VARCHAR(100) NOT NULL,
parent_id INTEGER REFERENCES department(id),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE reward_type (
id SERIAL PRIMARY KEY,
code VARCHAR(20) UNIQUE NOT NULL,
name VARCHAR(100) NOT NULL,
level INTEGER NOT NULL
);
CREATE TABLE archive_record (
id SERIAL PRIMARY KEY,
record_no VARCHAR(50) UNIQUE NOT NULL,
title VARCHAR(200) NOT NULL,
department_id INTEGER NOT NULL REFERENCES department(id),
reward_type_id INTEGER NOT NULL REFERENCES reward_type(id),
reward_date DATE NOT NULL,
file_path VARCHAR(500),
file_size BIGINT,
file_hash VARCHAR(64),
status INTEGER DEFAULT 1,
created_by VARCHAR(50),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
CREATE INDEX idx_archive_dept ON archive_record(department_id);
CREATE INDEX idx_archive_date ON archive_record(reward_date);
CREATE INDEX idx_archive_status ON archive_record(status);
执行SQL文件:
sudo -u postgres psql -d archive_db -f init_tables.sql
从GitHub克隆项目源码:
git clone https://github.com/example/archive-backend.git
cd archive-backend
修改application.yml配置文件:
server:
port: 8080
spring:
datasource:
url: jdbc:postgresql://localhost:5432/archive_db
username: archive_user
password: YourStrongPassword123!
driver-class-name: org.postgresql.Driver
jpa:
hibernate:
ddl-auto: validate
show-sql: true
minio:
endpoint: http://localhost:9000
accessKey: minioadmin
secretKey: minioadmin
bucket: archive-files
file:
upload:
max-size: 100MB
allowed-types: pdf,doc,docx,jpg,png
使用Maven编译并启动服务:
mvn clean package -DskipTests
java -jar target/archive-backend-1.0.0.jar
验证服务是否启动成功:
curl http://localhost:8080/api/health
正常应返回{"status":"UP"}。
进入前端项目目录并安装依赖:
cd ../archive-frontend
npm install --registry=https://registry.npm.taobao.org
修改.env.production环境变量文件:
VUE_APP_API_BASE_URL=http://your-server-ip:8080/api
VUE_APP_TITLE=行政奖励数字档案馆
构建生产版本:

npm run build
将生成的dist目录部署到Nginx,安装并配置Nginx:
sudo yum install -y nginx
sudo cp -r dist/ /usr/share/nginx/html/
修改Nginx配置文件/etc/nginx/nginx.conf,在http块内添加:
server {
listen 80;
server_name localhost;
location / {
root /usr/share/nginx/html;
index index.html;
try_files $uri $uri/ /index.html;
}
location /api/ {
proxy_pass http://localhost:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
启动Nginx服务:
sudo systemctl start nginx
sudo systemctl enable nginx
创建departments.csv文件,格式如下:
code,name,parent_id
D001,办公室,
D002,人事处,D001
D003,财务处,D001
D004,技术部,D001
通过系统管理界面或调用API导入部门数据:
curl -X POST http://localhost:8080/api/departments/import \
-H "Content-Type: multipart/form-data" \
-F "file=@departments.csv"
在管理界面添加奖励类型,或直接执行SQL:
INSERT INTO reward_type (code, name, level) VALUES
('GJ', '国家级', 1),
('SB', '省部级', 2),
('SJ', '司局级', 3),
('DW', '单位级', 4);
登录系统后,点击“新增档案”按钮,按步骤操作:
上传成功后,可以通过MinIO控制台验证文件存储情况。访问http://your-server-ip:9001,使用minioadmin/minioadmin登录,查看archive-files桶中的文件。
创建backup.sh脚本:
!/bin/bash
BACKUP_DIR="/opt/archive-backups"
DATE=$(date +%Y%m%d_%H%M%S)
pg_dump -U archive_user -d archive_db -f $BACKUP_DIR/archive_$DATE.sql
find $BACKUP_DIR -name ".sql" -mtime +30 -delete
设置定时任务,每天凌晨2点执行备份:
crontab -e
0 2 /bin/bash /path/to/backup.sh
修改logback-spring.xml配置文件,按日期分割日志:
logs/archive.log
logs/archive.%d{yyyy-MM-dd}.log
30
%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n
检查MinIO服务状态:
ps aux | grep minio
curl http://localhost:9000/minio/health/live
检查Nginx配置是否正确代理了API请求。
修改PostgreSQL认证方式,编辑pg_hba.conf:
在文件末尾添加
host all all 127.0.0.1/32 md5
host all all ::1/128 md5
重启PostgreSQL服务:
sudo systemctl restart postgresql-14
检查Nginx错误日志:
tail -f /var/log/nginx/error.log
确认dist目录文件权限正确:
sudo chown -R nginx:nginx /usr/share/nginx/html