目錄

Hugo+Gitea+Drone in Docker 踩坑紀錄

Gitea

在Synology內使用Docker來建立Gitea遇到的問題。

架構(Docker):

  1. Gitea
  2. Drone-server
  3. Drone-runner
  4. openssh-server
  5. 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