目录

网站

这里选择 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

清除 .docusaurusnode_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 前端云️原生,关注黑客下午茶

最新文章

  1. HDU3333 Turing Tree(线段树)
  2. UIscrollView和UIPageControl的循环滚动
  3. bootstrap-5
  4. kafka系列教程2(设计构造及原理1)
  5. Linux获取线程tid线程名
  6. list、set、map的特点
  7. SQL Server 查看当前活动的锁
  8. 《Java并发编程实战》第二章 线程安全性 读书笔记
  9. BZOJ 3668: [Noi2014]起床困难综合症( 贪心 )
  10. 实现$.fn.extend 和$.extend函数
  11. [转]解决VS2008 开发Windows Mobile 项目生成速度慢的问题
  12. alpha-咸鱼冲刺day9-紫仪
  13. list遍历时删除的坑
  14. RN开发第二天
  15. nginx简介与配置
  16. C# 获取 sha256
  17. Python-Django&#160;Win7上使用Apache24和mod_wsgi部署Django1.11应用程序
  18. express依赖中模块引擎的使用
  19. kafka消息队列的简单理解
  20. mac环境下配置nginx

热门文章

  1. C# 中的 in 参数和性能分析
  2. Flask 中的MTV架构之Models
  3. 震惊!很多人都不知道 CSS Grid 框架早就有了!
  4. 题解 AT3877 【[ARC089C] GraphXY】
  5. php数据映射到echarts中国地图
  6. 腾讯云--对象存储cos绑定自定义域名
  7. 有奖体验 CODING 产品,iPad Pro、HHKB 键盘等超级礼包等你来!
  8. MySql索引使用策略
  9. .NET操作Excel
  10. 《.NET 5.0 背锅案》第3集-剧情反转:EnyimMemcachedCore 无罪,.NET 5.0 继续背锅