参考
项目文档:关于Gitea | Gitea Documentation
部署流程
数据库准备
首先要准备好数据库环境,这里使用mysql
创建一个将被 Gitea 使用的数据库用户,并使用密码进行身份验证。
CREATE USER 'gitea' IDENTIFIED BY '替换成你的密码';
使用 UTF-8 字符集和大小写敏感的排序规则创建数据库。
CREATE DATABASE giteadb CHARACTER SET 'utf8mb4' COLLATE 'utf8mb4_bin';
将数据库上的所有权限授予上述创建的数据库用户。
GRANT ALL PRIVILEGES ON giteadb.* TO 'gitea';
FLUSH PRIVILEGES;
配置 SSH 直通
由于使用容器,SSH 的端口一般不是22,因此需要将 SSH 连接从主机转发到容器,文档链接 SSH 容器直通
需要在主机创建一个用户 git ,后续 SSH 容器直通有用
sudo useradd git
查看用户 uid 和 gid
id git
#输出: 用户id=1001(git) 组id=1001(git) 组=1001(git)
递归创建目录 /home/git/.ssh
mkdir -p /home/git/.ssh
设置 git 用户家目录
usermod -d /home/git git
在主机使用 git 用户创建 SSH 密钥对
sudo -u git ssh-keygen -t rsa -b 4096 -C "Gitea Host Key"
递归授予 git 用户权限
这一步很重要,因为以 root 身份创建的文件 git 用户没法随便读写,这样可以确保 git 用户拥有自己的权限
chown git:git -R /home/git
创建文件 /usr/local/bin/gitea
sudo vim /usr/local/bin/gitea
在该文件写入如下内容,注意 222 改成你部署时映射的端口
ssh -p 222 -o StrictHostKeyChecking=no git@127.0.0.1 "SSH_ORIGINAL_COMMAND=\"$SSH_ORIGINAL_COMMAND\" $0 $@"
输入 :wq
保存退出
授予可执行权限
chmod a+x /usr/local/bin/gitea
添加密钥
echo "$(cat /home/git/.ssh/id_rsa.pub)" >> /home/git/.ssh/authorized_keys
通过Docker部署
services:
gitea:
image: commitgo/gitea-ee
container_name: gitea
environment:
- USER_UID=1001 # 填写上一步输出的 uid
- USER_GID=1001 # 填写上一步输出的 gid
- GITEA__database__DB_TYPE=mysql
- GITEA__database__HOST=mysql57:3306
- GITEA__database__NAME=giteadb
- GITEA__database__USER=gitea
- GITEA__database__PASSWD=替换成你的密码
- SSH_PORT=22 # 克隆 URL 中显示的 SSH 端口,填写容器对外暴露的ssh端口,如果配置 ssh 直通可以忽视
- DOMAIN=example.com # http方式克隆的域名
- SSH_DOMAIN=example.com # ssh方式克隆的域名
- ROOT_URL="http://example.com/" # 外部访问url
restart: always
networks:
- mysql
- gitea
volumes:
- ./data:/data
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
- /home/git/.ssh/:/data/git/.ssh # ssh 容器直通
ports:
- "3000:3000"
- "127.0.0.1:222:22" # 因为 222 端口不需要暴露给外界,所以将其映射到主机的 `localhost`
networks:
mysql:
external: true
gitea:
name: gitea
配置反向代理
部分配置文件如下,参考了官方文档:反向代理 | Gitea Documentation
server {
...
location / {
client_max_body_size 512M;
proxy_pass http://localhost:3000;
proxy_set_header Connection $http_connection;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
效果演示
部署成功
踩过的坑
配置直通时没注意用户权限问题,导致个人的 SSH 密钥添加不上去,这是由于使用了 root 用户创建的目录 git 用户无法访问所致