作為寫過程式的人,Git是必備工具 除非只是寫好玩的
常見的線上Git儲藏庫就是 GitHub、Gitlab、Bitbucket
如果對於這些公開平台不放心,或是程式碼不想外流,那就自己架私服吧!
常見的有 Gitea、gogs或是Gitlab
Gitlab裡面包含 CI/CD 工具等功能,十分肥大
想要一個安裝簡單、有完整git功能又有中文介面,那就選 Gitea 吧!
安裝
說明文件
Gitea 提供很多安裝方式,我這邊選則用 docker 手邊有現成的docker伺服器,不用白不用
docker-compose 安裝說明
選擇版本
Gitea 的官方映像可以在 Docker Hub 找到
版本 tag 與 Gitea 的 Github 上發布的版本號一樣
latest
則是最新的穩定版
選擇資料庫
Gitea 支援多種資料庫,例如 mysql
mariadb
PostgreSQL
安裝過程
使用 docker-compose 安裝
我這邊選用 mysql 資料庫
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
version: "2"
services:
server:
image: gitea/gitea:1.15.6-rootless
environment:
- GITEA__database__DB_TYPE=mysql
- GITEA__database__HOST=db:3306
- GITEA__database__NAME=gitea
- GITEA__database__USER=gitea
- GITEA__database__PASSWD=gitea
restart: always
volumes:
- ./data:/var/lib/gitea
- ./config:/etc/gitea
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
ports:
- "10080:3000"
- "10022:22"
depends_on:
- db
db:
image: mysql:8
restart: always
environment:
- MYSQL_ROOT_PASSWORD=gitea
- MYSQL_USER=gitea
- MYSQL_PASSWORD=gitea
- MYSQL_DATABASE=gitea
volumes:
- ./mysql:/var/lib/mysql
|
執行
完成後可以用 http://hostname:10080 連到你剛剛架的 gitea
SSH 要使用 10022 例如
1
|
git clone ssh://git@hostname:10022/username/repo.git
|
如果想用預設 Port
1
2
3
4
5
6
7
8
9
|
#將這段
ports:
- "10080:3000"
- "10022:22"
#換成這段
ports:
- "80:3000"
- "22:22"
|
到這邊自己用應該夠了,後續如果要在外網使用,建議還是設定網段 + SSl憑證 (弄成https) 會比較安全
設定 revers proxy
我自己是使用 traefik 做 revers proxy
由於之前是用 haproxy ,改用 traefik 之後還是習慣用檔案手動設定
後面的範例會以設定檔的方式為主,也可以參考官方文件改成 docker labels
https
我的 traefik 有設定監看資料夾的動態設定檔,service 跟 router 分別在不同檔案
如果沒有用動態設定檔的話,設定應該都在 traefik.toml 只不過改完後要重開
啟用動態設定檔
directory 可以自行更換
1
2
3
4
|
[providers]
[providers.file]
directory = "/etc/traefik/dynamic_configs"
watch = true
|
設定 let’s encrypt 自動申請憑證
驗證方式有幾種可以選,一般常用的是 http Challenge
我的網站有套用 cloudflare 保護,DNS 代理就轉過去 cloudflare 了
外加 cloudflare 有支援 dns Challenge,乾脆就用這種 DNS 驗證比較省事
如果你的網域租賃商有提供 dns Challenge,也可以用這種方式驗證比較簡單
只要設定一次,可以套用多個網域
resolvers 可以改成你的網域租賃商,我這邊寫的是 cloudflare 的 DNS
如果要套用 cloudflare 的防護,這邊不用改
1
2
3
4
5
6
7
8
|
[certificatesResolvers.cloudflare-resolver.acme]
email = "[email protected]"
storage = "/etc/traefik/acme.json"
[certificatesResolvers.cloudflare-resolver.acme.dnsChallenge]
provider = "cloudflare"
delayBeforeCheck = 0
resolvers = ["1.1.1.1:53", "1.0.0.1:53"]
|
設定 entry point
1
2
3
4
5
6
7
8
9
10
11
|
[entryPoints]
[entryPoints.ssh]
address = ":22"
[entryPoints.web]
address = ":80"
[entryPoints.websecure]
address = ":443"
[entryPoints.websecure.http.tls]
certResolver = "cloudflare-resolver"
|
添加後端跟路由
添加 http service
1
2
3
4
5
6
7
8
9
10
|
[http.services]
[http.services.gitea.loadBalancer]
# healthCheck 是讓 traefik 檢查 gitea 伺服器是否還活著,不要可以去掉
[http.services.gitea.loadBalancer.healthCheck]
scheme = "http"
path = "/"
interval = "10s"
timeout = "3s"
[[http.services.gitea.loadBalancer.servers]]
url = "http://gitea-ip:3000"
|
再來是添加 router
1
2
3
4
5
6
7
|
[http.routers]
[http.routers.git]
entryPoints = ["websecure"]
rule = "Host(`git.your.domain`)"
service = "gitea"
[http.routers.git.tls]
certResolver = "cloudflare-resolver"
|
這樣就完成了
ssh
git 使用 key 做身分認證時必須要走 ssh 的協定,如果要使用就必須做好轉發
在 revers proxy 設定連接 就直接轉到 gitea 伺服器