# docker compose部署gitea 参考: 1. 官方: https://docs.gitea.io/en-us/install-with-docker/#sshing-shim-with-authorized_keys 注意事项: 1. linux上新建一个git用户 2. 生成ssh密钥时要选择 `ed25519` 算法 3. 编辑文件时注意权限, 特别是gitea数据和ssh文件的权限, 必须保证是 git 用户可读/写/执行的, 不要改成root/其他用户组的 环境: 默认linux环境, 已安装好docker和docker compose, 具备root权限, docker设置加速源 ## 新建git用户 ```sh # 添加用户 sudo useradd -m git # 设置密码 sudo passwd git # 不设置密码/删除密码, 也可以禁止ssh登录 sudo passwd -d git # 安全相关, 禁止ssh登录 # sudo usermod -L git # lock # usermod -U git # unlock ``` ## git用户添加到docker用户组 ```sh sudo usermod -aG docker git && newgrp docker # 如果没有docker用户组 sudo groupadd docker ``` ## gitea ```sh 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 ``` 初始化: 1. 数据库可以选 SQLite 2. 初始化后如果需要修改 ```sh # 注意文件权限, 数据都是git用户和git用户组的 sudo -u git vim ./data/gitea/conf/app.ini # 然后重启容器 # 也可以通过环境变量的方法来写入ini ``` 3. web端的端口是3000, 有需要设置nginx转发 4. 导入仓库, `app.ini`需要添加配置 ```toml [migrations] ALLOW_LOCALNETWORKS = true ``` 5. webhook需要添加配置 ```toml [webhook] ALLOWED_HOST_LIST = * ``` ### ssh直通下载 [sshing-shim-with-authorized_keys](https://docs.gitea.com/installation/install-with-docker#sshing-shim-with-authorized_keys) 1. 配置ssh文件 > 是为了ssh直通下载 > 因为一般22端口被服务器登录用了, 假设gitea容器使用了2222端口, 那么用户使用 ssh clone时没有指定端口, 需要把22端口转到容器的2222端口, 并且需要把参数也传进去 ```sh # 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 ``` 2. 在你的pc上, 生成公钥和私钥 ```sh ssh-keygen -t ed25519 -C 'test@gmail.com' -f ~/.ssh/gitea_ed25519 ``` 3. 登录 gitea, 打开设置界面, 添加SSH 密钥, 把pc上生成的公钥添加进去, 然后进行验证(==注意, 不是服务器上的公钥和私钥==) 4. 查看服务器上的`/home/git/.ssh/authorized_keys`, 它的结构类似这样 ```sh # 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 ``` 5. 添加脚本 ```sh # 脚本的路径可能每个版本的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 ``` 6. 个人pc上编辑config文件 ```sh vim ~/.ssh/config === # gitea Host 你的gitea host HostName 你的gitea hostname User git PreferredAuthentications publickey IdentityFile ~/.ssh/gitea_ed25519 === ``` 7. 测试 ssh ```sh ssh -T git@你的gitea域名 ```