The Will Will Web

記載著 Will 在網路世界的學習心得與技術分享

如何在 Windows 安裝 Gitea 源碼版控系統與 PostgreSQL 14 資料庫

Gitea 是一套功能相當完整卻又非常輕量的 Git 源碼版控與議題追蹤系統,我在這幾年也幫好幾家公司安裝過,基本上在 Windows 上面安裝 Gitea 的過程十分容易,只要幾個命令就可以安裝到好,但是若真的要一次安裝到好,其實還是有一些門檻,畢竟網路上的資料太多太亂,這篇文章我將分享我的安裝過程,基本上照著做應該都可以順利的安裝到好。

Gitea

以下命令皆以系統管理員身份執行 Windows PowerShell 命令視窗。

  1. 安裝 Chocolatey 套件管理器

    Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))
    
  2. 安裝 Git for Windows 命令列工具

    安裝 Gitea 之前,請務必事先安裝 Git 命令列工具!

    choco install git -y
    
  3. 安裝 PostgreSQL 資料庫

    以下命令會自動安裝好 PostgreSQL 14 資料庫,並自動註冊名為 postgresql-x64-14 - PostgreSQL Server 14 (postgresql-x64-14) 的 Windows 服務。除此之外,這個版本也會連帶安裝 pgAdmin 資料庫管理工具!

    choco install postgresql --version=14.1.1 --params '/Password:8ws9NVXS7s69' --params-global -y
    

    以上命令的 8ws9NVXS7s69 是 PostgreSQL 資料庫的預設管理者密碼,預設使用者名稱為 postgres

    安裝完畢請關閉 PowerShell 視窗之後重新開啟!

    如果無法透過 Chocolatey 進行安裝,請到 PostgreSQL: Windows installers 下載 postgresql-14.1-1-windows-x64.exe 安裝檔,並執行以下命令進行 Silent 安裝:

    postgresql-14.1-1-windows-x64.exe `
        --mode "unattended" `
        --unattendedmodeui "none" `
        --superaccount "postgres" `
        --superpassword "8ws9NVXS7s69" `
        --enable_acledit 1 `
        --install_runtimes 0 `
        --serverport  5432 `
        --debugtrace postgresql-install.log
    
  4. 測試連接 PostgreSQL 資料庫,確認帳號密碼都可以正確連線

    $env:PGPASSWORD='8ws9NVXS7s69'; '\conninfo' | psql -Upostgres
    

    請確認看到以下訊息才算安裝成功!

    You are connected to database "postgres" as user "postgres" on host "localhost" (address "::1") at port "5432".
    
  5. 建立 Gitea 專用的資料庫

    # 這是為了讓 psql 可以在執行時免輸入密碼
    $env:PGPASSWORD='8ws9NVXS7s69'
    
    # 這個是專門給 Gitea 使用的資料庫使用者帳號密碼
    $GiteaDbPassword = 'FfW75FW3raWg'
    "CREATE ROLE gitea WITH LOGIN PASSWORD '${GiteaDbPassword}';" | psql -Upostgres
    
    # 建立名為 gitea 的資料庫
    "CREATE DATABASE gitea WITH OWNER gitea TEMPLATE template0 ENCODING UTF8 LC_COLLATE 'en_US.UTF-8' LC_CTYPE 'en_US.UTF-8';" | psql -Upostgres
    
  6. 下載 Gitea 主程式

    Gitea 整套系統只有一個約 140 MiB 的單一執行檔而已,完全免安裝,直接下載執行檔就可以執行!

    請下載 Current Release 版本,假設我們選擇安裝 Gitea 1.16.0 版本,你可以使用以下命令下載 Gitea 主程式:

    mkdir C:\Gitea
    Invoke-WebRequest -Uri https://dl.gitea.io/gitea/1.16.0/gitea-1.16.0-windows-4.0-amd64.exe -OutFile C:\Gitea\gitea.exe
    

    下載路徑: https://dl.gitea.io/gitea

  7. 啟動 Gitea 伺服器

    C:\Gitea\gitea.exe
    

    第一次啟動會喚醒 Windows Security Alert 視窗,請務必按下 Allow access 按鈕,否則服務會連不上!

    Windows Security Alert

    開啟瀏覽器並連到 http://localhost:3000/ 網址,並開啟 Initial Configuration 初始化設定頁面!

  8. 初始化 Gitea 設定 (Initial Configuration)

    • Database Type: PostgreSQL
    • Host: 127.0.0.1:5432
    • Username: gitea
    • Password: FfW75FW3raWg
    • Database Name: gitea
    • Gitea HTTP Listen Port: 80
    • Gitea Base URL: http://gitea.localhost/
    • Server and Third-Party Service Settings
      • 建議勾選 Enable Local Mode
      • 取消勾選 Enable OpenID Sign-in
      • 建議勾選 Disable Self-Registration
      • 取消勾選 Allow Creation of Organizations by Default
      • 設定欄位 Hidden Email Domain 為你公司的 E-mail 域名
    • Administrator Account Settings
      • 請設定預設 Gitea 管理者名稱與密碼

    所有 Chromium-based 瀏覽器預設會將所有 *.localhost 域名自動導向 127.0.0.1 本機 IP 位址,所以你在本機可以不用特別調整 DNS 或 hosts 設定!

    按下 Install Gitea 按鈕之後,完整的 Gitea 設定檔會儲存在 C:/Gitea/custom/conf/app.ini 檔案中,瀏覽器會自動開啟 http://gitea.localhost 網站,你只要使用上述設定的預設 Gitea 管理者名稱與密碼登入即可!

    接著請回到 Windows PowerShell 視窗按下 Ctrl+C 停止 Gitea.exe 執行。

  9. 設定 Gitea 支援 HTTPS 與 SSH 安全加密連線

    假設你的對外域名是 gitea.localhost 的話,可以使用 Gitea.exe 快速幫我們建立 TLS/SSL 自簽憑證。

    以下命令會在 C:\Gitea\custom 目錄下自動產生 cert.pem (憑證) 與 key.pem (金鑰):

    cd C:\Gitea\custom; C:\Gitea\gitea.exe cert --host gitea.localhost --ca
    

    以下命令會將 cert.pem 註冊到「受信任的根憑證授權單位」的憑證儲存區,讓你的本機電腦(包含瀏覽器)可以信任這張憑證:

    certutil -addstore -enterprise Root cert.pem
    

    編輯 C:/Gitea/custom/conf/app.ini 設定檔,並調整 [server] 區段,合併以下設定:

    [server]
    ROOT_URL  = https://gitea.localhost/
    HTTP_PORT = 443
    
    PROTOCOL  = https
    CERT_FILE = cert.pem
    KEY_FILE  = key.pem
    
    REDIRECT_OTHER_PORT = true
    PORT_TO_REDIRECT = 80
    
    START_SSH_SERVER = true
    BUILTIN_SSH_SERVER_USER = git
    

    相關設定請參見 Gitea Config Cheat Sheet 文件。

  10. 修復 Gitea 內建的 OpenSSH Server 無法支援 RSA 演算法的問題

    目前 Gitea 1.16 版還有個 RSA public keys cannot authenticate against internal SSH if the client has a recent ssh version (which disables ssh-rsa algorithm) #17798 問題尚待解決,所以如果你的 SSH 用戶端使用了太新的 SSH 版本,可能會有無法透過 SSH 連上 Gitea 的問題。

    目前暫時的解決方案是在用戶端建立一個 ~/.ssh/config 檔案,並放置以下內容:

    Host localhost
      HostkeyAlgorithms +ssh-rsa
      PubkeyAcceptedKeyTypes +ssh-rsa
    
  11. 將 Gitea 註冊為 Windows 服務

    首先你必須先查出目前的電腦名稱:

    $env:COMPUTERNAME
    

    然後再修改 C:/Gitea/custom/conf/app.ini 設定檔,務必將 RUN_USER 修改為 電腦名稱 + $ 這樣的格式(這是電腦帳戶的格式):

    RUN_USER = COMPUTERNAME$
    

    預設 C:/Gitea/custom/conf/app.ini 設定檔將所有 Log 輸出到 Console,如果我們要跑在 Windows 服務下,你必須修改 [log] 區段的設定,將所有 Log 改儲存到 C:/Gitea/log/gitea.log 檔案中。完整設定請參見 Advanced: Logging Configuration 說明。

    [log]
    MODE      = file
    LEVEL     = info
    ROOT_PATH = C:/Gitea/log
    FILE_NAME = %(ROOT_PATH)/gitea.log
    ROUTER    = console
    

    最後直接利用 sc.exe 自動註冊並啟動 Gitea 的 Windows 服務

    sc.exe create gitea start= auto binPath= '"C:\gitea\gitea.exe" web --config "C:\gitea\custom\conf\app.ini"'
    sc.exe start gitea
    

設定 Git 用戶端工具信任 Gitea 的自簽憑證

由於 Git for Windows 自己有一份 CA 清單,跟 Windows 憑證儲存區的 CA 憑證是分開的,因此使用自簽憑證架設 Gitea 的話,預設所有使用者都將無法成功利用 git clone 複製專案回去,你必須請每個人都使用以下步驟進行設定,就可以順利透過 Git 連上 Gitea 下載原始碼。

  1. 先將 Git 預設安裝的 CA 清單加入到個人的家目錄中,並修改 Git 設定使用自訂的路徑

    $CABundlePath=$(git config --system http.sslCAInfo)
    Copy-Item -Path $CABundlePath -Destination "$env:USERPROFILE\ca-bundle.crt"
    
    git config --global http.sslCAInfo "$env:USERPROFILE\ca-bundle.crt"
    

    注意:千萬不要關閉 http.sslVerify 設定,這會大幅降低 Git 連線的安全性!

  2. 將 Gitea 安裝的伺服器自簽憑證加入到 ca-bundle.crt 檔案中

    Get-Content C:/Gitea/custom/cert.pem | Out-File -Append -FilePath "$env:USERPROFILE\ca-bundle.crt" -Encoding ascii
    

解除安裝 Gitea 與 PostgreSQL

  1. 停止並刪除 Windows 服務

    sc.exe stop gitea
    sc.exe delete gitea
    
  2. 解除安裝 PostgreSQL 資料庫

    cuninst postgresql --force-dependencies -y
    
  3. 移除 Gitea 安裝目錄

    CD C:\; Remove-Item C:\Gitea\ -Recurse -Force
    

相關連結

留言評論