一、启动spug项目
1.spug代码仓库地址:
spug: 开源运维平台:面向中小型企业设计的无 Agent的自动化运维平台,整合了主机管理、主机批量执行、主机在线终端、文件在线上传下载、应用发布、任务计划、配置中心、监控、报警等一系列功能。 - Gitee.com
注意:如果要找怎么进行容器化部署的详细说明,直接在这个仓库看官方文档就行了
一般流程:
1)进入docs/docker目录,执行docker-compose up -d
2)docker-compose ps查看容器的端口,打开浏览器查看效果
3)新建登录用户
docker exec spug init_spug admin spug.cc
使用用户名admin和密码spug.cc登录
二、发布程序项目配置流程
1.发布配置->新建
注意:SPUG_APP_KEY全局变量对应的是应用配置中唯一标识符:
新建发布->常规发布
我为了方便将start.sh直接放在项目代码中的,而且仅仅为了实现效果,安全性之类的也没有处理,各位自己知晓流程后自行优化:
start.sh
#!/bin/bashcd /www/kubeimooc_server
docker login -u admin -p admin123 https://harbor:443
if [ $(docker ps -a | grep kubeimooc-server | wc -l) -ge 1 ];then docker stop kubeimooc-server && docker rm kubeimooc-server; fi
docker compose down
docker compose -f docker-pull.yaml pull
docker compose -f build
docker compose push
docker compose up -d
docker-pull.yaml
version: "3"services:docker:container_name: dockerimage: plugins/docker:20drone-ssh:container_name: drone-sshimage: library/appleboy/drone-ssh:1.6.13golang:container_name: golang1.22.6-alpineimage: plugins/golang1.22.6-alpine:latestalpine:container_name: alpineimage: plugins/alpine:latest
需要拉取的镜像视情况而定
docker-compose.yaml
version: "3"services:server:container_name: kubeimooc-serverimage: harbor:443/kubeimooc/kubeimooc-server:v1.1.0build:context: .dockerfile: Dockerfilerestart: alwaysports:- '8082:8082'
注意事项:
如果只写了build,没有image配置项,docker compose push会出现skip, 比如下列写法:
# docker-compose.yml
version: '3'
services:kubeimooc-server:build:context: .dockerfile: Dockerfiletags:- harbor:443/kubeimooc/kubeimooc-server:v1.1.0
使用docker compose build,再使用docker compose push会出现"skip"错误:
[+] Pushing 1/0
✔ kubeimooc-server Skipped
Dockerfile
FROM plugins/golang1.22.6-alpine:latest as builder
WORKDIR /go/src/kubeimooc.com/server
COPY . .RUN go env -w GO111MODULE=on \&& go env -w GOPROXY=https://goproxy.cn,direct \&& go env -w CGO_ENABLED=0 \&& go env \&& go mod tidy \&& go build -o server .FROM plugins/alpine:latestLABEL MAINTAINER="test@imooc.com"WORKDIR /go/src/kubeimooc.com/server
COPY --from=0 /go/src/kubeimooc.com/server/config.yaml ./config.yaml
COPY --from=0 /go/src/kubeimooc.com/server/.kube/config ./.kube/config
COPY --from=0 /go/src/kubeimooc.com/server/server ./
EXPOSE 8082
ENTRYPOINT ./server
2.构建仓库->新建
3.发布申请->新建申请->点击操作栏的"发布"按钮
[root@kubeimooc-server ~]# ls /www
kubeimooc_server
[root@kubeimooc-server ~]# ls /data/repos/
kubeimooc_server
[root@kubeimooc-server ~]# ls /data/repos/kubeimooc_server/
7_20241015144342
[root@kubeimooc-server kubeimooc_server]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
13694183fc70 harbor:443/kubeimooc/kubeimooc-server:v1.1.0 "/bin/sh -c ./server" 4 minutes ago Up 4 minutes 0.0.0.0:8082->8082/tcp, :::8082->8082/tcp kubeimooc-server
三、前端项目部署,指定后端
发布配置-》构建仓库-》发布申请,过程和第“二”步差不多;
start.sh
#!/bin/bashcd /www/kubeimooc_web
docker login -u admin -p admin123 https://harbor:443
if [ $(docker ps -a | grep kubeimooc-web | wc -l) -ge 1 ];then docker stop kubeimooc-web && docker rm kubeimooc-web; fi
export BACKEND_HOST=http://192.168.1.18:8082/
docker compose down
docker compose -f docker-pull.yaml pull
docker compose build
docker compose push
docker compose up -d
export BACKEND_HOST=http://192.168.1.18:8082 #指定后端
注意需要在docker-compose.yaml文件的environment参数中指定一下。
nginx.conf记得也指定一下(复制default.conf.template到nginx.conf):
docker-pull.yaml
version: "3"services:node:container_name: nodeimage: node:v16.20.2nginx:container_name: nginximage: nginx:alpine
docker-compose.yaml
version: "3"services:web:container_name: kubeimooc-webimage: harbor:443/kubeimooc/kubeimooc-web:v1.1.2build:context: .dockerfile: Dockerfilerestart: alwaysports:- '8081:80'environment:BACKEND_HOST: ${BACKEND_HOST}
Dockerfile
#第一阶段构建
FROM node:v16.20.2 as builder
WORKDIR /app/kubeimooc-web
#拷贝源码
COPY . .
#安装依赖
RUN npm -v
RUN rm -rf package-lock.json
RUN rm -rf node_modules
RUN echo "registry=https://registry.npmjs.org/" > /etc/npmrc
RUN npm install# 开始构建
RUN npm run build:prod# 第二阶段构建
FROM nginx:alpine
COPY --from=builder /app/kubeimooc-web/dist/ /usr/share/nginx/html/
COPY --from=builder /app/kubeimooc-web/default.conf.template /etc/nginx/templates/default.conf.template
EXPOSE 80
default.conf.template
server {listen 80;listen [::]:80;server_name localhost;#access_log /var/log/nginx/host.access.log main;location / {root /usr/share/nginx/html;#index index.html;try_files $uri $uri/ /index.html;}#error_page 404 /404.html;# redirect server error pages to the static page /50x.html#error_page 500 502 503 504 /50x.html;location = /50x.html {root /usr/share/nginx/html;}location /prod-api/ {proxy_pass ${BACKEND_HOST};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_http_version 1.1;proxy_set_header Connection "";}# proxy the PHP scripts to Apache listening on 127.0.0.1:80##location ~ \.php$ {# proxy_pass http://127.0.0.1;#}# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000##location ~ \.php$ {# root html;# fastcgi_pass 127.0.0.1:9000;# fastcgi_index index.php;# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;# include fastcgi_params;#}# deny access to .htaccess files, if Apache's document root# concurs with nginx's one##location ~ /\.ht {# deny all;#}
}
.env.production(生产环境变量文件)
# just a flag
NODE_ENV = 'production'# base api
VUE_APP_BASE_API = '/prod-api'