我是如何运行在云上的?

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
简介: 我是如何运行在云上的?


前端静态站点在阿里云自建 K8S DevOps 集群上优雅的进行 CI/CD 。


微信图片_20220610141038.png


网站


这里选择 Docusaurus 静态网站生成器,React 生态。


域名


这里我的是——https://hacker-linner.com|黑客下午茶:


微信图片_20220610141106.png


K8S DevOps 集群


这是一个在阿里云自建的 K8S 集群,我这边主要是用于开发测试用。真正的生产集群建议直接买 AKS。


微信图片_20220610141121.png


私有 Gitlab


这个我已部署到 黑客下午茶 K8S DevOps 集群。

将我们的站点推送上去:


微信图片_20220610141135.png


使用 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


看到如下图,表明镜像没有问题:


微信图片_20220610141213.png


推送镜像到 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


微信图片_20220610141226.png


Aliyun 查看镜像


微信图片_20220610141235.png



K8S 集群设置



创建 namespace


kubectl create ns hacker-linner


查看集群中的 namespace


微信图片_20220610141245.png


Cert-Manager 自动签发 TLS 证书



微信图片_20220610141254.png



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


微信图片_20220610141306.png


Helm 部署 Nginx




微信图片_20220610141321.png


添加 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。


微信图片_20220610141332.png


配置项目 Drone Secrets


微信图片_20220610141342.png


编写 .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


微信图片_20220610141354.png


相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
2月前
|
存储 Linux 数据中心
【Azure 环境】在Windows系统中 使用Terraform创建中国区Azure资源步骤(入门级)
【Azure 环境】在Windows系统中 使用Terraform创建中国区Azure资源步骤(入门级)
|
5月前
|
小程序 数据库
小程序云函数从云数据下载excal
该教程介绍了如何使用小程序云函数从云数据下载Excel文件。首先,创建名为`getexcal`的云函数,然后在终端中安装`node-xlsx`依赖。接着,编写云函数代码,从数据库中获取数据,利用`node-xlsx`生成Excel文件并上传至云端。在页面(index)中,提供下载和打开Excel的按钮。当点击“生成excel”时,调用云函数并获取文件下载地址,将其复制到剪贴板并弹出提示。最后,提醒注意每次更新云函数后需重新部署,并确保使用正确的云开发环境ID。
68 1
|
容器
阿里云最新产品手册——云基础产品与基础设施——计算——弹性容器实例——产品功能
阿里云最新产品手册——云基础产品与基础设施——计算——弹性容器实例——产品功能自制脑图
134 1
|
5月前
|
弹性计算 Unix Linux
带你读《弹性计算技术指导及场景应用》——1. 单实例上运行Linux桌面多开解决方案(1)
带你读《弹性计算技术指导及场景应用》——1. 单实例上运行Linux桌面多开解决方案(1)
113 2
|
5月前
|
弹性计算 Linux 测试技术
带你读《弹性计算技术指导及场景应用》——1. 单实例上运行Linux桌面多开解决方案(2)
带你读《弹性计算技术指导及场景应用》——1. 单实例上运行Linux桌面多开解决方案(2)
113 0
|
安全 Java 应用服务中间件
各类项目部署运行
各类项目部署运行
100 0
如何让多个游戏共享一个云开发环境
前言 这是一篇五块钱的技术教程,将至少能够帮助你节省几十块钱的云开发费用。多个小游戏共享一个云开发环境,不但能够节省云开发的费用,以后还能够将多个游戏之间进行数据打通,可谓一举两得。 *所有小蚂蚁的学员可以前往知识拓展库中免费学习这篇教程。
79 0
|
专有云 应用服务中间件
阿里云-EDAS平台 无法打开一直处于加载中...
阿里专有云敏捷标准版V3.5 EDAS平台打开一直处于加载中... 网站未信任 需要增加数字证书。
阿里云-EDAS平台 无法打开一直处于加载中...
|
弹性计算 运维 监控
部署平台完整操作指南
部署平台完整操作指南
1724 0
部署平台完整操作指南
|
Linux Windows
麒麟部署平台应用启动和停止脚本模板
麒麟部署平台ISV操作手册
617 0
下一篇
无影云桌面