目錄
1. idea 連線遠端 docker
1.1 安裝 docker 外掛
1.2 登入遠端伺服器,修改docker配置
(1) 修改 docker.service 檔案,位於 /usr/lib/systemd/system/docker.service
開啟該檔案,將原來的 ExecStart 前面加上#號註釋掉,在該行下面新增 ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock
[Service]
Type=notify
# the default is not to use systemd for cgroups because the delegate issues still
# exists and systemd currently does not support the cgroup feature set required
# for containers run by docker
# ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock
ExecReload=/bin/kill -s HUP $MAINPID
TimeoutStartSec=0
RestartSec=2
Restart=always
(2) 重新載入配置
systemctl daemon-reload
(3) 重啟 docker 服務
systemctl restart docker.service
1.3 新增雲伺服器防火牆規則
1.4 idea 配置連線 docker
開啟 idea,開啟 Setting,在 docker 項配置雲伺服器tcp://公網IP:2375
,點選 ok 即可連上 docker,如下圖:
然後,就可以在 Services 中看到 docker 了
點選左邊的 connect 就可以連線上 docker,可以看到 docker 中的映象和容器資訊
2. 部署專案到 docker
2.1 建立並編寫Dockerfile
我這裡將dockerfile 建立在根目錄下
dockerfile 檔案內容:
# 指定基礎映象
FROM openjdk:8-jre-slim
# 作者
MAINTAINER gzl
# 將容器的時區設定為"Asia/Shanghai"
RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \&& echo 'Asia/Shanghai' >/etc/timezone
# 複製主機檔案至映象內,複製的目錄需放置在 Dockerfile 檔案同級目錄下
ADD target/chatgpt-api-0.0.1-SNAPSHOT.jar chatgpt-api.jar
# (和專案埠號等同)
EXPOSE 8080
# 在容器啟動時執行該應用程式
ENTRYPOINT ["java", "-jar", "/chatgpt-api.jar"]
2.2 執行配置
(1) 點選 Edit Configurations...
(2) 點選左上角+
,找到 dockerfile
(3) 填寫配置資訊
- Bind ports:對映埠:專案埠
- Before launch:
選擇Run Maven Goal
,Command line 填寫clean package -U -DskipTests
,表示在構建之前清理專案的目標目錄,以確保沒有舊的構建殘留,同時跳過執行單元測試,可加快構建過程
(4) 執行
點選執行
執行成功
3. Nginx 配置
修改 nginx 配置
server {
listen 80;
server_name 公網ip;
# 首頁
index index.html;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
location /api/ {
auth_request /auth;
# 鑑權透過後的處理方式
proxy_pass http://公網ip:8080/success;
}
location = /auth {
# 傳送子請求到HTTP服務,驗證客戶端的憑據,返回響應碼
internal;
# 設定引數
set $query '';
if ($request_uri ~* "[^\?]+\?(.*)$") {
set $query $1;
}
# 驗證成功,返回200 OK
proxy_pass http://公網ip:8080/verify?$query;
# 傳送原始請求
proxy_pass_request_body off;
# 清空 Content-Type
proxy_set_header Content-Type "";
}
error_page 404 /404.html;
location = /40x.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
在瀏覽器使用公網ip訪問