Ubuntu安装jdk、上传jar包、运行java、配置域名、nginx接口映射、配置https域名
安装jdk
查看系统:
cat /etc/os-release
我的是ubuntu系统,安装jdk:
# 更新包索引
sudo apt update# 安装OpenJDK 21
sudo apt install -y openjdk-21-jdk# 验证安装
java -version
javac -version
如果系统仓库中没有 JDK 21,可手动安装:
# 创建安装目录
sudo mkdir -p /usr/local/java# 下载JDK 21 (请替换为最新的JDK 21下载链接)
wget https://download.oracle.com/java/21/latest/jdk-21_linux-x64_bin.tar.gz -O jdk-21.tar.gz# 解压到安装目录
sudo tar -zxvf jdk-21.tar.gz -C /usr/local/java/# 配置环境变量
echo 'export JAVA_HOME=/usr/local/java/jdk-21.0.1' >> ~/.bashrc
echo 'export PATH=$JAVA_HOME/bin:$PATH' >> ~/.bashrc
source ~/.bashrc# 验证安装
java -version
安装完成后,java -version
命令会显示类似以下内容,表明安装成功:
openjdk version "21.0.1" 2023-10-17
OpenJDK Runtime Environment (build 21.0.1+12-29)
OpenJDK 64-Bit Server VM (build 21.0.1+12-29, mixed mode, sharing)
安装过程中若出现:ubuntu系统安装openjdk21中提示which services should be restarted
直接回车即可。
上传jar/war
由于我是通过ssh连接的ecs服务器,war包在我电脑本机,因此我需要在我本机打开终端,命令是:
# 格式:scp 本地WAR包路径 服务器用户名@服务器IP:服务器目标路径
scp /Users/你的用户名/项目路径/target/你的项目.war root@服务器IP:/opt/tomcat/webapps/
示例:
scp /Users/macuser/springboot-project/target/demo.war root@123.123.123.123:/usr/local/tomcat/webapps/
当然,这里的路径你可以自己制定具体放哪里
启动war
# 上传到服务器后,直接执行
java -jar /path/to/你的项目.war
配置域名:
在我们有ecs真实地址、域名的情况下:
要将 HTTPS 域名关联到阿里云 ECS 服务器,需要完成域名解析配置和服务器环境准备两个主要步骤。以下是详细操作流程:
一、在阿里云控制台配置域名解析
-
进入域名解析控制台
- 登录阿里云控制台,进入「云解析 DNS」服务
- 找到你要配置的域名,点击「解析设置」
-
添加解析记录
- 点击「添加记录」按钮
- 记录类型选择「A 记录」(将域名指向 IPv4 地址)
- 主机记录填写
@
(表示主域名,如example.com)或www
(表示 www 子域名) - 记录值填写你的 ECS 服务器公网 IP 地址
- 解析线路选择「默认」,TTL 保持默认值
- 点击「确认」完成添加
遇到问题:
我给ecs服务器配置了域名,我本地ping域名是通的。我往ecs上部了一个javaspringboot项目,端口是8886,已经启动了,有个接口地址是/getStr,我使用 域名:8886/getStr 请求不到接口
解决:
最可能:端口 8886 未开放(安全组 / 防火墙拦截)
1. 检查阿里云安全组是否开放 8886 端口
这是最常见的原因!阿里云安全组默认只开放 22(SSH)等少数端口,8886 需手动添加规则:
- 登录阿里云 ECS 控制台 → 找到目标实例 → 右侧 “安全组” → 点击安全组 ID → 入方向规则 → 查看是否有
8886
端口的允许规则。 - 若没有,点击 “添加规则”:
- 规则方向:入方向
- 协议类型:TCP
- 端口范围:
8886/8886
- 授权对象:
0.0.0.0/0
(允许所有 IP 访问,生产环境可限制来源) - 优先级:默认即可
- 保存规则后,等待 1-2 分钟生效。
2. 检查服务器内部防火墙是否开放 8886 端口
即使安全组开放,服务器本地防火墙(如 Ubuntu 的ufw
、CentOS 的firewalld
)也可能拦截:
- Ubuntu 系统:
# 查看已开放端口 sudo ufw status # 若8886未开放,添加规则 sudo ufw allow 8886/tcp sudo ufw reload
- CentOS 系统:
# 查看已开放端口 sudo firewall-cmd --list-ports # 若8886未开放,添加规则 sudo firewall-cmd --add-port=8886/tcp --permanent sudo firewall-cmd --reload
我的是因为阿里云没有开通8886的端口。开通:
要在阿里云上开通 ECS 服务器的 8886 端口,需要通过安全组配置来实现(这是阿里云层面的网络访问控制,必须设置),具体步骤如下:
步骤 1:登录阿里云 ECS 控制台
- 打开浏览器,访问 阿里云控制台 并登录你的账号。
- 在左侧导航栏中,找到并点击 “实例”,进入 ECS 实例列表页面。
步骤 2:找到目标实例并进入安全组配置
- 在实例列表中,找到你部署项目的 ECS 实例,点击实例名称进入该实例的详情页。
- 在实例详情页的左侧导航栏中,点击 “安全组”(通常在 “网络与安全” 分类下)。
- 页面会显示该实例已绑定的安全组,点击安全组的 ID(如 “sg-xxxxxxxxxxxxxxxxx”)进入安全组配置页面。
步骤 3:添加 8886 端口的入方向规则
- 在安全组配置页面,切换到 “入方向” 标签页(入方向控制外部访问服务器的规则)。
- 点击右上角的 “手动添加” 按钮,弹出规则配置窗口。
- 按以下参数填写规则(关键配置):
- 规则方向:保持 “入方向”(默认)。
- 授权策略:选择 “允许”(允许外部访问该端口)。
- 协议类型:选择 “TCP”(Java 项目通常使用 TCP 协议)。
- 端口范围:填写
8886/8886
(表示仅开放 8886 端口)。 - 授权对象:
- 若需要允许所有人访问(测试阶段),填写
0.0.0.0/0
(表示所有 IPv4 地址)。 - 若仅允许特定 IP 访问(生产环境),填写具体 IP 或网段(如你的本地公网 IP:
123.123.123.123/32
)。
- 若需要允许所有人访问(测试阶段),填写
- 优先级:默认 1(数值越小优先级越高,无需修改)。
- 描述:可选,填写 “允许访问 Spring Boot 项目 8886 端口” 方便后续识别。
- 填写完成后,点击 “确定” 保存规则。
步骤 4:验证规则是否生效
- 回到安全组 “入方向” 规则列表,确认新添加的 8886 端口规则已显示在列表中(状态为 “已生效”)。
- 等待 1-2 分钟(规则可能有延迟),然后在本地测试访问:
- 用浏览器访问
http://你的域名:8886/getStr
- 或在本地终端用
curl http://你的域名:8886/getStr
测试
- 用浏览器访问
安装nginx:
步骤 1:更新软件包列表
首先,确保系统的软件包列表是最新的,打开终端执行以下命令:
sudo apt update
(输入你的用户密码,终端输入密码时不会显示字符,输完按回车即可)
步骤 2:安装 Nginx
执行以下命令安装 Nginx:
sudo apt install nginx
安装过程中会提示 “是否继续”,输入 y
并按回车,等待安装完成。
步骤 3:验证 Nginx 是否安装成功
-
检查版本:
nginx -v
若安装成功,会显示类似以下内容(版本号可能因系统而异):
nginx version: nginx/1.18.0 (Ubuntu)
-
检查服务状态:
sudo systemctl status nginx
若显示
active (running)
,说明 Nginx 已成功启动并运行:● nginx.service - A high performance web server and a reverse proxy serverLoaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)Active: active (running) since Thu 2024-07-25 10:00:00 CST; 1min ago
步骤 4:配置防火墙(可选,若需要外网访问)
如果你的 Ubuntu 启用了防火墙(如 ufw
),需要允许 HTTP(80 端口)和 HTTPS(443 端口)流量:
# 允许 HTTP 访问(80端口)
sudo ufw allow 'Nginx HTTP'# 若后续需要 HTTPS,允许 HTTPS 访问(443端口)
sudo ufw allow 'Nginx HTTPS'# 查看防火墙状态,确认规则已生效
sudo ufw status
步骤 5:测试 Nginx 是否可访问
打开浏览器,输入服务器的 IP 地址(或本地测试输入 http://localhost
),若看到以下页面,说明 Nginx 已正常工作:
- 页面标题通常为 “Welcome to nginx!”
- 内容包含 “If you see this page, the nginx web server is successfully installed and working.”
配置nginx
要实现通过域名直接访问你 Java 应用的 8886 端口(即 域名/接口
等价于 域名:8886/接口
),只需通过 Nginx 配置反向代理即可。以下是详细步骤:
步骤 1:创建 Nginx 配置文件
-
打开终端,进入 Nginx 配置目录:
cd /etc/nginx/sites-available/
-
创建一个新的配置文件(例如
java-app
):sudo nano java-app
-
粘贴以下配置内容(根据你的实际情况修改):
server {listen 80; # 监听HTTP默认端口(无需显式输入端口)server_name your-domain.com; # 替换为你的域名(如api.example.com)# 把所有请求转发到Java应用的8886端口location / {proxy_pass http://127.0.0.1:8886; # Java应用的地址和端口proxy_set_header Host $host; # 传递原始域名proxy_set_header X-Real-IP $remote_addr; # 传递客户端真实IPproxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme; # 传递协议(http/https)} }
- 若你的 Java 应用部署在其他服务器,将
127.0.0.1
替换为实际 IP(如192.168.1.100
)。 - 若需要支持 HTTPS(推荐),可后续添加 SSL 配置(需申请 SSL 证书)。
- 若你的 Java 应用部署在其他服务器,将
步骤 2:启用配置文件
-
创建软链接到
sites-enabled
目录(Nginx 会自动加载该目录的配置):sudo ln -s /etc/nginx/sites-available/java-app /etc/nginx/sites-enabled/
-
检查配置是否有语法错误:
sudo nginx -t
- 若显示
nginx: configuration file /etc/nginx/nginx.conf test is successful
则配置正确。
- 若显示
步骤 3:重启 Nginx 使配置生效
sudo systemctl restart nginx
步骤 4:验证配置
- 确保你的 Java 应用已在 8886 端口启动(如 Spring Boot 应用)。
- 打开浏览器或使用
curl
测试:curl http://your-domain.com/你的接口路径 # 无需加:8886
- 若返回 Java 应用的响应,说明映射成功。
补充:常见问题解决
-
访问超时 / 502 错误:
- 检查 Java 应用是否真的在 8886 端口启动:
netstat -tuln | grep 8886
- 确保 Nginx 有权限访问 8886 端口(服务器防火墙是否放行)。
- 检查 Java 应用是否真的在 8886 端口启动:
-
域名无法解析:
- 确认域名已正确解析到服务器 IP(可通过
ping your-domain.com
验证)。
- 确认域名已正确解析到服务器 IP(可通过
-
需要 HTTPS?:
- 申请 SSL 证书(如 Let's Encrypt 免费证书),并在 Nginx 配置中添加 443 端口监听和证书路径:
server {listen 443 ssl;server_name your-domain.com;ssl_certificate /path/to/your/cert.pem; # 证书路径ssl_certificate_key /path/to/your/key.pem; # 私钥路径location / {proxy_pass http://127.0.0.1:8886;# 其他proxy_set_header配置同上} }
- 申请 SSL 证书(如 Let's Encrypt 免费证书),并在 Nginx 配置中添加 443 端口监听和证书路径:
通过以上配置,Nginx 会自动将域名的 80 端口请求转发到 Java 应用的 8886 端口,实现 域名/接口
直接访问,无需手动输入端口号。
配置https:
要将 Ubuntu 服务器上的域名从 HTTP 转为 HTTPS,需要配置 SSL 证书并修改 Nginx 配置。推荐使用 Let's Encrypt 提供的免费 SSL 证书,步骤如下:
步骤 1:安装 Certbot(获取免费 SSL 证书的工具)
Certbot 是 Let's Encrypt 官方推荐的证书管理工具,可自动申请和配置 SSL 证书。
- 安装 Certbot 及 Nginx 插件:
sudo apt update sudo apt install certbot python3-certbot-nginx
步骤 2:申请并配置 SSL 证书
运行以下命令,Certbot 会自动为你的域名申请证书,并修改 Nginx 配置以启用 HTTPS:
sudo certbot --nginx -d your-domain.com # 替换为你的实际域名
过程中需要注意:
- 首次运行会提示输入邮箱(用于证书过期提醒),输入后按回车。
- 同意服务条款(输入
A
并回车)。 - 是否共享邮箱(可选,输入
N
跳过)。 - 选择是否将 HTTP 流量自动重定向到 HTTPS(推荐选择
2
,强制 HTTPS):plaintext
Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1: No redirect - Make no further changes to the webserver configuration. 2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for new sites, or if you're confident your site works on HTTPS. You can undo this change by editing your web server's configuration. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 2
步骤 3:验证 HTTPS 是否生效
- 打开浏览器,访问
https://your-domain.com
(注意是https
)。 - 若地址栏显示小锁图标,说明 HTTPS 配置成功:
- 点击小锁可查看证书信息,确认颁发者为
Let's Encrypt
。
- 点击小锁可查看证书信息,确认颁发者为
步骤 4:确认证书自动续期(重要)
Let's Encrypt 证书有效期为 90 天,Certbot 已默认配置自动续期,可通过以下命令验证:
sudo certbot renew --dry-run # 模拟续期,测试是否正常
若输出 Congratulations, all simulated renewals succeeded.
则表示自动续期配置正常。
补充:手动修改 Nginx 配置(如需自定义)
如果 Certbot 自动配置不符合需求,可手动修改 Nginx 配置文件(以之前的 java-app
配置为例):
-
编辑配置文件:
sudo nano /etc/nginx/sites-available/java-app
-
替换为以下内容(确保证书路径正确):
server {listen 80;server_name your-domain.com;# 强制将 HTTP 重定向到 HTTPSreturn 301 https://$host$request_uri; }server {listen 443 ssl; # 监听 HTTPS 默认端口 443server_name your-domain.com;# SSL 证书路径(Certbot 自动生成,路径可能因系统略有差异)ssl_certificate /etc/letsencrypt/live/your-domain.com/fullchain.pem;ssl_certificate_key /etc/letsencrypt/live/your-domain.com/privkey.pem;# 推荐的 SSL 安全配置(可选但建议添加)ssl_protocols TLSv1.2 TLSv1.3;ssl_prefer_server_ciphers on;ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH";ssl_session_cache shared:SSL:10m;ssl_session_timeout 10m;# 反向代理到 Java 应用的 8886 端口location / {proxy_pass http://127.0.0.1:8886;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 协议} }
-
检查配置并重启 Nginx:
sudo nginx -t # 检查语法 sudo systemctl restart nginx # 重启生效
常见问题解决
-
证书申请失败:
- 确保域名已正确解析到服务器 IP(可通过
ping your-domain.com
验证)。
your-domain.com` 验证)。 - 确保服务器 80 端口未被防火墙封锁(Certbot 需要通过 80 端口验证域名所有权)。
- 确保域名已正确解析到服务器 IP(可通过
-
HTTPS 生效但显示 “不安全”:
- 检查应用中是否有引用 HTTP 资源(如图片、JS),需改为 HTTPS 或相对路径。
通过以上步骤,你的域名会自动从 HTTP 转为 HTTPS,且证书会自动续期,无需手动管理。