私有化輕量級持續整合部署方案--04-私有程式碼倉庫服務-Gitea

莫問今朝乄發表於2022-02-21
提示:本系列筆記全部存在於 Github, 可以直接在 Github 檢視全部筆記

企業級最流行的私有程式碼倉庫是 Gitlab, 一開始我也打算部署 Gitlab作為私有程式碼倉庫。

但部署完成後發現, Gitlab 資源佔用太大了。優化之後也要佔用 3g 記憶體,最後只好放棄這一方案。

隨後發現了 GiteaGogs 這兩個輕量級的私有倉庫,兩個都是優秀的輕量級私有倉庫。

後對它們進行了對比,發現 Gitea 是從 Gogs 專案 fork 出的專案。
官方給出了 fork 理由:https://blog.gitea.io/2016/12/welcome-to-gitea/,有興趣的看看

也就是 Gitea專案 是優於 Gogs 專案的,最後就選擇了 Gitea

Gitea 雖然是輕量級,但也具有強大的功能,可以放心使用。

https://docs.gitea.io/zh-cn/

Gitea

資料庫選擇

Gitea 支援mysql , postgres, mssql, tidbsqlite3 多種資料庫。
最簡單的是直接使用 sqlite3,作為一個文件性資料庫,不需要單獨部署服務。

在此使用 postgres 資料庫,現在 postgres 也是主流的資料庫,很多企業都從 mysql 轉向了 postgress

至於 postgressmysql 之間的對比,有興趣的朋友可以自行查詢

DockerFile

version: '3.9'
# 建立自定義網路
networks:
  gitea:
    name: gitea
    driver: bridge

services:
  ## 資料庫服務
  db:
    image: postgres:latest
    container_name: gitea_db
    restart: always
    networks:
      - gitea # 加入到gitea網路
    ports:
      - 3003:5432
    environment:
      - POSTGRES_USER=gitea # PGSQL預設使用者
      - POSTGRES_PASSWORD=gitea # PGSQL預設密碼
      - POSTGRES_DB=gitea # PGSQL預設資料庫
    volumes:
      - /volumes/gitea/db:/var/lib/postgresql/data
  #gitea服務
  server:
    image: gitea/gitea:latest
    container_name: gitea_server
    restart: always
    networks:
      - gitea # 加入到gitea網路
    ports:
      - '3000:3000' # HTTP服務埠
      - '3001:22' # SSH伺服器埠
    environment:
      - USER_UID=1000 # 執行容器使用的 UID  UID和GID是用於匿名資料卷掛載,
      - USER_GID=1000 # 執行容器使用的 GID
      - APP_NAME=gitea
      - PROTOCOL=http # 服務使用的訪問協議
      - HTTP_PORT=3000 # HTTP 偵聽埠 預設為3000
      - SSH_PORT=22 # 克隆 URL 中顯示的 SSH 埠
      - DOMAIN=82.157.55.94:3000 # UI顯示的 HTTP克隆URL
      - LANDING_PAGE=explore
      - ROOT_URL=http://82.157.55.94:3000 # 伺服器的對外 URL
      - DB_TYPE=postgres # 資料庫型別
      - DB_HOST=db # 資料庫連線地址, 使用network形式連線, serverName或者 containerName
      - DB_NAME=gitea # 資料庫名稱
      - DB_USER=gitea # 資料庫連線使用者
      - DB_PASSWD=gitea # 資料庫連線密碼

      - DISABLE_REGISTRATION=true # 禁用使用者註冊,啟用後只允許管理員新增使用者
      - SHOW_REGISTRATION_BUTTON=false # 是否顯示註冊按鈕
      - REQUIRE_SIGNIN_VIEW=true # 是否所有頁面都必須登入後才可訪問

    volumes:
      - /volumes/gitea/server/data:/data
      - /volumes/gitea/server/config:/etc/config
      - /volumes/gitea/server/timezone:/etc/timezone:ro
      - /volumes/gitea/server/localtime:/etc/localtime:ro
    depends_on:
      - db

Dockerfile 配置檔案中部署了兩個容器: 一個是 Postgres(資料庫)服務,一個是 Gitea服務。

使用 networks 新增了一個自定義網路。 兩個容器都加入這個自定義網路中,使用自定義網路進行通訊。

PS: Docker 中, 提供了一個 network 模組。同屬於一個 network 下的容器可以使用 容器名稱服務名稱 直接通訊。

Postgres 服務中通過環境變數設定了預設的資料庫、使用者名稱稱和使用者密碼資訊。

Gitea 服務中通過環境變數設定了 執行容器的 UIDGID,HTTP 監聽埠、UI 上顯示的克隆 URL。連線資料庫、禁用註冊等資訊,至於還有其它引數,可以自行查詢

Gitea 埠號對映了兩個 30003001,分別是 HTTP訪問和 SSH 訪問,不過現在基本上都使用 HTTP , SSH` 可以使用引數禁用

在配置檔案中有一個 depends_on 屬性,這個屬性是控制部署順序的。意思是 Gitea 部署依賴 postgres 部署

使用這個配置安裝成功後,會成功部署兩個容器和建立一個 network,成功後可以進行訪問Gitea

私有化輕量級持續整合部署方案--04-私有程式碼倉庫服務-Gitea 私有化輕量級持續整合部署方案--04-私有程式碼倉庫服務-Gitea

安裝引導

第一次訪問會進入安裝嚮導頁面,該頁面是用於設定安裝配置資訊,

嚮導頁面會帶入 environment 中填寫的設定,很多資訊不需要進行設定。

私有化輕量級持續整合部署方案--04-私有程式碼倉庫服務-Gitea

不過其中有一個 管理員賬號設定

這個是設定管理員的。如果不設定管理員,預設第一個註冊使用者將自動成為管理員,

但是在禁止註冊的情況下必須設定管理員

私有化輕量級持續整合部署方案--04-私有程式碼倉庫服務-Gitea 私有化輕量級持續整合部署方案--04-私有程式碼倉庫服務-Gitea

設定管理員後點選安裝,便會使用當前頁面配置進行安裝 Gitea。安裝完畢後會自動跳轉到主頁

私有化輕量級持續整合部署方案--04-私有程式碼倉庫服務-Gitea

推送程式碼

成功之後可以建立一個倉庫將之前的 web 專案推送到此倉庫。

私有化輕量級持續整合部署方案--04-私有程式碼倉庫服務-Gitea

PS 圖中 HTTP 顯示的 IP 地址是部署時 DOMAIN 屬性設定的那個。

私有化輕量級持續整合部署方案--04-私有程式碼倉庫服務-Gitea

閘道器代理

配置閘道器

下一步就配置 Gitea 的閘道器代理。

首先還是配置閘道器,閘道器配置就不再介紹

server {
    #SSL 訪問埠號為 443
    listen 443 ssl http2;
    #填寫繫結證書的域名
    server_name gitea.mwjz.live;
    #日誌
    error_log /var/log/nginx/gitea/error.log;
    access_log /var/log/nginx/gitea/access.log;
    #證書檔案
    ssl_certificate /etc/nginx/conf.d/ssl/gitea/gitea.mwjz.live_bundle.crt;
    #證書金鑰檔案
    ssl_certificate_key /etc/nginx/conf.d/ssl/gitea/gitea.mwjz.live.key;

    ssl_ciphers SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!3DES:!aNULL:!MD5:!ADH:!RC4;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;
    location / {
        proxy_pass http://10.0.24.12:3000;
    }
}

配置完閘道器後,還需要配置 Gitea 服務中的配置。

私有化輕量級持續整合部署方案--04-私有程式碼倉庫服務-Gitea

此時重新部署的話會很麻煩,所以可以修改 Gitea 的配置檔案修改置

配置檔案是 /data/gitea/conf/app.ini。只需要修改此配置檔案中 ROOT_URLDOMAINSSH_DOMAIN,隨後重啟容器就可以

私有化輕量級持續整合部署方案--04-私有程式碼倉庫服務-Gitea 私有化輕量級持續整合部署方案--04-私有程式碼倉庫服務-Gitea 私有化輕量級持續整合部署方案--04-私有程式碼倉庫服務-Gitea

作為一個強迫症,我還會將 Portainer 視覺化工具中的環境變數進行改動。

Portainer 視覺化工具是支援修改配置然後重啟部署

私有化輕量級持續整合部署方案--04-私有程式碼倉庫服務-Gitea

PS: 注意,直接改動 Portainer 視覺化工具中環境變數是不行。環境變數所設定的配置已經寫入了檔案。

設定上傳大小限制

Nginx 有一個上傳檔案大小限制,上傳大於限制大小的檔案會返回 403 錯誤,其大小限制預設值為 1MB

所以預設當使用 閘道器(Nginx) push 到 Gitea,如果檔案大於 1MB 就會報錯。

私有化輕量級持續整合部署方案--04-私有程式碼倉庫服務-Gitea

解決這個問題,只需要修改 閘道器(Nginx)client_max_body_size 屬性就可以。

server {
    #SSL 訪問埠號為 443
    listen 443 ssl http2;
    #填寫繫結證書的域名
    server_name gitea.mwjz.live;
    #上傳大小限制
    client_max_body_size 100M;
    #日誌
    error_log /var/log/nginx/gitea/error.log;
    access_log /var/log/nginx/gitea/access.log;
    #證書檔案
    ssl_certificate /etc/nginx/conf.d/ssl/gitea/gitea.mwjz.live_bundle.crt;
    #證書金鑰檔案
    ssl_certificate_key /etc/nginx/conf.d/ssl/gitea/gitea.mwjz.live.key;

    ssl_ciphers SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!3DES:!aNULL:!MD5:!ADH:!RC4;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;
    location / {
        proxy_pass http://10.0.24.12:3000;
    }
}

修改並重啟 閘道器(Nginx) 後就可以上傳大於 1MB 的檔案。

私有化輕量級持續整合部署方案--04-私有程式碼倉庫服務-Gitea 私有化輕量級持續整合部署方案--04-私有程式碼倉庫服務-Gitea

相關文章