# 系统部署

注意:文章所有涉及的 docker 镜像和仓库(gchr.io / helm) 等,目前未正式对外开放;

如需试用,请联系我们 (opens new window)的销售获取。

foglcoud 依赖以下第三方服务:

  • minio
  • redis
  • mongodb
  • postgresql
  • etcd
  • rabbitmq
  • emqx
  • hmq

本文部署方式只列举 fogcloud 自身服务,包括:

  • fogcloud(后台主服务)
  • fogcloud-web(前端服务)
  • fogcron-scheduler(定时器调度服务)
  • faasbuilder(云函数镜像编译服务)

完整部署方式请参考 helm 方式

# 1 通过 docker 部署

docker 部署方式不支持云函数功能,若要使用该功能请使用 k8s 部署;

# 1.1 docker run 运行

# 1.1.1 获取镜像

通过 ghcr.io 获取

docker pull ghcr.io/fogcloud.io/fogcloud:latest
docker pull ghcr.io/fogcloud.io/fogcloud-web:latest
docker pull ghcr.io/fogcloud.io/fogcron-scheduler:latest

# 1.1.2 启动容器

  1. 启动 fogcloud 容器
docker run -d \
--name fogcloud \
-p 4000:4000 \
-v /etc/fogcloud/config/config.yaml:/etc/fogcloud/config.yaml \   
ghcr.io/fogcloud.io/fogcloud:latest
  1. 启动 fogcloud-web 容器
docker run -d \
--name fogcloud-web \
-p 80:8000 \
ghcr.io/fogcloud.io/fogcloud-web:latest
  1. 启动 fogcron-scheduler 容器
docker run -d \
--name fogcron-scheduler \
ghcr.io/fogcloud.io/fogcron-scheduler:latest

# 1.2 使用 docker-compose 创建

  1. 创建 docker-compose.yaml 文件
version: "3"

networks:
  fogcloud_net:

services:
  fogcloud:
    image: ghcr.io/fogcloud.io/fogcloud:latest
    container_name: fogcloud
    restart: unless-stopped
    networks:
      - fogcloud_net
    ports:
      - 4000:4000
    volumes:
      - /etc/fogcloud/config.example.yaml:/etc/fogcloud/config.yaml
    command: ["fogcloud", "-c", "/etc/fogcloud/config.yaml", "-e", "production"]

  fogcloud-web:
    image: ghcr.io/fogcloud.io/fogcloud-web:latest
    container_name: fogcloud-web
    restart: unless-stopped
    networks:
      - fogcloud_net
    ports:
      - 8000:8000

  fogcron-scheduler:
    image: ghcr.io/fogcloud.io/fogcron-scheduler:latest
    container_name: fogcron-scheduler
    volumes:
      - ../../../configs/fogcron/config.yaml:/etc/fogcron/config.yaml
    command:
      [
        "fogcron",
        "schedule",
        "-c",
        "/etc/fogcron/config.yaml",
        "-e",
        "development",
      ]
  1. 部署服务
docker-compose -f docker-compose.yaml up --build -d
  1. 查看服务运行状态
curl localhost:4000/api/v1/ping

# 2 通过 k8s yaml 部署

  1. 创建命名空间

配置文件 namespace.yaml 示例:

apiVersion: v1
kind: Namespace
metadata:
  name: fogcloud
  labels:
    name: fogcloud

运行命令:

kubectl apply -f namespace.yaml
  1. 创建 configmap

使用命令行直接创建 configmap:

kubectl create --namespace=fogcloud configmap fog-config \
fog-config --from-file=config.yaml=/etc/fogcloud/config.yaml
  1. 创建 fogcloud.yaml 文件

配置文件 fogcloud.yaml 示例:

# fogcloud-service
apiVersion: v1
kind: Service
metadata:
  labels:
    srv: fogcloud
  name: fogcloud
  namespace: fogcloud
spec:
  type: NodePort
  ports:
    - name: "http"
      port: 4000
      targetPort: 4000
      nodePort: 4000
  selector:
    app: fogcloud
status:
  loadBalancer: {}
---
# fogcloud-deployment
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    dep: fogcloud
  name: fogcloud
  namespace: fogcloud
spec:
  replicas: 3
  selector:
    matchLabels:
      app: fogcloud
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: fogcloud
    spec:
      containers:
        - args:
            - fogcloud
            - -c
            - /etc/fogcloud/config.example.yaml
            - -e
            - development
          image: ghcr.io/fogcloud.io/fogcloud:latest
          imagePullPolicy: Always
          name: fogcloud
          ports:
            - containerPort: 4000
            - containerPort: 15000
          resources: {}
          volumeMounts:
            - mountPath: /etc/fogcloud/config.example.yaml
              subPath: config.example.yaml
              name: fogcloud-claim
            - mountPath: /etc/fogcloud/active.en.json
              subPath: active.en.json
              name: fogcloud-claim
            - mountPath: /etc/fogcloud/active.zh.json
              subPath: active.zh.json
              name: fogcloud-claim
      restartPolicy: Always
      volumes:
        - name: fogcloud-claim
          configMap:
            name: fog-config
            items:
              - key: config.example.yaml
                path: config.example.yaml
              - key: active.en.json
                path: active.en.json
              - key: active.zh.json
                path: active.zh.json
status: {}
---
# fogcloud-web-service
apiVersion: v1
kind: Service
metadata:
  labels:
    srv: fogcloud-web
  name: fogcloud-web
  namespace: fogcloud
spec:
  ports:
    - name: "http"
      port: 4002
      targetPort: 8000
  selector:
    app: fogcloud-web
status:
  loadBalancer: {}
---
# fogcloud-web-deployment
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    dep: fogcloud-web
  name: fogcloud-web
  namespace: fogcloud
spec:
  replicas: 1
  selector:
    matchLabels:
      app: fogcloud-web
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: fogcloud-web
    spec:
      containers:
        - image: ghcr.io/fogcloud.io/fogcloud-web:latest
          imagePullPolicy: Always
          name: fogcloud-web
          ports:
            - containerPort: 80
            - containerPort: 443
          volumeMounts:
            - mountPath: /etc/nginx/conf.d
              name: nginx-claim
      volumes:
        - name: nginx-claim
          configMap:
            name: fog-config
            items:
              - key: default_web.conf
                path: default.conf
status: {}
---
# faasbuilder-service
apiVersion: v1
kind: Service
metadata:
  annotations:
  labels:
    srv: faasbuilder
  name: faasbuilder
  namespace: fogcloud
spec:
  ports:
    - name: "api"
      port: 8090
      targetPort: 8090
  selector:
    app: faasbuilder
status:
  loadBalancer: {}
---
# faasbuilder-deployment
apiVersion: apps/v1
kind: Deployment
metadata:
  annotations:
  labels:
    dep: faasbuilder
  name: faasbuilder
  namespace: fogcloud
spec:
  replicas: 1
  selector:
    matchLabels:
      app: faasbuilder
  strategy:
    type: Recreate
  template:
    metadata:
      annotations:
      labels:
        app: faasbuilder
    spec:
      containers:
        - image: ghcr.io/fogcloud.io/faas-builder:lastest
          args:
            - -c
            - /etc/faasbuilder/faasbuilder.yaml
          env:
            - name: KUBECONFIG
              value: /etc/faasbuilder/kubeconfig
          imagePullPolicy: Always
          name: faasbuilder
          securityContext:
            privileged: true
          ports:
            - containerPort: 8090
          resources: {}
          volumeMounts:
            - mountPath: /etc/faasbuilder/faasbuilder.yaml
              subPath: faasbuilder.yaml
              name: fogcloud-claim
            - mountPath: /etc/faasbuilder/kubeconfig
              subPath: kubeconfig
              name: fogcloud-claim
      restartPolicy: Always
      volumes:
        - name: fogcloud-claim
          configMap:
            name: fog-config
            items:
              - key: faasbuilder.yaml
                path: faasbuilder.yaml
              - key: kubeconfig
                path: kubeconfig         
status: {}
---
# fogcron-scheduler-deployment
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    dep: fogcron-scheduler
  name: fogcron-scheduler
  namespace: namespace
spec:
  replicas: 1
  selector:
    matchLabels:
      app: fogcron-scheduler
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: fogcron-scheduler
    spec:
      containers:
        - args:
            - fogcron
            - schedule
            - -c
            - /etc/fogcron/fogcron.yaml
          image: ghcr.io/fogcloud.io/fogcron-scheduler:latest
          imagePullPolicy: Always
          name: fogcron-scheduler
          resources: {}
          volumeMounts:
            - mountPath: /etc/fogcron/fogcron.yaml
              subPath: fogcron.yaml
              name: fogcron-scheduler-claim
      restartPolicy: Always
      volumes:
        - name: fogcron-scheduler-claim
          configMap:
            name: fog-config
            items:
              - key: fogcron.yaml
                path: fogcron.yaml
status: {}

运行命令:

kubectl apply -f fogcloud.yaml

# 3 通过 helm 部署

  1. chart 包下载
curl https://github.com/fogcloud-io/fogcloud-charts/releases/tag/v0.1.0
  1. 安装 chart 包
helm install fogcloud ./fogcloud-charts
更新时间: 2022/6/15 下午3:04:08