【SpringBoot】搭建Java部署环境 && 部署项目到Linux服务器

文章目录

搭建Java部署环境

1. apt

apt(Advanced Packaging Tool)是 Linux 软件包管理工具。用于在 UbuntuDebian 和相关 Linux 发行版上安装、更新、删除和管理软件包。

列出所有软件包:

shell 复制代码
apt list | grep "java"

更新软件包数据库:

shell 复制代码
sudo apt-get update

安装软件包:

shell 复制代码
sudo apt install 包名

移除软件包:

shell 复制代码
sudo apt remove 包名

remove 命令将卸载给定的软件包,但可能会留下一些配置文件。如果要删除包含所有配置文件的软件包,请使用 purge 而不是 remove

apt removeapt purge 的区别

  • apt remove 删除包的二进制文件,它留下了残留的配置文件。
  • apt purge 删除与包相关的所有内容,包括配置文件。

如果弄乱了程序的配置,希望从系统中完全清除它的痕迹再重新开始,可以使用 apt purge

通常使用 apt remove 就足够了。

2. JDK

  1. 更新软件包
shell 复制代码
sudo apt-get update
  1. 安装 openjdk
shell 复制代码
#查找jdk包
apt list |grep "jdk"
#安装jdk
sudo apt install openjdk-17-jdk

使用 java -version 验证是否安装成功。

3. MySQL

  1. 使用 apt 安装 MySQL
shell 复制代码
#查找安装包
apt list |grep "mysql-server"
#安装mysql
sudo apt install mysql-server
  1. 查看 MySQL 状态
Shell 复制代码
sudo systemctl status mysql
  1. MySQL 安装安全设置:默认的 MySQL 设置是不安全的,MySQL 安装提供了一个安全脚本,用于解决不太安全的默认选项。
shell 复制代码
sudo mysql_secure_installation
  1. 设置密码:连接 mysql 服务器
shell 复制代码
sudo mysql
  1. 使用 alter user 命令修改密码
shell 复制代码
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '密码';

卸载MySQL

shell 复制代码
#停止mysql
sudo systemctl stop mysql
#卸载mysql
sudo apt-get remove --purge mysql-server mysql-client mysql-common
#删除 MySQL 配置文件和数据
sudo rm -rf /etc/mysql /var/lib/mysql
#清理残留文件和目录
sudo apt-get autoremove
sudo apt-get autoclean
#验证卸载结果
mysql --version

部署Web项目到Linux

一、什么是部署

工作中涉及到的"环境"

  • 开发环境:开发人员写代码用的机器。
  • 测试环境:测试人员测试程序使用的机器。
  • 生产环境(线上环境):最终项目发布时所使用的机器。对稳定性要求很高。

把程序安装到生产环境上,这个过程称为"部署"。也叫"上线"。

一旦程序部署成功,那么这个程序就能被外网中千千万万的普通用户访问到。

换句话说,如果程序有BUG,这个BUG也就被千千万万的用户看到了。

部署过程至关重要,属于程序开发中最重要的一环。一旦部署出现问题,极有可能导致严重的事故(服务器不可用之类的)。

为了防止部署出错,一般公司内部都有一些自动化部署工具(如Jenkins等)。当前我们先使用手工部署的方式来完成部署。

二、环境配置

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

数据准备

按照之前的数据库建表脚本,在服务器上运行,建立相同的表结构。

程序配置文件修改

实际工作中,开发环境,测试环境以及生产环境的配置都是不一样的,比如 mysql 的用户名和密码,我们可以针对不同的环境,设置不同的配置。

多平台文件配置

针对不同平台创建不同的配置文件,要求名字为 application-XXX.yml 或者 application-XXX.properties

固定格式,只有后面的字母可以修改

在配置文件里写不同的内容

application-dev.yml

yaml 复制代码
spring:
  datasource:
    url: jdbc:mysql://127.0.0.1:3306/java_blog_spring?characterEncoding=utf8&useSSL=false
    username: root
    password: root
    driver-class-name: com.mysql.cj.jdbc.Driver

application-prod.yml

yaml 复制代码
spring:
  datasource:
    url: jdbc:mysql://127.0.0.1:3306/java_blog_spring?characterEncoding=utf8&useSSL=false
    username: root
    password: 123456
    driver-class-name: com.mysql.cj.jdbc.Driver

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

yaml 复制代码
spring:
  profiles:
    active: prod

也可以从 Maven 中自动读取环境配置变量:

xml 复制代码
<profiles>
    <profile>
        <id>dev</id>
        <properties>
            <profile.name>dev</profile.name>
        </properties>
    </profile>
    <profile>
        <id>prod</id>
        <properties>
            <profile.name>prod</profile.name>
        </properties>
    </profile>
</profiles>

<build>
    <resources>
        <resource>
            <directory>src/main/resources</directory>
            <filtering>true</filtering> <!-- 💥💥💥开启占位符替换 -->
        </resource>
    </resources>
</build>

修改主配置文件 application.yml

yaml 复制代码
spring:
  profiles:
    active: @profile.name@

三、构建项目并打包

在本地使用 maven 进行打包

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

四、上传Jar包到服务器,并运行

1. 上传Jar包

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

Xshell 可以直接拖动文件到窗口,达到上传文件的目的,如果使用其他客户端,不支持文件的上传,需要借助 lrzsz 命令。

安装 lrzsz

shell 复制代码
apt-get install lrzsz

2. 运行程序

shell 复制代码
nohup java -jar blog-spring-0.0.1-SNAPSHOT.jar &
  • nohup:后台运行程序。用于在系统后台不挂断地运行命令,退出终端不会影响程序的运行。
  • &:让命令在后台执行,终端退出后命令仍旧执行

3. 开放端口号

如果外网需要访问该服务,需要先服务器防火墙开放对应的端口号

本着服务器安全的原则,云服务器上的端口非必要不开启。

比如常见端口号:数据库3306,Redis6379,尽可能避免开放,而是采用其他方式来连接,比如配置隧道的方式

以腾讯云服务器举例:

1)进入防火墙管理页面

2)添加规则

端口号写需要开放的端口号,多个端口号以逗号分割。

五、验证程序

  1. 访问项目:http://IP:Port/blog_login.html,IP改为云服务器的IP,Port改为项目的端口号。

  2. 按照项目的功能进行验证

  • 验证账户注册登录
  • 验证展示博客列表
  • 验证新增博客
  • 验证展示博客内容
  • ...
相关推荐
saber_andlibert5 分钟前
TCMalloc底层实现
java·前端·网络
wangjialelele9 分钟前
平衡二叉搜索树:AVL树和红黑树
java·c语言·开发语言·数据结构·c++·算法·深度优先
m0_4811473315 分钟前
拦截器跟过滤器的区别?拦截器需要注册吗?过滤器需要注册吗?
java
Coder_Boy_18 分钟前
基于SpringAI的在线考试系统-相关技术栈(分布式场景下事件机制)
java·spring boot·分布式·ddd
独自破碎E19 分钟前
【BISHI15】小红的夹吃棋
android·java·开发语言
冻感糕人~21 分钟前
【珍藏必备】ReAct框架实战指南:从零开始构建AI智能体,让大模型学会思考与行动
java·前端·人工智能·react.js·大模型·就业·大模型学习
啦啦啦_999926 分钟前
Redis实例-2
java
alice--小文子31 分钟前
cursor-mcp工具使用
java·服务器·前端
进阶小白猿31 分钟前
Java技术八股学习Day33
java·开发语言·学习
程序员敲代码吗38 分钟前
如何通过命令行启动COMSOL的参数化、批处理和集群扫描
java·c#·bash