一. 前言
最近有些童鞋對開源微服務商城專案 youlai-mall 如何部署到線上環境以及專案中 的Dockerfile
檔案有疑問,所以寫了這篇文章做個答疑以及演示完整的微服務專案釋出到線上的流程,當然除此之外也為後續的專案更新計劃做一些基礎工作。
其實之前是寫了 關於 IDEA 整合Docker外掛和 docker-maven-plugin
依賴構建映象實現一鍵部署 SpringBoot
應用。
但是上篇文章的“ 一鍵部署”是有些誇大的,實踐過的童鞋應該清楚,在 IDEA 整合 Docker 和專案新增 docker-maven-plugin
依賴基礎上,部署SpringBoot
應用還需要經過 映象構建 → 容器配置 → 手動啟動容器 這些步驟,所以離一鍵部署相差甚遠。
本篇提供的方案中 IDEA 只需安裝 Docker
外掛,專案不用新增 docker-maven-plugin
和dockerfile-maven-plugin
依賴,且在完成首次的相關配置之後,後續只需點選一下 IDEA 的 Run 按鈕 ▶️就可以將應用部署遠端伺服器並且啟動,讓部署線上應用就是隨手點一下的事情。
二. Docker 配置
IDEA 需要連線 Docker 伺服器來完成推送映象和一些互動,需要 Docker 開啟遠端監聽,如果是專網還好,但是公網下開啟監聽時一定要啟用 TLS 協議進行安全加密傳輸,否則被黑基本上是早晚的事情。
下面是輕身經歷得到的教訓總結,有想找點樂子的童鞋可以看一下:
1. Docker 開啟遠端訪問
訪問 Docker 配置檔案 docker.service
vim /usr/lib/systemd/system/docker.service
在 ExecStart=/usr/bin/dockerd
追加 -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock
重啟 Docker 讓配置生效
systemctl daemon-reload
systemctl restart docker
檢視 Docker 遠端訪問服務是否開啟
# 檢視服務埠監聽是否開啟
lsof -i:2375
# CURL測試是否生效
curl http://127.0.0.1:2375/info
2. Docker 啟用 TLS
傳輸層安全性協議(英語:Transport Layer Security,縮寫作TLS),及其前身安全套接層(Secure Sockets Layer,縮寫作SSL)是一種安全協議,目的是為網際網路通訊提供安全及資料完整性保障。
-
設定主機名
輸入命令
hostname
檢視伺服器主機名,如果存在則忽略,沒有則需設定主機名vim /etc/hostname
修改配置之後重啟生效
-
TLS 證照生成
建立 TLS 證照存放目錄
mkdir -p /etc/docker/cert
建立 TLS 證照生成指令碼
vim /etc/docker/create_tls_cert.sh
新增內容
#!/bin/bash set -e if [ -z $1 ];then echo "請輸入 Docker 伺服器主機名" exit 0 fi HOST=$1 # 生成證照的目錄 /etc/docker/cert cd /etc/docker/cert openssl genrsa -aes256 -out ca-key.pem 4096 openssl req -new -x509 -days 365 -key ca-key.pem -sha256 -out ca.pem openssl genrsa -out server-key.pem 4096 openssl req -subj "/CN=$HOST" -sha256 -new -key server-key.pem -out server.csr # 配置白名單,推薦配置0.0.0.0,允許所有IP連線但只有證照才可以連線成功 echo subjectAltName = DNS:$HOST,IP:0.0.0.0 > extfile.cnf openssl x509 -req -days 365 -sha256 -in server.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out server-cert.pem -extfile extfile.cnf openssl genrsa -out key.pem 4096 openssl req -subj '/CN=client' -new -key key.pem -out client.csr echo extendedKeyUsage = clientAuth > extfile.cnf openssl x509 -req -days 365 -sha256 -in client.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out cert.pem -extfile extfile.cnf rm -v client.csr server.csr chmod -v 0400 ca-key.pem key.pem server-key.pem chmod -v 0444 ca.pem server-cert.pem cert.pem
執行
create_tls_cert.sh
證照生成指令碼# f.youlai.tech 為 Docker 伺服器主機名 sh /etc/docker/create_tls_cert.sh f.youlai.tech
紅色框部分需要設定證照密碼,可以為了方便,填寫一致的就行。
進入目錄 /etc/docker/cert 把本地需要的3個證照檔案 ca.pem 、cert.pem、key.pem 下載到本地資料夾下 , 我的資料夾是
D:\專案資料\Docker證照\f.youlai.tech
-
配置 Docker 啟用 TLS監聽
訪問 Docker 配置檔案 docker.service
vim /usr/lib/systemd/system/docker.service
在 ExecStart=/usr/bin/dockerd 修改和追加內容如下
ExecStart=/usr/bin/dockerd \ --tlsverify --tlscacert=/etc/docker/cert/ca.pem \ --tlscert=/etc/docker/cert/server-cert.pem \ --tlskey=/etc/docker/cert/server-key.pem \ -H tcp://0.0.0.0:2376 -H unix://var/run/docker.sock
過載配置和重啟 Docker 生效
systemctl daemon-reload systemctl restart docker
檢視監聽是否開啟
lsof -i:2376
三. IDEA 配置
1. 安裝 Docker 外掛
安裝後重啟 IDEA 讓外掛生效
2. Docker 伺服器連線配置
開啟 File
→ Setting
→ Build,Execution,Deployment
→ Docker
→ +
- Engine API URL : Docker 伺服器遠端監聽地址
- Certificates folder : 上文下載 Docker 的證照的檔案件
四. SpringBoot 應用部署
1. Dockerfile 檔案
在專案根目錄新增 Dockerfile
檔案
完整內容如下:
# 基礎映象
FROM openjdk:8-jre
# 維護者資訊
MAINTAINER youlai <youlaitech@163.com>
# 設定容器時區為當前時區
RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \&& echo 'Asia/Shanghai' >/etc/timezone
# /tmp 目錄作為容器資料卷目錄,SpringBoot內嵌Tomcat容器預設使用/tmp作為工作目錄,任何向 /tmp 中寫入的資訊不會記錄進容器儲存層
# 在宿主機的/var/lib/docker目錄下建立一個臨時檔案並把它連結到容器中的/tmp目錄
VOLUME /tmp
# 複製主機檔案至映象內,複製的目錄需放置在 Dockerfile 檔案同級目錄下
ADD target/admin-boot.jar app.jar
# 容器啟動執行命令
ENTRYPOINT ["java", "-Xmx128m", "-Djava.security.egd=file:/dev/./urandom", "-jar", "/app.jar"]
# 宣告容器提供服務埠
EXPOSE 8800
2. pom.xml檔案
新增 spring-boot-maven-plugin 依賴為SpringBoot
應用打包,指定 finalName
不帶版本號,這樣打包出的 jar 包名稱就沒有版本號。
<build>
<finalName>${project.artifactId}</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
3. Run/Debug Configurations 配置
Run/Debug Configurations
執行/除錯 配置
Dockerfile
配置
新增執行目標 Maven Goal
Command line
輸入 clean package -U -DskipTests
點選 OK
儲存配置,至此,已完成所有的配置,接下來就是一鍵部署。
4. SpringBoot應用一鍵構建部署
工具欄 Run/Debug
選擇上文的 Docker
配置
點選 ▶️開始執行
稍等一會兒,就可以看到啟動的容器
Nacos
註冊中心可以看到youlai-admin
服務線上
五. 總結
本篇通過 IDEA 整合 Docker
外掛和通過 Dockerfile
的方式一鍵完成 SpringBoot應用的打包 → 構建映象 → 容器建立和啟動 的整套應用部署的流程,沒有第三方 maven
依賴,可以說非常的簡單便捷,再不會對頻繁的應用部署而感到頭疼。當然寫這篇文章的目的除了解釋開源微服務商城 youlai-mall
專案中的 Dockerfile
作用和有來商城微服務是如何部署到線上之外,還有就是為後續的 ELK
+ Filebeat
實現日誌收集和線上環境遠端除錯等等做好基礎工作,具體的在後續文章說明。
附錄:
1. 開源專案
專案名稱 | 碼雲(Gitee) | Github |
---|---|---|
微服務後臺 | youlai-mall | youlai-mall |
系統管理前端 | youlai-mall-admin | youlai-mall-admin |
微信小程式 | youlai-mall-weapp | youlai-mall-weapp |
2. 聯絡資訊
微信交流群只能通過邀請方式進入,如果專案中遇到什麼問題或者想進入交流群學習的朋友請新增開發人員後由其拉進群,備註“有來”即可。
【有來小店】微信小程式體驗碼 | 進群加我,我發邀請連線,備註“有來”即可 |
---|---|