背景
很多同学自己写了一个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.打开配置文件
-
在配置文件末尾,按 i 进入编辑模式。
-
注意: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我是没装的,按你项目来)
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。