阿里云
阿里云多端小程序中小企业获客首选
发表主题 回复主题
  • 1282阅读
  • 1回复

[教程]利用 dokku 打造自己的私有云仓库和自动化部署

级别: 论坛版主
发帖
371
云币
447

?*Jv&f#  
选择Ubuntu系统,同时做好域名映射 Y68oBUd_E  
安装dokku {Z$Aw4a"d  
  1. # 选择0.9.4版本,后面的版本都有些问题
  2. wget https://raw.githubusercontent.com/dokku/dokku/v0.9.4/bootstrap.sh
  3. sudo DOKKU_TAG=v0.9.4 bash bootstrap.sh
2jaR_` `=:  
然后打开对应的域名,完成dokku的初始化 rry 33  
qA5tMZ^w  
EdLbVrN,  
创建gogs应用,参照 https://dokku.github.io/tutorials/deploying-gogs-to-dokku +1_NB;,e  
其中推送代码部分可以用tag部署方式,所有命令如下 @/7tN3O  
  1. dokku apps:create gogs
  2. dokku proxy:ports-add gogs http:80:3000
  3. dokku docker-options:add gogs deploy -p 2222:22
  4. mkdir -p /var/lib/dokku/data/storage/gogs
  5. chown -R dokku:dokku /var/lib/dokku/data/storage/gogs
  6. dokku storage:mount gogs /var/lib/dokku/data/storage/gogs:/data
  7. dokku plugin:install https://github.com/dokku/dokku-mysql.git mysql
  8. dokku mysql:create gogs
  9. dokku mysql:link gogs gogs
  10. # 使用指定版本
  11. docker pull gogs/gogs:0.11.4
  12. docker tag gogs/gogs:0.11.4 dokku/gogs:0.11.4
  13. dokku tags:deploy gogs 0.11.4
使用 Let’s Encrypt 进行 https 加密 Hh,q)(Wo  
  1. sudo dokku plugin:install https://github.com/dokku/dokku-letsencrypt.git
  2. dokku config:set --global DOKKU_LETSENCRYPT_EMAIL=xxx@aliyun.com
  3. dokku letsencrypt gogs
  4. dokku letsencrypt:cron-job --add
/wKL"M-%  
完成之后打开 web 页面完成gogs的install,注意配置页面的各设置(mysql 的配置地址可以用dokku mysql:info gogs查看。即使设置错了,也可以后期使用dokku enter gogs,在/data/gogs/conf/app.ini中直接修改)。 M"1}"ex#  
y&UcTE2;%(  
e![n$/E3R  
创建drone应用,drone分server端和agent端 r. :LZEr  
  1. # server
  2. dokku apps:create drone
  3. dokku mysql:create drone
  4. dokku mysql:link drone drone
  5. # 暂时不能使用最新版本,坑了很久
  6. # docker pull drone/drone:latest
  7. docker pull drone/drone:0.7.3
  8. docker tag drone/drone:0.7.3 dokku/drone:0.7.3
  9. # 配置drone的环境变量
  10. dokku config:set drone DRONE_OPEN=false DRONE_GOGS_PRIVATE_MODE=true DRONE_DATABASE_DRIVER=mysql DRONE_DATABASE_DATASOURCE='root:password@tcp(1.2.3.4:3306)/drone?parseTime=true' DRONE_HOST=https://drone.2ci.xin DRONE_GOGS=true DRONE_GOGS_URL=https://gogs.2ci.xin DRONE_SECRET=secret DRONE_ADMIN=username,password
  11. dokku tags:deploy drone 0.7.3
  12. dokku proxy:ports-add drone http:80:8000
  13. dokku proxy:ports-remove drone http:443:443 http:8000:8000 http:80:80
  14. dokku letsencrypt drone
  15. # agent,暂时不能使用最新版,直接使用docker命令启动,看最新版源码里/ws/broker请求都没有了
  16. # dokku apps:create drone-agent
  17. # docker pull drone/agent:latest
  18. # docker tag drone/agent:latest dokku/drone-agent:latest
  19. docker run -d -e DRONE_SERVER=wss://drone.2ci.xin/ws/broker -e DRONE_SECRET=password -e DRONE_TIMEOUT=15m -v /var/run/docker.sock:/var/run/docker.sock --restart=always --name=drone-agent-docker drone/drone:0.7.3 agent
  20. # 配置agent的环境变量
  21. # dokku config:set drone-agent DRONE_SERVER=wss://drone.2ci.xin/ws/broker DRONE_SECRET=secret
  22. # dokku storage:mount drone-agent /var/run/docker.sock:/var/run/docker.sock
  23. # dokku tags:deploy drone-agent latest
' FF@I^O  
检查应用运行情况可使用的命令 j$,:cN  
  1. dokku proxy:report app
  2. dokku proxy:ports-remove app http:80:3000
  3. dokku proxy:ports-add app http:80:3000
  4. cat /home/dokku/app/nginx.conf
  5. dokku ps:stop app
  6. dokku ps:start app
创建己的应用在dokku中创建对应的 app dokku apps:create gift,完成域名映射,配置proxy:ports,使用Let's encrypt插件进行 https 加密,这些步骤就不多说了。接着在 gogs 中创建对应的一个仓库,记得项目根目录下要有一个.drone.yml文件(参考 http://docs.drone.io/getting-started/ 进行配置),然后提交代码。 7$Jb"s  
自动发布应用上一步只能使用 drone 进行自动构建,要想将构建后的项目自动打包发布,还需要一些额外的操作(这里也是坑了自己好久,主要难题是如何将 drone agent 生成的文件发布到 dokku git 里,后来经人提醒可以通过共享 ssh 的方式,然后后续的共享 ssh 的操作也是摸索了好久才成功,可谓一路心酸)。 up#W"`"  
找 1 台虚机生成一份新的 ssh 公私钥对(也可以本地备份原来的,然后重新生成)
  1. ssh-keygen -t rsa -C "dokku-deploy"
将上一步生成的id_rsa.pub上传至服务并添加到 dokku 中
  1. # local
  2. scp ~/.ssh/id_rsa.pub root@2ci.xin:/root/deploy.pub
  3. # server
  4. dokku ssh-keys:add deploy ./deploy.pub
项目根目录新建一个ssh目录,然后将上一步生成的 ssh 公私钥复制进去
  1. cp ~/.ssh/id_rsa* ./ssh
修改原来的.drone.yml,在原来 build 之后添加一些操作 DFcgUEq  
  1. - rm -rf ~/.ssh
  2. - mkdir -p ~/.ssh
  3. - cp ssh/* ~/.ssh
  4. - chmod 600 ~/.ssh/id_rsa # 特别要注意这3行
  5. - chmod 644 ~/.ssh/id_rsa.pub
  6. - ssh-keyscan erguotou.me >> ~/.ssh/known_hosts
  7. - ssh-keyscan 45.77.42.201 >> ~/.ssh/known_hosts
  8. - echo 'FROM ilyasemenov/dokku-static-site' > dist/Dockerfile # 根据自己的项目选择合适的Dockerfile或者实现适合自己项目的Dockerfile,也可以使用buildpacks
  9. - cd dist
  10. - git config --global user.email "xxx@aliyun.com"
  11. - git config --global user.name "xxxoxo"
  12. - git init
  13. - git add ./ -A
  14. - git commit -m "auto build"
  15. - git remote add dokku dokku@2ci.xin:gift
  16. - git push -u dokku master --force
至此就完成了自动化部署的工作,现在就可以访问 https://gift.2ci.xin 了。 P|l62!m<   
S&q@M  
:H@ Q`g u  
wL\OAM6R  
**N{XxdN  
TY"8.vd  
'H0uvvhOp  
本人不是云栖社区工作人员。
无论您在使用中遇到什么问题,不要出言不逊!谢谢合作!
级别: 论坛版主
发帖
3617
云币
9421
只看该作者 沙发  发表于: 2018-12-29
这个教程好
发表主题 回复主题
« 返回列表上一主题下一主题

限100 字节
如果您在写长篇帖子又不马上发表,建议存为草稿
 
验证问题: ECS是阿里云提供的什么服务? 正确答案:云服务器
上一个 下一个
      ×
      全新阿里云开发者社区, 去探索开发者的新世界吧!
      一站式的体验,更多的精彩!
      通过下面领域大门,一起探索新的技术世界吧~ (点击图标进入)