使用 Docker 安裝
Gitea 在其 Docker Hub 組織內提供自動更新的 Docker 鏡像。可以始終使用最新的穩定標籤或使用其他服務來更新 Docker 鏡像。
該參考設定指導使用者完成基於 docker-compose 的設定,但是 docker-compose 的安裝不在本文件的範圍之內。要安裝 docker-compose 本身,請遵循官方安裝說明。
最簡單的設定只是建立一個卷和一個網路,然後將 docker.gitea.com/gitea:latest 鏡像作為服務啟動。由於沒有可用的資料庫,因此可以使用 SQLite3 初始化資料庫。建立一個類似 gitea 的目錄,並將以下內容粘貼到名為 docker-compose.yml 的文件中。請注意,該卷應由設定文件中指定的 UID/GID 的使用者/組擁有。如果您不授予卷正確的權限,則容器可能無法啟動。另請注意,標籤 :latest 將安裝當前的開發版本。對於穩定的發行版,您可以使用 :1 或指定某個發行版,例如 1.27.2。
version: "3"
networks: gitea: external: false
services: server: image: docker.gitea.com/gitea:1.27.2 container_name: gitea environment: - USER_UID=1000 - USER_GID=1000 restart: always networks: - gitea volumes: - ./gitea:/data - /etc/timezone:/etc/timezone:ro - /etc/localtime:/etc/localtime:ro ports: - "3000:3000" - "222:22"要將整合的 openSSH 守護進程和 Web 伺服器綁定到其他端口,請調整端口部分。通常,只需更改主機端口,容器內的端口保持原樣即可。
version: "3"
networks: gitea: external: false
services: server: image: docker.gitea.com/gitea:1.27.2 container_name: gitea environment: - USER_UID=1000 - USER_GID=1000 restart: always networks: - gitea volumes: - ./gitea:/data - /etc/timezone:/etc/timezone:ro - /etc/localtime:/etc/localtime:ro ports: - "3000:3000" - "222:22" - "8080:3000" - "2221:22"MySQL 資料庫
Section titled “MySQL 資料庫”要將 Gitea 與 MySQL 資料庫結合使用,請將這些更改應用於上面建立的 docker-compose.yml 文件。
version: "3"
networks: gitea: external: false
services: server: image: docker.gitea.com/gitea:1.27.2 container_name: gitea environment: - USER_UID=1000 - USER_GID=1000 - GITEA__database__DB_TYPE=mysql - GITEA__database__HOST=db:3306 - GITEA__database__NAME=gitea - GITEA__database__USER=gitea - GITEA__database__PASSWD=gitea restart: always networks: - gitea volumes: - ./gitea:/data - /etc/timezone:/etc/timezone:ro - /etc/localtime:/etc/localtime:ro ports: - "3000:3000" - "222:22" depends_on: - db
db: image: docker.io/library/mysql:8 restart: always environment: - MYSQL_ROOT_PASSWORD=gitea - MYSQL_USER=gitea - MYSQL_PASSWORD=gitea - MYSQL_DATABASE=gitea networks: - gitea volumes: - ./mysql:/var/lib/mysqlPostgreSQL 資料庫
Section titled “PostgreSQL 資料庫”要將 Gitea 與 PostgreSQL 資料庫結合使用,請將這些更改應用於上面建立的 docker-compose.yml 文件。
version: "3"
networks: gitea: external: false
services: server: image: docker.gitea.com/gitea:1.27.2 container_name: gitea environment: - USER_UID=1000 - USER_GID=1000 - GITEA__database__DB_TYPE=postgres - GITEA__database__HOST=db:5432 - GITEA__database__NAME=gitea - GITEA__database__USER=gitea - GITEA__database__PASSWD=gitea restart: always networks: - gitea volumes: - ./gitea:/data - /etc/timezone:/etc/timezone:ro - /etc/localtime:/etc/localtime:ro ports: - "3000:3000" - "222:22" depends_on: - db
db: image: docker.io/library/postgres:14 restart: always environment: - POSTGRES_USER=gitea - POSTGRES_PASSWORD=gitea - POSTGRES_DB=gitea networks: - gitea volumes: - ./postgres:/var/lib/postgresql/data要使用命名卷而不是主機卷,請在 docker-compose.yml 設定中定義並使用命名卷。此更改將自動建立所需的卷。您無需擔心命名卷的權限;Docker 將自動處理該問題。
version: "3"
networks: gitea: external: false
volumes: gitea: driver: local
services: server: image: docker.gitea.com/gitea:1.27.2 container_name: gitea restart: always networks: - gitea volumes: - ./gitea:/data - gitea:/data - /etc/timezone:/etc/timezone:ro - /etc/localtime:/etc/localtime:ro ports: - "3000:3000" - "222:22"MySQL 或 PostgreSQL 容器將需要分別建立。
要基於 docker-compose 啟動此設定,請執行 docker-compose up -d,以在後臺啟動 Gitea。使用 docker-compose ps 將顯示 Gitea 是否正確啟動。可以使用 docker-compose logs 查看日誌。
要關閉設定,請執行 docker-compose down。這將停止並殺死容器。這些卷將仍然存在。
注意:如果在 http 上使用非 3000 端口,請更改 app.ini 以匹配 LOCAL_ROOT_URL = http://localhost:3000/。
通過 docker-compose 啟動 Docker 安裝後,應該可以使用喜歡的瀏覽器訪問 Gitea,以完成安裝。訪問 http://server-ip:3000 並遵循安裝嚮導。如果資料庫是通過上述 docker-compose 設定啟動的,請注意,必須將 db 用作資料庫主機名。
您可以透過環境變量設定 Gitea 的一些設定:
(預設值以粗體顯示)
APP_NAME:“Gitea: Git with a cup of tea”:應用程式名稱,在頁面標題中使用。RUN_MODE:prod:應用程式運行模式,會影響性能和調試。“dev”,“prod”或“test”。DOMAIN:localhost:此伺服器的域名,用於 Gitea UI 中顯示的 http 克隆 URL。SSH_DOMAIN:localhost:該伺服器的域名,用於 Gitea UI 中顯示的 ssh 克隆 URL。如果啟用了安裝頁面,則 SSH 域伺服器將採用以下形式的 DOMAIN 值(保存時將覆蓋此設定)。SSH_PORT:22:克隆 URL 中顯示的 SSH 端口。SSH_LISTEN_PORT:%(SSH_PORT)s:內置 SSH 伺服器的端口。DISABLE_SSH:false:如果不可用,請禁用 SSH 功能。如果要禁用 SSH 功能,則在安裝 Gitea 時應將 SSH 端口設定為0。HTTP_PORT:3000:HTTP 監聽端口。ROOT_URL:“”:覆蓋自動生成的公共 URL。如果內部 URL 和外部 URL 不匹配(例如在 Docker 中),這很有用。LFS_START_SERVER:false:啟用 git-lfs 支援。DB_TYPE:sqlite3:正在使用的資料庫類型[mysql,postgres,mssql,sqlite3]。DB_HOST:localhost:3306:資料庫主機地址和端口。DB_NAME:gitea:資料庫名稱。DB_USER:root:資料庫使用者名稱。DB_PASSWD:“empty” :資料庫使用者密碼。如果您在密碼中使用特殊字符,請使用“您的密碼”進行引用。INSTALL_LOCK:false:禁止訪問安裝頁面。SECRET_KEY:“” :全域密鑰。這應該更改。如果它具有一個值並且INSTALL_LOCK為空,則INSTALL_LOCK將自動設定為true。DISABLE_REGISTRATION:false:禁用註冊,之後只有管理員才能為使用者建立帳戶。REQUIRE_SIGNIN_VIEW:false:啟用此選項可強制使用者登入以查看任何頁面。USER_UID:1000:在容器內運行 Gitea 的使用者的 UID(Unix 使用者 ID)。如果使用主機卷,則將其與/data卷的所有者的 UID 匹配(對於命名卷,則不需要這樣做)。USER_GID:1000:在容器內運行 Gitea 的使用者的 GID(Unix 組 ID)。如果使用主機卷,則將其與/data卷的所有者的 GID 匹配(對於命名卷,則不需要這樣做)。
此處描述的定製文件應放在 /data/gitea 目錄中。如果使用主機卷,則訪問這些文件非常容易;對於命名卷,可以透過另一個容器或通過直接訪問 /var/lib/docker/volumes/gitea_gitea/_data 來完成。安裝後,設定文件將保存在 /data/gitea/conf/app.ini 中。
要將安裝升級到最新版本:
# Edit `docker-compose.yml` to update the version, if you have one specified# Pull new imagesdocker-compose pull# Start a new container, automatically removes old onedocker-compose up -d使用環境變量管理部署
Section titled “使用環境變量管理部署”除了上面的環境變量之外,app.ini 中的任何設定都可以使用以下形式的環境變量進行設定或覆蓋:GITEA__SECTION_NAME__KEY_NAME。 每次 docker 容器啟動時都會應用這些設定。 完整資訊在這裡。
...services: server: environment: - GITEA__mailer__ENABLED=true - GITEA__mailer__FROM=${GITEA__mailer__FROM:?GITEA__mailer__FROM not set} - GITEA__mailer__PROTOCOL=smtps - GITEA__mailer__HOST=${GITEA__mailer__HOST:?GITEA__mailer__HOST not set} - GITEA__mailer__USER=${GITEA__mailer__USER:-apikey} - GITEA__mailer__PASSWD="""${GITEA__mailer__PASSWD:?GITEA__mailer__PASSWD not set}"""Gitea 將為每次新安裝自動生成新的 SECRET_KEY 並將它們寫入 app.ini。 如果您想手動設定 SECRET_KEY,您可以使用以下 docker 命令來使用 Gitea 內置的方法生成 SECRET_KEY。 安裝後請妥善保管您的 SECRET_KEY,如若丟失則無法解密已加密的資料。
以下命令將向 stdout 輸出一個新的 SECRET_KEY 和 INTERNAL_TOKEN,然後您可以將其放入環境變量中。
docker run -it --rm docker.gitea.com/gitea:1 gitea generate secret SECRET_KEYdocker run -it --rm docker.gitea.com/gitea:1 gitea generate secret INTERNAL_TOKEN---services: server: environment: - GITEA__security__SECRET_KEY=[value returned by generate secret SECRET_KEY] - GITEA__security__INTERNAL_TOKEN=[value returned by generate secret INTERNAL_TOKEN]SSH 容器直通
Section titled “SSH 容器直通”由於 SSH 在容器內運行,因此,如果需要 SSH 支援,則需要將 SSH 從主機傳遞到容器。一種選擇是在非標準端口上運行容器 SSH(或將主機端口移至非標準端口)。另一個可能更直接的選擇是將 SSH 連接從主機轉發到容器。下面將說明此設定。
本指南假定您已經在名為 git 的主機上建立了一個使用者,該使用者與容器值 USER_UID/USER_GID 共享相同的 UID/GID。這些值可以在 docker-compose.yml 中設定為環境變量:
environment: - USER_UID=1000 - USER_GID=1000接下來將主機的 /home/git/.ssh 裝入容器。否則,SSH 身份驗證將無法在容器內運行。
volumes: - /home/git/.ssh/:/data/git/.ssh現在,需要在主機上建立 SSH 密鑰對。該密鑰對將用於向主機驗證主機上的 git 使用者。
sudo -u git ssh-keygen -t rsa -b 4096 -C "Gitea Host Key"在下一步中,需要在主機上建立一個名為 /usr/local/bin/gitea 的文件(具有可執行權限)。該文件將發出從主機到容器的 SSH 轉發。將以下內容添加到 /usr/local/bin/gitea:
ssh -p 2222 -o StrictHostKeyChecking=no git@127.0.0.1 "SSH_ORIGINAL_COMMAND=\"$SSH_ORIGINAL_COMMAND\" $0 $@"為了使轉發正常工作,需要將容器(22)的 SSH 端口映射到 docker-compose.yml 中的主機端口 2222。由於此端口不需要暴露給外界,因此可以將其映射到主機的 localhost:
ports: # [...] - "127.0.0.1:2222:22"另外,主機上的 /home/git/.ssh/authorized_keys 需要修改。它需要以與 Gitea 容器內的 authorized_keys 相同的方式進行操作。因此,將您在上面建立的密鑰(“Gitea 主機密鑰”)的公共密鑰添加到 /home/git/.ssh/authorized_keys。這可以透過 echo "$(cat /home/git/.ssh/id_rsa.pub)" >> /home/git/.ssh/authorized_keys 完成。重要提示:來自 git 使用者的公鑰需要“按原樣”添加,而通過 Gitea 網路介面添加的所有其他公鑰將以 command="/app [...] 作為前綴。
該文件應該看起來像:
# SSH pubkey from git userssh-rsa <Gitea Host Key>
# other keys from userscommand="/usr/local/bin/gitea --config=/data/gitea/conf/app.ini serv key-1",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty <user pubkey>這是詳細的說明,當發出 SSH 請求時會發生什麼:
- 使用
git使用者向主機發出 SSH 請求,例如git clone git@domain:user/repo.git。 - 在
/home/git/.ssh/authorized_keys中,該命令執行/usr/local/bin/gitea腳本。 /usr/local/bin/gitea將 SSH 請求轉發到端口 2222,該端口已映射到容器的 SSH 端口(22)。- 由於
/home/git/.ssh/authorized_keys中存在git使用者的公鑰,因此身份驗證主機 → 容器成功,並且 SSH 請求轉發到在 docker 容器中運行的 Gitea。
如果在 Gitea Web 介面中添加了新的 SSH 密鑰,它將以與現有密鑰相同的方式附加到 .ssh/authorized_keys 中。
注意
SSH 容器直通僅在以下情況下有效
- 在容器中使用
opensshd - 如果未將
AuthorizedKeysCommand與SSH_CREATE_AUTHORIZED_KEYS_FILE = false結合使用以禁用授權文件密鑰生成 LOCAL_ROOT_URL不變