docker compose部署gitea
参考:
- 官方: https://docs.gitea.io/en-us/install-with-docker/#sshing-shim-with-authorized_keys
注意事项:
- linux上新建一个git用户
- 生成ssh密钥时要选择
ed25519
算法 - 编辑文件时注意权限, 特别是gitea数据和ssh文件的权限, 必须保证是 git 用户可读/写/执行的, 不要改成root/其他用户组的
环境:
默认linux环境, 已安装好docker和docker compose, 具备root权限, docker设置加速源
新建git用户
1
2
3
4
5
6
7
8
9
10
11
12
| # 添加用户
sudo useradd -m git
# 设置密码
sudo passwd git
# 不设置密码/删除密码, 也可以禁止ssh登录
sudo passwd -d git
# 安全相关, 禁止ssh登录
# sudo usermod -L git # lock
# usermod -U git # unlock
|
git用户添加到docker用户组
1
2
3
4
| sudo usermod -aG docker git && newgrp docker
# 如果没有docker用户组
sudo groupadd docker
|
gitea
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
| cd 你的目录
mkdir data
# 获取git用户的uid和gid
id git
vim docker-compose.yml
# 把USER_UID, USER_GID改成实际获取的
# 127.0.0.1:2222:22 也是为了ssh直通
===
version: "3"
networks:
gitea:
external: false
services:
server:
image: gitea/gitea:latest
container_name: gitea
environment:
- USER_UID=1001 # git用户的uid, cat /etc/passwd 就能查看
- USER_GID=1001
restart: unless-stopped
networks:
- gitea
volumes:
- ./data:/data
- /home/git/.ssh/:/data/git/.ssh
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
ports:
- "3000:3000"
- "127.0.0.1:2222:22"
===
docker compose up -d
|
初始化:
- 数据库可以选 SQLite
- 初始化后如果需要修改
1
2
3
4
5
| # 注意文件权限, 数据都是git用户和git用户组的
sudo -u git vim ./data/gitea/conf/app.ini
# 然后重启容器
# 也可以通过环境变量的方法来写入ini
|
- web端的端口是3000, 有需要设置nginx转发
- 导入仓库,
app.ini
需要添加配置
1
2
| [migrations]
ALLOW_LOCALNETWORKS = true
|
- webhook需要添加配置
1
2
| [webhook]
ALLOWED_HOST_LIST = *
|
ssh直通下载
sshing-shim-with-authorized_keys
- 配置ssh文件
是为了ssh直通下载
因为一般22端口被服务器登录用了, 假设gitea容器使用了2222端口, 那么用户使用 ssh clone时没有指定端口, 需要把22端口转到容器的2222端口, 并且需要把参数也传进去
1
2
3
4
5
| # openssh新版移除了rsa加密
sudo -u git ssh-keygen -t ed25519 -C "Gitea Host Key"
# 复制公钥信息, 是用来登录容器里的git用户的,后面会把整个.ssh映射到容器里
sudo -u git cat /home/git/.ssh/id_ed25519.pub | sudo -u git tee -a /home/git/.ssh/authorized_keys
chmod 600 /home/git/.ssh/authorized_keys
|
- 在你的pc上, 生成公钥和私钥
1
| ssh-keygen -t ed25519 -C 'test@gmail.com' -f ~/.ssh/gitea_ed25519
|
- 登录 gitea, 打开设置界面, 添加SSH 密钥, 把pc上生成的公钥添加进去, 然后进行验证(==注意, 不是服务器上的公钥和私钥==)
- 查看服务器上的
/home/git/.ssh/authorized_keys
, 它的结构类似这样
1
2
3
4
| # SSH pubkey from git user
ssh-ed25519 xxxxxxxxxx Gitea Host Key
# gitea public key
command="/usr/local/bin/gitea --config=/data/gitea/conf/app.ini serv key-10",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty,no-user-rc,restrict ssh-ed25519 xxxxxxxxxx xxxxxxxxxx
|
- 添加脚本
1
2
3
4
5
6
7
| # 脚本的路径可能每个版本的gitea都不相同,最好看下官方的最新文档
# 对应上一步的command后面的路径
cat <<"EOF" | sudo tee /usr/local/bin/gitea
#!/bin/sh
ssh -p 2222 -o StrictHostKeyChecking=no git@127.0.0.1 "SSH_ORIGINAL_COMMAND=\"$SSH_ORIGINAL_COMMAND\" $0 $@"
EOF
sudo chmod +x /usr/local/bin/gitea
|
- 个人pc上编辑config文件
1
2
3
4
5
6
7
8
9
| vim ~/.ssh/config
===
# gitea
Host 你的gitea host
HostName 你的gitea hostname
User git
PreferredAuthentications publickey
IdentityFile ~/.ssh/gitea_ed25519
===
|
- 测试 ssh