项目5-博客系统5+程序部署(Linux基本使用)

1.Linux的基本使用

1.1 Linux 是什么

Linux 是⼀个操作系统.
和 Windows 是 "并列" 的关系.

1.2 Unix & Linux 发展历程图

1.1969−1970 年, ⻉尔实验室的 Dennis Ritchie (左) 和 Ken Tompson (右) 开发了 Unix 操作系统.

2. Unix ⽕了之后, 衍⽣出很多的分⽀. 其中有⼀⽀为 "Minix". 由荷兰的Andrew S. Tanenbaum 教授开发. 源代码开放给⼤学教学和研究⼯作. (MINIX 含义为 "⼩型的UNIX")
3. 1991 年, 还在读⼤学的 芬兰⼈ Linus Benedict Torvalds (1969年12⽉28⽇出⽣, 当时 22 岁) 基于Minix 的启发, 开发出了 Linux 的第⼀个版本
经过这么多年的发展, Linux 已经成为 世界第⼀⼤操作系统

1.3 Linux 发⾏版

Linux 严格意义来说只是⼀个 "操作系统内核".
⼀个完整的操作系统 = 操作系统内核 + 配套的应⽤程序.
由于 Linux 是⼀个完全开源免费的内核, 因此有些公司/开源组织⼜基于 Linux 内核, 提供了不同的配套程序. 这就构成了不同的 "发⾏版".
企业中主要使⽤的发⾏版是 RedHat (红帽), CentOS(RedHat的社区免费版本)和ubuntu. 但是 RedHat是收费的, CentorOS官⽅在2020年12⽉份通知: 2021年底停⽌维护CentOS8, 2024年6⽉30⽇停⽌维护CentOS7,后续将⽆法获得官⽅升级和补丁.

1.4 Linux的优势

1. 开源(意味着免费, 便宜)
2. 稳定(Linux 可以运⾏很多年, 都不会发⽣重⼤问题)
3. 安全(Linux 只有管理员或者特定⽤⼾才能访问Linux内核)
4. ⾃由(不会被强加商业产品和服务)
5. 社区⽀持(Linux 在全球社区都⾮常活跃和使⽤⼴泛, 有很多志愿者在线帮⼤家解决问题)

1.5 Linux的基础命令

Linux 虽然也有图形化界⾯, 但是在 服务器 / 嵌⼊式设备上往往都是通过命令⾏的⽅式操作的.因此学习 Linux 命令就是使⽤ Linux 的重要基础
使⽤命令相⽐于使⽤图形界⾯主要有以下好处:
节省系统资源: 运⾏图形界⾯需要让系统付出⼀些额外的资源开销. 尤其是对于配置⽐较低的嵌⼊式设备, 这⼀点⾄关重要.
节省⽹络带宽: 如果通过⽹络访问服务器, 使⽤图形界⾯需要传输⼀帧⼀帧的图像, ⽽使⽤命令只
需要传输简单的字符串.
便于批量执⾏任务: 可以通过⼀些 "脚本" 代码 (⽐如 Linux Shell) 来批量执⾏⼀些任务, 完成⼀些简单的编程⼯作. (⽐如定时备份⽂件, 删除⽂件等).

 Windows 也有命令(也就是 cmd), 只是对于普通⽤⼾来说很少使⽤.

系统编程 & ⽹络编程
Linux ⾃⾝提供了⼀些 API, 供程序猿调⽤来完成⼀些更复杂的编程任务(⽐如⽂件操作, 多线程编程,socket 编程等).
但是由于 Java 跨平台的特性, 这部分功能已经被 Java ⾃⾝封装好了 (流对象, Thread 对象, Socket 对象等). 所以这部分内容不必再学习了.
部署 JavaWeb 项⽬
我们⾃⼰写的 web 程序, 要想让其他的⽤⼾能够访问, 就需要发布到服务器上

所以, 对于 Java 程序员来说, 关于 Linux 重点学习 基础命令 和 项⽬部署 即可 

2. Linux 环境搭建

要想学习 Linux , 需要先有⼀个 Linux 的环境.

2.1 环境搭建⽅式

主要有四种:
1. 直接安装在物理机上. 但是Linux 桌⾯使⽤起来⾮常不友好. 所以不建议. 
2. 使⽤虚拟机软件, 将 Linux 搭建在虚拟机上. 但是由于当前的虚拟机软件(如 VMWare 之类的)存在⼀些 bug , 会导致环境上出现各种莫名其妙的问题, ⽐较折腾. 
3. 使⽤ WSL (Windows Subsystem for Linux). 这个是 Windows 近⼏年开发的新功能, 在 Windows
系统内集成了⼀个 Linux. 但是⽬前这个技术还不够成熟.
4. 使⽤云服务器, 可以直接在 腾讯云, 阿⾥云或华为云 等服务器⼚商处直接购买⼀个云服务器. 

使⽤云服务器不仅环境搭建简单, 避免折腾, 同时还有⼀个最⼤的好处, 部署在云服务器上的项⽬可以直接被外⽹访问到, 这个时候就和⼀个公司发布⼀个正式的⽹站没有任何区别. 也就能让我们⾃⼰写的程序真的去给别⼈去使⽤

2.2 使⽤云服务器 

2.3 使⽤终端软件连接到 Linux

2.3.1 终端软件

终端软件是⼀类⼯具软件, 可以和远程的主机建⽴⽹络连接, 从⽽对主机进⾏⼀些操作.
常⻅的终端软件:
• XShell
Putty
MobaXTerm
Iterm2
SecureCRT
......

3. Linux 常⽤命令

ls

语法: ls [选项] [⽬录或⽂件]
功能:对于⽬录,该命令列出该⽬录下的所有⼦⽬录与⽂件。对于⽂件,将列出⽂件名以及其他信
息。
常⽤选项:
-a 列出⽬录下的所有⽂件,包括以 . 开头的隐含⽂件。
-d 将⽬录象⽂件⼀样显⽰,⽽不是显⽰其下的⽂件。 如:ls ‒d 指定⽬录
-k 以 k 字节的形式表⽰⽂件的⼤⼩。ls ‒alk 指定⽂件
-l 列出⽂件的详细信息。
-r 对⽬录反向排序。
-t 以时间排序。
-R 列出所有⼦⽬录下的⽂件。(递归)

pwd

语法: pwd
功能:显⽰⽤⼾当前所在的⽬录

cd

Linux系统中,磁盘上的⽂件和⽬录被组成⼀棵⽬录树,每个节点都是⽬录或⽂件。
语法: cd ⽬录名
功能: 改变⼯作⽬录。将当前⼯作⽬录改变到指定的⽬录下.
举例:
# 返回上级⽬录
cd ..
# 进⼊⽤⼾家⽬录
cd ~
# 返回最近访问⽬录
cd

认识 Linux ⽬录结构

Linux 是⼀个树形⽬录结构.
⼏个特殊的⽬录:
/ 称为根⽬录
. 称为当前⽬录
.. 称为当前⽬录的上级⽬录
绝对路径 vs 相对路径
形如: /usr/share/tomcat/logs/ 以根⽬录开头的, 称为绝对路径.
形如: ./logs . 或者 .. 开头的, 称为相对路径.
使⽤ tab 键补全
我们敲的所有的 Linux 命令, 都可以使⽤ tab 键来尝试补全, 加快效率.
使⽤ ctrl + c 重新输⼊
如果命令或者⽬录敲错了, 可以 ctrl + c 取消当前的命令.

touch

语法: touch [选项]... ⽂件...
功能: touch命令参数可更改⽂档或⽬录的⽇期时间,包括存取时间和更改时间,或者新建⼀个不存在的⽂件。
举例:

touch test.txt

cat

语法:cat [选项] [⽂件]
功能: 查看⽬标⽂件的内容
常⽤选项:
-n 对输出的所有⾏编号
cat test.txt

mkdir

语法:mkdir [选项] dirname...
功能:在当前⽬录下创建⼀个名为 “dirname”的⽬录
常⽤选项:
-p, --parents 可以是⼀个路径名称。此时若路径中的某些⽬录尚不存在,加上此选项后,系统将⾃动
建⽴好那些尚不存在的⽬录,即⼀次可以建⽴多级⽬录
举例:
# 递归建⽴多个⽬录
mkdir –p test/test1

rm

语法:rm [-f-i-r-v] [dirName/dir]
功能:删除⽂件或⽬录
常⽤选项:
-f 即使⽂件属性为只读(即写保护),亦直接删除
-i 删除前逐⼀询问确认
-r 删除⽬录及其下所有⽂件
举例:

rm test.txt  

重要注意事项:
千万不要运⾏ rm -rf / , 尤其是在公司的⽣产服务器上

cp

语法:cp [选项] 源⽂件或⽬录 ⽬标⽂件或⽬录
功能: 复制⽂件或⽬录
说明: cp指令⽤于复制⽂件或⽬录,如同时指定两个以上的⽂件或⽬录,且最后的⽬的地是⼀个已经存
在的⽬录,则它会把前⾯指定的所有⽂件或⽬录复制到此⽬录中。若同时指定多个⽂件或⽬录,⽽最
后的⽬的地并⾮⼀个已存在的⽬录,则会出现错误信息
常⽤选项:
-f 或 --force 强⾏复制⽂件或⽬录, 不论⽬的⽂件或⽬录是否已经存在
-i 或 --interactive 覆盖⽂件之前先询问⽤⼾
-r递归处理,将指定⽬录下的⽂件与⼦⽬录⼀并处理。若源⽂件或⽬录的形态,不属于⽬录或符号
链接,则⼀律视为普通⽂件处理
-R 或 --recursive递归处理,将指定⽬录下的⽂件及⼦⽬录⼀并处理
举例:
cp test1.txt test2.txt

mv

语法: mv [选项] 源⽂件或⽬录 ⽬标⽂件或⽬录
功能:
1. 视mv命令中第⼆个参数类型的不同(是⽬标⽂件还是⽬标⽬录),mv命令将⽂件重命名或将其移
⾄⼀个新的⽬录中。
2. 当第⼆个参数类型是⽂件时,mv命令完成⽂件重命名,此时,源⽂件只能有⼀个(也可以是源⽬
录名),它将所给的源⽂件或⽬录重命名为给定的⽬标⽂件名。
3. 当第⼆个参数是已存在的⽬录名称时,源⽂件或⽬录参数可以有多个,mv命令将各参数指定的源
⽂件均移⾄⽬标⽬录中。
常⽤选项
-f :force 强制的意思,如果⽬标⽂件已经存在,不会询问⽽直接覆盖
-i :若⽬标⽂件 (destination) 已经存在时,就会询问是否覆盖!
举例
mv test1.txt test2.txt

tail

语法: tail [必要参数] [选择参数] [⽂件]
功能:⽤于显⽰指定⽂件末尾内容,不指定⽂件时,作为输⼊信息进⾏处理。常⽤查看⽇志⽂件。
选项:
-f 循环读取
-n<⾏数> 显⽰⾏数
举例:
tail -10 t1.txt

vim

vim 是⼀个知名的⽂本编辑器. 使⽤ vim 可以进⾏⽂本编辑了.
vim 就相当于 Windows 的记事本. 只不过功能⽐记事本强⼤⼀些.
1) 创建⽂件 / 打开⽂件
vim [ ⽂件名 ]
2) 进⼊插⼊模式
vim 打开⽂件后默认是普通模式. 普通模式下键盘的按键表⽰⼀些特殊功能的快捷键. (例如按下 j 并不
是输⼊字⺟ "j", ⽽是表⽰光标往下移动⼀⾏). 需要进⼊插⼊模式才能进⾏⽂本编辑.
使⽤ i 键可以进⼊到插⼊模式. (左下⻆提⽰ --INSERT-- ) 然后就可以像记事本⼀样正常编辑了.
3) 保存
在插⼊模式下不能保存⽂件, 需要先回到 普通模式 . 按下 Esc 回到普通模式.
在普通模式下输⼊ :w , 再按下回⻋, 即可保存⽂件.
4) 退出
在插⼊模式下不能退出, 需要先回到 普通模式.
退出时, 分以下情况:
① ⽂件未修改: 输⼊ :q , 再按下回⻋, 即可退出
② ⽂件修改并保存: 使⽤ :wq 同时执⾏保存和退出.
③ ⽂件修改, 但不希望保存: 使⽤ :wq! 进⾏强制退出
grep
语法:grep [参数]... [⽂件]...
功能:⽤于查找⽂件中是否包含指定字符串, 并显⽰对应的⾏.
选项:
-n<⾏数> 显⽰的⾏数
-w 全字匹配. 要求整个单词都完全相同的结果才能匹配出来, ⽽不仅仅是⼀个单词的⼀部分.
-r 递归查找. 可以搜索多级⽬录下的所有⽂件.
--color ⾼亮查找到的结果
--include 指定查找某些⽂件
--exclude 指定排除某些⽂件
举例:
grep "hello" Hello.java

 ps

语法:ps [参数]...
功能:⽤于查看当前系统上运⾏的进程
选项:
a 显⽰⼀个终端的所有进程
u 以⽤⼾为主的格式来显⽰程序状况
x 显⽰所有程序, 不⽌是会话中的进程
e 显⽰所有进程, 包括系统守护进程
f 显⽰完整格式输出
举例:
ps aux # 显⽰系统上所有的进程
ps aux | grep " 进程名 "
ps aux | grep " 进程 id"

netstat

语法:netstat [参数]...
功能:查看系统上的⽹络状态.
选项:
-a 显⽰所有正在或不在侦听的套接字
-n 显⽰数字形式地址⽽不是去解析主机、端⼝或⽤⼾名
-p 显⽰套接字所属进程的PID和名称
举例:
netstat -anp
netstat -anp | grep " 进程名 "
netstat -anp | grep " 端⼝号 "

管道

管道是⼀种古⽼的 "进程间通信" ⽅式. 在 Linux 指令中可以使⽤ | 作为管道标记.
意思是将前⼀个指令标准输出的内容, 作为第⼆个指令的标准输⼊内容.
举例:
ps -ef|grep "java"
ps -ef|head -10
tail -f log.txt|grep "Exception"

4. 搭建 Java 部署环境

4.1 apt

apt(Advanced Packaging Tool), Linux软件包管理⼯具. ⽤于在Ubuntu、Debian和相关Linux发⾏版
上安装、更新、删除和管理deb软件包.
⼤多数apt命令必须以具有sudo权限的⽤⼾⾝份运⾏.

4.1.1 apt常⽤命令

列出所有软件包
apt list
这个命令输出所有包的列表, 内容⽐较多, 可以使⽤grep命令过滤输出.
apt list |grep "java"
...
未完

5.部署 Web 项⽬到 Linux

5.1 什么是部署

⼯作中涉及到的 "环境"
开发环境: 开发⼈员写代码⽤的机器.
测试环境: 测试⼈员测试程序使⽤的机器.
⽣产环境(线上环境): 最终项⽬发布时所使⽤的机器. 对稳定性要求很⾼.
把程序安装到⽣产环境上, 这个过程称为 "部署". 也叫 "上线".
⼀旦程序部署成功, 那么这个程序就能被外⽹中千千万万的普通⽤⼾访问到.
换句话说, 如果程序有 BUG, 这个 BUG 也就被千千万万的⽤⼾看到了.
部署过程⾄关重要, 属于程序开发中最重要的⼀环. ⼀旦部署出现问题, 极有可能导致严重的事故(服务器不可⽤之类的).
为了防⽌部署出错, ⼀般公司内部都有⼀些⾃动化部署⼯具(如 Jenkins 等). 当前我们先使⽤⼿⼯部署的⽅式来完成部署.

5.2 环境配置

程序正常运⾏, 需要保证环境和程序都要正确, 我们需要先设置环境

数据准备

按照之前的数据库建表脚本, 在服务器上运⾏, 建⽴相同的表结构.
进入数据库

mysql -root -p

建库
-- 建表SQL
create database if not exists java_blog_spring charset utf8mb4;
USE java_blog_spring;
-- 用户表
DROP TABLE IF EXISTS java_blog_spring.user;
CREATE TABLE java_blog_spring.user(
 `id` INT NOT NULL AUTO_INCREMENT,
 `user_name` VARCHAR ( 128 ) NOT NULL,
 `password` VARCHAR ( 128 ) NOT NULL,
 `github_url` VARCHAR ( 128 ) NULL,
 `delete_flag` TINYINT ( 4 ) NULL DEFAULT 0,
 `create_time` DATETIME DEFAULT now(),
 `update_time` DATETIME DEFAULT now(),
 PRIMARY KEY ( id ),
UNIQUE INDEX user_name_UNIQUE ( user_name ASC )) ENGINE = INNODB DEFAULT
CHARACTER
SET = utf8mb4 COMMENT = '用户表';
-- 博客表
drop table if exists java_blog_spring.blog;
CREATE TABLE java_blog_spring.blog (
 `id` INT NOT NULL AUTO_INCREMENT,
 `title` VARCHAR(200) NULL,
 `content` TEXT NULL,
 `user_id` INT(11) NULL,
 `delete_flag` TINYINT(4) NULL DEFAULT 0,
 `create_time` DATETIME DEFAULT now(),
 `update_time` DATETIME DEFAULT now(),
 PRIMARY KEY (id))
ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COMMENT = '博客表';
-- 新增用户信息
insert into java_blog_spring.user (user_name, password,github_url)values
("lay","107","https://www.weibo.com/u/2706896955?c=spr_qdhz_bd_360ss_weibo_mr");
insert into java_blog_spring.user (user_name, password,github_url)
values("muyierf","123456","https://gitee.com/muyierf");
insert into java_blog_spring.blog (title,content,user_id) values("第1篇博
客","lay的筑梦之旅",1);
insert into java_blog_spring.blog (title,content,user_id) values("第1篇博
客","muyierf的第一篇博客",2);

出现问题:Invalid default value for ‘create_time‘

通过搜索,发现是因为MySQL版本低

选择了删除升级版本的做法

Centos7下彻底删除Mysql, 重新安装Mysql_centos7删除mysql重新安装-CSDN博客

Centos7完全卸载MySQL & 安装 & 启动_centos7卸载mysql重新安装-CSDN博客

程序配置⽂件修改

实际⼯作中, 开发环境, 测试环境以及⽣产环境的配置都是不⼀样的
⽐如mysql的⽤⼾名和密码
我们可以针对不同的环境, 设置不同的配置

多平台⽂件配置

针对不同平台创建不同的配置⽂件, 要求名字为application-XXX.yml或者application-XXX.properties
以下以application-XXX.yml为例
固定格式, 只有后⾯的字⺟可以修改
在配置⽂件⾥写不同的内容
application-dev.yml

application-prod.yml

 在主配置⽂件 application.yml 中指定配置⽂件, 并删除数据库相关配置

5.3 构建项⽬并打包

在本地使⽤maven进⾏打包
1. 如果Test代码中有与环境配置相关的操作(⽐如数据库相关的操作), 打包会失败, 点击下图①处的图标, 可以跳过测试
2. 点击clean->package

5.3 上传Jar包到服务器, 并运⾏

1. 上传Jar包

直接拖动打好的jar包到xshell窗⼝即可完成⽂件的上传

 java -jar demo-0.0.1-SNAPSHOT.jar

端口被占有了 

看服务器端口有没有开放

1.先看本机的应用是否启动成功

curl http://127.0.0.1:9090/blog_login.html

开放的话就可以获取页面内容

 有该页面就启动成功!!!

(排除服务已启动)

2.端口号的的问题

阿里云服务器开放端口的正确方式(超详细图文教程)_阿里云开放端口-CSDN博客

无法通过公网访问阿里云服务器下的tomcat部署的项目_为什么通过公网ip访问不了tomcat-CSDN博客 ps -ef|grep java 查看进程
kill -9杀死进程

部署成功!!!

重新测试,发现css加载不出来,重新clean解决问题。

经过测试,发现添加博客接口有问题,执行一次添加一篇博客操作,却添加了两条信息。

经检查接口/add有错误,执行了两次语句

  • 11
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要将Spring Boot + Vue项目部署Linux上,您可以按照以下步骤进行操作: 1. 首先,确保您已经在Linux服务器上安装了Java运行环境(JRE)和Node.js。您可以使用以下命令来验证它们是否已安装: ```shell java -version node -v ``` 如果命令返回版本信息,则说明已成功安装。 2. 将您的Spring Boot后端应用程序打包成可执行的JAR文件。您可以使用Maven或Gradle进行构建。在项目根目录下运行以下命令: ```shell mvn clean package ``` 或 ```shell gradle clean build ``` 这将生成一个可执行的JAR文件。 3. 接下来,将Vue前端应用程序打包成静态文件。在Vue项目根目录下运行以下命令: ```shell npm run build ``` 这将生成一个dist目录,其中包含了打包后的静态文件。 4. 将生成的JAR文件和dist目录复制到Linux服务器上。您可以使用FTP工具或SCP命令进行复制。 ```shell scp /path/to/your-app.jar user@your-server-ip:/path/on/server/ scp -r /path/to/dist user@your-server-ip:/path/on/server/ ``` 5. 连接到Linux服务器,并在目标部署目录下创建一个新目录,用于存放您的应用程序文件。 ```shell ssh user@your-server-ip mkdir /path/on/server/your-app ``` 6. 将JAR文件重命名为您想要的应用程序名称,并将其复制到目标部署目录。 ```shell mv /path/on/server/your-app.jar /path/on/server/your-app/your-app.jar ``` 7. 配置Linux服务器上的服务管理工具(例如systemd)以管理您的Spring Boot应用程序。创建一个新的服务配置文件,如`your-app.service`,并将以下内容添加到该文件中: ```plaintext [Unit] Description=Your App After=syslog.target [Service] User=your-user ExecStart=/usr/bin/java -jar /path/on/server/your-app/your-app.jar SuccessExitStatus=143 [Install] WantedBy=multi-user.target ``` 将`your-user`替换为您在Linux服务器上的用户名。 8. 将服务配置文件复制到服务目录,并启动您的应用程序服务。 ```shell sudo cp /path/on/server/your-app.service /etc/systemd/system/ sudo systemctl start your-app ``` 9. 现在,您的Spring Boot应用程序已经在Linux服务器上成功部署。通过访问服务器的公共IP或域名,加上您在Vue应用程序中定义的端口号,即可访问您的应用程序。 请注意,上述步骤仅适用于将Spring Boot + Vue项目部署Linux服务器上。实际操作中可能会有所不同,具体取决于您的项目结构和需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值