手把手教你玩轉 Gitea|使用 Docker 安裝 Gitea

使用 Docker 安裝 Gitea 的過程非常簡單的,堪比「一鍵式」安裝。Gitea 安裝使用系列教程將會從多種方式進行全方位的實操演示。

📺影片演示中使用騰訊雲實驗環境安裝 Docker 並快速啟動 Gitea

環境準備

伺服器配置

OS Version CPU RAM
Debian Linux bullseye 2 Core 4GB

本文所採用的伺服器配置如下,建議記憶體最少在 1GB 以上。OS 版本可以是 Debian、Ubuntu、Fedora 以及 CentOS,本文優先使用 Debian,其他系統發行版的會在後續文章中酌情演示。

Docker 運行環境

最新的 Docker Engine 和 Docker Desktop 集成了 docker compose 命令行工具。更多資訊請參閱:

選擇鏡像

Gitea 提供了標準的容器鏡像(gitea/gitea),統一支援 SQLite、MySQL、PostgreSQL 和 SQL Server 作為資料庫後端。每個版本的鏡像同時支援兩種主流的處理器體系結構 amd64arm64/v8

鏡像標籤

  • 最新的穩定版
    latest
  • 固定在某個穩定版
    1.17.2, 1.17, 1
  • 最新的開發版,隨 Gitea 程式碼合併同步更新
    dev

Rootless 鏡像

Rootless 鏡像使用 Gitea 內建的 Go SSH 提供 Git 服務,代替了 OpenSSH。

在選用 rootless 鏡像時,加上鏡像標籤 -rootless。支援的鏡像標籤如下:

  • latest-rootless, 1-rootless
  • 1.17.2-rootless
  • dev-rootless

安裝 Gitea

環境變數

在集群模式安裝 Gitea 時,您可以通過環境變數為 Gitea 容器指定一些共享的初始值,例如 UID/GID、資料庫連接參數、共享密鑰等。諸如資料庫和 Gitea 的一些功能配置選項最終都會在安裝引導介面結束後寫入到 app.ini 文件並保存。因此,如果是作為單實例部署的 Gitea,您無需關心如何設置這些環境變數,稍後的初始化安裝過程會為您自動生成這些配置。初始化完成後,您可以在多個 Gitea 實例間共享同一份配置文件和數據快取來實現伺服器集群。

閱讀更多://docs.gitea.io/en-us/install-with-docker/

啟動 Gitea

創建工作目錄

首先創建一個 gitea 工作目錄,後續工作都在這個目錄下完成。

mkdir ~/gitea && cd ~/gitea

# 預先創建 data 和 config 目錄,稍後用於數據掛載
mkdir data config
chown 1000:1000 data config

創建 docker-compose.yml

使用下面的模板創建 docker-compose.yml,這裡使用到的鏡像是 gitea/gitea:1.17.2-rootless

rooless 版本的鏡像默認使用 UID/GID 1000:1000 作為程式運行的用戶組,為了保證 gitea 程式掛載許可權正確的數據目錄,我們在前面的步驟中預先創建了 dataconfig 目錄。

version: "3"

services:
  server:
    image: gitea/gitea:1.17.2-rootless
    container_name: gitea
    restart: always
    volumes:
      - ./data:/var/lib/gitea
      - ./config:/etc/gitea
      - /etc/timezone:/etc/timezone:ro
      - /etc/localtime:/etc/localtime:ro
    ports:
      - "3000:3000"
      - "2222:2222"

幾個重要的參數說明:

  • volumes: 數據掛載
    • ./data:/data,將主機當前目錄下的 data 目錄掛載到容器內的 /var/lib/gitea 目錄。/data 是 Gitea 標準容器的數據存儲點,包含了 Git 倉庫、SQLite 資料庫文件、快取文件等。
    • ./config:/etc/gitea 掛載 Gitea 的 app.ini 配置文件所在的目錄。
    • /etc/timezone:/etc/timezone:ro 用於指定時區
    • /etc/localtime:/etc/localtime:ro 同上,用於指定本地時間
  • ports: 埠映射
    • 3000:3000 HTTP 埠,從左到右的順序是從主機映射到 Docker 容器。在此,您可以通過 //127.0.0.1:3000 直接訪問到 Gitea 的 Web 介面,或通過反向代理引擎提供更具有擴展性的 SSL 集成,例如 Nginx。
    • 2222:2222 SSH 埠。這裡主機側暴露的埠為 2222 避免了與默認 SSH 服務埠衝突。禁用 SSH 時刪除埠轉發即可。如果您希望將主機完全作為 Gitea 伺服器,可以將主機配置文件 /etc/ssh/sshd_config 中的埠 Port 22 更改為其他值,使得 Docker 可以使用 Gitea 內建的 Go SSH 或 OpenSSH 佔用 22 埠作為 Git 服務。

啟動 Gitea 實例

使用 docker compose 命令拉取鏡像並啟動 Gitea 實例:

docker compose up -d

docker compose ps 查看容器:

NAME     COMMAND                   SERVICE    STATUS     PORTS
gitea    "/usr/local/bin/dock…"    server     running    2222/tcp, 0.0.0.0:3000->3000/tcp

docker compose logs -f 查看容器日誌:

$ docker compose logs -f
gitea  | 2022/09/26 14:50:31 cmd/web.go:106:runWeb() [I] Starting Gitea on PID: 1
gitea  | 2022/09/26 14:50:31 ...s/install/setting.go:21:PreloadSettings() [I] AppPath: /usr/local/bin/gitea
gitea  | 2022/09/26 14:50:31 ...s/install/setting.go:22:PreloadSettings() [I] AppWorkPath: /var/lib/gitea
gitea  | 2022/09/26 14:50:31 ...s/install/setting.go:23:PreloadSettings() [I] Custom path: /var/lib/gitea/custom
gitea  | 2022/09/26 14:50:31 ...s/install/setting.go:24:PreloadSettings() [I] Log path: /var/lib/gitea/data/log
gitea  | 2022/09/26 14:50:31 ...s/install/setting.go:25:PreloadSettings() [I] Configuration file: /etc/gitea/app.ini
gitea  | 2022/09/26 14:50:31 ...s/install/setting.go:26:PreloadSettings() [I] Prepare to run install page
gitea  | 2022/09/26 14:50:31 ...s/install/setting.go:29:PreloadSettings() [I] SQLite3 is supported
gitea  | 2022/09/26 14:50:31 cmd/web.go:217:listen() [I] [63314bb7-6] Listen: //0.0.0.0:3000
gitea  | 2022/09/26 14:50:31 cmd/web.go:221:listen() [I] [63314bb7-6] AppURL(ROOT_URL): //localhost:3000/

當看到上述日誌的時候可以認為實例已經啟動了,在瀏覽器中輸入 //localhost:3000/ 即可登陸 Gitea 實例進行初始化設置。

登錄 Gitea

首次安裝 Gitea 後,在瀏覽器中輸入 //localhost:3000/ 訪問初始化頁面,按需設置伺服器資訊。第一個註冊的用戶帳號為管理帳號。

image

至此已經用 Docker 的方式來成功安裝和運行了 Gitea 實例,接下來就可以使用了,諸如程式碼託管、團隊人員管理、配置持續集成工具 DroneJenkins 等。