服务器部署相关命令

0 阅读3分钟

后台启动 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';"