Hugo+Gitea+Drone in Docker 踩坑紀錄
Gitea
在Synology內使用Docker來建立Gitea遇到的問題。
架構(Docker):
- Gitea
- Drone-server
- Drone-runner
- openssh-server
- caddy
Local – (git push) –> Gitea –(webhook)–> Drone –(scp)–>Openssh-server
openssh-server內直接對應主機www儲存空間,只須讀取hugi的靜態文件即可,因此使用caddy。未來也只需要透過openssh-server來更新靜態文件。
以下是我建置時遇到一些比較坑的紀錄。
SSH
問題:
在Docker搭建Gitea的時候因為容器內port不同的關係,沒法使用
git@hostname:username/repo.git
來做Git Remote。
解決方式:
路由器設置連接埠轉送。外網22 port轉送至容器SSH port。 此種方式最快,缺點也很明顯。就是佔用外網22 port。如果內網沒有其他的22 port需求是沒什麼問題。
Drone-server
無法連線至Gitea
明明在同部機器內。不同Docker容器卻一直無法連線(非對連,都使用host的IP位置。只是port號不同)。 第一時間使用修改hosts的方式試試,結果成功了。後來突然想到會不會是net loopback關係,立刻去查看看netgate是否有支援net loopback,結果發現netgate是有支援的,那怎麼會這樣呢?又繼續上網找資料看到有一則帖子上說明也許是因為uPnP的關係,所以導致net loopback不能正常工作。所以就把uPnP給關了,局網內所有port都改用手動轉送方式結果就正常了。
Docker api version
default: Error response from daemon: client version 1.40 is too new. Maximum supported API version is 1.39
解決:
Drone-Server與Drone-runner的容器部署時加入變數DOCKER_API_VERSION=1.39
即可。
drone-scp & OpenSSH Server
使用appleboy/drone-scp來做發佈時出現以下錯誤
drone-scp error: error copy file to dest: ******, error message: dial tcp ******:******: i/o timeout
或
drone-scp error: error copy file to dest: ******, error message: Process exited with status 127
-
openssh server內也需要安裝scp(openssh-client)。
否則將出現
Process exited with status 127
錯誤。 -
.drone.yml中host直接使用外網網址,port直接由路由器做轉送。
drone-hugo
clone 時無法下載或更新submodule中的 hugo themes。
.drone.yml
內新增一個step
steps:
- name: submodules
image: alpine/git
commands:
- git submodule update --init