前言/前置条件
- 需要准备一个服务器 或 一个云服务器
- 对Linux环境有一定的了解
- 会使用Linux基础命令行
我这里使用的是云服务器作为示例服务器进行操作, 你可选择购买一个云服务器, 当然你也可以自己安装一个Linux环境进行操作。
下载安装并不是本文的核心, 这里就不展开了。
本文基于自建服务器举例, 如已购买云服务器的小伙伴, 某些操作云服务商已经帮你完成了, 观看本文是你可选择性观看或跳过
网卡设置
刚安装完Centos时,由于启动服务器时未加载网卡,导致IP地址初始化失败可以用命令 ip addr 查看以下网卡IP地址:
这里可以看到ens33这个网卡无ip地址,这里需要解决这个问题,解决方法如下:
温馨提示:
这里的 ens33 只是我的网卡名称, 你的有可能叫其他的名字。
键入 cd /etc/sysconfig/network-scripts/ 进入至 network-scripts 目录
使用命令 vim ifcfg-ens33 编辑其内容将 ONBOOT 由 no 改未 yes,按esc键 然后输入 :wq保存退出!
使用命令 sudo shutdown -r now 重启服务器,再次查看 ens33 ip地址
表明已经初始化IP成功了!你可通过命令 ping 主机地址 再次确认。
这里推荐一个 Xshell 连接工具, 你可进行免费下载安装并完成连接操作
官网下载:Xshell + Xftp
安装完成后打开, 点击连接, 输入连接信息
常用命令
这里列举出部分命令行, 你在安装部署项目的时候可能遇到一下问题, 可以通过下述命令行得到解决。
乱码问题处理
Linux命令格式
-以 ls 查看文件目录为例
只使用命令
命令+选项
命令+参数
查看/home目录下的文件
命令+选项+参数
以列形式查看根目录下的文件
文件目录
ls 查看文件
ls -a 显示所有的文件及目录(.开头的隐藏文件也列出)
ls -l 将文件信息详细列出,以列形式(隐藏文件不列出)
ll 等价于ls -l
ls -al 将文件信息详细列出,以列形式(隐藏文件也列出)
ls -al 指定目录 指定目录下的文件信息详细列出,以列形式(隐藏文件也列出)
cd 切换目录
cd / 切换至根目录
cd ~ 切换至家目录
cd … 切换至当前目录的上一层目录
cd 任意目录 切换至任意目录
pwd 查看当前目录
cat 查看文件内容
cat 文件
cat -n 文件 (从1开始对文件内容按列编号)
more 以分页形式显示文件内容
回车键 一行一行显示
空格 一屏一屏显示
b 返回上一屏
q或者Ctrl+c 退出more
tail 查看文件末尾内容
tail 文件名 查看文件末尾前10行内容
tail -n 文件名 查看文件末尾前n行内容
tail -f 文件名 动态显示文件末尾内容
mkdir 创建文件
mkdir 文件名 创建单层文件(在根目录下创建a文件)
mkdir -p 文件名 创建多层文件(在根目录下的b文件中创建c文件,在c文件中创建d文件)
rm 删除文件或目录
rm -r 将目录及目录下的文件递归删除(需确认)
rm -rf 将目录及目录下的文件递归删除(无需确认)
rm a* 删除带有a文件名的文件或目录
拷贝移动命令
cp 用于复制文件或目录
cp 被复制文件名 复制到的文件名
cp -r 被复制目录名 复制到的目录名(复制目录需要加-r,表示递归复制)
将a目录下的文件复制到A目录(如果需要连同a目录本身就用cp -r a/ A)
mv 为文件或者目录改名或者移动位置
mv a.txt b.txt 将a.txt改名为b.txt
mv a.txt A/c.txt 将a.txt移动至A目录下并改名为c.txt
mv a/ A 将a目录移动至A目录下(如果A目录不存在则将a改名为A)
打包压缩命令
在Linux中,后缀名为.tar的表示仅仅只是打包,还未进行压缩,只有.tar.gz的才是既打包又压缩!
tar 对文件进行打包、解包、压缩、解压
tar -zcvf 打成的包名 打并压缩的文件名
将A目录及目录下的所有文件打包为Atar.tar
将A目录及目录下的所有文件打包压缩为Atar.tar.gz
tar -zxvf 解压包名
将Atar.tar解包
将Atar.tar.gz解压
tar -zxvf 解压包名 -C 解压到的目录
将Atar.tar.gz解压到home目录下
文本编辑命令
vi/vim
vim是在vi的基础上进行了做色处理,是比vi更强的文本编辑工具!vim工作分为三种模式:命令模式,插入模式,底行模式,vim打开默认进入命令模式!
命令模式
vim默认的进入模式;
在命令模式下可以使用上下左右光标,可以通过gg跳转至最首行,G跳至最末行;
插入模式
通过进入命令模式后通过点击[i,a,o],进入插入模式;
进入后即可对文本进行修改操作等等;
按下Esc,回到命令模式;
底行模式
在命令模式下按下[ : , / ]任意一个,可以进入底行模式;
底行模式下可以通过命令进行查找,显示行号,退出等操作;
通过/方式进入底行模式后,可以对文件内容进行查找;
通过:方式进入底行模式后,可以输入wq(保存并退出),q!(不保存退出),set nu(显示行号);
查找命令
find 查找目录 -name 查找的文件名 (查找文件)
在当前目录查找后缀名为.java的文件
在家目录查找后缀名为.java的文件
grep 查找的文本内容 查找的文本文件 (在文本中查找指定文本内容)
查找当前目录下中a在所有后缀为.java中的位置
软件安装
软件安装的四种方式:
安装JDK
将先下好的jdk压缩包上传至linux
解压jdk
配置环境变量,修改vim命令修改/etc/profile文件,在文件末尾加如下配置:
JAVA_HOME=jdk解压的路径/jdk名
PATH=$JAVA_HOME/bin:$PATH
重新加载profile文件,是更改的配置立即生效,使用命令source /etc/profile
检查安装是否成功,使用java -version查看其版本
安装tomcat
将先下好的tomcat压缩包上传至linux
解压压缩包
进入tomcat的bin目录启动服务,命令为sh startup.sh或者./startup.sh
查看tomcat是否启动成功,可以使用命令ps -ef |grep tomcat
用主机访问tomcat
发现一直转圈,访问不进去,这是因为我们虚拟机的防护墙给拦截下来了,需要我们进行设置,下面是防火墙相关命令:
查看防火墙
打开防火墙(这里我们不建议直接开启防火墙,不安全,打开用到的端口即可)
主机重新访问tomcat页面
成功访问!
关闭tomcat服务
方式一:在tomcat下的bin目录,使用命令sh .shutdown.sh或者./shutdown.sh(推荐)
此时通过查看进程发现tomcat主进程已经消失了,证明已被关闭
方式二:通过kill -9 进程号 命令强行杀死进程,当方式一关闭不了时再使用
安装MySQL(使用rpm安装)
rpm常用命令(理解为exe文件)
- rpm -qa 查看linux已安装的所有软件(可结合管道符|使用)
- rpm -ivh 软件包名 安装软件
- rpm -e --nodeps 软件包名 卸载软件
yum 常用命令(从网上直接下载安装)
- yum install 软件名 安装软件
- yum update 将linux上已安装的软件或内核进行升级
安装mysql
将下好的mysql的rpm包上传至服务器
解压rpm包
卸载mariadb
安装rpm包前先检查一下是否有安装mariadb,Centos默认有安装,该软件与mysql冲突
卸载
重新查找后已经没有相关信息,则卸载成功!
安装mysql相关rpm包
按照以下顺序安装:
mysql-community-common-5.7.25-1.el7.x86_64.rpm
mysql-community-libs-5.7.25-1.el7.x86_64.rpm
mysql-community-devel-5.7.25-1.el7.x86_64.rpm
mysql-community-libs-compat-5.7.25-1.el7.x86_64.rpm
mysql-community-client-5.7.25-1.el7.x86_64.rpm
mysql-community-server-5.7.25-1.el7.x86_64.rpm
这里强调一下,当安装最后一个mysql-community-server-5.7.25-1.el7.x86_64.rpm时,如果安装失败,可以使用yum install net-tools安装一下net-tools再继续安装即可!
启动mysql服务
修改MySQL密码
第一次登录数据库时,MySQL会给一个临时密码,需要在/var/log/mysqld.log中查阅临时密码
登录数据库
修改密码
重新登录数据库
使用navicat远程连接
还记得防火墙吗,我们又被这墙拦截了!!!!
打开3306端口
重新连接
安装lrzsz
lrzsz是一款用于我们从主机上传数据至Linux的软件,但需借助于连接ssh的工具软件。
使用finalshell启动rz
项目部署
手工部署项目
将项目打成jar包
将jar包上传至服务器
使用java -jar jar包名启动项目
在Windows上访问该ip地址:8080端口
访问成功,没有数据是因为服务器上的数据库里没有数据。
优化启动项目
使用java -jar启动项目启动项目是不是发现好像不能够在界面操作了,并且当你关闭界面时就发现项目自己停掉了?为了解决这个弊端,下面给出了解决方案:
使用nohup命令,该命令用于不挂断的运行指令命令,退出终端不会影响程序的运行
图片中的nohub改为nohup,一时大意打错了~~
重新访问,并查看日志文件
停掉项目只能通过kill -9 进程号杀死进程!
通过shell脚本自动部署项目
在linux中安装Git
在linux中安装maven
将下好的maven安装包上传至服务器、并解压
配置环境变量,在/ect/profile中输入
export MAVEN_HOME=解压maven的绝对路径
export PATH= J A V A H O M E / b i n : JAVA_HOME/bin: JAVAHOME/bin:MAVEN_HOME/bin:$PATH
重新加载配置文件
查看maven是否配置成功
修改setting文件
修改在解压的maven文件下的conf/setting.xml文件中加入
自定义的本地仓库绝对路径
编写shell脚本(拉取代码、编译、打包、启动)
#!/bin/sh
echo =================================
echo 自动化部署脚本启动
echo =================================
echo 停止原来运行中的工程
APP_NAME=原来运行的工程名
tpid=`ps -ef|grep $APP_NAME|grep -v grep|grep -v kill|awk '{print $2}'`
if [ ${tpid} ]; then
echo 'Stop Process...'
kill -15 $tpid
fi
sleep 2
tpid=`ps -ef|grep $APP_NAME|grep -v grep|grep -v kill|awk '{print $2}'`
if [ ${tpid} ]; then
echo 'Kill Process!'
kill -9 $tpid
else
echo 'Stop Success!'
fi
echo 准备从Git仓库拉取最新代码
cd 从git拉取的代码的绝对路径
echo 开始从Git仓库拉取最新代码
git pull
echo 代码拉取完成
echo 开始打包
output=`mvn clean package -Dmaven.test.skip=true`
cd target
echo 启动项目
nohup java -jar 执行的jar包 &> helloworld.log &
echo 项目启动完成
实例:
将git上的代码拉至linux中
编写shell脚本
为用户授予执行shell脚本的权限
查看当前shell脚本文件权限
可以看到,这里没有写权限,这里我们可以使用命令chmod 777 文件名或者chmod a=rwx 文件名来修改权限
执行shell脚本
使用命令./脚本名.sh或者 sh 脚本名.sh
项目启动成功,由于该项目不是web项目,只能用linux图像界面才能显示页面!!
配置静态IP
虚拟机分配IP地址的方式是根据DHCP进行随机分配的,这样存在的问题就是我们每次重启虚拟机后所分配到IP可能都不相同,配置静态IP后就能解决该问题!
修改文件/etc/sysconfig/network-scripts/ifcfg-ens33
重新启动服务
结语
项目上线或者直接暴露在外网是十分危险的, 你在上线部署前需要做好有关服务器安全的预演。下面是我给你的几点建议!!!
更新和维护: 确保服务器系统和相关软件保持最新的安全补丁和更新。定期检查并修复可能存在的漏洞,以防止黑客利用。
访问控制: 设置强大的访问控制策略,限制只有授权人员才能访问服务器。使用复杂的密码,并定期更改密码。密码设置方面不要过于简单, 考虑使用多因素认证以增强安全性。
防火墙配置: 配置服务器防火墙,限制入站和出站流量,只允许必要的服务和端口对外开放。定期审查防火墙规则,确保其符合实际需求并保持最小权限原则。
加密通信: 使用SSL/TLS等加密协议保护网络通信,特别是对于敏感数据的传输。确保所有的敏感信息在传输过程中都进行了加密。
备份和恢复: 定期备份服务器数据,并将备份数据存储在安全的位置。测试备份和恢复流程,确保在发生灾难时能够快速恢复数据。
监控和日志: 配置监控系统和日志记录功能,定期审查服务器日志以及监控系统的报警信息。及时发现异常行为和安全事件,并采取相应的应对措施。
安全审计: 定期进行安全审计和漏洞扫描,发现并修复潜在的安全问题。保持对服务器安全的持续关注和改进。
应用安全: 确保部署的应用程序和服务具有足够的安全性。采用安全编程实践,避免常见的安全漏洞,如SQL注入、跨站脚本等。
权限管理: 严格管理用户权限,确保每个用户只能访问其需要的资源。定期审查用户权限,及时取消不必要的权限。
紧急应对计划: 制定紧急应对计划,包括应对安全事件和数据泄露的应急措施。确保团队成员了解应对流程,并进行定期演练。
开放端口:端口尽量少开放少暴露, 线上项目原则上建议只开放80、443端口, 其他端口能不暴露就不暴露, 服务器组件通过内网通信。其次, 组件的短裤最好不要用默认的, 会有被通过端口入侵的风险
服务器扫描:定期做服务器文件扫描、木马查杀、监测异常登录、恶意请求、网络防御等