筆者的運(yùn)行環(huán)境:
客戶端:
部署成功過的客戶端的 Java 版本:
- Java 17.0.7
部署成功過的客戶端的 Java 程序:
- Spring Boot 3.1.0
部署成功過的客戶端的 IntelliJ IDEA 版本:
- IntelliJ IDEA 2022.3.1 (Ultimate Edition)
部署成功過的客戶端的 Windows:
- Windows 10 教育版
服務(wù)端:
部署成功過的服務(wù)端的 Java 版本:
- Java 17.0.7
部署成功過的服務(wù)端的 Linux:
- RedHat Enterprise Linux 9 x86_64
遠(yuǎn)程調(diào)試與遠(yuǎn)程部署的區(qū)別
??在 IntelliJ IDEA 中進(jìn)行遠(yuǎn)程調(diào)試與遠(yuǎn)程部署是不同的。
??遠(yuǎn)程調(diào)試指的是事先以其它方法將 Java 應(yīng)用打包并放在遠(yuǎn)程服務(wù)器中,然后以調(diào)試模式運(yùn)行該 Java 應(yīng)用,最后使用本地的 IntelliJ IDEA 進(jìn)行遠(yuǎn)程連接該應(yīng)用。
??遠(yuǎn)程部署指的是直接使用本地的 IntelliJ IDEA 將本地的 Java 應(yīng)用打包、部署到遠(yuǎn)程服務(wù)器,并遠(yuǎn)程運(yùn)行該應(yīng)用。
??可以看出,遠(yuǎn)程部署要比遠(yuǎn)程調(diào)試方便很多。
??關(guān)于在 IntelliJ IDEA 中遠(yuǎn)程調(diào)試 Java 程序,可見筆者的另一篇博客:
??在 IntelliJ IDEA 中遠(yuǎn)程調(diào)試 Java 程序:
https://blog.csdn.net/wangpaiblog/article/details/120376176
遠(yuǎn)程部署的步驟
-
相對(duì)于遠(yuǎn)程調(diào)試,遠(yuǎn)程部署僅僅提供了自動(dòng)打包、部署、運(yùn)行的功能。遠(yuǎn)程連接的原理其實(shí)是一樣的。這里以 Spring Boot 為例,演示一下如何將 Spring Boot 項(xiàng)目遠(yuǎn)程部署到服務(wù)器。
首先,讀者需要知道如何查看遠(yuǎn)程服務(wù)器的 IP。關(guān)于這方面的內(nèi)容,可見筆者的另一篇博客:
如何在 Windows 主機(jī)上訪問本地局域網(wǎng)中的 Linux 主機(jī):
https://blog.csdn.net/wangpaiblog/article/details/120052152 -
為了方便說明,筆者在 Spring 官網(wǎng)網(wǎng)站上下載了一個(gè) Spring Boot 的 Demo 項(xiàng)目。
官方下載網(wǎng)址:https://start.spring.io/
-
現(xiàn)在開始簡(jiǎn)單改造一個(gè)這個(gè)項(xiàng)目。編寫一個(gè)簡(jiǎn)單的控制器等等。這些內(nèi)容過于簡(jiǎn)單,這里不作詳細(xì)介紹。
- Spring Boot 配置
server: port: 12345 spring: application: name: remote_deployment management: endpoints: web: exposure: # 公開所有端點(diǎn) include: '*'
- 控制器
/** * @since 2023-7-10 */ @Controller @RequestMapping("/remote_deployment") public class RemoteDeploymentController { /** * @since 2023-7-10 */ @GetMapping("/test") @ResponseBody public String remoteDeploymentTest(String para) { System.out.println(para); return para; } }
-
使用 IntelliJ IDEA 打開該項(xiàng)目,IntelliJ IDEA 應(yīng)該就會(huì)自動(dòng)生成它的一些配置。如下圖操作,填入遠(yuǎn)程服務(wù)器的一些配置信息。
-
這里選擇 SSH 協(xié)議來連接。
【注意】
- SSH 默認(rèn)的端口號(hào)是 22。此端口號(hào)指的是與本地 IntelliJ IDEA 遠(yuǎn)程連接的端口號(hào),不是此 Spring Boot 應(yīng)用的端口號(hào)。
- 下面顯示的路徑是這個(gè) Spring Boot 項(xiàng)目的所有依賴的上傳路徑,不是此 Spring Boot 項(xiàng)目的上傳路徑。
-
上面的配置完成之后,會(huì)在配置中顯示出來。不過要注意,下面顯示的路徑是此 Spring Boot 項(xiàng)目的上傳路徑,而上面配置的路徑是這個(gè) Spring Boot 項(xiàng)目的所有依賴的上傳路徑。
-
不過,配置完成不要先急著運(yùn)行。很多 Linux 系統(tǒng)上面都有防火墻,默認(rèn)會(huì)阻止所有的遠(yuǎn)程訪問。對(duì)于筆者的
RedHat Enterprise Linux 9 x86_64
,默認(rèn)的防火墻為 firewalld,而不是 iptables。(很多早期的 Linux,使用的防火墻是 iptables,但 RedHat 從 RHEL 7 開始就用 firewalld 取代了 iptables。)-
一個(gè)偷懶的方法就是,永久地關(guān)閉防火墻。關(guān)閉的方法如下:
systemctl stop firewalld systemctl mask firewalld firewall-cmd --reload
-
另一個(gè)方法是,在防火墻中永久開放上述 Spring Boot 應(yīng)用的端口號(hào)。開放的方法如下:
firewall-cmd --zone=public --add-port=5005/tcp --permanent firewall-cmd --reload 單獨(dú)開放完端口 5005 之后,可以輸入以下命令查看是否生效:
firewall-cmd --zone=public --query-port= Spring Boot 應(yīng)用的端口號(hào)
/tcp實(shí)際上,也可以輸入以下命令查看所有開放的端口:
firewall-cmd --zone=public --list-ports
-
-
現(xiàn)在,就可以嘗試運(yùn)行這個(gè) Spring Boot 項(xiàng)目了。運(yùn)行時(shí),IntelliJ IDEA 會(huì)在上面填寫的服務(wù)器的部署目錄下上傳 Spring Boot 的所有依賴 JAR 包。
-
運(yùn)行之后,需要對(duì)接口進(jìn)行測(cè)試??梢赃x擇用 Postman 來測(cè)試這個(gè) Spring Boot 應(yīng)用。
-
可以看出,上面的測(cè)試很成功。但是,IntelliJ IDEA 遠(yuǎn)程部署的能力還不只如此。它還支持直接打斷點(diǎn)和以調(diào)試的方式運(yùn)行此應(yīng)用。
以這個(gè)方式運(yùn)行實(shí)際上和前面介紹的遠(yuǎn)程調(diào)試沒有區(qū)別,但這比遠(yuǎn)程調(diào)試方便太多。
文章來源:http://www.zghlxwxcb.cn/news/detail-707780.html
完整源代碼
??已上傳至 GitHub 中,可免費(fèi)下載:https://github.com/wangpaiblog/20230912-remote_deployment文章來源地址http://www.zghlxwxcb.cn/news/detail-707780.html
到了這里,關(guān)于在 IntelliJ IDEA 中遠(yuǎn)程部署 Java 程序的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!