后台启动 Java 服务的几种方式
方式一:nohup(最常用)
bash
nohup java -jar eval-system.jar > app.log 2>&1 &
# 查看日志
tail -f app.log
# 查看进程
ps -ef | grep eval-system
方式二:systemd 服务(推荐生产环境)
创建服务文件 /etc/systemd/system/eval-system.service:
ini
[Unit]
Description=Evaluation System Backend
After=network.target
[Service]
Type=simple
User=root
WorkingDirectory=/root/apps/teacher/evaluation-system
ExecStart=/usr/bin/java -jar /root/apps/teacher/evaluation-system/eval-system.jar
Restart=on-failure
RestartSec=10
[Install]
WantedBy=multi-user.target
bash
# 启用并启动
systemctl daemon-reload
systemctl enable eval-system
systemctl start eval-system
# 常用命令
systemctl status eval-system # 查看状态
systemctl stop eval-system # 停止
systemctl restart eval-system # 重启
journalctl -u eval-system -f # 查看日志
方式三:screen(临时调试)
bash
screen -S eval
java -jar eval-system.jar
# 按 Ctrl+A 然后按 D 退出(服务继续运行)
# 重新进入
screen -r eval
推荐方式二 systemd,支持开机自启、自动重启、日志管理,最适合生产环境
在 CentOS 上安装 MySQL 客户端:
方法一:使用 MySQL 官方 Yum 源(推荐)
bash
# CentOS 7
sudo yum install -y https://dev.mysql.com/get/mysql80-community-release-el7-9.noarch.rpm
sudo yum install -y mysql-community-client
# CentOS 8 / Stream
sudo dnf install -y https://dev.mysql.com/get/mysql80-community-release-el8-9.noarch.rpm
sudo dnf install -y mysql-community-client
方法二:使用 MariaDB 客户端(兼容 MySQL,无需额外源)
bash
# CentOS 7
sudo yum install -y mariadb
# CentOS 8 / Stream
sudo dnf install -y mariadb
MariaDB 客户端完全兼容 MySQL 8.0,可以直接连接 Docker MySQL。
验证安装
bash
mysql --version
# 测试连接 Docker MySQL
mysql -uroot -p你的密码 -h 127.0.0.1 -P 3306
推荐方法二,一行命令即可完成,无需配置额外源。
前端部署
1. 本地构建
cd evaluation-system/frontend
npx vite build
2. 上传dist目录到服务器
scp -r dist/* root@你的服务器IP:/root/apps/www/
3. Nginx无需重启(静态文件直接生效)
后端部署
1. 本地打包(在项目目录执行)
cd evaluation-system/backend mvn clean package -DskipTests
2. 上传jar到服务器
scp target/evaluation-system-0.0.1-SNAPSHOT.jar root@你的服务器IP:/root/apps/
3. 在服务器上重启后端
ssh root@你的服务器IP
4. 停止旧服务
pkill -f evaluation-system || true
5.启动新服务(后台运行)
cd /root/apps nohup java -jar evaluation-system-1.0.0-SNAPSHOT.jar --spring.profiles.active=prod > app.log 2>&1 &
确认启动成功
sleep 5 && tail -20 app.log
Nginx相关命令
系统部署配置示例(创建 /etc/nginx/conf.d/eval-system.conf):
nginx
server {
listen 80;
server_name your-domain.com; # 替换为实际域名或IP
# 前端静态文件
location / {
root /var/www/eval-system/dist;
index index.html;
try_files $uri $uri/ /index.html;
}
# 后端API反向代理
location /api/ {
proxy_pass http://127.0.0.1:8080/api/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
部署步骤:
bash
# 1. 将前端 dist 目录上传到服务器
scp -r evaluation-system/frontend/dist/* root@服务器IP:/var/www/eval-system/dist/
# 2. 测试配置
sudo nginx -t
# 3. 重载生效
sudo systemctl reload nginx
1. 查看 Nginx 错误日志
bash
# 查看最近的错误日志
sudo tail -50 /var/log/nginx/error.log
2. 常见原因及解决方案
原因一:配置文件语法错误
bash
# 测试配置
sudo nginx -t
# 如果报错,根据提示修改 /etc/nginx/conf.d/eval-system.conf
3. 快速排查流程
bash
# 一键排查
echo "=== Nginx 配置 ===" && sudo nginx -t
echo "=== 前端文件 ===" && ls /var/www/eval-system/dist/index.html
echo "=== 后端服务 ===" && curl -s -o /dev/null -w "%{http_code}" http://127.0.0.1:8080
echo "=== SELinux ===" && getenforce
echo "=== 错误日志 ===" && sudo tail -20 /var/log/nginx/error.
以下是使用 Docker 安装 MySQL 8.0 的命令:
bash
# 拉取 MySQL 8.0 镜像
docker pull mysql:8.0
# 创建并运行容器
docker run -d \
--name mysql8 \
-p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=your_password \
-e MYSQL_DATABASE=eval_system \
-v mysql_data:/var/lib/mysql \
--restart unless-stopped \
mysql:8.0 \
--character-set-server=utf8mb4 \
--collation-server=utf8mb4_unicode_ci
参数说明:
| 参数 | 作用 |
|---|---|
-d | 后台运行 |
--name mysql8 | 容器名称 |
-p 3306:3306 | 端口映射 |
-e MYSQL_ROOT_PASSWORD | 设置 root 密码 |
-e MYSQL_DATABASE | 自动创建数据库 |
-v mysql_data:/var/lib/mysql | 数据持久化 |
--restart unless-stopped | 自动重启 |
启动后导入初始化数据:
bash
# 将 SQL 文件拷贝到容器内
docker cp evaluation-system/sql/init.sql mysql8:/tmp/
# 执行导入
docker exec -i mysql8 mysql -uroot -pyour_password eval_system < evaluation-system/sql/init.sql
常用管理命令:
bash
# 查看容器状态
docker ps | grep mysql8
# 进入 MySQL 命令行
docker exec -it mysql8 mysql -uroot -pyour_password
# 停止/启动
docker stop mysql8
docker start mysql8
# 查看日志
docker logs mysql8
一、数据库备份(Docker MySQL)
bash
# 导出完整数据库备份
docker exec mysql8 mysqldump -uroot -p你的密码 evaluation_system > /root/backup/eval_$(date +%Y%m%d_%H%M%S).sql
# 确认备份文件大小正常
ls -la /root/backup/
建议每次部署前都执行备份。
二、数据库表更新
本次新增了 activity_teacher_snapshot 表,需要执行建表语句:
bash
# 方式1:直接通过docker exec执行SQL
docker exec -i mysql8 mysql -uroot -p你的密码 evaluation_system <<'EOF'
CREATE TABLE IF NOT EXISTS activity_teacher_snapshot (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
activity_id BIGINT NOT NULL,
class_id BIGINT NOT NULL,
teacher_id BIGINT NOT NULL,
teacher_name VARCHAR(100) NOT NULL,
subject_name VARCHAR(100) NOT NULL,
grade_id BIGINT,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
INDEX idx_activity (activity_id),
INDEX idx_activity_class (activity_id, class_id),
INDEX idx_activity_teacher (activity_id, teacher_id)
);
EOF
# 方式2:确认表创建成功
docker exec mysql8 mysql -uroot -p你的密码 evaluation_system -e "SHOW TABLES LIKE 'activity_teacher_snapshot';"