# train **Repository Path**: guoguangkai/train ## Basic Information - **Project Name**: train - **Description**: 学之思开源考试系统是一款 java + vue 的前后端分离的考试系统。主要优点是开发、部署简单快捷、界面设计友好、代码结构清晰。支持web端和微信小程序,能覆盖到pc机和手机等设备。 支持多种部署方式:集成部署、前后端分离部署、docker部署 - **Primary Language**: Java - **License**: AGPL-3.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 2997 - **Created**: 2022-09-05 - **Last Updated**: 2025-10-09 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README yum install nginx scp -r cert root@116.205.171.12:/etc/nginx/ scp -r conf.d/* root@116.205.171.12:/etc/nginx/conf.d/ scp -r html/* root@116.205.171.12:/etc/nginx/html/ yum -y install java-11-openjdk nohup ./red5.sh > /dev/null & http://serverIP:5080 init.sh echo "卸载旧版本" sudo yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine sudo yum remove docker-ce docker-ce-cli containerd.io rm -rf /var/lib/docker echo "更新yum" yum update -y yum makecache fast echo "安装必要依赖" sudo yum install -y yum-utils -y echo "设置stable镜像仓库" yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo echo "安装docker" sudo yum install docker-ce docker-ce-cli containerd.io -y echo "配置镜像加速" touch /etc/docker/daemon.json cat>/etc/docker/daemon.json< 个人信息 -> 设置 -> ssh公钥 #删除旧代码 rm -rf RuoYi-Vue mkdir RuoYi-Vue cd RuoYi-Vue/ git init git remote add origin git@gitee.com:guoguangkai/RuoYi-Vue.git git pull git@gitee.com:guoguangkai/RuoYi-Vue.git wget http://repos.fedorapeople.org/repos/dchen/apache-maven/epel-apache-maven.repo -O /etc/yum.repos.d/epel-apache-maven.repo yum -y install apache-maven mvn -version mkdir -p /opt/gc/mysql/{conf,logs,data} docker run -p 3307:3306 --name mysql-gc-test --restart=always --privileged=true \ -v /opt/gc/mysql/conf:/etc/mysql \ -v /opt/gc/mysql/logs:/var/log/mysql \ -v /opt/gc/mysql/data:/var/lib/mysql \ -v /opt/gc/mysql/mysql-files:/var/lib/mysql-files \ -e MYSQL_ROOT_PASSWORD=123456 \ -d mysql:8.0 mkdir -p /opt/middle/redis/{conf,data} docker run -d --privileged=true -p 6378:6379 --restart always \ -v /opt/middle/redis/conf/redis.conf:/etc/redis/redis.conf \ -v /opt/middle/redis/data:/data \ --name redis-middle-prod docker.io/redis redis-server /etc/redis/redis.conf \ --appendonly yes \ --requirepass Anticodon,1992 设置数据库时区: show variables like '%time_zone%'; //查询当前时区 set global time_zone='+8:00'; //在标准时区上加+8小时,即东8区时间 flush privileges; # 立即生效 安装nginx yum install nginx 如果不生效 mv /etc/yum.repos.d /etc/yum.repos.d.bak mkdir /etc/yum.repos.d wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo vim /etc/yum.repos.d/nginx.repo [nginx] name=nginx repo baseurl=http://nginx.org/packages/centos/7/$basearch/ gpgcheck=0 enabled=1 yum clean all yum makecache yum install nginx 安装red5 https://www.jianshu.com/p/8018ba791705 安装minio mkdir -p /opt/gc/minio/config docker run -p 9001:9000 -p 9002:9002 --name minio-gc -d --restart=always -e MINIO_ACCESS_KEY=admin -e MINIO_SECRET_KEY=Anticodon,1992 -v /opt/gc/red5/red5-server/webapps/vod/minio/gcdata:/data -v /opt/gc/minio/config:/root/.minio minio/minio server /data --console-address :9002 安装npm和node # 添加 YUM repo curl -sL https://rpm.nodesource.com/setup_12.x | sudo bash - # 安装 Node.JS(其实安装完 Node.JS 之后,NPM 也就安装上了) yum install -y nodejs # 验证 node -v npm -v 安装maven wget http://repos.fedorapeople.org/repos/dchen/apache-maven/epel-apache-maven.repo -O /etc/yum.repos.d/epel-apache-maven.repo yum -y install apache-maven mvn -version fdisk -l mkfs.ext4 /dev/vdb mount /dev/vdb /opt/aladdin/red5/red5-server/webapps/vod/minio/gcdata df -h deploy-java.sh #!/bin/bash mvn -v cd /opt/gc/deploy/code/RuoYi-Vue git fetch git branch -a git checkout prod git pull origin prod mvn clean package -Dmaven.test.skip=true rm -rf /opt/gc/deploy/docker/ruoyi-admin.jar mv /opt/gc/deploy/code/RuoYi-Vue/ruoyi-admin/target/ruoyi-admin.jar /opt/gc/deploy/docker/ cd /opt/gc/deploy/docker/ sh build.sh ruoyi-admin 8080 docker logs -f ruoyi-admin deploy-vue.sh #!/bin/bash git --version echo 'node version' node -v echo 'npm version' npm -v cd code/RuoYi-Vue git fetch git branch -a git checkout prod git pull origin prod cd ruoyi-ui npm install npm run build:prod rm -rf /etc/nginx/html/ruoyi/* mv /opt/gc/deploy/code/RuoYi-Vue/ruoyi-ui/dist/* /etc/nginx/html/ruoyi/ systemctl restart nginx docker build.sh #!/bin/bash docker stop $1 docker rm $1 docker rmi $1:latest docker build -t $1 . docker run -p $2:$2 -d --name $1 $1:latest Dockerfile FROM majiajue/jdk1.8 MAINTAINER anticodon@sina.com ENV TZ=Asia/Shanghai ENV JAVA_OPTS="-Xms128m -Xmx768m -Djava.security.egd=file:/dev/./urandom" RUN apt-get update && apt-get install -y locales && rm -rf /var/lib/apt/lists/* \ && localedef -i en_US -c -f UTF-8 -A /usr/share/locale/locale.alias en_US.UTF-8 ENV LANG en_US.utf8 RUN mkdir -p /adminserver WORKDIR /adminserver EXPOSE 8080 ADD ./ruoyi-admin.jar ./app.jar CMD sleep 3;java $JAVA_OPTS -jar app.jar xxx.jar ruoyi.conf server { listen 80; listen 443 ssl; server_name gc.okchinese.cn; client_max_body_size 100M; ssl_certificate cert/6632983_gc.okchinese.cn.pem; ssl_certificate_key cert/6632983_gc.okchinese.cn.key; ssl_session_timeout 5m; ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; gzip on; gzip_static on; # 需要http_gzip_static_module 模块 gzip_min_length 1k; gzip_comp_level 4; gzip_proxied any; gzip_types text/plain text/xml text/css; gzip_vary on; gzip_disable "MSIE [1-6]\.(?!.*SV1)"; #root /etc/nginx/html/ruoyi;#vue项目的打包后的dist #location / { # try_files $uri $uri/ @router;#需要指向下面的@router否则会出现vue的路由在nginx中刷新出现404 # index index.html index.htm; #} #对应上面的@router,主要原因是路由的路径资源并不是一个真实的路径,所以无法找到具体的文件 #因此需要rewrite到index.html中,然后交给路由在处理请求资源 #location @router { # rewrite ^.*$ /index.html last; #} location / { root /etc/nginx/html/ruoyi; try_files $uri $uri/ /index.html; index index.html index.htm; } #location /stage-api/ { # proxy_pass http://121.37.12.133:8080/; # proxy_redirect off; # } location /prod-api/ { proxy_pass http://localhost:8080/; proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header REMOTE-HOST $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } file.conf server { listen 80; listen 443 ssl; ssl_certificate cert/6790968_file.okchinese.cn.pem; ssl_certificate_key cert/6790968_file.okchinese.cn.key; ssl_session_timeout 5m; ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; server_name file.okchinese.cn; location / { proxy_pass http://localhost:9002; } } static.conf server { listen 80; listen 443 ssl; ssl_certificate cert/6790805_static.okchinese.cn.pem; ssl_certificate_key cert/6790805_static.okchinese.cn.key; ssl_session_timeout 5m; ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; server_name static.okchinese.cn; location / { proxy_pass http://127.0.0.1:5080/vod/minio/gcdata/; } } ######-p 外网端口:docker的内部端口########### #mysql 主从 Master端配置 #编辑主库配置文件 vim /opt/gc/mysql/conf/my.cnf [mysqld] # 服务的唯一编号 server-id = 1 #启用gtid类型,否则就是普通的复制架构 gtid-mode=on #强制GTID的一致性 enforce-gtid-consistency # 开启mysql binlog功能 log-bin = mysql-bin # 指定需要复制的数据库名 binlog-do-db = ruoyi max_connections=1000 #进入mysql容器 -- docker exec -it 234df /bin/bash -- mysql -uroot -p #创建主从复制专用账户 -- create user 'slave1'@'94.74.102.%' identified with mysql_native_password by 'Anticodon,1992'; -- grant replication slave on *.* to 'slave1'@'94.74.102.%'; -- flush privileges; #查看master的日志及其偏移量 show master status; Master端配置 #编辑配置文件 vim /opt/gc/mysql/conf/my.cnf [mysqld] # 服务的唯一编号 server-id = 2 #启用gtid类型,否则就是普通的复制架构 gtid-mode=on #强制GTID的一致性 enforce-gtid-consistency # 开启mysql binlog功能 log-bin = mysql-bin # 指定需要复制的数据库名 binlog-do-db = ruoyi read-only=1 max_connections=1000 #进入mysql容器 -- docker exec -it 234df /bin/bash -- mysql -uroot -p ## 设置主服务器ip,同步账号密码,同步位置 change master to master_host='94.74.102.124', \ master_user='root', \ --slave1 master_password='Anticodon,1992', \ --slave1的password master_port=3306, \ master_auto_position=1; # 开启同步功能 start slave; # 查看从库的状态 show slave status\G; mysql: docker run -p 3306:3306 --name gc-prod-mysql --restart=always --privileged=true \ -v /opt/gc/mysql/conf:/etc/mysql \ -v /opt/gc/mysql/logs:/var/log/mysql \ -v /opt/gc/mysql/data:/var/lib/mysql \ -v /opt/gc/mysql/mysql-files:/var/lib/mysql-files \ -e MYSQL_ROOT_PASSWORD=Anticodon,1992 \ -d mysql:8.0 redis: docker run -d --privileged=true -p 6379:6379 --restart always \ -v /opt/gc/redis/conf/redis.conf:/etc/redis/redis.conf \ -v /opt/gc/redis/data:/data \ --name gc-prod-redis docker.io/redis redis-server /etc/redis/redis.conf \ --appendonly yes \ --requirepass Anticodon,1992 rabbitmq: docker pull rabbitmq:management mkdir -p /opt/gc/rabbitmq/{etc,log,data} chmod a+rwx -R /opt/gc/rabbitmq/* docker run -d --restart=always \ --name rabbitmq \ -p 5672:5672 -p 15672:15672 \ -v /opt/gc/rabbitmq/data:/var/lib/rabbitmq \ -v /opt/gc/rabbitmq/log/:/var/log/rabbitmq \ --hostname rabbitOfgc \ -e RABBITMQ_DEFAULT_USER=admin \ -e RABBITMQ_DEFAULT_PASS=gc123 \ rabbitmq:management