• 上线Spring boot-若依项目


    基础环境

    所有环境皆关闭防火墙与selinux

    服务器功能主机IP主机名服务名称配置
    前端服务器192.168.231.177nginxnginx1C2G
    后端服务器+代码打包192.168.231.178javajava、maven、nodejs4C8G
    数据库/缓存192.168.231.179dbmysql、redis2C4G

    Nginx

    1. #配置Nginxyum源
    2. [root@nginx ~]# cat /etc/yum.repos.d/nginx.repo
    3. [nginx-stable]
    4. name=nginx stable repo
    5. baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
    6. gpgcheck=1
    7. enabled=1
    8. gpgkey=https://nginx.org/keys/nginx_signing.key
    9. module_hotfixes=true
    10. [nginx-mainline]
    11. name=nginx mainline repo
    12. baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
    13. gpgcheck=1
    14. enabled=0
    15. gpgkey=https://nginx.org/keys/nginx_signing.key
    16. module_hotfixes=true
    17. #安装Nginx
    18. [root@nginx ~]# yum install -y nginx

    java

    1. # 上传java包到服务器
    2. # 安装java环境
    3. [root@java ~]# tar -xf jdk-8u211-linux-x64.tar.gz -C /usr/local/
    4. [root@java ~]# mv /usr/local/jdk1.8.0_211/ /usr/local/java
    5. [root@java ~]# vim /etc/profile.d/java.sh
    6. JAVA_HOME=/usr/local/java
    7. PATH=$PATH:$JAVA_HOME/bin
    8. 重载配置文件
    9. [root@java ~]# source /etc/profile.d/java.sh
    10. 查看java是否安装成功
    11. [root@java ~]# java -version
    12. java version "1.8.0_211"
    13. Java(TM) SE Runtime Environment (build 1.8.0_211-b12)
    14. Java HotSpot(TM) 64-Bit Server VM (build 25.211-b12, mixed mode)

    mysql、redis

    1. # 配置mysql yum源
    2. # 安装mysql
    3. [root@db ~]# yum install -y mysql-server
    4. [root@db ~]# systemctl start mysqld
    5. [root@db ~]# systemctl enable mysqld
    6. 过滤MySQL初始密码,必须启动MySQL,才能过滤出来
    7. [root@db ~]# grep "password" /var/log/mysqld.log
    8. 2023-11-03T19:44:26.450149Z 1 [Note] A temporary password is generated for root@localhost: rb894yRh(NUG
    9. 修改mysql密码
    10. [root@db ~]# mysqladmin -uroot -p'rb894yRh(NUG' password 'QianFeng@123!'
    11. [root@db ~]# mysql -uroot -p'QianFeng@123!'
    12. mysql: [Warning] Using a password on the command line interface can be insecure.
    13. Welcome to the MySQL monitor. Commands end with ; or \g.
    14. Your MySQL connection id is 3
    15. Server version: 5.7.42 MySQL Community Server (GPL)
    16. Copyright (c) 2000, 2023, Oracle and/or its affiliates.
    17. Oracle is a registered trademark of Oracle Corporation and/or its
    18. affiliates. Other names may be trademarks of their respective
    19. owners.
    20. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
    21. # 创建数据库
    22. mysql> create database ruoyi character set utf8 collate utf8_general_ci;
    23. Query OK, 1 row affected (0.00 sec)
    24. #授权root用户远程登录
    25. mysql> grant all on *.* to 'root'@'%' identified by 'QianFeng@123!';
    26. Query OK, 0 rows affected, 1 warning (0.00 sec)
    27. #刷新权限
    28. mysql> flush privileges;
    29. Query OK, 0 rows affected (0.00 sec)
    30. mysql> \q
    31. Bye

    1. [root@db ~]# wget http://download.redis.io/releases/redis-4.0.9.tar.gz
    2. [root@db ~]# tar -xf redis-4.0.9.tar.gz -C /usr/local/
    3. [root@db ~]# mv /usr/local/redis-4.0.9/ /usr/local/redis
    4. 安装编译工具gcc make
    5. [root@db ~]# yum install -y gcc make
    6. [root@db ~]# cd /usr/local/redis/
    7. [root@db redis]# make
    8. 修改redis的配置文件,
    9. [root@db redis]# cat redis.conf
    10. bind 192.168.231.179
    11. port 6379
    12. daemonize yes
    13. [root@db redis]# ./src/redis-server redis.conf &
    14. [root@db redis]# ss -tlanp |grep redis
    15. LISTEN 0 128 192.168.231.179:6379 *:* users:(("redis-server",pid=4938,fd=6))

    配置打包环境

    配置前端打包环境

    1. [root@java ~]# wget https://nodejs.org/dist/v12.18.4/node-v12.18.4-linux-x64.tar.xz
    2. [root@java ~]# tar -xf node-v12.18.4-linux-x64.tar.xz -C /usr/local/
    3. 改名
    4. [root@java ~]# mv /usr/local/node-v12.18.4-linux-x64/ /usr/local/node
    5. 配置环境变量
    6. [root@java ~]# vim /etc/profile.d/node.sh
    7. NODE_HOME=/usr/local/node
    8. PATH=$PATH:$NODE_HOME/bin
    9. 重载环境变量
    10. [root@java ~]# source /etc/profile.d/node.sh
    11. 查看是否安装成功
    12. [root@java ~]# node -v
    13. v12.18.4

    配置后端打包环境

    1. 下包,解压包,改名
    2. [root@java ~]# wget https://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.9.5/binaries/apache-maven-3.9.5-bin.tar.gz --no-check-certificate
    3. [root@java ~]# tar -xf apache-maven-3.9.5-bin.tar.gz -C /usr/local/
    4. [root@java ~]# mv /usr/local/apache-maven-3.9.5/ /usr/local/maven
    5. 配置环境变量
    6. [root@java ~]# vim /etc/profile.d/mvn.sh
    7. MAVEN_HOME=/usr/local/maven
    8. PATH=$PATH:$MAVEN_HOME/bin
    9. 重载环境变量
    10. [root@java ~]# source /etc/profile.d/mvn.sh
    11. 查看是否安装成功
    12. [root@java ~]# mvn -version
    13. Apache Maven 3.9.5 (57804ffe001d7215b5e7bcb531cf83df38f93546)
    14. Maven home: /usr/local/maven
    15. Java version: 1.8.0_211, vendor: Oracle Corporation, runtime: /usr/local/java/jre
    16. Default locale: zh_CN, platform encoding: UTF-8
    17. OS name: "linux", version: "3.10.0-1160.el7.x86_64", arch: "amd64", family: "unix"

    获取代码

    1. 获取源代码
    2. [root@java ~]# yum install -y git
    3. [root@java ~]# git clone https://gitee.com/y_project/RuoYi-Vue.git
    4. 获得RuoYi-Vue
    5. [root@java ~]# ls
    6. anaconda-ks.cfg node-v12.18.4-linux-x64.tar.xz
    7. apache-maven-3.9.5-bin.tar.gz RuoYi-Vue
    8. jdk-8u211-linux-x64.tar.gz

    前端代码打包

    1. [root@java ~]# cd RuoYi-Vue/ruoyi-ui
    2. #替换为国内的taobaoyuan
    3. [root@java ruoyi-ui]# npm install --unsafe-perm --registry=https://registry.npm.taobao.org
    4. [root@java ruoyi-ui]# npm run build:prod
    5. 构建打包成功之后,会在根目录生成 dist 文件夹,里面就是构建打包好的文件,通常是 xxx.js 、xxx.css、index.html 等静态文件。
    6. 通常情况下 dist 文件夹的静态文件发布到你的 nginx 或者静态服务器即可,其中的 index.html 是后台服务的入口页面。
    7. [root@java ruoyi-ui]# ls
    8. babel.config.js dist package-lock.json src
    9. bin node_modules public vue.config.js
    10. build package.json README.md
    11. [root@java ruoyi-ui]# cd dist/
    12. [root@java dist]# ls
    13. favicon.ico html index.html index.html.gz robots.txt static
    14. # 将静态资源移动到其他位置,然后进行后端代码打包
    15. [root@java dist]# cd /root/RuoYi-Vue
    16. [root@java RuoYi-Vue]# mv ruoyi-ui/ /opt/

    后端代码打包

    首先修改后端所需的配置文件

    1. [root@java ~]# cd RuoYi-Vue/
    2. [root@java RuoYi-Vue]# vim ruoyi-admin/src/main/resources/application.yml
    3. # 修改redis配置信息
    4. redis:
    5. # 地址
    6. host: 192.168.231.179
    7. # 端口,默认为6379
    8. port: 6379
    9. # 数据库索引
    10. database: 0
    11. # 密码
    12. password:
    13. # 连接超时时间
    14. timeout: 10s
    15. lettuce:
    16. [root@java RuoYi-Vue]# vim ruoyi-admin/src/main/resources/application-druid.yml
    17. ### 修改数据库url,修改数据库密码
    18. # 数据源配置
    19. spring:
    20. datasource:
    21. type: com.alibaba.druid.pool.DruidDataSource
    22. driverClassName: com.mysql.cj.jdbc.Driver
    23. druid:
    24. # 主库数据源
    25. master:
    26. url: jdbc:mysql://192.168.231.179:3306/ruoyi?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
    27. username: root
    28. password: QianFeng@123!

    后端打包

    1. root@java RuoYi-Vue]# mvn package
    2. …………
    3. [INFO] ------------------------------------------------------------------------
    4. [INFO] BUILD SUCCESS
    5. [INFO] ------------------------------------------------------------------------
    6. [INFO] Total time: 04:35 min
    7. [INFO] Finished at: 2023-11-03T20:18:20+08:00
    8. [INFO] ------------------------------------------------------------------------
    9. [root@java RuoYi-Vue]# ls ruoyi-admin/target/
    10. classes maven-archiver ruoyi-admin.jar
    11. generated-sources maven-status ruoyi-admin.jar.original
    12. #ruoyi-admin.jar 放在后端服务器运行

    项目上线

    前端项目上线

    1. # 拷贝前端资源到前端服务器
    2. [root@java ~]# cd /opt
    3. [root@java opt]# scp -r ruoyi-ui/ 192.168.231.177:/opt/
    4. #前端项目上线
    5. [root@nginx ~]# rm -rf /usr/share/nginx/html/*
    6. [root@nginx ~]# cp -r /opt/ruoyi-ui/dist/* /usr/share/nginx/html/
    7. [root@nginx ~]# ls /usr/share/nginx/html/
    8. favicon.ico html index.html index.html.gz robots.txt static
    9. [root@nginx ~]# vim /etc/nginx/conf.d/default.conf
    10. upstream rs {
    11. server 192.168.231.178:8080;
    12. }
    13. server {
    14. listen 80;
    15. server_name localhost;
    16. access_log /var/log/nginx/host.access.log main;
    17. location / {
    18. root /usr/share/nginx/html;
    19. try_files $uri $uri/ /index.html;
    20. index index.html index.htm;
    21. }
    22. location /prod-api/ {
    23. proxy_pass http://rs/;
    24. proxy_set_header Host $http_host;
    25. proxy_set_header X-Real-IP $remote_addr;
    26. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    27. }
    28. }
    29. [root@nginx ~]# systemctl restart nginx
    30. #前端上线完成,但是由于后端还未上线,所以有报错,并且验证码无法显示

    #前端上线完成,但是由于后端还未上线,所以有报错,并且验证码无法显示

    后端项目上线

    1. # 将jar包传送到后端服务器
    2. [root@java opt]# cp ~/RuoYi-Vue/ruoyi-admin/target/ruoyi-admin.jar /java/
    3. #导入初始化数据,首先将初始化数据传到数据库服务器
    4. [root@java ~]# cd /root/RuoYi-Vue/sql
    5. [root@java sql]# ls
    6. quartz.sql ry_20230706.sql
    7. [root@java sql]# scp * 192.168.231.179:/opt/
    1. # 导入初始化数据
    2. [root@db redis]# mysql -uroot -p'QianFeng@123!' ruoyi < /opt/quartz.sql
    3. mysql: [Warning] Using a password on the command line interface can be insecure.
    4. [root@db redis]# mysql -uroot -p'QianFeng@123!' ruoyi < /opt/ry_20230706.sql
    5. mysql: [Warning] Using a password on the command line interface can be insecure.
    1. #开始测试上线后端服务
    2. [root@java target]# java -jar -server -Xmx1024m -Xms1024m ruoyi-admin.jar
    3. Application Version: 3.8.6
    4. Spring Boot Version: 2.5.15
    5. // _ooOoo_ //
    6. // o8888888o //
    7. // 88" . "88 //
    8. // (| ^_^ |) //
    9. // O\ = /O //
    10. // ____/`---'\____ //
    11. // .' \\| |// `. //
    12. // / \\||| : |||// \ //
    13. // / _||||| -:- |||||- \ //
    14. // | | \\\ - /// | | //
    15. // | \_| ''\---/'' | | //
    16. // \ .-\__ `-` ___/-. / //
    17. // ___`. .' /--.--\ `. . ___ //
    18. // ."" '< `.___\_<|>_/___.' >'"". //
    19. // | | : `- \`.;`\ _ /`;.`/ - ` : | | //
    20. // \ \ `-. \_ __\ /__ _/ .-` / / //
    21. // ========`-.____`-.___\_____/___.-`____.-'======== //
    22. // `=---=' //
    23. // ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ //
    24. // 佛祖保佑 永不宕机 永无BUG //
    25. 05:15:09.581 [background-preinit] INFO o.h.v.i.util.Version - [<clinit>,21] - HV000001: Hibernate Validator 6.2.5.Final
    26. 05:15:09.633 [main] INFO c.r.RuoYiApplication - [logStarting,55] - Starting RuoYiApplication using Java 1.8.0_211 on db with PID 15389 (/opt/RuoYi-Vue/ruoyi-admin/target/ruoyi-admin.jar started by root in /opt/RuoYi-Vue/ruoyi-admin/target)
    27. 05:15:09.634 [main] DEBUG c.r.RuoYiApplication - [logStarting,56] - Running with Spring Boot v2.5.15, Spring v5.3.27
    28. 05:15:09.634 [main] INFO c.r.RuoYiApplication - [logStartupProfileInfo,686] - The following 1 profile is active: "druid"
    29. 05:15:11.945 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Initializing ProtocolHandler ["http-nio-8080"]
    30. 05:15:11.945 [main] INFO o.a.c.c.StandardService - [log,173] - Starting service [Tomcat]
    31. 05:15:11.946 [main] INFO o.a.c.c.StandardEngine - [log,173] - Starting Servlet engine: [Apache Tomcat/9.0.75]
    32. 05:15:12.035 [main] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring embedded WebApplicationContext
    33. 05:15:12.514 [main] DEBUG c.r.f.s.f.JwtAuthenticationTokenFilter - [init,242] - Filter 'jwtAuthenticationTokenFilter' configured for use
    34. 05:15:13.856 [main] INFO c.a.d.p.DruidDataSource - [init,996] - {dataSource-1} inited
    35. 05:15:13.862 [main] DEBUG c.r.s.m.S.selectDictDataList - [debug,137] - ==> Preparing: select dict_code, dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, remark from sys_dict_data WHERE status = ? order by dict_sort asc
    36. 05:15:13.880 [main] DEBUG c.r.s.m.S.selectDictDataList - [debug,137] - ==> Parameters: 0(String)
    37. 05:15:13.903 [main] DEBUG c.r.s.m.S.selectDictDataList - [debug,137] - <== Total: 29
    38. 05:15:14.462 [main] DEBUG c.r.s.m.S.selectConfigList - [debug,137] - ==> Preparing: select config_id, config_name, config_key, config_value, config_type, create_by, create_time, update_by, update_time, remark from sys_config
    39. 05:15:14.463 [main] DEBUG c.r.s.m.S.selectConfigList - [debug,137] - ==> Parameters:
    40. 05:15:14.465 [main] DEBUG c.r.s.m.S.selectConfigList - [debug,137] - <== Total: 6
    41. 05:15:14.873 [main] INFO o.q.i.StdSchedulerFactory - [instantiate,1220] - Using default implementation for ThreadExecutor
    42. 05:15:14.885 [main] INFO o.q.c.SchedulerSignalerImpl - [<init>,61] - Initialized Scheduler Signaller of type: class org.quartz.core.SchedulerSignalerImpl
    43. 05:15:14.885 [main] INFO o.q.c.QuartzScheduler - [<init>,229] - Quartz Scheduler v.2.3.2 created.
    44. 05:15:14.886 [main] INFO o.q.s.RAMJobStore - [initialize,155] - RAMJobStore initialized.
    45. 05:15:14.887 [main] INFO o.q.c.QuartzScheduler - [initialize,294] - Scheduler meta-data: Quartz Scheduler (v2.3.2) 'quartzScheduler' with instanceId 'NON_CLUSTERED'
    46. Scheduler class: 'org.quartz.core.QuartzScheduler' - running locally.
    47. NOT STARTED.
    48. Currently in standby mode.
    49. Number of jobs executed: 0
    50. Using thread pool 'org.quartz.simpl.SimpleThreadPool' - with 10 threads.
    51. Using job-store 'org.quartz.simpl.RAMJobStore' - which does not support persistence. and is not clustered.
    52. 05:15:14.887 [main] INFO o.q.i.StdSchedulerFactory - [instantiate,1374] - Quartz scheduler 'quartzScheduler' initialized from an externally provided properties instance.
    53. 05:15:14.887 [main] INFO o.q.i.StdSchedulerFactory - [instantiate,1378] - Quartz scheduler version: 2.3.2
    54. 05:15:14.887 [main] INFO o.q.c.QuartzScheduler - [setJobFactory,2293] - JobFactory set to: org.springframework.scheduling.quartz.SpringBeanJobFactory@649725e3
    55. 05:15:14.906 [main] DEBUG c.r.q.m.S.selectJobAll - [debug,137] - ==> Preparing: select job_id, job_name, job_group, invoke_target, cron_expression, misfire_policy, concurrent, status, create_by, create_time, remark from sys_job
    56. 05:15:14.906 [main] DEBUG c.r.q.m.S.selectJobAll - [debug,137] - ==> Parameters:
    57. 05:15:14.908 [main] DEBUG c.r.q.m.S.selectJobAll - [debug,137] - <== Total: 3
    58. 05:15:16.124 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Starting ProtocolHandler ["http-nio-8080"]
    59. 05:15:16.511 [main] INFO o.q.c.QuartzScheduler - [start,547] - Scheduler quartzScheduler_$_NON_CLUSTERED started.
    60. 05:15:16.521 [main] INFO c.r.RuoYiApplication - [logStarted,61] - Started RuoYiApplication in 7.487 seconds (JVM running for 7.935)
    61. (♥◠‿◠)ノ゙ 若依启动成功 ლ(´ڡ`ლ)゙
    62. .-------. ____ __
    63. | _ _ \ \ \ / /
    64. | ( ' ) | \ _. / '
    65. |(_ o _) / _( )_ .'
    66. | (_,_).' __ ___(_ o _)'
    67. | |\ \ | || |(_,_)'
    68. | | \ `' /| `-' /
    69. | | \ / \ /
    70. ''-' `'-' `-..-'

    结尾出现若依启动成功,则证明后端服务成功上线

    正式上线

    [root@java target]# nohup java -jar -server -Xmx1024m -Xms1024m ruoyi-admin.jar &
    

    错误及解决办法

    ## 如果报错链接不上数据库,且数据库配置无问题,将RuoYi-Vue/ruoyi-admin/src/main/resources/application-druid.yml文件中,
    master:
                    url: jdbc:mysql://192.168.231.179:3306/ruoyi?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&serverTimezone=GMT%2B8
                    
    将url中useSSL=yes改成useSSL=false,然后重新打包上线

    在JDBC连接MySQL数据库时,useSSL参数用于指定是否使用SSL(安全套接层)加密连接。SSL是一种用于在计算机网络上提供安全通信的协议,它可以确保在客户端和服务器之间传输的数据在传输过程中是加密的,从而提供了一定程度的安全性。

    当useSSL参数设置为false时,表示不使用SSL加密连接。这通常在开发和测试环境中比较常见,因为在这些环境下,对数据传输的安全性要求可能较低,而且SSL加密会增加一些额外的性能开销。在这种情况下,如果数据库服务器不要求强制的SSL连接,你可以将useSSL参数设置为false来简化连接配置。

    但是,在生产环境中,特别是涉及到敏感数据的应用,强烈建议使用SSL加密来保护数据的传输安全性。在生产环境中,通常会将useSSL参数设置为true,以确保数据库连接是安全的。

    在你的连接字符串中,useSSL=false表示不使用SSL加密连接。如果你的数据库服务器要求SSL连接,那么你需要将useSSL参数设置为true,以便建立加密连接。

    nohup命令解释

    nohup命令:nohup 是 no hang up 的缩写,就是不挂断的意思,但没有后台运行,终端不能标准输入。
    nohup :不挂断的运行,注意并没有后台运行的功能,就是指,用nohup运行命令可以使命令永久的执行下去,和用户终端没有关系,例如我们断开SSH连接都不会影响他的运行,注意了nohup没有后台运行的意思;&才是后台运行

    在缺省情况下该作业的所有输出都被重定向到一个名为nohup.out的文件中。

    nohup和&的区别
    &:指在后台运行
    &是指在后台运行,但当用户推出(挂起)的时候,命令自动也跟着退出

    &的意思是在后台运行, 什么意思呢? 意思是说, 当你在执行 ./start.sh & 的时候, 即使你用ctrl+C, 那么start.sh照样运行(因为对SIGINT(程序终止信号,一般有ctrl+C发出)信号免疫)。 但是要注意, 如果你直接关掉shell后, 那么,start.sh进程同样消失。 可见, &的后台并不硬(因为对SIGHUP(用户终端连接(正常或非正常)结束时发出)信号不免疫)。

    nohup的意思是忽略SIGHUP信号, 所以当运行nohup ./start.sh的时候, 关闭shell, 那么start.sh进程还是存在的(对SIGHUP信号免疫)。 但是, 要注意, 如果你直接在shell中用Ctrl+C, 那么start.sh进程也是会消失的(因为对SIGINT信号不免疫)


    所以, &和nohup没有半毛钱的关系, 要让进程真正不受shell中Ctrl+C和shell关闭的影响, 那该怎么办呢? 那么,我们可以巧妙的将他们结合起来用就是
    nohup COMMAND > /dev/null &
    这样就能使命令永久的在后台执行两全其美。

  • 相关阅读:
    基础框架 Spring
    (附源码)ssm小米购物网站 毕业设计 261624
    【DSP】理解并用MATLAB手动实现unwrap()
    python中日期转字符串/字符串转日期
    OpenGL 色彩替换
    基于Http Basic Authentication的接口
    10分钟实现dotnet程序在linux下的自动部署
    Vue axios和vue-axios的关系及使用区别
    我CAD18为什么已安装但是桌面找不到图标
    61 - 智能指针类模板
  • 原文地址:https://blog.csdn.net/m0_59933574/article/details/134217690