前端静态站点在阿里云自建 K8S DevOps 集群上优雅的进行 CI/CD
目录
- 网站
- 域名
- K8S DevOps 集群
- 私有 Gitlab
- 使用 Docker 编译站点
* Dockerfile
* 构建编译 Image
* 测试编译 Image
* 推送镜像到 Aliyun - K8S 集群设置
* 创建 namespace
* 查看集群中的 namespace
* Cert-Manager 自动签发 TLS 证书
* ClusterIssuer
* Certificate
* 查看证书 - Helm 部署 Nginx
* 添加 bitnami 仓库
* 配置 PVC
* 配置 values.yaml
* 一键部署 - Drone CI 设置
* 配置项目 Drone Secrets
* 编写 .drone.yml CI Pipeline - 上云
* 触发 Drone CI
网站
这里选择 Docusaurus 静态网站生成器,React 生态。
域名
这里我的是——https://hacker-linner.com|黑客下午茶:
K8S DevOps 集群
这是一个在阿里云自建的 K8S 集群,我这边主要是用于开发测试用。
真正的生产集群建议直接买 AKS。
私有 Gitlab
这个我已部署到 黑客下午茶 K8S DevOps 集群。
将我们的站点推送上去:
使用 Docker 编译站点
Dockerfile
FROM node:10-slim
ENV SASS_BINARY_SITE=https://npm.taobao.org/mirrors/node-sass/
ENV PHANTOMJS_CDNURL=https://npm.taobao.org/mirrors/phantomjs/
WORKDIR /drone/
COPY ./package.json /drone/
RUN yarn
构建编译 Image
docker build -t registry.cn-shenzhen.aliyuncs.com/hacker-linner/hacker-site:build .
测试编译 Image
清除 .docusaurus 和 node_modules 文件夹
rm -rf .docusaurus node_modules
进入容器
docker run -it -v $(pwd):/drone/app registry.cn-shenzhen.aliyuncs.com/hacker-linner/hacker-site:build bash
进入 app 目录
cd /drone/app
软链接镜像中已缓存的 node_modules
ln -sfn /drone/node_modules node_modules
执行编译
npm build
看到如下图,表明镜像没有问题:
推送镜像到 Aliyun
后面,我们会使用这个基础镜像在 Drone CI 里面对我们的站点进行编译。
登录 Aliyun 私有仓库
docker login --username=hacker@aliyun.com registry.cn-shenzhen.aliyuncs.com
# hacker@aliyun.com -- 你的阿里云账号
推送镜像
docker push registry.cn-shenzhen.aliyuncs.com/hacker-linner/hacker-site:build
Aliyun 查看镜像
K8S 集群设置
创建 namespace
kubectl create ns hacker-linner
查看集群中的 namespace
Cert-Manager 自动签发 TLS 证书
ClusterIssuer
apiVersion: cert-manager.io/v1alpha2
kind: ClusterIssuer
metadata:
labels:
name: letsencrypt-prod
name: letsencrypt-prod
namespace: cert-manager
spec:
acme:
email: hackerlinner@gmail.com
solvers:
- dns01:
webhook:
config:
accessKeyIdRef:
key: accessKeyId
name: alidns-access-key-id
accessKeySecretRef:
key: accessKeySecret
name: alidns-access-key-secret
regionId: 'cn-shenzhen'
ttl: 600
groupName: certmanager.webhook.alidns
solverName: alidns
privateKeySecretRef:
name: letsencrypt-prod
server: https://acme-v02.api.letsencrypt.org/directory
Certificate
apiVersion: cert-manager.io/v1alpha2
kind: Certificate
metadata:
name: hacker-linner-cert
spec:
secretName: hacker-linner-cert-tls
issuerRef:
name: letsencrypt-prod
kind: ClusterIssuer
commonName: '*.hacker-linner.com'
dnsNames:
- hacker-linner.com
- "*.hacker-linner.com"
查看证书
kubectl describe certificate -n hacker-linner
Helm 部署 Nginx
添加 bitnami 仓库
helm repo add bitnami https://charts.bitnami.com/bitnami
配置 PVC
这里用的是 NFS
# hacker-linner
apiVersion: v1
kind: PersistentVolume
metadata:
name: hacker-linner
labels:
app: hacker-linner
spec:
storageClassName: ""
capacity:
storage: 1Gi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
mountOptions:
- hard
- nfsvers=4.1
nfs:
path: /nfs/nginx-static/hacker-linner
server: 172.18.37.25
---
# hacker-linner
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: hacker-linner
spec:
storageClassName: ""
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
selector:
matchLabels:
app: hacker-linner
配置 values.yaml
staticSitePVC: hacker-linner
ingress:
enabled: true
hostname: hacker-linner.com
annotations:
ingress.kubernetes.io/ssl-redirect: "true"
ingress.kubernetes.io/proxy-body-size: "0"
kubernetes.io/ingress.class: "traefik"
traefik.ingress.kubernetes.io/router.tls: "true"
traefik.ingress.kubernetes.io/router.entrypoints: websecure
tls:
- hosts:
- hacker-linner.com
secretName: hacker-linner-cert-tls
一键部署
helm install hacker-linner bitnami/nginx -f values-hacker-linner.yaml -n hacker-linner
Drone CI 设置
当前集群已部署到 K8S。已经关联到 Gitlab。
配置项目 Drone Secrets
编写 .drone.yml CI Pipeline
global-variables:
- &clone
name: 克隆源码
image: alpine/git
commands:
- git clone -b "$DRONE_BRANCH" "$DRONE_REMOTE_URL" .
- &build_code
name: 构建站点
image: registry.cn-shenzhen.aliyuncs.com/hacker-linner/hacker-site:build
pull: always
commands:
- ls -la
- ln -sfn /drone/node_modules node_modules
- npm run build
- ls -la
- &deploy
name: 上云 ️
image: appleboy/drone-scp
settings:
host:
from_secret: cloud_host
port:
from_secret: cloud_port
username:
from_secret: cloud_user
password:
from_secret: cloud_pw
target: /nfs/nginx-static/hacker-linner
source: build
kind: pipeline
type: kubernetes
name: release
clone:
disable: true
steps:
- <<: *clone
- <<: *build_code
- <<: *deploy
trigger:
branch:
- release/cloud
event:
- push
上云
触发 Drone CI
# 首次
git checkout -b release/cloud
git push --set-upstream origin release/cloud
## 之后
git checkout release/cloud
git merge master
git push
一起 K8S DevOps 前端云️原生,关注黑客下午茶。
前端静态站点在阿里云自建 K8S DevOps 集群上优雅的进行 CI/CD的更多相关文章
- 阿里云ECS服务器部署HADOOP集群(一):Hadoop完全分布式集群环境搭建
准备: 两台配置CentOS 7.3的阿里云ECS服务器: hadoop-2.7.3.tar.gz安装包: jdk-8u77-linux-x64.tar.gz安装包: hostname及IP的配置: ...
- 阿里云ECS服务器部署HADOOP集群(二):HBase完全分布式集群搭建(使用外置ZooKeeper)
本篇将在阿里云ECS服务器部署HADOOP集群(一):Hadoop完全分布式集群环境搭建的基础上搭建,多添加了一个 datanode 节点 . 1 节点环境介绍: 1.1 环境介绍: 服务器:三台阿里 ...
- 阿里云ECS服务器部署HADOOP集群(三):ZooKeeper 完全分布式集群搭建
本篇将在阿里云ECS服务器部署HADOOP集群(一):Hadoop完全分布式集群环境搭建的基础上搭建,多添加了一个 datanode 节点 . 1 节点环境介绍: 1.1 环境介绍: 服务器:三台阿里 ...
- 阿里云ECS服务器部署HADOOP集群(六):Flume 安装
本篇将在阿里云ECS服务器部署HADOOP集群(一):Hadoop完全分布式集群环境搭建的基础上搭建. 1 环境介绍 一台阿里云ECS服务器:master 操作系统:CentOS 7.3 Hadoop ...
- 阿里云ECS服务器部署HADOOP集群(七):Sqoop 安装
本篇将在 阿里云ECS服务器部署HADOOP集群(一):Hadoop完全分布式集群环境搭建 阿里云ECS服务器部署HADOOP集群(二):HBase完全分布式集群搭建(使用外置ZooKeeper) 阿 ...
- 阿里云ECS服务器部署HADOOP集群(五):Pig 安装
本篇将在阿里云ECS服务器部署HADOOP集群(一):Hadoop完全分布式集群环境搭建的基础上搭建. 1 环境介绍 一台阿里云ECS服务器:master 操作系统:CentOS 7.3 Hadoop ...
- 阿里云ECS服务器部署HADOOP集群(四):Hive本地模式的安装
本篇将在阿里云ECS服务器部署HADOOP集群(一):Hadoop完全分布式集群环境搭建的基础上搭建. 本地模式需要采用MySQL数据库存储数据. 1 环境介绍 一台阿里云ECS服务器:master ...
- 阿里云3台机器组成集群配置ssh免密码登陆
1 查询阿里云局网ip 注意:需要配置同一地区同一可用区的机器 才是一个局网 2 配置好hosts文件 3 hostname确认也是正确的 4 生成公钥私钥 三台机器同样操作 ssh-keygen - ...
- 云计算之路-阿里云上-容器难容:容器服务故障以及自建 docker swarm 集群故障
3月21日,由于使用阿里云服务器自建 docker swarm 集群的不稳定,我们将自建 docker swarm 集群上的所有应用切换阿里云容器服务 swarm 版(非swarm mode). 3月 ...
随机推荐
- Django实现文件上传功能
文件上传 关注公众号"轻松学编程"了解更多. 1.创建上传文件夹 在static文件夹下创建uploads用于存储接收上传的文件 在settings中配置,MEDIA_ROOT=o ...
- AC 自动机刷题记录
目录 简介 第一题 第二题 第三题 第四题 第五题 第六题 简介 这就是用来记录我对于<信息学奥赛一本通 · 提高篇>一书中的习题的刷题记录以及学习笔记. 一般分专题来写(全部写一起可能要 ...
- 超实用的14个 Spring MVC “隐藏”技巧,用了都说好!
通常,在Spring MVC中,我们编写一个控制器类来处理来自客户端的请求.然后,控制器调用业务类来处理与业务相关的任务,然后将客户端重定向到逻辑视图名称,该名称由Spring的调度程序Servlet ...
- python爬虫07BeautifulSoup
有一个高效的网页解析库 它的名字叫做 BeautifulSoup 它 是一个可以从 HTML 或 XML 文件中提取数据的 Python 库 首先我们要安装一下这个库 pip install be ...
- 微信三方平台开发上传base64格式图片至临时素材
1 public string UploadImgByB64(string b64) 2 { 3 //access_token 需要自己获取 4 string access_token = getTo ...
- MyBatis源码解析
在讲解MyBatis之前,先说下传统JDBC连接数据库的弊端: 1.JDBC底层没有实现连接池,从而导致操作数据库需要频繁的创建和释放,影响性能: 2.JDBC的代码散落在Java代码中,如果需要修改 ...
- Spring3的IOC的annotation学习笔记
以下记录了一个小小的Spring3的annotation的应用笔记. 文件列表: UserService-interface UserDao-interface UserServiceImpl-Use ...
- 经典c程序100例==71--80
[程序71] 题目:编写input()和output()函数输入,输出5个学生的数据记录. 1.程序分析: 2.程序源代码: #define N 5 struct student { char num ...
- 线程范围内的环境变量---ThreadLocal
package cn.itcast.heima2; import java.util.HashMap; import java.util.Map; import java.util.Random; p ...
- 测试cephfs写入海量文件
前言 测试cephfs的写入大量文件,通过mdtest写入1K大小的文件1亿个,每个目录里面文件为1万,目录总数为1万,总文件数目就为1亿了 写入的命令 mdtest -C -F -L -z 4 -b ...