Linux环境配置与服务部署实战指南

1.准备工作


虚拟机软件:VmWare16.0
操作系统:Linux Centos7
JDK版本:1.8

虚拟机安装参考博客:虚拟机安装Linux

2.配置Java jdk环境

  1. 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路径查看安装目录
在这里插入图片描述

  1. Oracle官网下载安装包自行拖拽

    虚拟机的话采用vm-tools进行Windows与Linux系统间文件传输即可,直接复制粘贴很方便。
    服务器可以使用Xftp等工具链接传输。
    首先将jdk包复制到Linux中
    

复制jdk
然后如果安装可视化环境了可以直接双击解压提取就行
如果没有,可以启动终端,使用命令行解压:

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,即说明成功
springboot
如果提示权限不足,在命令前加 sudo 即可,代表最高权限指令,有时候需要输入用户密码认证身份。

Hello! World!
hello world

**注意事项:**当部署到Linux系统时可能会出现如下问题:

  1. 权限问题 这个比较好解决,jar包权限777,操作的文件及文件夹也777就行
  2. 找不到页面,报500,但本地没问题

1、把controller返回时最前面的“/”去掉即可
2、在本地windows环境下运行,是不区分路径的大小写的。当打包成jar,在linux服务器运行时,是区分大小写的。所以导致找不到路径。改成一样就行了。
3、排除mysql的max_allowed_packet问题,看报错信息里有没有。是template还是别的

4.配置数据库 -> 三大老主流Mysql、SqlServer、Oracle


1.MySql(安装数据库参考: 安装mysql,没有可用软件包参考: 添加链接描述

下载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步

  1. 下载wget yum -y install wget
  2. 下载rpm包 wget http://dev.mysql.com/get/mysql57-community-release-el7-7.noarch.rpm
  3. 本地安装rpm包 yum localinstall -y mysql57-community-release-el7-7.noarch.rpm
  4. 安装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 restartsystemctl restart mysqld.service或者sudo systemctl restart mysqlsudo 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_packetset 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
    `

5.数据缓存 -> 使用Redis


Redis安装配置教程

  1. 进入/usr/local路径中新建redis文件夹

  2. 下载安装包:wget http://download.redis.io/releases/redis-5.0.7.tar.gz

  3. 解压:tar -zvxf redis-5.0.7.tar.gz

  4. 编译包并下载bin目录:sudo make
    在这里插入图片描述
    提示如上错误时,需要安装GNU编译器集合(GCC):yum install gcc
    然后进入/usr/local/redis/redis-5.0.7重新执行make指令

  5. bin目录下载到/usr/local/redis/redis-5.0.7/下 make PREFIX=/usr/local/redis/redis-5.0.7/ install

  6. 配置环境变量,打开全部用户通用的profile文件sudo vim /etc/profile

  7. 添加变量路径信息到文件最下面:

    export REDIS_HOME=/usr/local/redis/redis-5.0.7
    export PATH=$PATH:$REDIS_HOME/bin
    
  8. 执行source /etc/profile 使刚刚的配置生效。

配置Redis外网访问

  1. 找到/usr/local/redis/redis-5.0.7下的redis.conf
  2. bind 改为bind 0.0.0.0 ::1
  3. daemonize 改为yes 允许redis后台运行
  4. protected-mode 改为 no 关闭保护,允许外网访问
  5. requirepass 后跟密码(如果加防火墙限制可不填)
  • 查看redis版本信息:redis-cli --version
  • 后台启动redis:redis-server &
  • 制定配置文件启动redis:redis-server /usr/local/redis/redis-5.0.7/redis.conf
  • 关闭redis:redis-cli SHUTDOWN

6.Vue程序部署 -> 使用Nginx部署


nginx安装配置教程

  1. 进入/usr/local路径中新建nginx文件夹
  2. 下载依赖包:yum -y install gcc zlib zlib-devel pcre-devel openssl openssl-devel
  3. 下载安装包:wget http://nginx.org/download/nginx-1.13.7.tar.gz
  4. 解压:tar -xvf nginx-1.13.7.tar.gz
  5. 进入解压出来的目录,安装ssl证书 添加两个模块:./configure --with-http_stub_status_module --with-http_ssl_module
  6. make编译包:sudo makemake install
  7. 检查nginx目录下有sbin目录即可
  8. 配置环境变量,打开全部用户通用的profile文件sudo vim /etc/profile
  9. 添加变量路径信息到文件最下面:
    export PATH=$PATH:/usr/local/nginx/sbin
    
  10. 执行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 杀进程前缀后跟进程PID
  • shutdown -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.bak
  • chmod 777 文件名文件赋予权限
  • netstat -tlnp 查看全部运行中服务的端口号及pid
  • netstat -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 查看当前运行服务名称及进程id
  • cat +文件名 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 文件名+压缩gz
  • gunzip 文件名 解压gz
  • tar -xvf 文件名 用于解包未压缩的 .tar 文件
  • tar -zxvf 文件名 用于解包通过 gzip 压缩的 .tar.gz 或 .tgz 文件 加-C /路径 会解压到指定路径文件夹中
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程似锦吖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值