A painless self-hosted Git service. Gitea is a community managed lightweight code hosting solution written in Go.
部署
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
34
35
36
37
38
39
40
41
42
43
44
45
|
version: '3.7'
services:
gitea:
image: gitea/gitea:1.9
container_name: gitea
hostname: gitea
ports:
- 22:22/tcp
environment:
- USER_UID=1000
- USER_GID=1000
restart: always
volumes:
- ${VOLUME_PREFIX}/gitea:/data
networks:
- default
labels:
traefik.enable: true
traefik.port: 3000
traefik.frontend.rule: Host:git${HOST_DOMAIN}
traefik:
image: traefik:alpine
container_name: traefik
restart: always
ports:
- 80:80
- 443:443
networks:
- default
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- ./traefik.toml:/traefik.toml
- ${VOLUME_PREFIX}/traefik/acme.json:/acme.json
labels:
traefik.enable: true
traefik.frontend.rule: "Host:traefik.tosone.cn"
# get md5 from htpasswd or http://www.htaccesstools.com/htpasswd-generator/
# and then double all $ to $$ to avoid docker-compose
traefik.frontend.auth.basic: "tosone:$$apr1$$2DvxBXHm$$7iRM18fGqs30h2r0gDZK0/"
traefik.port: 8080
networks:
default:
external:
name: ${DOCKER_NETWORK:-webproxy}
|
直接执行,如下命令就可以运行了:
1
|
docker-compose up --force-recreate -d gitea
|
按照如上的配置如上的命令执行之后,是访问不到的,因为没有暴露任何服务到 Docker 外部。就算把服务暴露出来也仅仅只是一个简单的 http 的 git server,没什么高级的。我们需要一个高级的实现 https 和 ssh,还有存储备份。
HTTPS
实现 https 的方式有很多,这里选用 traefik 这个软件,可以实现 HTTPS 的自动续期,负载均衡,蓝绿部署等等,配置比较复杂,我们需要的配置很简单。配置如下:
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
|
logLevel = "ERROR"
defaultEntryPoints = ["https","http"]
[api]
debug = true
entryPoint = "dashboard"
[entryPoints]
[entryPoints.http]
address = ":80"
[entryPoints.http.redirect]
entryPoint = "https"
[entryPoints.https]
address = ":443"
[entryPoints.https.tls]
[entryPoints.dashboard]
address = ":8080"
[docker]
endpoint = "unix:///var/run/docker.sock"
watch = true
[acme]
email = "i@tosone.cn"
storage = "acme.json"
entryPoint = "https"
onHostRule = true
[acme.httpChallenge]
entryPoint = "http"
|
运行如下启动 traefik:
1
|
docker-compose up --force-recreate -d traefik
|
OK,这时候再启动你的 gitea,然后把相应的域名解析到你的服务器上,你就完成了一个 https 的服务部署了,因为 traefik 可以监听所有 docker 上的容器的 label 参数,然后代理对应容器的服务成 HTTPS
SSH
还不满足,Git 的 ssh 功能还不能用,因为服务器的 22 端口和这个 service 需要监听的端口是冲突的,那么需要一边让路。这个端口做不到复用,这里的方案是服务器的 ssh 端口为 git ssh 端口让步。OK,上边的那个 docker-compose.yml 文件不需要任何修改,修改本机的 /etc/ssh/sshd_config
里边有个关于 Port
的配置修改为其他端口,暂且认为你修改成了 10,然后重启 sshd
的服务 systemctl restart sshd
,OK,现在 gitea 的 SSH 22 端口的服务是可以使用了,但是有个后遗症,导致我们以后登录服务器需要用这样的命令登陆 ssh -p 10 user@10.10.10.10
,每次需要我们手动指定这个端口号,有些人会受不了,可以这么做,修改你本地的 $HOME/.ssh/config
这个文件,添加如下内容:
1
2
3
4
|
Host my_saoqi_host
Hostname 10.10.10.10
User user
Port 10
|
以后你登录你的主机就可以这样了 ssh my_saoqi_host
,是不是很骚气?
存储备份
你的 Gitea 可以用 HTTPS 了,也可以 SSH 了,但是主机突然没了怎么办?那就需要我们定时的备份一下存储到云存储上,这里选用 OSS。经过我的一番调教每次运行如下命令直接将 Gitea 的内容被增量备份 OSS:
1
|
ossutil64 cp -r -u -c .ossutilconfig /data/volume oss://your-bucket/volume
|
将以上内容加入到 crond 中就可以定时备份存储到 OSS 上了,是增量更新,OSS 上的存储也不贵,你总是内网传输这部分内容,所以不会有流量传输的费用,仅有存储费用。
ossutil64 的文档在这里。
总结
完整的项目配置下载地址在这里。
OK,到这里配置做完了,每次你启动服务只需要运行如下两个命令:
1
2
|
make traefik
make gitea
|