从零搭建自己的javaweb网站,Javaweb网站项目打包jar后上传到Linux操作系统的阿里云服务器,公网成功访问,全流程,流程精简,小白秒懂

背景

很多同学自己写了一个javaweb,能在本地跑了,但是还想用公网访问自己的javaweb,写完一个项目99%进度,就差1%最后一步部署网站了,这篇文章教你如何快速地将javaweb部署到云服务器,笔者亲手总结,码字不易,先赞后看,蟹蟹~!

材料

1、1个基于springboot的javaweb打包后的jar文件(建议在本地开发环境中测试好再打包)

2、1个阿里云账号

3、1个阿里云域名(有一些项目需要备案才能访问域名,只想项目能公有访问到的话可以只用ip访问,但是存在风险)

4、1个阿里云服务器

5、1个ftp工具如FileZilla(将本地文件上传到远程服务器中,也可以用ssh命令直接传输可能很慢)

目录

1 账号注册

1.1 注册一个阿里云账号

注册阿里云账号我省略了哈,自己上阿里云官网注册就行

1.2 购买一个域名

买便宜的就行,自己选

1.3 购买一个云服务器

也是买最便宜的就行,镜像选默认,操作系统默认推荐

1.4 进入云服务器信息页

1.4.1 添加服务器安全组

这里相当于配置外部防火墙,需要放行SSH协议的22端口、mysql的3306端口、HTTP协议的80端口、HTTPS协议的443端口和Tomcat默认使用的8080端口。因为3306默认mysql运行端口,8080是javaweb的默认启动web服务器端口(如果自己项目中指向了某个端口,就设置对应自己项目中的端口)

1.4.2 workbench连接远程linux服务器实例

按照指引来进,可以用密钥进,也可以ssh进,要记住自己的账号密码哈。进去之后就会是一个linux命令框操作界面

2 远程服务器环境配置

2.1 下载jdk17

 (根据自己javaweb项目的jdk环境来)

1、执行以下命令,创建JDK安装目录。

mkdir /usr/jdk

2、执行以下命令,下载JDK安装包。

cd /usr/jdk
wget https://download.oracle.com/java/17/latest/jdk-17_linux-x64_bin.tar.gz

3、执行以下命令,将 JDK 源码包解压到指定位置。

tar xzf jdk-17_linux-x64_bin.tar.gz -C /usr/jdk/

4、配置环境变量。

a.执行以下命令,查看JDK安装后文件的路径。

find /usr/jdk -name 'jdk-17.*'

回显信息如下

/usr/jdk/jdk-17.0.8

b.打开配置文件

  1. 在配置文件末尾,按 i 进入编辑模式。

  2. 注意:JAVA_HOME值需替换为实际JDK安装的路径。本示例JDK安装路径为/usr/jdk/jdk-17.0.8。

c.添加以下信息

#set java environment
export JAVA_HOME=/usr/jdk/jdk-17.0.7
export CLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib
export PATH=$JAVA_HOME/bin:$PATH

d.按下Esc键,输入:wq并回车以保存并关闭文件。

e.立即生效环境变量。

source /etc/profile

 5、查看jdk版本

java -version

示例如下

[root@iZuspq7vnxm**** ~]# java -version
java version "17.0.8" 2023-04-18 LTS
Java(TM) SE Runtime Environment (build 17.0.7+8-LTS-224)
Java HotSpot(TM) 64-Bit Server VM (build 17.0.7+8-LTS-224, mixed mode, sharing)

2.2 安装tomcat8

(我这里因为springboot内置了tomcat我是没装的,按你项目来)

附上官方安装连接https://help.aliyun.com/zh/ecs/use-cases/manually-deploy-a-java-web-environment-on-an-instance-that-runs-alibaba-cloud-linux-2?spm=a2c4g.11186623.0.0.46b6574ay9bJIr

2.3 安装mysql5.7

根据自己javaweb项目的mysql版本来

在阿里云服务器上安装 MySQL 5.7 的步骤如下。这个例子基于 CentOS/Red Hat 系统。对于其他 Linux 发行版,请适当调整命令。

1. **更新软件包列表:**

   ```bash
   sudo yum update
   ```

2. **下载 MySQL 5.7 的 Yum Repository 配置:**

   ```bash
 sudo rpm -Uvh https://repo.mysql.com/mysql57-community-release-el7.rpm

   ```

   如果你遇到问题,可以访问 [MySQL Yum Repository](https://dev.mysql.com/downloads/repo/yum/) 页面,手动下载 RPM 包并安装。

3. **安装 MySQL 5.7 服务器:**

   ```bash
  sudo yum install mysql-community-server

   ```

4. **启动 MySQL 服务:**

   ```bash
   sudo service mysqld start
   ```

5. **查看 MySQL 临时密码:**

   安装完成后,系统会生成一个临时密码。使用以下命令查看:

   ```bash
   sudo grep 'temporary password' /var/log/mysqld.log
   ```

   记下这个密码,稍后会用到。

6. **安全设置:**

   执行 MySQL 安全设置脚本:

   ```bash
   sudo mysql_secure_installation
   ```

   在安全设置脚本中,你需要输入刚才查看到的临时密码,然后按照提示进行安全设置,包括更改 root 密码、删除匿名用户、禁用远程 root 登录等。

7. **登录 MySQL:**

   使用新设置的 root 密码登录 MySQL:

   ```bash
   mysql -u root -p
   ```

   输入密码后,你应该能够成功登录到 MySQL。

8. **创建数据库和用户:**

   在 MySQL 中,可以使用以下命令创建数据库和用户。这里创建了一个名为 `senbao` 的数据库,你可以根据需要修改。

   ```sql
   CREATE DATABASE senbao;
   CREATE USER 'your_username'@'localhost' IDENTIFIED BY 'your_password';
   GRANT ALL PRIVILEGES ON senbao.* TO 'your_username'@'localhost';
   FLUSH PRIVILEGES;
   ```

   请替换 `'your_username'` 和 `'your_password'` 为实际的用户名和密码。

9. **退出 MySQL:**

   ```sql
   EXIT;
   ```

以上步骤完成后,你应该已经成功安装 MySQL 5.7 并创建了一个用于应用连接的数据库和用户。确保在你的 Spring Boot 项目中使用正确的连接字符串、用户名和密码。

3 项目打包部署

3.1 在idea中通过maven进行打包

打包成jar文件,这里先可以搜索其它博主的文章,后续我再补齐。

3.2 上传jar包到服务器

3.1.1 使用ftp工具(推荐)

用FileZilla,在FileZilla官方下载,直接ssh可视化远程连接服务器,并上传打包的jar程序包,上传到的目录自己选吧

3.1.2 使用scp(前提你得有这个命令包)

使用 SCP 命令(Secure Copy Protocol) 在本地命令行中执行以下命令,将 JAR 文件通过 SCP 上传到服务器:

bash
Copy code
scp /path/to/your-app.jar username@your_server_ip:/path/on/server/
/path/to/your-app.jar: 本地 JAR 文件的路径。
username: 你的服务器用户名。
your_server_ip: 你的服务器 IP 地址。
/path/on/server/: 服务器上的目标路径。

3.3 启动项目,运行jar

3.3.1 临时启动运行(当前会话窗口有效)

要项目程序直接在当前连接会话窗口运行,直接进入jar包所在目录,命令框输入

java -jar your-app.jar包名
3.3.2 持久化运行(后台运行)
nohup java -jar your-app.jar &,

也可以自己写个脚本,或者系统服务管理工具systemd 来管理 Spring Boot 应用的服务

4 浏览器访问

将javaweb的jar包打包上服务器并运行了,但是要显示8080端口才能访问,如何我想不显示就能访问这个页面呢??

因为浏览器默认用的端口是80,你可以用nginx或者apache做一个反向代理,将80端口转发到8080,你就可以直接用公网ip访问到8080端口应用了。

 在 Linux 系统上使用反向代理,您可以选择使用 Nginx 或 Apache 等 Web 服务器来配置。下面分别介绍在 Nginx 和 Apache 中如何配置反向代理。

4.1 nginx配置

nginx:

在完成配置后,访问 `http://your-domain.com` 将通过反向代理转发到您的 Spring Boot 应用程序。


在Linux系统上使用Nginx作为反向代理服务器,可以通过以下步骤进行配置:

1. **安装 Nginx:**

   使用包管理工具安装Nginx。例如,在基于Debian/Ubuntu的系统上,可以运行以下命令:

   ```bash
   sudo apt-get update
   sudo apt-get install nginx
   ```

   在基于RHEL/CentOS的系统上,可以使用`yum`:

   ```bash
   sudo yum install epel-release
   sudo yum install nginx
   ```

2. **配置反向代理:**

   打开Nginx的配置文件,通常是`/etc/nginx/nginx.conf`或`/etc/nginx/sites-available/default`,然后添加以下配置:

   ```nginx
   server {
       listen 80;
       server_name your_domain.com;

       location / {
           proxy_pass http://localhost:8080;  # 将端口号替换为您的Java Web应用程序实际端口
           proxy_set_header Host $host;
           proxy_set_header X-Real-IP $remote_addr;
           proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
           proxy_set_header X-Forwarded-Proto $scheme;
       }

       # 可选:如果您的应用程序支持HTTPS,您可以添加以下配置以启用SSL
       # listen 443 ssl;
       # ssl_certificate /path/to/your/certificate.pem;
       # ssl_certificate_key /path/to/your/private/key.pem;
       # ssl_protocols TLSv1.2 TLSv1.3;
       # ssl_ciphers 'TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384';
       # ssl_prefer_server_ciphers off;
   }
   ```

   请注意替换`your_domain.com`为您的域名,以及将`http://localhost:8080`替换为您Java Web应用程序实际的主机和端口。

3. **重启 Nginx:**

   配置完成后,保存文件并重启Nginx,使更改生效:

   ```bash
   sudo service nginx restart
   ```

   或者使用 `systemctl`:

   ```bash
   sudo systemctl restart nginx
   ```

   通过这个配置,Nginx将监听80端口,并将请求代理到您Java Web应用程序运行的端口。您可以通过访问 `http://your_domain.com` 来访问您的应用程序。如果您启用了SSL,可以通过 `https://your_domain.com` 访问。确保防火墙允许流量通过所选择的端口。

您可以使用文本编辑器来打开Nginx的配置文件。在Linux系统中,常见的文本编辑器包括`nano`、`vim`、`emacs`等。以下是使用`nano`和`vim`两个编辑器的示例:

### 使用 nano 编辑器:

```bash
sudo nano /etc/nginx/nginx.conf
```

或者,如果您要编辑特定站点的配置文件,可以使用:

```bash
sudo nano /etc/nginx/sites-available/default
```

在编辑器中,找到合适的位置,添加或修改您的配置。完成后,按 `Ctrl + X`,然后按 `Y` 确认保存,最后按 `Enter` 退出。

### 使用 vim 编辑器:

```bash
sudo vim /etc/nginx/nginx.conf
```

或者,如果您要编辑特定站点的配置文件,可以使用:

```bash
sudo vim /etc/nginx/sites-available/default
```

按 `i` 进入插入模式,编辑文件。完成后,按 `Esc` 退出插入模式,然后输入 `:wq` 并按 `Enter` 保存并退出。

请注意,`vim` 是一个强大的文本编辑器,但对于初学者可能会有一些学习曲线。如果您不熟悉 `vim`,使用 `nano` 是一个更简单的选择。

完成编辑并保存后,确保重启 Nginx 以使更改生效:

```bash
sudo service nginx restart
```

或者使用 `systemctl`:

```bash
sudo systemctl restart nginx

```

sudo systemctl reload nginx刷新


4.2 apache配置

apache:

### 使用 Apache 配置反向代理

1. **安装 Apache:**
   ```bash
   sudo apt-get update
   sudo apt-get install apache2
   ```

2. **启用 Apache 代理模块:**
   ```bash
   sudo a2enmod proxy
   sudo a2enmod proxy_http
   ```

3. **编辑 Apache 配置文件:**
   ```bash
   sudo nano /etc/apache2/sites-available/000-default.conf
   ```
   或者使用其他编辑器。

4. **在配置文件中添加反向代理配置:**
   在 `<VirtualHost>` 块中添加以下配置,将请求转发到您的 Spring Boot 应用程序运行的地址和端口:

   ```apache
   <VirtualHost *:80>
       ServerName your-domain.com  # 替换为您的域名

       ProxyPass / http://localhost:8080/  # 替换为实际运行的地址和端口
       ProxyPassReverse / http://localhost:8080/

       # 添加其他配置,例如 SSL 配置等(可选)
   </VirtualHost>
   ```

5. **保存并关闭文件。**

6. **测试 Apache 配置:**
   ```bash
   sudo apache2ctl configtest
   ```

   确保没有报错。

7. **重启 Apache 服务:**
   ```bash
   sudo service apache2 restart
   ```


确保将上述配置中的 `your-domain.com` 替换为您的实际域名(或者公网ip),而 `http://localhost:8080` 替换为您的 Spring Boot 应用程序实际运行的地址和端口。

5 更新代码包,重启进程

重启更新了代码包,但是原来jar占用了原来的8080端口,这时候要终止8080端口进程再去重启新的资源包

终止进程:

通过以下方式检查应用程序的运行状态:

```bash
ps -ef | grep java
```

这将列出所有Java进程,您应该能够找到您的应用程序。如果您在运行中看到了相关的Java进程,则表示应用程序正在正常运行。

如果您想停止应用程序,可以使用 `kill` 命令。首先,查找进程ID(PID):

```bash
ps -ef | grep java
```

然后,使用 `kill` 命令终止进程。假设PID是64509:

```bash
kill 64509
```

请确保替换实际的PID。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/592034.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Conda】解决无名虚拟环境问题

文章目录 问题描述&#xff1a;无名虚拟环境解决步骤1 添加虚拟环境目录到envs步骤2 成功命名 问题描述&#xff1a;无名虚拟环境 如果不指定创建目录&#xff0c;默认创建在C盘用户目录下&#xff0c;这应该是很多人不愿意的吧。 指定目录创建虚拟环境命令如下&#xff1a; …

vector的使用

1.构造函数 void test_vector1() {vector<int> v; //无参的构造函数vector<int> v2(10, 0);//n个value构造&#xff0c;初始化为10个0vector<int> v3(v2.begin(), v2.end());//迭代器区间初始化,可以用其他容器的区间初始化vector<int> v4(v3); //拷贝…

基于yolov8的苹果腐败检测系统,系统既支持图像检测,也支持视频和摄像实时检测(pytorch框架)【python源码+UI界面+功能源码详解】

更多目标检测和图像分类识别项目可看我主页其他文章 功能演示&#xff1a; 基于yolov8的苹果腐败检测系统&#xff0c;系统既支持图像检测&#xff0c;也支持视频和摄像实时检测_哔哩哔哩_bilibili &#xff08;一&#xff09;简介 基于yolov8的苹果腐败检测系统是在pytorc…

STM32 F103C8T6学习笔记17:类IIC通信(SMBus协议)—MLX90614红外非接触温度计

今日学习配置MLX90614红外非接触温度计 与 STM32 F103C8T6 单片机的通信 文章提供测试代码讲解、完整工程下载、测试效果图 本文需要用到的大概基础知识&#xff1a;1.3寸OLED配置通信显示、IIC通信、 定时器配置使用 这里就只贴出我的 OLED驱动方面的网址链接了&#xff1a…

Golang数组与切片

文章目录 数组数组介绍数组的定义方式访问与修改数组元素遍历数组元素数组指针 切片切片介绍切片的定义方式访问与修改切片元素添加切片元素切片的拷贝遍历切片元素string的切片 数组 数组介绍 数组介绍 在Go中&#xff0c;数组是一个由固定长度的特定类型元素组成的序列&…

[Algorithm][队列][宽搜BFS][N叉树的层序遍历][二叉树的锯齿形层序遍历][二叉树最大宽度][在每个树行中找最大值]详细讲解

目录 1.N 叉树的层序遍历1.题目链接2.算法思路详解3.代码实现 2.二叉树的锯齿形层序遍历1.题目链接2.算法原理详解3.代码实现 3.二叉树最大宽度1.题目链接2.算法原理详解3.代码实现 4.在每个树行中找最大值1.题目链接2.算法原理详解3.代码实现 1.N 叉树的层序遍历 1.题目链接 …

数据结构之链表深度讲解

小伙伴们&#xff0c;大家好呀&#xff0c;上次听我讲完顺序表想必收获不少吧&#xff0c;嘿嘿&#xff0c;这篇文章你也一样可以学到很多&#xff0c;系好安全带&#xff0c;咱们要发车了。 因为有了上一次顺序表的基础&#xff0c;所以这次我们直接进入正题&#xff0c;温馨…

Activiti7 开发快速入门【2024版】

记录开发最核心的部分&#xff0c;理论结合业务实操减少废话&#xff0c;从未接触工作流快速带入开发。假设你是后端的同学学过JAVA和流程图&#xff0c;则可以继续向后看&#xff0c;否则先把基础课程书准备好先翻翻。 为什么要工作流 比起直接使用状态字段&#xff0c;工作…

【 书生·浦语大模型实战营】作业(六):Lagent AgentLego 智能体应用搭建

【 书生浦语大模型实战营】作业&#xff08;六&#xff09;&#xff1a;Lagent & AgentLego 智能体应用搭建 &#x1f389;AI学习星球推荐&#xff1a; GoAI的学习社区 知识星球是一个致力于提供《机器学习 | 深度学习 | CV | NLP | 大模型 | 多模态 | AIGC 》各个最新AI方…

【机器学习】集成方法---Boosting之AdaBoost

一、Boosting的介绍 1.1 集成学习的概念 1.1.1集成学习的定义 集成学习是一种通过组合多个学习器来完成学习任务的机器学习方法。它通过将多个单一模型&#xff08;也称为“基学习器”或“弱学习器”&#xff09;的输出结果进行集成&#xff0c;以获得比单一模型更好的泛化性…

上海计算机学会2021年1月月赛C++丙组T2康托表

题目背景 康托是一名数学家&#xff0c;他证明了一个重要的定理&#xff0c;需要使用一张表&#xff1a; 这个表的规律是&#xff1a; 从上到下&#xff1a;每一行的分子依次增大&#xff1b;从左到右&#xff1a;每一列的分母依次增大。 康托以一种不重复、不遗漏的方式&am…

【深耕 Python】Quantum Computing 量子计算机(1)图像绘制基础

一、绘制静止图像 使用matplotlib库绘制函数图像y sin(pi * x): import math import matplotlib.pyplot as pltx_min -2.0 x_max 2.0N 1000x1 [] y1 []for i in range(N 1):x x_min (x_max - x_min) * i / Ny math.sin(math.pi * x)x1.append(x)y1.append(y)plt.xl…

关于继承~

继承 动物有猫、狗&#xff0c; 猫又分为加菲猫、布偶猫......&#xff1b;狗又有哈士奇、德国牧羊犬...... 我们发现&#xff0c;下一类除了拥有上一类的共性之外&#xff0c;还拥有自己的特性。 于是我们可以利用继承的方式来减少重复的代码 继承的基本语法 class A:p…

二叉树的直径

题目描述&#xff1a;给你一棵二叉树的根节点&#xff0c;返回该树的 直径 。二叉树的 直径 是指树中任意两个节点之间最长路径的 长度 。这条路径可能经过也可能不经过根节点 root 。两节点之间路径的 长度 由它们之间边数表示。 示例 1&#xff1a; 输入&#xff1a;root […

在剪映专业版中新增字体的方法

我一开始以为剪映专业版没有繁体字&#xff0c;结果发现有一个现代繁体&#xff0c;如图所示: 但是我已经下载了字体了&#xff0c;不用就可惜了。 点击汉仪粗黑繁&#xff0c;安装。 安装之后&#xff0c;重启电脑&#xff0c;打开剪映&#xff0c;就可以搜索到这个字体了。 这…

每日OJ题_贪心算法二④_力扣2418. 按身高排序

目录 力扣2418. 按身高排序 解析代码 力扣2418. 按身高排序 2418. 按身高排序 难度 简单 给你一个字符串数组 names &#xff0c;和一个由 互不相同 的正整数组成的数组 heights 。两个数组的长度均为 n 。 对于每个下标 i&#xff0c;names[i] 和 heights[i] 表示第 i 个…

罗宾斯《管理学》第13版/教材讲解/考研真题视频课程/网课

本课程是罗宾斯《管理学》&#xff08;第13版&#xff09;精讲班&#xff0c;为了帮助参加研究生招生考试指定考研参考书目为罗宾斯《管理学》&#xff08;第13版&#xff09;的考生复习专业课&#xff0c;我们根据教材和名校考研真题的命题规律精心讲解教材章节内容。 序号名…

读天才与算法:人脑与AI的数学思维笔记17_歌曲的创作公式

1. 人为何创作音乐 1.1. 音乐一直具有算法性质&#xff0c;这意味着在所有的艺术形式中&#xff0c;它受到人工智能进步的威胁最大 1.1.1. 音乐也是所有艺术形式中最抽象的一种&#xff0c;它利用结构和模式&#xff0c;而正是这种抽象的性质使它与数学紧密相连 1.1.2. 在这…

查找算法之二分查找

一、算法介绍 二分查找&#xff0c;也称为折半查找&#xff0c;是一种在有序数组中查找特定元素的高效算法。对于包含 n 个元素的有序数组&#xff0c;二分查找的步骤如下&#xff1a; 确定搜索范围&#xff1a;首先&#xff0c;将要查找的元素与数组中间的元素进行比较。如果…

【C++】学习笔记——string_5

文章目录 六、string类7. string类的模拟实现8. string类的模拟实现的完整代码string.h头文件test.c源文件 9. string收尾写时拷贝 未完待续 六、string类 7. string类的模拟实现 我们之前讲了实现 insert &#xff0c;但是那个插入函数仅仅是在 pos 位置插入一个字符而且&am…