注意事项:
环境:
默认 linux 环境, 已安装好 docker 和 docker compose,具备 root 权限,docker 设置加速源
# 添加用户 sudo useradd -m git # 设置密码 sudo passwd git 新密码 # 安全相关, 禁止ssh登录 sudo usermod -L git # lock # usermod -U git # unlock # 不设置密码/删除密码, 也可以禁止ssh登录 sudo passwd -d git |
sudo usermod -aG docker git && newgrp docker # 如果没有docker用户组 sudo groupadd docker |
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 - USER_GID=1001 # git用户的gid 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 |
# 注意文件权限, 数据都是git用户和git用户组的 sudo -u git vim ./data/gitea/conf/app.ini # 然后重启容器 # 也可以通过环境变量的方法来写入ini |
[migrations] ALLOW_LOCALNETWORKS = true |
webhook需要添加配置
[webhook] ALLOWED_HOST_LIST = * |
sshing-shim-with-authorized_keys
是为了 ssh 直通下载 因为一般22端口被服务器登录用了。假设 gitea 容器使用了2222端口, 那么用户使用 ssh clone时没有指定端口, 需要把22端口转到容器的2222端口, 并且需要把参数也传进去
# 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 上生成公钥和私钥
ssh-keygen -t ed25519 -C 'test@gmail.com' -f ~/.ssh/gitea_ed25519 |
登录 gitea, 打开设置界面, 添加 SSH 密钥, 把 pc 上生成的公钥添加进去, 然后进行验证(==注意, 不是服务器上的公钥和私钥==)
查看服务器上的/home/git/.ssh/authorized_keys, 它的结构类似这样
# 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 |
添加脚本
# 脚本的路径可能每个版本的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 文件
vim ~/.ssh/config === # gitea Host 你的gitea host HostName 你的gitea hostname User git PreferredAuthentications publickey IdentityFile ~/.ssh/gitea_ed25519 |
测试 ssh
ssh -T git@你的gitea域名 |
新建 comopse 文件, 先别启动
mkdir drone mkdir data vim docker-compose.yml |
=== version: '3' services: drone-server: restart: always image: drone/drone:2 ports: - "9999:80" volumes: - ./drone:/var/lib/drone/ - ./data:/data/ environment: - DRONE_GITEA_SERVER= # Gitea访问地址 - DRONE_GITEA_CLIENT_ID= # gitea oauth2 客户端id - DRONE_GITEA_CLIENT_SECRET= # gitea oauth2 客户端密钥 - DRONE_SERVER_HOST= # drone 访问的域名 - DRONE_SERVER_PROTO=https # 支持http, https - DRONE_RPC_SECRET= # Drone Server共享的密钥 - DRONE_GIT_ALWAYS_AUTH=true - DRONE_GIT_USERNAME= # git用户名 - DRONE_GIT_PASSWORD= # git密码 - DRONE_USER_CREATE=username:ci,admin:true # 该用户名,开启管理员账户 drone-runner-docker: restart: always depends_on: - drone-server image: drone/drone-runner-docker:1 ports: - "10000:3000" volumes: - /var/run/docker.sock:/var/run/docker.sock environment: - DRONE_RPC_PROTO=http # 支持http, https, 这里是部署在同一台服务器, 没有开放端口, 只能是http - DRONE_RPC_HOST=drone-server - DRONE_RPC_SECRET= # Drone Server共享的密钥 - DRONE_RUNNER_NAME=drone-runner-docker - DRONE_RUNNER_CAPACITY=2 # 并发执行的流水线数量 === |
应用名称: 例如: drone-oauth2
重定向 URL: 例如: https://域名/login , http://{{ip}}:{{port}}/login
注意: drone是没有自己的登录页面的, 会使用相同浏览器的Gitea登录信息,如果gitea切换用户, drone并不会自动切换, 需要先退出
在仓库根目录新建.drone.yml文件, 文件提交后就会自动触发构建
kind: pipeline type: docker name: build |
在Drone的项目配置页面,我们会看到Badges选项, 把里面的内容复制出来,添加到项目的README.md文件头部