如何在 Ubuntu 20.04 上使用 Docker 安裝 Gitea

Gitea 是一個免費的開源軟件包,用於自託管 Git 服務器。 它還提供協作功能,如錯誤跟踪、維基和代碼審查。 Gitea 是一個社區驅動的輕量級代碼解決方案,用 Go 編寫。

開發人員在工作時需要定期將他們的代碼更改合併到一個中央存儲庫中。 您可能需要為您的團隊擁有一個私人中央存儲庫,您將自己託管和管理該存儲庫。 為此,您可以使用 Gitea。 它類似於 GitHub、Bitbucket 等。

在本教程中,我們將學習如何 使用 docker 安裝 GiteaUbuntu 20.04.

先決條件

  • 一個安裝了 Ubuntu 20.04 的節點
  • 一個用戶 sudo 特權

第 1 步:在 Ubuntu 上安裝 Docker

Gitea 從 Docker 中心提供其 Docker 鏡像的最新穩定版本。 它可以從源代碼、二進製文件以及作為包安裝。 這裡我們部署為 Docker 鏡像。

要安裝 docker,您需要安裝一些先決條件:

$ sudo apt install apt-transport-https ca-certificates curl software-properties-common

現在讓我們添加 docker 存儲庫的 GP 密鑰:

$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

現在將 Docker 添加到 APT 源。 它會自動更新緩存。

$ sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu focal stable"

現在使用以下命令安裝 docker:

$ sudo apt install docker-ce

將用戶添加到 docker 組,以便可以在不使用 docker 命令的情況下使用 sudo 特權:

$ sudo usermod -aG docker username

第 2 步:運行 Nginx docker

要啟用 HTTPS,您可以使用 TLS 終止代理,例如 Nginx、Apache2 或 Caddy。 在我們的例子中,我們將運行一個獨立的容器作為我們的 Nginx 反向代理。

$ docker run -d --name nginx -p 80:80 -p 443:443 -v /etc/nginx/htpasswd:/etc/nginx/htpasswd -v /etc/nginx/vhost.d:/etc/nginx/vhost.d:ro -v /etc/nginx/certs:/etc/nginx/certs -v /var/run/docker.sock:/tmp/docker.sock:ro etopian/nginx-proxy

當您集成證書時,它將幫助我們將所有默認 HTTP 流量重定向到 HTTPS。 您應該注意到映射卷以集成您的證書 /etc/nginx/certs

現在在防火牆上打開端口 80 和 443:

$ sudo ufw allow 80,443/tcp

另外,如果還沒有,請確保在啟用 UFW 之前打開 ssh

$ sudo ufw allow 'OpenSSH'

如果還沒有,現在啟用 UFW

$ sudo ufw enable

Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
Firewall is active and enabled on system startup

第 3 步:運行 MySQL docker

Gitea 需要一個數據庫來保存它的數據。 Gitea 支持 MySQL/MariaDB、PostgreSQL、SQLite 和 MSSQL。 在這裡,我們將運行一個 MySQL 容器來保存所有數據。

$ docker run -d --name mysql-gitea -e MYSQL_ROOT_PASSWORD=o$su876HG@zvsRt3BT -v /opt/docker-volume/mysql-gitea:/var/lib/mysql mysql:5.7

我們可以檢查我們的容器是否正在運行

$ docker ps

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6d41fec8b0e4 mysql:5.7 "docker-entrypoint.s…" 2 hours ago Up 2 hours 3306/tcp, 33060/tcp mysql-gitea
ec9d83a3944e etopian/nginx-proxy "forego start -r" 3 days ago Up 24 minutes 0.0.0.0:80->80/tcp, :::80->80/tcp, 0.0.0.0:443->443/tcp, :::443->443/tcp nginx

默認情況下,Gitea 偵聽端口 3000 上的連接以及 HTTP 和 HTTPS 端口上的反向代理。 如果您有防火牆,請確保端口已打開以訪問 Gitea Web 界面。

讓我們看看我們的 MySQL 容器的一些細節,比如 IP 地址,因為我們稍後會需要它

$ docker inspect mysql-gitea

[
{
"Id": "6d41fec8b0e4b6ca465444d5cfea11913decddfd7586f4796702463cf08897fe",
"Created": "2021-10-21T23:48:20.709365573Z",
...
...
"Networks": {
"bridge": {
"IPAMConfig": null,
"Links": null,
"Aliases": null,
"NetworkID": "3f0b32613606db9e0761af15b7fa5d7f7c3b86f4d3b4668d574c579b9468915f",
"EndpointID": "f029fc1797c70d090da19d30cb31ca34c1b6baf4537a807397e931f87262f867",
"Gateway": "172.17.0.1",
"IPAddress": "172.17.0.3",
"IPPrefixLen": 16,
"IPv6Gateway": "",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"MacAddress": "02:42:ac:11:00:03",
"DriverOpts": null
}
...
...

現在讓我們連接到 MySQL 容器

$ docker container exec -it mysql-gitea bash

然後訪問MySQL命令行

# mysql -u root -po$su876HG@zvsRt3BT

現在為 Gitea 創建數據庫和用戶

mysql> CREATE USER 'gitea-user'@'%' IDENTIFIED BY '34@zv$TKji@s097BB';

mysql> CREATE DATABASE giteadb;

mysql> GRANT ALL PRIVILEGES ON giteadb.* TO 'gitea-user'@'%';

mysql> FLUSH PRIVILEGES;

mysql> exit;

現在也退出容器

# exit;

步驟 4:配置 SSL 證書

為了通過安全域名訪問您的 Gitea,您需要將 SSL 證書複製到 Nginx 文件夾中。 您可以使用免費的 Let’s Encrypt 證書或來自證書頒發機構的證書。

複製證書

$ cp gitea.websitefortesting.com.crt /etc/nginx/certs/

複製密鑰

$ cp gitea.websitefortesting.com.key /etc/nginx/certs/

第五步:運行Gitea docker

運行Gitea,我們需要指明之前已經啟動的MySQL容器的一些信息,例如:

  • 數據庫類型 mysql
  • mysql容器的地址ip
  • 數據庫的名稱
  • 數據庫用戶名
  • 數據庫用戶密碼
  • gitea 使用的端口

$ docker run -d --name gitea-selfhosted -v /opt/docker-volume/gitea-selfhosted:/data -p 3000:3000 -e VIRTUAL_HOST=gitea.websitefortesting.com -e VIRTUAL_PORT=3000 -e USER_UID=1001 -e USER_GID=1001 -e DB_TYPE=mysql -e DB_HOST=172.17.0.3:3306 -e DB_NAME=giteadb -e DB_USER=gitea-user -e DB_PASSWD=34@zv$TKji@s097BB gitea/gitea:1.8

我們可以檢查它是否正在運行

$ docker ps

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
321b870a0735 gitea/gitea:1.8 "/usr/bin/entrypoint…" 11 seconds ago Up 10 seconds 22/tcp, 0.0.0.0:3000->3000/tcp, :::3000->3000/tcp gitea-selfhosted
6d41fec8b0e4 mysql:5.7 "docker-entrypoint.s…" 2 hours ago Up 3 minutes 3306/tcp, 33060/tcp mysql-gitea
ec9d83a3944e etopian/nginx-proxy "forego start -r" 3 days ago Up 29 minutes 0.0.0.0:80->80/tcp, :::80->80/tcp, 0.0.0.0:443->443/tcp, :::443->443/tcp nginx

現在您可以嘗試使用 URL https://giteadomain.com 訪問 Gitea

現在轉到“登錄”以繼續安裝過程。 您可以個性化一些信息,例如站點標題。

Gitea網頁界面數據庫設置

確保在需要的地方指明域名。 還要指出管理員帳戶的信息

Gitea Web 界面域和 admin 帳號設定

安裝完成後,您將登錄

吉泰儀錶盤

您可以創建一個新的存儲庫

創建新的存儲庫

你有第一個倉庫

Gitea第一個repo

結論

現在您知道在 Ubuntu 20.04 上使用 Docker 安裝 Gitea 的所有步驟——您的代碼的私有中央存儲庫。 您將能夠根據自己的需要管理它。