Gitea代码仓库
docker-compose安装
本节已假定, 已安装Docker和docker-compose
准备一个用户 (以git用户为例) 该用户满足以下条件
可以 sudo 到 root(管理用户)
可以 ssh 登陆
创建用户
使用 adduser 快速创建git用户
记录用户的GID和UID
1 2 3 4 5 6 sudo adduser git cat /etc/passwd | grep git
将 git 用户提升为管理用户
1 2 3 4 5 6 7 8 git ALL=(ALL:ALL) NOPASSWD: ALL
ps: 若权限不足需要修改权限
配置允许 SSH 登录
1 2 3 PermitRootLogin yes AllowUsers git AllowUsers ubuntu
重启使其生效
安装Gitea
1 2 3 4 5 6 mkdir /home/git/giteacd /home/git/giteavi docker-compose.yml
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 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 version: "3" networks: gitea: name: gitea driver: bridge external: false services: server: image: gitea/gitea:latest container_name: gitea_server restart: always networks: - gitea ports: - "3333:3000" - "2222:22" environment: - RUN_USER=git - USER_UID=1002 - USER_GID=1002 - APP_NAME=o2packs-git - RUN_MODE=prod - DISABLE_REGISTRATION=true - SHOW_REGISTRATION_BUTTON=false - REQUIRE_SIGNIN_VIEW=true - PROTOCOL=http - HTTP_PORT=3000 - DOMAIN=175.178.177.191 - LANDING_PAGE=home - ROOT_URL=http://175.178.177.191:3333 - LFS_START_SERVER=true - DB_TYPE=sqlite3 volumes: - ./gitea:/data - /etc/timezone:/etc/timezone:ro - /etc/localtime:/etc/localtime:ro - /home/git/.ssh/:/data/git/.ssh
安装引导 (初始化Gitea) 初始配置
管理员账号设置
完善Gitea配置
1 2 3 4 5 6 7 8 9 vi ./gitea/gitea/conf/app.ini SSH_PORT = 2222
1 2 docker-compose down docker-compose up -d
验证安装(http和ssh链接)
方式1: 创建一个空的测试项目
方式2: ssh密钥验证
SSH密钥配置不在本文档的范围之内, 「已假定密钥已配置」
1 2 3 4 5 6 7 ssh git@124.222.237.29 -p 2222 PTY allocation request failed on channel 0 Hi there, root! You've successfully authenticated with the key named 879515820@qq.com, but Gitea does not provide shell access. If this is unexpected, please log in with password and setup Gitea under another user. Connection to 124.222.237.29 closed.
配置SSH直通 (可选) 作用: 建立SSH直通, 可以在克隆的时候不带端口 (无需修改app.ini配置) PS: 配置SSH直通其实挺折腾的, 但是能够了解更多SSH知识.
官网教程: https://docs.gitea.io/en-us/install-with-docker/#ssh-container-passthrough
步骤:
在上述的yml配置中, gitea的SSH认证和git用户SSH认证已经公用认证文件 「/home/git/.ssh/authorized_keys」
建立SSH直通 「宿主机和Docker 直通」
将密钥对加入认证信息
创建gitea可执行文件
确认准确性
建立SSH直通 1 2 3 4 5 6 sudo -u git ssh-keygen -t rsa -b 4096 -C "Gitea Host Key" eval `ssh-agent -s`ssh-add /home/git/.ssh/id_rsa
将密钥对加入认证信息(authorized_keys) 1 2 3 4 5 sudo -u git cat /home/git/.ssh/id_rsa.pub | sudo -u git tee -a /home/git/.ssh/authorized_keys sudo -u git chmod 600 /home/git/.ssh/authorized_keys
创建gitea可执行文件 1 2 3 4 5 cat <<"EOF" | sudo tee /usr/local/bin/giteassh -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
确认准确性
理解和说明
公用authorized_keys认证文件
使用公钥 o2packs_rsa
进行链接时, 因为有command=
选项, 会直接执行 /usr/local/bin/gitea
二进制文件
当客户端向SSH服务发起请求时 如: git clone git@domain:user/repo.git
客户端将尝试与服务器进行身份验证,依次将一个或多个公钥传递给主机
假设匹配公钥 o2packs_rsa
, 执行 command=
中的指令
宿主机SSH服务器 创建一个 用户为 git
的会话 并打开宿主机到容器的SSH
将其余命令参数直接传递给容器中
整体意思: git用户SSH链接的部分SSH命令将由gitea
服务器验证和授权
确认密钥对是否正确:
1 2 3 4 5 ssh-rsa AAAAB3....xxx....v4Q== Gitea Host Key command ="/usr/local/bin/gitea --config=/data/gitea/conf/app.ini serv key-1" ,no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty,no-user-rc,restrict ssh-rsa AAAA...xxx... o2packs_rsa
修改docker-compose的端口映射 (可选)
1 2 3 ports: - "127.0.0.1:2222:22"
二进制安装 步骤:
下载二进制包
移动包至 bin 目录并修改权限
建立 Gitea 的专属目录
为 Gitea 创建专属用户(git)及分配权限
创建 Gitea 服务, 设置开机自启
配置 Gitea
下载和移动文件 1 2 3 4 5 6 7 8 9 wget -O gitea https://dl.gitea.io/gitea/1.16.4/gitea-1.16.4-linux-amd64 sudo chmod +x gitea sudo mv gitea /usr/local/bin
建立 Gitea 的专属目录 1 2 3 4 5 6 mkdir /var/lib/giteamkdir /var/lib/gitea/{custom,data,log }sudo mkdir /etc/gitea
为 Gitea 创建专属用户(git)及分配权限
使用独立的 git 用户, 可以确保服务器更安全
1 2 3 4 5 6 7 sudo adduser git --system --shell /bin/bash --group --disabled-password --home /home/git sudo chown -R git:git /var/lib/gitea sudo chown -R git:git /etc/gitea
创建 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 35 sudo touch /etc/systemd/system/gitea.service sudo chmod +x /etc/systemd/system/gitea.service sudo vi /etc/systemd/system/gitea.service [Unit] Description=Gitea (Git with a cup of tea) After=syslog.target After=network.target [Service] RestartSec=2s Type=simple User=git Group=git WorkingDirectory=/var/lib/gitea/ ExecStart=/usr/local/bin/gitea web --config /etc/gitea/app.ini Restart=always Environment=USER=git HOME=/home/git GITEA_WORK_DIR=/var/lib/gitea [Install] WantedBy=multi-user.target systemctl start gitea systemctl enable gitea systemctl status gitea
配置 Gitea
官网配置详解 https://docs.gitea.io/zh-cn/config-cheat-sheet/
初始配置
管理员账号设置
修正 app.ini 的一些不准确性 「PS」 1 2 3 4 5 vi /etc/gitea/app.ini SSH_DOMAIN = 124.222.237.29 START_SSH_SERVER = true