看了很多 docker+drone+gitea
构建cicd的文章之后,自己今天着手捣鼓了下,发现过程中还是会有很多坑等着大家,这里就一一写出,当做记录。
PS:
gitlab
比较吃资源,gitea
是新秀(gitea
从基于GO
语言编写的Gogs
中fork
而来,而Gogs
已经不维护了,gitea
由团队维护),很占用资源很小,gitlab
太多用不到的功能。个人项目,或者小团队项目推荐使用gitea
.
登录服务器
我的是Mac
电脑,我使用ssh
命令登录: ssh <username>@<ip>
,提示输入密码,就输入passward
.
ip
是你购买的云服务器的ip
地址。username
和passward
是你的用户名和密码。
到这里不出意外就登陆上去了!
安装docker-ce
1. 更新前置工具包
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
2. 如有历史docker
先卸载
sudo yum -y remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine
3. 使用以下命令设置稳定存储库
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
4. 安装最新版本的 Docker CE
和containerd
sudo yum -y install docker-ce docker-ce-cli containerd.io
这个过程会比较久,慢慢等吧。
5. 开启docker
服务
systemctl start docker # 开启docker
systemctl stop docker # 关闭docker
systemctl status docker # 检查docker
systemctl enable docker # 设置开机自启动
6. 使用国内docker
镜像源
vim /etc/docker/daemon.json
然后写入
{"registry-mirrors":["https://registry.docker-cn.com"]}
7. 重启docker
服务
sudo systemctl daemon-reload
sudo systemctl restart docker
8. 验证
docker -v
Docker version 20.10.21, build baeda1f
安装 docker-compose
1. 下载命令
sudo curl -L "https://github.com/docker/compose/releases/download/1.25.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
可以先看下 $(uname -s)
和 $(uname -m)
分别是啥:
echo $(uname -s)
echo $(uname -m)
2. 解决报错 curl: (35) Encountered end of file
原因是 443
端口未开放,执行以下命令:
# 需要开启防火墙 systemctl start firewalld
firewall-cmd --zone=public --add-port=443/tcp --permanent # 添加 443 端口访问
firewall-cmd --reload # 重新加载让配置生效
3. 解决报错 FirewallD is not running
如果在上一步执行过程中出现 FirewallD is not running
报错,则需要先打开 firewall
,执行以下命令。
systemctl start firewalld.service #开启服务
systemctl enable firewalld.service #设置开机启动
4. 授权 docker-compose
sudo chmod +x /usr/local/bin/docker-compose
如果不执行会出现权限问题: -bash: /bin/docker-compose: 权限不够
5. 验证 docker-compose
docker-compose --version
docker-compose version 1.25.1, build a82fef07
安装 gitea
1. 编写 docker-compose
文件来安装 gitea
mkdir -p home/docker/gitea
cd home/docker/gitea
vim docker-compose.yml
里面编写如下内容
version: "3"
networks:
gitea:
external: false
services:
server:
image: gitea/gitea:latest # 直接装最新版就好了,没啥好选的,随意
container_name: gitea
environment:
- USER_UID=1000
- USER_GID=1000
restart: always
networks:
- gitea
volumes:
- ./data:/data # /home/data可以替换成你想要的挂载目录
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
ports:
- "33000:3000" # 外网33000对应内部容器3000端口
- "33333:22" # 外网33333对应内部容器22端口
2. 运行 docker-compose
docker-compose up -d 后台启动 Gitea
docker-compose down
docker-compose logs
docker-compose ps 将显示 Gitea 是否正确启动
上面图里面是旧端口,下面才是新的。
3. 验证 gitea
是否能正常访问
访问 http://<ip>:33000
,ip
是你购买的云服务器的ip
地址。(注意,不能用33333访问!)
如果出现如下界面:
原因是 33000
端口未开放,执行以下命令:
# 需要开启防火墙 systemctl start firewalld
firewall-cmd --zone=public --add-port=33000/tcp --permanent
firewall-cmd --reload # 重新加载让配置生效
如果还是失败,那就不用
docker-compose
的方式运行,完全可以使用docker
运行!先运行docker-compose down
把服务停止,然后运行:
》》》注意防火墙或安全组中放开用到的端口(例如10022和10080)
官网启动方式
docker run -d --name=gitea -p 33333:22 -p 33000:3000 -v /var/lib/gitea:/data gitea/gitea:latest
本次启动方式(新增两个参数,可以根据需要选择)
docker run -d --privileged=true --restart=always --name=gitea -p 33333:22 -p 33000:3000 -v /var/lib/gitea:/data gitea/gitea:latest
# --privileged=true 使用该参数,container内的root拥有真正的root权限(可根据需要选择是否要该参数)
# --restart=always 自动重启容器(可根据需要选择是否要该参数)
# -p 端口映射(宿主机端口:容器端口)
# -v 容器卷挂载 (宿主机目录 :容器目录)
本人使用如下:
docker run -d --privileged=true --restart=always --name=gitea -p 33333:22 -p 33000:3000 -v /var/lib/gitea:/data gitea/gitea:latest
安装 drone
+drone-runner
1. 编写 docker-compose
文件来安装 drone
+drone-runner
mkdir -p home/docker/drone
cd home/docker/drone
vim docker-compose.yml
里面编写如下内容
version: '3'
services:
drone-server:
restart: always
image: drone/drone:2
ports:
- "9999:80"
volumes:
- ./:/var/lib/drone/
- ./data:/data/
environment:
- DRONE_GITEA_SERVER=http://xxxxxxxxx:3000/ # Gitea访问地址
- DRONE_GITEA_CLIENT_ID=xxxxxxxxx # 应用ID,下一步会获取
- DRONE_GITEA_CLIENT_SECRET=xxxxxxxxx # 应用密钥,下一步会获取
- DRONE_SERVER_HOST=xxxxxxxxx:9999
- DRONE_SERVER_PROTO=http # 支持http, https
- DRONE_RPC_SECRET=xxxxxxxxx # 通信密钥,下一步会获取
- DRONE_GIT_ALWAYS_AUTH=true
- DRONE_GIT_USERNAME=xxxxxxxxx # git用户名
- DRONE_GIT_PASSWORD=xxxxxxxxx # git密码
- DRONE_USER_CREATE=username:xxxxxxxxx,admin:true # 管理员用户名,开启管理员账户
drone-runner-docker:
restart: always
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
- DRONE_RPC_HOST=drone-server
- DRONE_RPC_SECRET=xxxxxxxxx # 通信密钥,下一步会获取
- DRONE_RUNNER_NAME=drone-runner-docker
- DRONE_RUNNER_CAPACITY=2
创建文件好后,先不启动,去
Gitea
配置获取应用ID
和密钥
!!!
2. 运行 docker-compose
docker-compose up -d 后台启动 Gitea
docker-compose down
docker-compose logs
docker-compose ps 将显示 Gitea 是否正确启动
参考文章
docker+gitea+drone实现超轻量级的CI/CD实战