从零搭建自己的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。
相关推荐
龙哥说跨境5 分钟前
如何利用指纹浏览器爬虫绕过Cloudflare的防护?
服务器·网络·python·网络爬虫
七星静香13 分钟前
laravel chunkById 分块查询 使用时的问题
java·前端·laravel
Jacob程序员14 分钟前
java导出word文件(手绘)
java·开发语言·word
ZHOUPUYU14 分钟前
IntelliJ IDEA超详细下载安装教程(附安装包)
java·ide·intellij-idea
stewie618 分钟前
在IDEA中使用Git
java·git
Elaine20239133 分钟前
06 网络编程基础
java·网络
G丶AEOM34 分钟前
分布式——BASE理论
java·分布式·八股
落落鱼201335 分钟前
tp接口 入口文件 500 错误原因
java·开发语言
想要打 Acm 的小周同学呀36 分钟前
LRU缓存算法
java·算法·缓存
镰刀出海39 分钟前
Recyclerview缓存原理
java·开发语言·缓存·recyclerview·android面试