安装 docker、docker-compose
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
yum -y install docker-ce-18.06.1.ce-3.el7
systemctl enable docker && systemctl start docker
为了快速拉取镜像,设置默认拉取仓库为阿里
cat > /etc/docker/daemon.json << EOF
"registry-mirrors": ["https://b9pmyelo.mirror.aliyuncs.com"]
systemctl restart docker
安装nginx
安装镜像源rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
yum 安装 yum install -y nginx
设为开机启动 systemctl enable nginx
启动nginxsystemctl start nginx
gitea
使用docker安装
docker镜像 https://hub.docker.com/r/gitea/gitea/tags
github地址 https://github.com/go-gitea/gitea
docker run -d --name=gitea -p 2222:22 -p 9080:3000 --restart=always -v /data/gitea:/data gitea/gitea:1.15.3
映射到物理机的端口:9080
修改配置文件vi /data/gitea/gitea/conf/app.ini
,在最后面添加下面配置信息
[mirror]
DEFAULT_INTERVAL = 1m
MIN_INTERVAL = 1m
[cron.update_mirrors]
SCHEDULE = @every 1m
mirror 同步外部镜像时间
cron.update_mirrors 定时任务轮询时间
浏览器直接访问http://xxx:9080
修改nginx配置文件
vi /etc/nginx/nginx.conf
添加下面的内容
server
listen 80
server_name {{DOMAIN}}
location ~* \.(gif|png|jpg|css|js|woff|woff2)$
proxy_pass http://127.0.0.1:9080
proxy_set_header Host $host
proxy_set_header X-Real-IP $remote_addr
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for
proxy_set_header REMOTE-HOST $remote_addr
expires 12h
location /
proxy_pass http://127.0.0.1:9080
proxy_set_header Host $host
proxy_set_header X-Real-IP $remote_addr
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for
proxy_set_header REMOTE-HOST $remote_addr
add_header X-Cache $upstream_cache_status
add_header Cache-Control no-cache
{{DOMAIN}}:修改为真实的域名
systemctl enable nginx && systemctl start nginx
域名配置https
自己购买域名证书
申请免费的域名证书
初始化示例
可以使用 SQLite
或者选择使用Mysql,选择Mysql时,需要填写好数据的相关信息
注意:HTTP服务端口,3000保持不变
根据实际的安装情况填写红色部分
https
管理员设置
drone
访问gitea,右上角点击 设置->应用,管理 OAuth2 应用程序,创建新的OAuth2 应用程序
重定向URL 填写为 drone 的登录地址,推荐使用https
http://{{ip}}:{{port}}/login
http://域名/login
https://域名/login
记录 客户端ID 、客户端密钥
安装 drone-server
ip+port
docker run \
--volume=/data/drone:/data \
--env=DRONE_GITEA_SERVER={{gitea地址,需要带上协议}} \
--env=DRONE_GITEA_CLIENT_ID={{客户端ID}} \
--env=DRONE_GITEA_CLIENT_SECRET={{客户端密钥}} \
--env=DRONE_RPC_SECRET={{随机生成,并且保存好数据}} \
--env=DRONE_SERVER_HOST={{ip}}:{{port}} \
--env=DRONE_SERVER_PROTO={{drone域名或者drone ip:drone port,不需要加上协议}} \
--publish=9091:80 \
--publish=10443:443 \
--restart=always \
--detach=true \
--name=drone \
drone/drone:1
docker run \
--volume=/data/drone:/data \
--env=DRONE_GITEA_SERVER={{gitea地址,需要带上协议}} \
--env=DRONE_GITEA_CLIENT_ID={{客户端ID}} \
--env=DRONE_GITEA_CLIENT_SECRET={{客户端密钥}} \
--env=DRONE_RPC_SECRET={{随机生成,并且保存好数据}} \
--env=DRONE_SERVER_HOST={{drone域名或者drone ip:drone port,不需要加上协议}} \
--env=DRONE_SERVER_PROTO=http \
--publish=9091:80 \
--publish=10443:443 \
--restart=always \
--detach=true \
--name=drone \
drone/drone:1
https
docker run \
--volume=/data/drone:/data \
--env=DRONE_GITEA_SERVER={{gitea地址,需要带上协议}} \
--env=DRONE_GITEA_CLIENT_ID={{客户端ID}} \
--env=DRONE_GITEA_CLIENT_SECRET={{客户端密钥}} \
--env=DRONE_RPC_SECRET={{随机生成,并且保存好数据}} \
--env=DRONE_SERVER_HOST={{drone域名或者drone ip:drone port,不需要加上协议}} \
--env=DRONE_SERVER_PROTO=https \
--publish=9091:80 \
--publish=10443:443 \
--restart=always \
--detach=true \
--name=drone \
drone/drone:1
DRONE_GITEA_SERVER gitea
地址
http://192.168.10.10:9091
http://gitea.localhost
https://gitea.localhost
DRONE_GITEA_CLIENT_SECRET 上一步在gitea
创建的客户端ID
DRONE_GITEA_CLIENT_SECRET 上一步在gitea
创建的客户端密钥
DRONE_RPC_SECRET 随机生成就好了,但是记得保存,下一步需要用
DRONE_SERVER_HOST drone server的地址
--publish=9091:80
--publish=10443:443
推荐部署方式
DRONE_GITEA_SERVER 填写https地址
通过宿主机的nginx配置域名和证书,然后再通过nginx反向代理到容器的ip
安装 drone-runner
docker run -d \
-v /var/run/docker.sock:/var/run/docker.sock \
-e DRONE_RPC_PROTO=http \
-e DRONE_RPC_HOST={{drone地址,不用加协议}} \
-e DRONE_RPC_SECRET={{搭建drone server时,添加的DRONE_RPC_SECRET}} \
-e DRONE_RUNNER_CAPACITY=2 \
-e DRONE_RUNNER_NAME={{自定义drone_runner名称,比如:docker_runner}} \
-e DOCKER_API_VERSION=1.38 \
-p 9092:3000 \
--restart always \
--name runner \
drone/drone-runner-docker:1
DRONE_RPC_SECRET:安装 drone-server时,填写的DRONE_RPC_SECRET
DRONE_RPC_HOST:drone server 地址
DRONE_RUNNER_NAME:drone runner name,可以自定义
修改端口-p 9092:3000
目前安装的版本最新API版本为1.38
DOCKER_API_VERSION 需要指定版本 1.38
验证是否和drone-sever通信成功
docker logs runner
time="2021-09-27T04:39:27Z" level=info msg="starting the server" addr=":3000"
time="2021-09-27T04:39:27Z" level=info msg="successfully pinged the remote server"
time="2021-09-27T04:39:27Z" level=info msg="polling the remote server" arch=amd64 capacity=2 endpoint="http://192.168.205.210:9091" kind=pipeline os=linux type=docker
测试访问drone
在浏览器输入drone-server的地址,会跳转到 gitea 的地址进行auth授权,授权成功后会跳转回drone-server
harbor
github地址 https://github.com/goharbor/harbor/releases
wget https://github.com/goharbor/harbor/releases/download/v2.3.3/harbor-online-installer-v2.3.3.tgz
tar -zxvf harbor-online-installer-v2.3.3.tgz
修改配置文件
修改配置文件值时注意yml文件格式,每一个key冒号后面需要空格
cd harbor
cp harbor.yml.tmpl harbor.yml
vi harbor.yml
找hostname: reg.mydomain.com
,把reg.mydomain.com
修改为自己的域名
不要使用127.0.0.1
、localhost
,因为Harbor需要在外部的客户端访问
修http端口
http:
# port for http, default is 80. If https enabled, this port will redirect to https port
port: 80
修改80
为自己想要暴露的端口
注释下面的内容
https:
port: 443
certificate: /your/certificate/path
private_key: /your/private/key/path
修改管理员密码
找到harbor_admin_password: Harbor12345
,Harbor12345
修改为自己的密码
修改数据卷目录
找data_volume: /data
,把/data
修改为对应的路径,也可以保持默认
运行./install.sh
,进行安装
推荐部署方式
修改配置文件harbor.yml
的http对应的端口,其他的配置根据需要进行修改
运行./install.sh
,等待安装
修改宿主机的nginx,配置域名和https证书,然后反向代理到暴露的端口
注意防火墙需要开放该端口
项目配置持续集成示例
gitea 新建项目
根据实际情况进行项目的创建
迁移外部仓库
drone 同步项目
点击SYNC
,同步项目
harbor 创建项目
添加运维账号
需要在harbor创建项目
设置项目的权限
编写 .drone.yml
kind: pipeline
type: docker
name: build
steps:
- name: docker-${DRONE_BRANCH}
image: plugins/docker:18.09
settings:
registry: {{DOMAIN}}
username:
from_secret: harbor_username
password:
from_secret: harbor_password
tags: latest
dockerfile: Dockerfile
repo: {{DOMAIN}}/{{harbor项目名称}}/{{容器名称}}
- name: deploy
image: appleboy/drone-ssh
settings:
host:
from_secret: ssh_host
username:
from_secret: ssh_username
password:
from_secret: ssh_password
port:
from_secret: ssh_port
script:
- echo ====暂停容器开始=======
- docker stop {{容器名称}}`
- docker rm -f {{容器名称}}`
- docker rmi -f `docker images | grep {{容器名称}} | awk '{print $1}' `
- echo ====开始部署=======
- docker pull {{DOMAIN}}/{{harbor项目名称}}/{{容器名称}}:{{tag}}
- docker run -d --name={{容器名称}} {{DOMAIN}}/{{harbor项目名称}}/{{容器名称}}:{{tag}}
- echo ====部署成功======
trigger:
branch:
- master
event:
- push
配置变量 | 说明 |
---|
{{DOMAIN}} | harbor域名 例如: harbor.localhost |
{{容器名称}} | 例如: web_application |
{{harbor项目名称}} | 例如: application |
{{tag}} | 例如: latest |
注意:from_secret 后面的值需要再 drone 进行设置
把每个值都添加好
harbor_username
harbor_password
ssh_host
ssh_username
ssh_password
ssh_port
配置 | 说明 |
---|
harbor_username | harbor 创的用户 |
harbor_password | harbor 用户密码 |
ssh_host | 需要运行项目的机器的ip |
ssh_username | 需要运行项目的机器的ssh用户 |
ssh_port | 需要运行项目的机器的ssh端口 |
编写Dockerfile
根据自己的项目情况编写Dockerfile
构建和部署
提交代码,等待一会
点击进入后
若harbor没有使用https部署,调整配置
修改.drone.yml
需要在.drone.yml
文件中添加insecure: true
kind: pipeline
type: docker
name: build
steps:
- name: docker-${DRONE_BRANCH}
image: plugins/docker:18.09
settings:
registry: {{DOMAIN}}
username:
from_secret: harbor_username
password:
from_secret: harbor_password
tags: latest
insecure: true
dockerfile: Dockerfile
repo: {{DOMAIN}}/{{harbor项目名称}}/{{容器名称}}
- name: deploy
image: appleboy/drone-ssh
settings:
host:
from_secret: ssh_host
username:
from_secret: ssh_username
password:
from_secret: ssh_password
port:
from_secret: ssh_port
script:
- echo ====暂停容器开始=======
- docker stop {{容器名称}}`
- docker rm -f {{容器名称}}`
- docker rmi -f `docker images | grep {{容器名称}} | awk '{print $1}' `
- echo ====开始部署=======
- docker pull {{DOMAIN}}/{{harbor项目名称}}/{{容器名称}}:{{tag}}
- docker run -d --name={{容器名称}} {{DOMAIN}}/{{harbor项目名称}}/{{容器名称}}:{{tag}}
- echo ====部署成功======
trigger:
branch:
- master
event:
- push
修改docker配置文件
安装drone的机器、部署目标的机器,需要修改docker配置文件
vi /etc/docker/daemon.yml
"registry-mirrors": ["https://b9pmyelo.mirror.aliyuncs.com"],
"insecure-registries": ["{{IP或域名}}"]
复制代码