Linux从零到一部署一个项目(基础命令行)

前言/前置条件

- 需要准备一个服务器 或 一个云服务器

- 对Linux环境有一定的了解

- 会使用Linux基础命令行

我这里使用的是云服务器作为示例服务器进行操作, 你可选择购买一个云服务器, 当然你也可以自己安装一个Linux环境进行操作。

下载安装并不是本文的核心, 这里就不展开了。

本文基于自建服务器举例, 如已购买云服务器的小伙伴, 某些操作云服务商已经帮你完成了, 观看本文是你可选择性观看或跳过

网卡设置

刚安装完Centos时,由于启动服务器时未加载网卡,导致IP地址初始化失败可以用命令 ip addr 查看以下网卡IP地址:
在这里插入图片描述
这里可以看到ens33这个网卡无ip地址,这里需要解决这个问题,解决方法如下:

温馨提示:
这里的 ens33 只是我的网卡名称, 你的有可能叫其他的名字。

键入 cd /etc/sysconfig/network-scripts/ 进入至 network-scripts 目录

在这里插入图片描述

使用命令 vim ifcfg-ens33 编辑其内容将 ONBOOTno 改未 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端口, 其他端口能不暴露就不暴露, 服务器组件通过内网通信。其次, 组件的短裤最好不要用默认的, 会有被通过端口入侵的风险

  • 服务器扫描:定期做服务器文件扫描、木马查杀、监测异常登录、恶意请求、网络防御等

最近更新

  1. TCP协议是安全的吗?

    2024-04-09 13:26:02       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-09 13:26:02       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-09 13:26:02       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-09 13:26:02       20 阅读

热门阅读

  1. gitea详细介绍

    2024-04-09 13:26:02       14 阅读
  2. C# WinForm简介

    2024-04-09 13:26:02       11 阅读
  3. 富格林:可信招数保障交易安全

    2024-04-09 13:26:02       16 阅读
  4. PostgreSQL介绍

    2024-04-09 13:26:02       14 阅读
  5. 【leetcode 5】最长回文子串, Manachers算法

    2024-04-09 13:26:02       18 阅读
  6. MSF-Linux系统攻防

    2024-04-09 13:26:02       13 阅读
  7. Arteris 的noc和arm 的nic-400 有什么区别?

    2024-04-09 13:26:02       9 阅读
  8. arm 的CoreLink 是什么?

    2024-04-09 13:26:02       13 阅读
  9. Linux C++ 024-STL初识

    2024-04-09 13:26:02       9 阅读
  10. 原生js封装请求组件

    2024-04-09 13:26:02       13 阅读
  11. ChatGPT革新学术论文写作:提升写作效率与质量

    2024-04-09 13:26:02       16 阅读
  12. 【算法】最长连续递增序列 - 贪心算法

    2024-04-09 13:26:02       13 阅读
  13. 渗透测试概述

    2024-04-09 13:26:02       13 阅读