Linux 部署开源版
本文介绍如何在 Linux 系统上手动部署卷王问卷考试系统开源版,包括环境安装、数据库配置和应用启动等完整流程。
前提条件
- Linux 系统(CentOS 7+、Ubuntu 18+、Debian 9+ 等)
- 服务器具备公网访问能力
- 具备 root 或 sudo 权限
获取部署文件
只需要两个文件:
- surveyking-v1.6.0.jar - 应用程序文件
- init-mysql.sql - 数据库初始化脚本
下载方式
-
通过 QQ 群获取(推荐)
加入 QQ 群(1074277968),在群文件 -> 正式版,获取最新版本的 jar 包和数据库脚本
-
官方百度网盘
链接: 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
更新升级
获取新版本
- 从 QQ 群或官方渠道下载最新版本的 JAR 文件
- 查看开源版更新日志了解升级说明
升级步骤
# 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 或需要新功能,可以通过以下方式反馈:
- 反馈表单
- Gitee Issues
- GitHub Issues
- QQ 群:1074277968
如果本教程对您有帮助,欢迎给我们一个 ⭐ Star: