• 安装 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;
            #Set Nginx Cache
            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.1localhost,因为Harbor需要在外部的客户端访问

    修http端口

    http:
      # port for http, default is 80. If https enabled, this port will redirect to https port
      port: 80
    

    修改80为自己想要暴露的端口

    注释下面的内容

    https:
      # https port for harbor, default is 443
      port: 443
      # The path of cert and key files for nginx
      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_usernameharbor 创的用户
    harbor_passwordharbor 用户密码
    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或域名}}"] 复制代码
    分类:
    后端