Webui

Genesis имеет собственный API и веб-интерфейс позволяющий просматривать логи контейнеров. Для его запуска необходимо добавить в ваш gitlab-ci.yml переменную SELF_CONTAINERS_BUILD: 1 и конфигурацию сервисов genesis-webui-backend, genesis-webui-frontend, смотри в конце пример docker-compose.yml и манифест для кубернетиса. Во время исполнения джобы genesis-release будут собраны (2.5 мин.) внутренние контейнеры генезиса: webui_backend, webui_frontend.

WebUi-frontend

Веб-интерфейс будет доступен по адресу: genesis-webui-frontend.<имя ветки>.<домен> (прим. https://genesis-webui-frontend.stand.genesis-framework.com), адрес так же можно увидеть в CI/CD логах джобы Deploy.

WebUi-backend

API сервис genesis-webui-backend имеет swagger интерфейс и Redoc интерфейс автодокументации по API на url example.com/docs и example.com/redoc соответственно. Основные эндпоинты с командами исполняемыми генезисом в таблице ниже.

Endpoint Response Genesis command for docker compose Genesis command for k8s
/cmd/start/ HTTP 204 No Content docker-compose pull --quiet \
&& docker-compose up --detach --remove-orphans
kubectl delete all --all -n $NAMESPACE
kubectl apply -n $NAMESPACE -f genesis/tmp/k8s --recursive
/cmd/stop/ HTTP 204 No Content services=$(genesis services --container-manager docker)
docker-compose stop $services
kubectl -n $NAMESPACE rollout pause deploy
/cmd/restart/ HTTP 204 No Content services=$(genesis services --container-manager docker)
docker-compose pull --quiet \
&& docker-compose up --detach --force-recreate --remove-orphans $services
kubectl -n $NAMESPACE rollout restart deploy
/cmd/update/ HTTP 204 No Content docker-compose pull --quiet \
&& docker-compose up --detach --remove-orphans
kubectl delete all --all -n $NAMESPACE
kubectl apply -n $NAMESPACE -f genesis/tmp/k8s --recursive
/cmd/list/ List of services Не реализованно
/cmd/version/ Genesis version included in WebUI container
/сmd/service/{service} Websocket receiving the service name. Giving away service logs. Не реализованно

Configuration

Для Docker compose использовать конфиг сервисов docker-compose.yml :

​ Если у вас уже есть Nginx в конфиге, второй раз добавлять его не нужно.

version: '3.3'
services:
  genesis-webui-backend:
    container_name: genesis-webui-backend
    image: ${REGISTRY_URL}/webui_backend:${TAG}
    restart: always
    ports:
      - "8999:8999"
    volumes:
      - /home/devop:/root/
      - /var/run/docker.sock:/var/run/docker.sock

  genesis-webui-frontend:
    container_name: genesis-webui-frontend
    image: ${REGISTRY_URL}/webui_frontend:${TAG}
    restart: always
    environment:
      - BASE_URL=${GENESIS_WEBUI_BACKEND_PUBLIC_URL}
    ports:
      - "8998:3000"

  nginx:
    container_name: nginx
    image: jonasal/nginx-certbot:3.2.0-nginx1.23.1
    restart: always
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - nginx_secrets:/etc/letsencrypt
      - ~/user_conf.d:/etc/nginx/user_conf.d:ro
    environment:
      - CERTBOT_EMAIL=${CERTBOT_EMAIL}

volumes:
  nginx_secrets:

Для кубернетиса использовать следующий манифест.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: genesis-webui-backend
  labels:
    app: genesis-webui-backend
spec:
  selector:
    matchLabels:
      app: genesis-webui-backend
  replicas: 1
  template:
    metadata:
      labels:
        app: genesis-webui-backend
    spec:
      containers:
        - name: genesis-webui-backend
          image: ${REGISTRY_URL}/webui_backend:${TAG}
          ports:
            - containerPort: 8999
          imagePullPolicy: Always
      imagePullSecrets:
        - name: registry-credential
      restartPolicy: Always

---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: genesis-webui-frontend
  labels:
    app: genesis-webui-frontend
spec:
  selector:
    matchLabels:
      app: genesis-webui-frontend
  replicas: 1
  template:
    metadata:
      labels:
        app: genesis-webui-frontend
    spec:
      containers:
        - name: genesis-webui-frontend
          image: ${REGISTRY_URL}/webui_frontend:${TAG}
          ports:
            - containerPort: 3000
          imagePullPolicy: Always
          env:
            - name: BASE_URL
              value: https://${GENESIS_WEBUI_BACKEND_PUBLIC_URL}

      imagePullSecrets:
        - name: registry-credential
      restartPolicy: Always

---
apiVersion: v1
kind: Service
metadata:
  name: genesis-webui-backend
spec:
  selector:
    app: genesis-webui-backend
  ports:
    - name: "genesis-webui-backend"
      port: 8999
      targetPort: 8999

---
apiVersion: v1
kind: Service
metadata:
  name: genesis-webui-frontend
spec:
  selector:
    app: genesis-webui-frontend
  ports:
    - name: "genesis-webui-frontend"
      port: 8998
      targetPort: 3000