高陵网站建设,WORDPRESS添加全屏幻灯片,网站开发应该怎么学,上海企业投资人名录一般构建部署
以一个简单的前后端项目来说#xff0c;分别编写前后端的 Dockerfile 文件并构建镜像#xff0c;然后编写 docker-compose.yml 构建部署#xff0c;启动运行。每次代码变更后都需重新手动打包、构建、推送。
一个简单的例子#xff1a;
前端#xff1a; 项…一般构建部署
以一个简单的前后端项目来说分别编写前后端的 Dockerfile 文件并构建镜像然后编写 docker-compose.yml 构建部署启动运行。每次代码变更后都需重新手动打包、构建、推送。
一个简单的例子
前端 项目名kubemanagement-web技术栈Vue 后端 项目名kubemanagement技术栈Golang
tips: 不同语言对应的构建逻辑编写不同。关于 Dockerfile 以及 docker-compose 如何编写请查阅官方文档此处不在赘述。
1. 编写前端 Dockerfile 文件
#第一阶段构建
FROM node:16.13.2 as builder
WORKDIR /app/kubemanagement-webCOPY . .RUN npm config set registry https://registry.npmmirror.com
RUN npm install# 开始构建
RUN npm run build:prod# 第二阶段构建
FROM nginx
COPY --frombuilder /app/kubemanagement-web/dist/ /usr/share/nginx/html/
COPY --frombuilder /app/kubemanagement-web/default.conf.template /etc/nginx/templates/default.conf.template
EXPOSE 802. 编写后端 Dockerfile 文件
FROM golang:1.20-alpine3.16 as builder
WORKDIR /go/src/kubemanagement.com/server
COPY . .RUN go env -w GO111MODULEon \ go env -w GOPROXYhttps://goproxy.cn,direct \ go env -w CGO_ENABLED0 \ go env \ go mod tidy \ go build -o server .FROM alpine:latestLABEL MAINTAINERzj20162325163.comWORKDIR /go/src/kubemanagement.com/server
COPY --from0 /go/src/kubemanagement.com/server/config.yaml ./config.yaml
COPY --from0 /go/src/kubemanagement.com/server/.kube/config ./.kube/config
COPY --from0 /go/src/kubemanagement.com/server/server ./
EXPOSE 8082
ENTRYPOINT ./server3. 分别构建镜像
前端
docker build -t harbor.kubemanagement.com/kubemanagement/kubemanagement-web:v1.0 .后端
docker build -t harbor.kubemanagement.com/kubemanagement/kubemanagement:v1.0 .结果如下 如果需要推送镜像比如推送到私有 Harbor 仓库可执行
docker push harbor.kubemanagement.com/kubemanagement/kubemanagement-web:v1.0
docker push harbor.kubemanagement.com/kubemanagement/kubemanagement:v1.0Harbor 的搭建可参考 微服务 云原生搭建 Harbor 私有镜像仓库。
4. 编写 docker-compose.yml 文件
version: 3networks:network:ipam:driver: defaultconfig:- subnet: 177.7.0.0/16services:web:container_name: kubemanagement-webimage: harbor.kubemanagement.com/kubemanagement/kubemanagement-web:v1.0restart: alwaysenvironment:BACKEND_HOST: http://177.7.0.12:8082/ports:- 8081:80depends_on:- servernetworks:network:ipv4_address: 177.7.0.11server:container_name: kubemanagement-serverimage: harbor.kubemanagement.com/kubemanagement/kubemanagement:v1.0restart: alwaysports:- 8082:8082networks:network:ipv4_address: 177.7.0.12使用 docker-compose 自动完成包括构建镜像创建服务启动服务并关联服务相关容器的一系列操作:
docker-compose up -d结果如下 此时通过相应 ip:port 即可访问页面示例页面如下
使用 Gogs Drone 持续集成 Gogs
编写 gogs 的 docker-compose.yml 文件
version: 3volumes:gogsdata:services:gogs:container_name: gogsimage: gogs/gogs:0.12.10volumes:- gogsdata:/datarestart: alwaysports:- 10880:3000执行
docker-compose up -d结果如下 通过 10880 端口访问 数据库根据需求来选这里选择最轻量级的 SQLite3 作为演示其他配置项可以默认由于编写 docker-compose.yml 时做了端口映射主要修改域名、端口号如下 编写完可选配置后点击立即安装我这里就简单设置管理员信息 gogs 的使用与 git 基本一致简单创建一个仓库并提交信息
Drone
编写 docker-compsoe.yml 文件
version: 3volumes:dronedata:services:drone-server:image: drone/drone:2container_name: drone-serverenvironment:DRONE_AGENTS_ENABLED: trueDRONE_GOGS_SERVER: http://192.168.65.134:10880# openssl rand -hex 16 生成 server 与 runner 的 DRONE_RPC_SECRET 设置相同DRONE_RPC_SECRET: 02cfbfe91f999c6f334158f4cf737490DRONE_SERVER_HOST: 192.168.65.134:9080DRONE_SERVER_PROTO: http# 必须是管理员身份方便后续的配置选项等操作DRONE_USER_CREATE: username:BetaCatPro,admin:truevolumes:- dronedata:/datarestart: alwaysports:- 9080:80- 9443:443drone-runner:image: drone/drone-runner-docker:1container_name: drone-runnerenvironment:DRONE_RPC_SECRET: 02cfbfe91f999c6f334158f4cf737490DRONE_RPC_HOST: 192.168.65.134:9080DRONE_RPC_PROTO: httpDRONE_RUNNER_CAPACITY: 2DRONE_RUNNER_NAME: first-runnervolumes:- /etc/docker/:/etc/docker- /var/run/docker.sock:/var/run/docker.sockrestart: alwaysports:- 3000:3000depends_on:- drone-server部分参数说明
DRONE_GOGS_SERVER : Gogs 服务地址(需要http://开头)DRONE_RPC_SECRET: Drone 服务密匙(runner 也要使用相同密钥)DRONE_SERVER_HOST: Drone 服务地址外部可访问的域名或IP地址DRONE_SERVER_PROTO: Drone提供服务的协议类型可选为 http 或 httpsDRONE_USER_CREATE: 设置Drone管理员账号(是Gogs平台里的账号)
执行
docker-compose up -d结果 浏览器访问 ip:port: 登录用户名密码为上一步注册 gogs 时所用的登录成功进入主页 这里会显示 gogs 中创建的代码仓库列表。
流水线配置
激活钩子
进入 drone 相应仓库页面点击 ACTIVATE REPOSITORY 按钮激活钩子
激活后可以看到一些设置项注意一定要把 Trusted 选型勾选否则在后续编写钩子文件定义挂载操作时会出现下面错误
Drone untrusted repositories cannot mount host volumes进入到 gogs 中相应仓库点击仓库设置 可以看到管理的 Web 钩子
编写 .drone.yml 钩子文件
在项目根目录下编写 .drone.yml 文件用于定义触发 git 提交时的一系列操作这里以文章开头描述的 kubemanagement-web 前端项目为例
kind: pipeline
type: docker
name: kubemanagement-web-publishenvironment:GOOS: linuxGOARCH: amd64steps:- name: buildimage: plugins/dockervolumes:- name: hostspath: /etc/hosts- name: docker-capath: /etc/docker- name: dockersockpath: /var/run/docker.socksettings:username: adminpassword:# 注意在 drone 页面的 Secrets 添加对应配置from_secret: harbor_passwordrepo: harbor.kubemanagement.com/kubemanagement/kubemanagement-webregistry: harbor.kubemanagement.comtags:- v1.1- name: ssh commandsimage: appleboy/drone-sshsettings:host: 192.168.65.134username: rootpassword:# 注意在 drone 页面的 Secrets 添加对应配置from_secret: ssh_passwordport: 22script:#拉取镜像并重启 注意--需要提前在目标主机完成docker login- if [ $(docker ps -a | grep kubemanagement-web | wc -l) -ge 1 ];then docker stop kubemanagement-web docker rm kubemanagement-web; fi- docker pull harbor.kubemanagement.com/kubemanagement/kubemanagement-web:v1.1- export BACKEND_HOSThttp://192.168.65.134:8082/- docker run --name kubemanagement-web --restartalways -d -p8081:80 -e BACKEND_HOST$BACKEND_HOST harbor.kubemanagement.com/kubemanagement/kubemanagement-web:v1.1
volumes:- name: hostshost:path: /etc/hosts- name: docker-cahost:path: /etc/docker- name: dockersockhost:path: /var/run/docker.sock然后在 drone 页面的 Secrets 添加对应配置这里按照 .drone.yml 文件中使用到的有 harbor_password 和 ssh_passwordvalue 分别为对应平台的密码我这里 harbor 的密码为123456gogs 密码为 by6671715分别添加即可 编写好文件后可进行代码提交。不过还需要查看 gogs 的配置文件中有没有将 ip 加入到白名单中如果有多个 ip 则用 , 分隔。我这里 ip 为 192.168.65.134。具体配置如下
首先查看 gogs 挂载的卷查看 Mounts 里 Source 的内容注意时下图箭头指向的位置配置文件即在此目录下
docker inspect gogscd /var/lib/docker/volumes/gogs_gogsdata/_data
cd gogs/conf
vim app.ini在 security 处加上配置
LOCAL_NETWORK_ALLOWLIST 192.168.65.1343. 重启 gogs
# 返回存放 gogs 的 docker-compose.yml 的目录
docker-compose restart如果没有配置还继续提交代码的话会出现下面情况 可以看到虽然提交成功但点击仓库设置进入管理 Web 钩子项点击存在的钩子如 http://192.168.65.134:9080/hook可以看到 钩子并没有生效并报错
Payload URL resolved to a local network address that is implicitly blocked.提交代码触发 Hooks
成功提交代码并触发钩子后gogs 页面中显示成功信息 drone 页面信息如下 点击进入可以在 GRAPH VIEW 查看详细进度及日志 可以看到目前处于 build 阶段。完全构建完成后页面如下 harbor 页面中对应的镜像版本也推送成功