私有化輕量級持續集成部署方案--04-私有代碼倉庫服務-Gitea


提示:本系列筆記全部存在於 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

安裝引導

第一次訪問會進入安裝向導頁面,該頁面是用於設置安裝配置信息,

向導頁面會帶入 environment 中填寫的設置,很多信息不需要進行設置。

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

這個是設置管理員的。如果不設置管理員,默認第一個注冊用戶將自動成為管理員,

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

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

推送代碼

成功之后可以創建一個倉庫將之前的 web 項目推送到此倉庫。

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

網關代理

配置網關

下一步就配置 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 服務中的配置。

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

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

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

Portainer 可視化工具是支持修改配置然后重啟部署

PS: 注意,直接改動 Portainer 可視化工具中環境變量是不行。環境變量所設置的配置已經寫入了文件。

設置上傳大小限制

Nginx 有一個上傳文件大小限制,上傳大於限制大小的文件會返回 403 錯誤,其大小限制默認值為 1MB

所以默認當使用 網關(Nginx) push 到 Gitea,如果文件大於 1MB 就會報錯。

解決這個問題,只需要修改 網關(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 的文件。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM