Skip to main content

Linux 部署开源版

本文介绍如何在 Linux 系统上手动部署卷王问卷考试系统开源版,包括环境安装、数据库配置和应用启动等完整流程。

前提条件

  • Linux 系统(CentOS 7+、Ubuntu 18+、Debian 9+ 等)
  • 服务器具备公网访问能力
  • 具备 root 或 sudo 权限

获取部署文件

只需要两个文件:

  • surveyking-v1.6.0.jar - 应用程序文件
  • init-mysql.sql - 数据库初始化脚本

下载方式

  1. 通过 QQ 群获取(推荐)

    加入 QQ 群(1074277968),在群文件 -> 正式版,获取最新版本的 jar 包和数据库脚本

  2. 官方百度网盘

    链接: https://pan.baidu.com/s/1hUIFIS9BdoTQnqvLzTceAw?pwd=1234 提取码: 1234

环境安装

1. 安装 JDK 8+

方式一:使用包管理器安装 OpenJDK(推荐)

CentOS/RHEL:

# 安装 OpenJDK 8
sudo yum install java-1.8.0-openjdk java-1.8.0-openjdk-devel -y

# 或者安装 OpenJDK 11
sudo yum install java-11-openjdk java-11-openjdk-devel -y

Ubuntu/Debian:

# 更新包列表
sudo apt update

# 安装 OpenJDK 8
sudo apt install openjdk-8-jdk -y

# 或者安装 OpenJDK 11
sudo apt install openjdk-11-jdk -y

方式二:手动安装 Oracle JDK

# 创建 java 目录
sudo mkdir -p /usr/local/java

# 下载并解压 JDK(以 JDK 8 为例)
cd /tmp
wget https://download.oracle.com/otn/java/jdk/8u391-b13/4f24afd9-49c6-475a-8e49-f4c8e633e8d8/jdk-8u391-linux-x64.tar.gz
sudo tar -zxvf jdk-8u391-linux-x64.tar.gz -C /usr/local/java/

# 设置环境变量
sudo vim /etc/profile

/etc/profile 文件末尾添加:

export JAVA_HOME=/usr/local/java/jdk1.8.0_391
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

生效环境变量:

source /etc/profile

验证 JDK 安装

java -version
javac -version

2. 安装 MySQL

CentOS/RHEL 系统

# 安装 MySQL 8.0 官方仓库
sudo yum install https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm -y

# 安装 MySQL 服务器
sudo yum install mysql-community-server -y

# 启动 MySQL 服务
sudo systemctl start mysqld
sudo systemctl enable mysqld

# 获取初始密码
sudo grep 'temporary password' /var/log/mysqld.log

# 安全配置(设置 root 密码等)
sudo mysql_secure_installation

Ubuntu/Debian 系统

# 更新包列表
sudo apt update

# 安装 MySQL 服务器
sudo apt install mysql-server -y

# 启动 MySQL 服务
sudo systemctl start mysql
sudo systemctl enable mysql

# 安全配置
sudo mysql_secure_installation

配置 MySQL

# 登录 MySQL
mysql -u root -p

# 创建数据库
CREATE DATABASE surveyking DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

# 创建用户(可选,也可以使用 root)
CREATE USER 'surveyking'@'localhost' IDENTIFIED BY 'your_password';
GRANT ALL PRIVILEGES ON surveyking.* TO 'surveyking'@'localhost';
FLUSH PRIVILEGES;

# 导入数据库脚本
USE surveyking;
SOURCE /path/to/init-mysql.sql;

# 退出
EXIT;

应用部署

1. 创建应用目录

# 创建应用目录
sudo mkdir -p /opt/surveyking
sudo mkdir -p /opt/surveyking/logs
sudo mkdir -p /opt/surveyking/files

# 上传 JAR 文件到服务器
# 可以使用 scp、sftp 或其他方式上传
# scp surveyking-v1.6.0.jar user@server:/opt/surveyking/

2. 创建启动脚本

创建启动脚本 /opt/surveyking/start.sh

sudo vim /opt/surveyking/start.sh

内容如下:

#!/bin/bash

# 应用目录
APP_DIR="/opt/surveyking"
APP_NAME="surveyking-v1.6.0.jar"
PID_FILE="$APP_DIR/surveyking.pid"

# JVM 参数
JVM_OPTS="-Xms512m -Xmx1024m -XX:+UseG1GC"

# 应用参数
APP_OPTS="--spring.datasource.url=jdbc:mysql://localhost:3306/surveyking --spring.datasource.username=root --spring.datasource.password=surveyking --file-storage.local.root-path=$APP_DIR/files"

# 检查 Java 环境
if [ -z "$JAVA_HOME" ]; then
JAVA_CMD="java"
else
JAVA_CMD="$JAVA_HOME/bin/java"
fi

# 启动函数
start() {
if [ -f "$PID_FILE" ] && ps -p $(cat "$PID_FILE") > /dev/null 2>&1; then
echo "SurveyKing is already running (PID: $(cat $PID_FILE))"
return 1
fi

echo "Starting SurveyKing..."
cd "$APP_DIR"
nohup $JAVA_CMD $JVM_OPTS -jar "$APP_NAME" $APP_OPTS > logs/surveyking.log 2>&1 &
echo $! > "$PID_FILE"
echo "SurveyKing started (PID: $(cat $PID_FILE))"
}

# 停止函数
stop() {
if [ ! -f "$PID_FILE" ]; then
echo "SurveyKing is not running"
return 1
fi

PID=$(cat "$PID_FILE")
if ps -p $PID > /dev/null 2>&1; then
echo "Stopping SurveyKing (PID: $PID)..."
kill $PID
sleep 5

if ps -p $PID > /dev/null 2>&1; then
echo "Force killing SurveyKing..."
kill -9 $PID
fi

rm -f "$PID_FILE"
echo "SurveyKing stopped"
else
echo "SurveyKing process not found"
rm -f "$PID_FILE"
fi
}

# 重启函数
restart() {
stop
sleep 2
start
}

# 状态检查
status() {
if [ -f "$PID_FILE" ] && ps -p $(cat "$PID_FILE") > /dev/null 2>&1; then
echo "SurveyKing is running (PID: $(cat $PID_FILE))"
else
echo "SurveyKing is not running"
fi
}

# 主要逻辑
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
restart
;;
status)
status
;;
*)
echo "Usage: $0 {start|stop|restart|status}"
exit 1
;;
esac

exit $?

设置执行权限:

sudo chmod +x /opt/surveyking/start.sh

3. 启动方式选择

方式一:使用启动脚本(推荐)

# 启动应用
sudo /opt/surveyking/start.sh start

# 停止应用
sudo /opt/surveyking/start.sh stop

# 重启应用
sudo /opt/surveyking/start.sh restart

# 查看状态
sudo /opt/surveyking/start.sh status

方式二:直接使用 nohup 启动

cd /opt/surveyking

# 后台启动
nohup java -Xms512m -Xmx1024m -jar surveyking-v1.6.0.jar \
--spring.datasource.url=jdbc:mysql://localhost:3306/surveyking \
--spring.datasource.username=root \
--spring.datasource.password=surveyking \
--file-storage.local.root-path=/opt/surveyking/files \
> logs/surveyking.log 2>&1 &

# 查看进程
ps aux | grep surveyking

# 停止应用
kill -9 $(ps aux | grep 'surveyking.*jar' | grep -v grep | awk '{print $2}')

方式三:使用 systemd 服务(推荐生产环境)

创建 systemd 服务文件:

sudo vim /etc/systemd/system/surveyking.service

内容如下:

[Unit]
Description=SurveyKing Application
After=network.target mysql.service
Wants=mysql.service

[Service]
Type=simple
User=root
Group=root
WorkingDirectory=/opt/surveyking
Environment="JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk"
ExecStart=/usr/bin/java -Xms512m -Xmx1024m -jar /opt/surveyking/surveyking-v1.6.0.jar --spring.datasource.url=jdbc:mysql://localhost:3306/surveyking --spring.datasource.username=root --spring.datasource.password=surveyking --file-storage.local.root-path=/opt/surveyking/files
ExecStop=/bin/kill -TERM $MAINPID
Restart=always
RestartSec=10
StandardOutput=journal
StandardError=journal
SyslogIdentifier=surveyking

[Install]
WantedBy=multi-user.target

启用和管理服务:

# 重新加载 systemd 配置
sudo systemctl daemon-reload

# 启用服务(开机自启)
sudo systemctl enable surveyking

# 启动服务
sudo systemctl start surveyking

# 查看服务状态
sudo systemctl status surveyking

# 查看日志
sudo journalctl -u surveyking -f

# 停止服务
sudo systemctl stop surveyking

# 重启服务
sudo systemctl restart surveyking

访问应用

启动成功后,通过浏览器访问:

http://your-server-ip:1991

默认登录信息:

  • 用户名: admin
  • 密码: 123456
重要提示

首次登录后,请立即修改默认密码!在「系统管理 >> 个人设置 >> 安全设置」中修改。

配置防火墙

CentOS/RHEL (firewalld)

# 开放 1991 端口
sudo firewall-cmd --permanent --add-port=1991/tcp
sudo firewall-cmd --reload

# 查看开放的端口
sudo firewall-cmd --list-ports

Ubuntu/Debian (ufw)

# 开放 1991 端口
sudo ufw allow 1991/tcp

# 查看状态
sudo ufw status

云服务器安全组

如果使用云服务器,还需要在云服务商的控制台中配置安全组,开放 1991 端口。

常见问题排查

1. 启动参数配置

根据实际情况修改启动参数:

# 必需参数
--spring.datasource.url=jdbc:mysql://localhost:3306/surveyking
--spring.datasource.username=root
--spring.datasource.password=your_password
--file-storage.local.root-path=/opt/surveyking/files

# 可选参数
--server.port=1991 # 修改端口
--spring.profiles.active=prod # 生产环境配置
--logging.level.root=WARN # 日志级别

2. 内存配置

根据服务器配置调整 JVM 参数:

# 小内存服务器(1GB)
-Xms256m -Xmx512m

# 中等内存服务器(2-4GB)
-Xms512m -Xmx1024m

# 大内存服务器(8GB+)
-Xms1024m -Xmx2048m

3. 查看日志

# 查看应用日志
tail -f /opt/surveyking/logs/surveyking.log

# 查看 systemd 日志
sudo journalctl -u surveyking -f

# 查看 MySQL 日志
sudo tail -f /var/log/mysql/error.log

4. 常见错误处理

数据库连接失败:

# 检查 MySQL 是否运行
sudo systemctl status mysql

# 检查端口是否监听
netstat -tlnp | grep 3306

# 测试数据库连接
mysql -u root -p -h localhost

端口被占用:

# 查看端口占用
netstat -tlnp | grep 1991
lsof -i:1991

# 杀死占用进程
sudo kill -9 <PID>

权限问题:

# 设置文件权限
sudo chown -R root:root /opt/surveyking
sudo chmod -R 755 /opt/surveyking

更新升级

获取新版本

  1. 从 QQ 群或官方渠道下载最新版本的 JAR 文件
  2. 查看开源版更新日志了解升级说明

升级步骤

# 1. 停止应用
sudo systemctl stop surveyking
# 或者
sudo /opt/surveyking/start.sh stop

# 2. 备份当前版本
sudo cp /opt/surveyking/surveyking-*.jar /opt/surveyking/surveyking-backup.jar

# 3. 备份数据库(重要!)
mysqldump -u root -p surveyking > /tmp/surveyking-backup-$(date +%Y%m%d).sql

# 4. 替换新版本
sudo cp surveyking-new-version.jar /opt/surveyking/surveyking-v1.6.0.jar

# 5. 更新数据库(如果需要)
# 查看更新日志,如果有数据库更新脚本,则执行
# mysql -u root -p surveyking < update.sql

# 6. 启动应用
sudo systemctl start surveyking
# 或者
sudo /opt/surveyking/start.sh start

# 7. 验证启动
sudo systemctl status surveyking
tail -f /opt/surveyking/logs/surveyking.log

性能优化

1. 系统级优化

# 增加文件描述符限制
echo "* soft nofile 65536" >> /etc/security/limits.conf
echo "* hard nofile 65536" >> /etc/security/limits.conf

# 优化网络参数
echo "net.core.somaxconn = 65535" >> /etc/sysctl.conf
sysctl -p

2. JVM 优化

# 生产环境 JVM 参数示例
-Xms1024m -Xmx2048m
-XX:+UseG1GC
-XX:MaxGCPauseMillis=200
-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=/opt/surveyking/logs/

3. MySQL 优化

编辑 MySQL 配置文件 /etc/mysql/mysql.conf.d/mysqld.cnf

[mysqld]
innodb_buffer_pool_size = 128M
max_connections = 200
query_cache_size = 32M
tmp_table_size = 64M
max_heap_table_size = 64M

重启 MySQL:

sudo systemctl restart mysql

后记

技术支持

在使用过程中,如果遇到 BUG 或需要新功能,可以通过以下方式反馈:

如果本教程对您有帮助,欢迎给我们一个 ⭐ Star: