用 Gitea 在本機架 Git Server 功能
Tags: git, gitea, docker, tutorial
Published: 2023-05-20 04:05:31

## 本篇要解決的問題

去年有寫過一篇〈[用 OneDev 在本機架 Git Server 功能](https://www.letswrite.tw/local-git-onedev/)〉，不過 OneDev 的介面都是英文的，如果要公司同事之間可以互相使用，能有中文會比較方便。加上一般我們習慣用 GitHub 介面的話，用 OneDev 會覺得差異很大。

所以，前幾天 August 花了一個晚上爬文，找到了 Gitea 這套，有中文介面，介面也比較像熟悉的 GitHub 或 GitLab，而且用 Docker 安裝在本機也很快（實測還可以裝在 NAS 上）。

---

## 安裝 Docker

Gitea 提供的安裝方式有蠻多種的：

- [From binary](https://docs.gitea.io/en-us/installation/install-from-binary/)
- [From package](https://docs.gitea.io/en-us/installation/install-from-package/)
- [From source](https://docs.gitea.io/en-us/installation/install-from-source/)
- [Linux service](https://docs.gitea.io/en-us/installation/linux-service/)
- [Windows Service](https://docs.gitea.io/en-us/installation/windows-service/)
- [With Docker Rootless](https://docs.gitea.io/en-us/installation/install-with-docker-rootless/)
- [With Docker](https://docs.gitea.io/en-us/installation/install-with-docker/)
- [Kubernetes](https://docs.gitea.io/en-us/installation/install-on-kubernetes/)
- [On cloud provider](https://docs.gitea.io/en-us/installation/install-on-cloud-provider/)

但最快的還是 Docker 安裝，因為 docker-compose.yml 的內容官方文件都提供了，之後複製貼上改一改就行。

安裝 Docker 也很簡單，從 [Docker 官方網站](https://www.docker.com/products/docker-desktop/) 下載 Docker Desktop，然後就一路無腦點擊下一步。

不過，如果是用 Windows 的朋友，安裝完後可能會遇到開不起來的問題，直接 Google「docker bios 設定」就會找到蠻多解法，August 後來是用重開機進到 BIOS 去設定解決的。

---

## 安裝 Gitea 的 dokcer-compose.yml

就跟安裝 OneDev 一樣簡單，只是這次我們有 docker-compose.yml 檔了，就不用下看起來落落長的指令。

先進到官方用 Docker 的說明文件：[With Docker](https://docs.gitea.io/en-us/installation/install-with-docker/)。

文件裡有提供幾段 docker-compose.yml 的內容，主要差別在資料庫要用 MySQL 還是 PostgreSQL。

因為前陣子在裝 Wiki.js 時，那邊的文件一直推薦 PostgreSQL，說又快又好還是什麼的，所以以下提供的檔案範例，用的資料庫是 PostgreSQL。

先在本機新增一個資料夾，因為資料夾名稱會是 Docker 上 Container 的名稱，所以取一個認得出是在 Gitea 用的，想不到取什麼的話就直接取「Gitea」就好。

接著在資料夾中新增檔案，檔名叫「docker-compoese.yml」。

以下是 August 整理了 Gitea 文件的範例，最後在本機安裝時有啟用成功的 docker-compose.yml 檔內容。

```yaml
version: "3"

networks:
  gitea:
    external: false

volumes:
  gitea_db:
    driver: local

services:
  server:
    image: gitea/gitea:latest
    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_db:/data
      - /etc/timezone:/etc/timezone:ro
      - /etc/localtime:/etc/localtime:ro
    ports:
      - "13000:3000" # 13000 改成你們要的 port
      - "10022:22" # 10022 改成你們要的 port
    depends_on:
      - db

  db:
    image: postgres:latest
    restart: always
    environment:
      - POSTGRES_USER=gitea
      - POSTGRES_PASSWORD=gitea
      - POSTGRES_DB=gitea
    networks:
      - gitea
    volumes:
      - ./postgres:/var/lib/postgresql/data
```

大家 Copy 完這個內容貼到你們的 docker-compose.yml 檔後，有幾個地方會需要修改。

看到 USER、PASSWORD 的字眼，就是在設定帳密，因為這邊 Gitea 用的是 PostgresSQL 資料庫，所以一邊改了，另一邊也要跟著改。

以下二行，實測裝在 NAS 等主機時可能會報錯，可以刪掉：

```yaml
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
```

以下二行，請改成你們自己要用的 Port：

```yaml
- "13000:3000" # 13000 改成你們要的 port
- "10022:22" # 10022 改成你們要的 port
```

---

## 安裝 Gitea 流程

開啟 Docker Desktop，Docker 必須要是 running 的狀態。

用終端機開啟我們剛放了 docker-compose.yml 的資料夾。

輸入指令：

```
$ docker-compose up -d
```

按下 Enter 後，就可以去泡杯咖啡或跟家人聊個天，或是去教寵物握手跟坐下，因為第一次安裝，需要的 Images 都要 pull 下來，要等一下，大概花的時間是這樣：

![用 docker-compose 安裝 Gitea](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/fd6rr1dhrr5g56jvppa1.png)

嗯……不到 1 分鐘，喔不，不能教會貓咪握手了~~

打開 Docker Desktop，Containers 裡會看到新增了一個「gitea」：

![新增 gitea container](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qyeaj68hdor0sint1s52.png)

gitea 裡面的 gitea，在 Port(s) 裡會出現我們設定的 Port 連結，點擊後面是 3000 的，就會看到最後的設定畫面：

![最後的安裝步驟](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/n2wi4pa05ct9t7gslzt7.png)

這邊就是設定資料庫跟 Gitea 的基本訊息。

資料庫的部份不用動，因為我們在 docker-compose.yml 上都寫好了。

可選設定建議「管理員帳戶設定」的部份先把管理員帳號設定好，不設的話就會是第一個註冊的人是管理員。

最後按下「安裝 Gitea」，就會看到一個喝茶畫面：

![喝茶安裝中](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xc99og0zgneis3zd3qvj.png)

茶喝完後，就安裝好了，因為 August 有先設定管理員帳號，所以安裝完成會自動登入：

![安裝完成](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/e8e4bf3kozfu4jehmla7.png)

鏘鏘~這樣就安裝完成了，是不是很簡單？

預設開啟的網址會是 localhost，如果是安裝好要跟其它同事共用，同區網下把 localhost 改成本機的 IP 就行。

---

## 刪除跟彩蛋

最後補一段怎麼刪除我們剛用 Docker 安裝的 Gitea。

一樣用終端機開啟我們 Gitea 的資料夾，命令為：

```
$ docker-compose down
```

按下 Enter 後……你沒時間去泡咖啡的，因為刪除比安裝還快：

![刪除 Gitea](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/abq5qka1h8ejtvdhjbe5.png)

不到 5 秒。

Docker 會刪除用到的 Containers、Images，但，but，西卡西，Volumes 是不會刪除的，記得到 Volumes 裡刪掉「gitea_gitea_db」。

最後的最後，補一個彩蛋，是 Docker 的擴充功能，可以清掉安裝或沒清乾淨的快取：[Disk usage](https://open.docker.com/extensions/marketplace?extensionId=docker/disk-usage-extension)。

安裝好後點開選單上的 Disk usage，就會看到可以清理的東西：

![Disk usage](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/g0egzth8pz4q55stfkbu.png)

點擊「Reclaim space」，選擇要刪掉的東西，就可以完整刪除，是不是很簡單很方便？