前端静态站点在阿里云自建 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月 ...
随机推荐
- Js模块化开发的理解
Js模块化开发的理解 模块化是一个语言发展的必经之路,其能够帮助开发者拆分和组织代码,随着前端技术的发展,前端编写的代码量也越来越大,就需要对代码有很好的管理,而模块化能够帮助开发者解决命名冲突.管理 ...
- linux常用命令和系统基本目录
Linux 基础命令及基本目录 一.网卡 1.网卡配置文件路径 /etc/sysconfig/network-scripts/ifcfg-eth0 配置文件: TYPE=Ethernet # 以太 ...
- 痞子衡嵌入式:超级下载算法(RT-UFL)开发笔记(2) - 识别当前i.MXRT型号
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是超级下载算法开发笔记(2)之识别当前i.MXRT型号. 文接上篇 <超级下载算法(RT-UFL)开发笔记(1) - 执行在不同CM ...
- [python学习手册-笔记]002.python核心数据类型
python核心数据类型 ❝ 本系列文章是我个人学习<python学习手册(第五版)>的学习笔记,其中大部分内容为该书的总结和个人理解,小部分内容为相关知识点的扩展. 非商业用途转载请注明 ...
- 【转】jps 命令使用
jps(Java Virtual Machine Process Status Tool)是JDK1.5提供的一个显示当前所有java进程pid的命令,简单实用,非常适合在linux/unix平台上简 ...
- 1. Spark的安装及介绍
*以下内容由<Spark快速大数据分析>整理所得. 读书笔记的第一部分是记录如何安装Spark?同时,简单介绍下Spark. 一.Spark安装 二.Spark介绍 一.Spark安装 如 ...
- Vue3.0响应式原理
Vue3.0的响应式基于Proxy实现.具体代码如下: 1 let targetMap = new WeakMap() 2 let effectStack = [] //存储副作用 3 4 const ...
- ngx ------ngx_cache_manager_process_cycle
static void ngx_cache_manager_process_cycle(ngx_cycle_t *cycle, void *data) {----------------------- ...
- 调度器简介,以及Linux的调度策略(转)
进程是操作系统虚拟出来的概念,用来组织计算机中的任务.但随着进程被赋予越来越多的任务,进程好像有了真实的生命,它从诞生就随着CPU时间执行,直到最终消失.不过,进程的生命都得到了操作系统内核的关照.就 ...
- Elementary OS常见软件(TIM、微信、企业微信)安装(二)
前言 最终没忍住还是把开发环境迁移到了Elementary OS上来,这其中也没少折腾,试过Ubuntu 20.04 LTS和deepin V20可以(),deepin真的很不错可能是我的电脑兼容性不 ...