原文来源: 佛布朗斯基 程序员技术笔记
如有侵权,联系删除
准备项目
我们先在gitea上创建一个仓库,然后本地链接这个仓库,将beego项目放到这个关联目录。
准备编排文件
由于我用到了上传的功能,需要将上传的文件永久存储在服务器,所以需要做一个目录挂载,我直接在服务器用这个目录地址/home/data/go-beego/static/upload当作存储目录,然后在/home/dockerConfig/project/go-beego目录下创建一个docker-compose.yml文件,用来启动我们的beego项目,详细如下
version: "3"
services:
project_go_beego_compose:
image: registry.cn-shenzhen.aliyuncs.com/k8s-fblsj/docker-beego-registry
container_name: docker_go_beego_compose
volumes:
- /home/data/go-beego/static/upload:/home/static/upload
restart: always
ports:
- 9090:9090
构建镜像文件
我们在项目根目录创建一个文件名为Dockerfile的文件,用于构建beego镜像,详细如下
# Version 1.0
FROM alpine:latest
# 维护者信息
MAINTAINER hzx790254812@gmail.com
# 设置工作目录
WORKDIR /home
COPY . /home/
# 暴露端口
EXPOSE 9090
# 执行命令
ENTRYPOINT ./project-go-beego
创建构建文件
根据Drone规则,我们在项目目录下创建一个文件名为.drone.yml的文件,用于构建自动化,详细如下
kind: pipeline
type: docker
name: project-go-beego
#构建步骤
steps:
#构建镜像
- name: build
image: golang:latest
pull: if-not-exists
environment:
GOPROXY: "https://goproxy.cn,direct" # 懂的都懂
volumes: # 缓存 go mod & pkg,可以大幅度提高速度,避免每次都下载
- name: pkgdeps
path: /go/pkg
commands:
- CGO_ENABLED=0 go build -o project-go-beego
#推送镜像至镜像仓库
- name: publish
image: plugins/docker
mirrors: #镜像仓库加速地址,不需要加速,可以直接删除
from_secret: registry_mirrors
settings:
purge: false
registry: #镜像仓库域名
from_secret: registry
repo: #镜像仓库详细地址
from_secret: repo
use_cache: true
tags:
- latest
username: #镜像仓库账户
from_secret: registry_user_name
password: #镜像仓库密码
from_secret: registry_password
volumes:
- name: cache
path: /cache
#部署服务
- name: ssh commands
image: appleboy/drone-ssh
settings:
host:
from_secret: ssh_ip
port: 22
username:
from_secret: ssh_user_name
password:
from_secret: ssh_password
script:
- cd /home/dockerConfig/project/go-beego
- docker-compose pull && docker-compose up --force-recreate -d
设置密钥参数
在上面的自动化部署文件中,我将一些重要参数都放置在Drone项目管理面板的Secrets中,详细如下
通过Nginx转发服务
如果我们想通过域名去访问我们这个服务,就需要通过Nginx去转发我们的服务端口去实现,假设我们想要通过test.com这个域名来访问这个服务,我们可以将这段配置放到Nginx的nginx.conf文件中
server{
listen 80;
server_name test.com;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_pass http://127.0.0.1:9090;
}
access_log /usr/local/webserver/nginx/logs/demo.xx.com.log;
}
保存之后,重新加载nginx配置
nginx -s reload
完成以上操作之后,我们提交到代码到仓库,查看整个构建过程,可以看到部署成功
然后浏览访问test.com,访问成功