1.准备工作
虚拟机软件:VmWare16.0
操作系统:Linux Centos7
JDK版本:1.8
虚拟机安装参考博客:虚拟机安装Linux
2.配置Java jdk环境
-
yum安装
1.1 查看可安装版本
yum -y list java*
1.2 选择自己需要的jdk版本进行安装,比如这里安装1.8,执行以下命令:
yum install -y java-1.8.0-openjdk-devel.x86_64
1.3 查看安装状态
java -version
也可选择进入/usr/lib/jvm
路径查看安装目录
-
Oracle官网下载安装包自行拖拽
虚拟机的话采用vm-tools进行Windows与Linux系统间文件传输即可,直接复制粘贴很方便。 服务器可以使用Xftp等工具链接传输。 首先将jdk包复制到Linux中
然后如果安装可视化环境了可以直接双击解压提取就行
如果没有,可以启动终端,使用命令行解压:
tar -zxvf tar压缩包名字
解压后终端输入 java 不报错,然后输入
java -version
查看版本信息是否正确
配置 profile
文件的环境变量(所有用户可用,针对单个用户的可用 bashrc
配置)
vi /etc/profile 或者 vim /etc/profile
点击i
进入编辑模式
文件底部输入
JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk
JRE_HOME=$JAVA_HOME/jre
PATH=$PATH:$JAVA_HOME/bin
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export JAVA_HOME
export JRE_HOME
export PATH
export CLASSPATH
按esc
后输入:wq!
保存退出
执行source /etc/profile
使刚刚的配置生效
如出现如下问题:
-bash: /usr/local/jdk1.8.0_144/bin/java: /lib/ld-linux.so.2: bad ELF
interpreter: 没有那个文件或目录
使用命令 :sudo yum install glibc.i686
或者是
或者: yum list installed | grep java
还有以下这种不成功的
用这条指令: echo "" > /etc/ld.so.preload
3.部署SpringBoot程序
直接复制jar包至服务器中,可以自行创建一个文件夹放jar包,方便区分
mkdir /home/xxx/project
用cd定位至路径
cd /home/xxx/project
然后启用jar包运行,此处和Windows部署一样
java -jar 包名
看到如下熟悉的Spring,即说明成功
如果提示权限不足,在命令前加 sudo 即可,代表最高权限指令,有时候需要输入用户密码认证身份。
Hello! World!
**注意事项:**当部署到Linux系统时可能会出现如下问题:
- 权限问题 这个比较好解决,jar包权限777,操作的文件及文件夹也777就行
- 找不到页面,报500,但本地没问题
1、把controller返回时最前面的“/”去掉即可
2、在本地windows环境下运行,是不区分路径的大小写的。当打包成jar,在linux服务器运行时,是区分大小写的。所以导致找不到路径。改成一样就行了。
3、排除mysql的max_allowed_packet问题,看报错信息里有没有。是template还是别的
下载mysql安装包:
wget https://dev.mysql.com/get/mysql80-community-release-el7-6.noarch.rpm
Linux 默认启用8.0,需要禁用
sudo yum-config-manager --disable mysql80-community
并开启5.7
sudo yum-config-manager --enable mysql57-community
yum安装mysql:sudo yum install mysql-community-server
如遇到如上错误,执行以下4步
- 下载wget
yum -y install wget
- 下载rpm包
wget http://dev.mysql.com/get/mysql57-community-release-el7-7.noarch.rpm
- 本地安装rpm包
yum localinstall -y mysql57-community-release-el7-7.noarch.rpm
- 安装mysql社区版服务
yum install -y mysql-community-server
出现以上错误,需要执行配置GPG密钥:
rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022
然后重新执行安装社区版服务即可。
- 启动Mysql服务:
systemctl start mysqld
- 重启mysql:
service mysqld restart
或systemctl restart mysqld.service
或者sudo systemctl restart mysql
、sudo service mysql restart
- 查看mysql服务状态:
systemctl status mysqld
或者sudo service mysql status
显示内容有:Active: active (running) 即为启动成功 - 设置开机启动:
systemctl enable mysqld
- 查看Mysql默认生成的密码:
sudo grep 'temporary password' /var/log/mysqld.log
- 本机登录:
mysql -uroot -p
- 修改密码(默认Mysql是强密码,需要大小写+特殊字符+数字):
ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass4!';
- 将root账户改为所有地址都可访问(不安全)(云服务器需要同时开放):
use mysql;
update user set Host='%' where User='root';
flush privileges;
-
配置
max_allowed_packet
:set global max_allowed_packet = 1024*1024*1024;
-
开启防火墙:
firewall-cmd --permanent --zone=public --add-port=3306/tcp --permanent
firewall-cmd --reload -
用户开启权限:
GRANT SELECT on 库名.视图/表 名 to '用户名'@'%';
FLUSH PRIVILEGES;
- sql执行报错 :sql_mode=only_full_group_by 解决方案
1、临时修改
show VARIABLES LIKE 'sql_mode';
SET sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
flush privileges;
2、永久修改mysql配置(配置完后需重启)
[mysql]
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
- 部分版本Mysql在Linux环境下会对sql语句大小写敏感(例如:5.7.40)
修改mysql配置文件(配置完后需重启)
[mysql]
# 设置大小写不敏感
lower_case_table_names=1
2.SqlServer
Sqlserver 报错 create connection SQLException, url: jdbc:sqlserver://xxxx:1433;DatabaseName=chisdb_fkyy;encrypt=true;trustServerCertificate=true, errorCode 0, state 08S01 com.microsoft.sqlserver.jdbc.SQLServerException:驱动程序无法使用安全套接字层(SSL)加密建立到SQL Server的安全连接。错误:“客户端首选项[TLS12]不接受服务器选择的协议版本TLS10”。
(1).进入jdk安装路径,例如:C:\Program Files\Java\jdk-16.0.1\conf\security\java.security
或者 jdk和jre目录下直接搜索java.security
修改即可,jdk改完不行接着改jre
(2).修改jdk.tls.disabledAlgorithms=附近的值
jdk.tls.disabledAlgorithms=SSLv3, TLSv1, TLSv1.1, RC4, DES, MD5withRSA,
DH keySize < 1024, EC keySize < 224, 3DES_EDE_CBC, anon, NULL,
include jdk.disabled.namedCurves
这三行前面加#
注释起来就行
3.Oracle 暂无
4.常见问题:
-
当mysql查询结果占用内存较大,如base64图片等,会出现页面打不开的问题。 可以使用
set global max_allowed_packet = 2*1024*1024*1000;
因为这里代表字节,所以较大一些比较好操作。 -
导数据库,在原来库生成一个sql文件,传到Linux服务器,在Linux中先创建对应数据库:
create database 库名;
,然后使用语句执行sql文件:source /文件夹名/a.sql
即可。 -
修改mysql 字段类型:
alter table news_information MODIFY ni_content longblob
-
查看表结构:
DESC 表名
-
添加字段:
ALTER TABLE 表名 ADD COLUMN 字段名 VARCHAR(255) DEFAULT NULL COMMENT '注释';
-
修改字段:
ALTER TABLE 表名 MODIFY COLUMN 字段名 VARCHAR(255) DEFAULT NULL COMMENT '注释';
-
执行了
crud
后记得commit
`
-
进入
/usr/local
路径中新建redis
文件夹 -
下载安装包:
wget http://download.redis.io/releases/redis-5.0.7.tar.gz
-
解压:
tar -zvxf redis-5.0.7.tar.gz
-
编译包并下载bin目录:
sudo make
提示如上错误时,需要安装GNU编译器集合(GCC):yum install gcc
然后进入/usr/local/redis/redis-5.0.7
重新执行make
指令 -
bin目录下载到/usr/local/redis/redis-5.0.7/下
make PREFIX=/usr/local/redis/redis-5.0.7/ install
-
配置环境变量,打开全部用户通用的
profile文件
:sudo vim /etc/profile
-
添加变量路径信息到文件最下面:
export REDIS_HOME=/usr/local/redis/redis-5.0.7 export PATH=$PATH:$REDIS_HOME/bin
-
执行
source /etc/profile
使刚刚的配置生效。
配置Redis外网访问
- 找到/usr/local/redis/redis-5.0.7下的
redis.conf
- bind 改为
bind 0.0.0.0 ::1
- daemonize 改为yes 允许redis后台运行
- protected-mode 改为 no 关闭保护,允许外网访问
- requirepass 后跟密码(如果加防火墙限制可不填)
- 查看redis版本信息:
redis-cli --version
- 后台启动redis:
redis-server &
- 制定配置文件启动redis:
redis-server /usr/local/redis/redis-5.0.7/redis.conf
- 关闭redis:
redis-cli SHUTDOWN
- 进入
/usr/local
路径中新建nginx
文件夹 - 下载依赖包:
yum -y install gcc zlib zlib-devel pcre-devel openssl openssl-devel
- 下载安装包:
wget http://nginx.org/download/nginx-1.13.7.tar.gz
- 解压:
tar -xvf nginx-1.13.7.tar.gz
- 进入解压出来的目录,安装ssl证书 添加两个模块:
./configure --with-http_stub_status_module --with-http_ssl_module
- make编译包:
sudo make
、make install
- 检查
nginx
目录下有sbin
目录即可 - 配置环境变量,打开全部用户通用的
profile文件
:sudo vim /etc/profile
- 添加变量路径信息到文件最下面:
export PATH=$PATH:/usr/local/nginx/sbin
- 执行
source /etc/profile
使刚刚的配置生效
最后就可以使用如下命令了:
1. nginx
第一次启动
2. nginx -t
先测试配置文件是否正确
3. nginx -s reload
平滑启动 不影响现在业务
4. nginx -s stop
关闭nginx服务
ps aux | grep nginx
查看nginx进程信息service nginx restart
nginx服务重启
当vue项目请求地址不是后台地址而是自己的地址时,或者需要请求外部地址报错 has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.
时,如下在配置server内添加代理ip即可:
有的地方说不要^~
,,但我在实战中需要加这个才行,根据自己情况来吧!
location ^~ /api {
proxy_pass http://xxx:xx/;
}
使用Nginx部署后,登录页面刷新一下就出来404,解决办法:
在root 及 index下添加如下代码:
try_files $uri $uri/ /index.html
原理:try_files 表示检查文件是否存在,返回第一个找到的文件,这里设置是index.html内部重定向。
当通过nginx的服务需要获取请求用户的ip地址时,往往只能获取到服务器的ip地址,而非真实的用户ip地址,此时需要配置nginx的请求:
在代理请求中添加如下内容:
#代理请求头相关
proxy_set_header Host $host:$server_port;
proxy_set_header X-Real-Ip $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
例如:
location / {
#代理请求头相关
#proxy set header Host shost:
proxy_set_header Host $host:$server_port;
proxy_set_header X-Real-Ip $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
# 判断当是移动设备的时候跳转移动设备对应的地址,否则进入PC端地址
root $root_path;
try_files $uri $uri/ /index.html; # 尝试找到请求的文件或目录,如果找不到,就返回 index.html
}
7.云服务器部署
示例1:阿里云轻量服务器

在处理完数据库,执行jar包后,需要在安全
中配置一下防火墙
端口。
然后就可以在外网使用公网ip+端口号访问你的程序了。
***注意事项:***当需要实时查看进程运行状态,但又不想一直挂着远程链接时,此时用到一个工具包。(参考:51博客:dream666uping)
多重视窗管理程序:screen
安装(命令行执行任务):
CentOS 系列系统: yum install screen
Ubuntu 系列系统: sudo apt-get install screen命令:
screen -ls 查看视窗列表
screen -S name 创建 screen 新窗口
screen -r -d 1572 (1572为窗口id) 进入窗口
终止程序执行与平常一致:Ctrl+C
exit 加回车关闭窗口
8.云服务器传文件
使用工具:WinScp(阿里云推荐的,直接下了,用着可以,很便捷,连接后拖拽即可)
默认进的是root文件夹,可以自己退出去新建文件夹,以及权限赋予,都可以。
还有比较常见的XShell里的sftp。
999.常用命令记录
sudo -i
切换管理员账号sudo
最高权限(用作命令的前缀)grep
检索文件前缀,可用*等正则表达式组合查询kill
杀进程前缀后跟进程PIDshutdown -r
一分钟后重启Linux系统mv
原名 新名mv -i 456.txt /home/hk/cpdir/copy/abc
将 456.txt 移动到 /home/hk/cpdir/copy/ 并取名为 abc 若已存在文件 abc则会询问是否覆盖。rm -f *
删除当前目录下所有文件vi
或者vim
加文件名,进入编辑页面 按i
进入编辑模式,编辑完毕后,按esc
退出编辑模式,输入:wq
后回车即可保存退出rm
+文件名 删除文件 仅能删除空文件夹rm -rf
+文件夹不管是否内有文件直接删除rm -rf !(1.txt)
文件夹内全部删除,仅保留1.txt ,若多个用|
分隔ls
查看当前目录下所有子级文件夹和文件ls -l 列表展示当前目录下所有文件
cp -r /usr/local//nginx /usr/local//nginx.bak
强制复制nginx为nginx.bakchmod 777 文件名
文件赋予权限netstat -tlnp
查看全部运行中服务的端口号及pidnetstat -nlp|grep 2060
根据端口号查询进程信息ps aux | grep nginx
根据服务名查询进程信息grep "Failed password" /var/log/secure | awk '{if (NF==16){c[$11]++}else{c[$9]++}}END{for(u in c)print u,c[u]}'| sort -k 2 -nr | head
查询服务器登录密码错误日志记录jps -l
查看当前运行服务名称及进程idcat
+文件名 concatenate查看文件内容whereis
+你想查找的文件或应用名称 查询存储地址ps aux|head -n 1; ps aux| grep -v PID |sort -nr -k6 | head -n10
查看内存使用排名前10的进程
vim编辑器命令
- vim /a/b vim后跟文件名路径
- 按 i 进入编辑模式
- 编辑完成后按 esc + wq 退出或再加 !
查看进程
jobs -l
进程列表kill id
杀死对应id 的进程。kill -9 id
强制杀死对应id 的进程。fg id
激活对应id 的进程ps aux|grep xxx.jar
查看指定进程,xxx.jar可换为其他名称netstat -nlp|grep 2060
根据端口号查询进程信息
运行jar包
java -jar xxx.jar --server.port=8081
jar包指定端口号java -jar xxx.jar
基本的jar包执行方式,当我们用ctrl+c中断或者关闭窗口时,程序也会中断执行java -jar xxx.jar &
使用ctrl+c不会中断程序的运行,但是关闭窗口会中断程序的运行。&代表在后台运行。nohup java -jar ruoyi-admin.jar &
使用ctrl+c中断或者关闭窗口都不会中断程序的执行。使用这种方式运行的程序日志会输出到当前目录下的nohup.out文件。(在最后一个&
前加> /dev/null 2>&1
代表不输出日志)nohup java -jar ruoyi-admin.jar > /dev/null 2>&1 &
nohup java -jar XXX.jar >temp.log &
使用ctrl+c中断或者关闭窗口都不会中断程序的执行,日志可输出在指定文件里。上面 >temp.log的意思是将日志输出重定向到temp.log文件。nohup xxx > /dev/null 2>&1 &
任何一个程序文件在后台执行且不输出日志
1、
nohup:这是 “no hang up” 的缩写,用于运行一个命令,使该命令忽略所有的挂断(HUP)信号。当你关闭终端或注销会话时,系统会发送一个 HUP 信号给所有运行的进程。nohup 命令会捕获这个信号,防止它终止你的程序。
2、
> /dev/null:这部分将标准输出(stdout)重定向到 /dev/null,一个特殊的设备文件,它会丢弃掉所有写入其中的数据。简而言之,这意味着命令的输出不会被显示在终端上。
3、
2>&1:这部分将标准错误(stderr)重定向到标准输出(stdout),而标准输出已经被重定向到4、
/dev/null。因此,这实际上意味着所有的输出(无论是正常的输出还是错误信息)都会被丢弃。
5、
&:在命令的末尾,这个符号用于将命令放入后台执行。这意味着你可以在命令开始执行后立即回到终端提示符,而不需要等待命令完成。
解压缩
gzip 文件名
+压缩gzgunzip 文件名
解压gztar -xvf 文件名
用于解包未压缩的 .tar 文件tar -zxvf 文件名
用于解包通过 gzip 压缩的 .tar.gz 或 .tgz 文件 加-C /路径
会解压到指定路径文件夹中