Развертывание клиентской части
Обновлено: 06.03.2024
Клиентская часть — это веб-приложение, загружаемое в браузер пользователя. Контейнер — это просто статический сайт для хостинга клиентского приложения. В качестве веб-сервера используется nginx.
URL приложения — это адрес, по которому пользователь будут получать доступ к приложению, например https://app.timetta.com.
Конфигурация nginx:
apiVersion: v1
kind: ConfigMap
metadata:
name: client-host-nginx-conf
namespace: timetta
data:
nginx.conf: |
user nginx;
worker_processes 1;
events{}
http {
include /etc/nginx/mime.types;
server {
listen 80 default_server;
root /usr/share/nginx/html;
index index.html;
location / {
try_files $uri $uri/ /index.html =404;
}
}
}
---
Конфигурация клиентской части:
apiVersion: v1
kind: ConfigMap
metadata:
name: client-host-timetta-conf
namespace: timetta
data:
config.json: |
{
"appInsights": {
"instrumentationKey": "66d17b27-fdf9-4150-91ea-776ad920ba78"
},
"api": {
"url": "https://api.your-domain.com" <=== Указать нужное
},
"passport": {
"url": "https://auth.your-domain.com" <=== Указать нужное
},
"notificationHub": {
"url": "https://web-socket.your-domain.com" <=== Указать нужное
}
}
---
Конфигурация деплоймента и сервиса:
apiVersion: apps/v1
kind: Deployment
metadata:
name: client-host-deployment
namespace: timetta
labels:
app: client-host
spec:
selector:
matchLabels:
app: client-host-app
template:
metadata:
labels:
app: client-host-app
spec:
containers:
- name: client-host
image: cr.yandex/crpr8bvek949tq2fuqkf/client-host:latest
imagePullPolicy: "Always"
ports:
- protocol: TCP
containerPort: 80
volumeMounts:
- name: nginx-conf
mountPath: /etc/nginx/nginx.conf
subPath: nginx.conf
readOnly: true
- name: timetta-conf
mountPath: /usr/share/nginx/html/assets/config.json
subPath: config.json
readOnly: true
volumes:
- name: nginx-conf
configMap:
name: client-host-nginx-conf
items:
- key: nginx.conf
path: nginx.conf
- name: timetta-conf
configMap:
name: client-host-timetta-conf
items:
- key: config.json
path: config.json
imagePullSecrets:
- name: service-settings
---
apiVersion: v1
kind: Service
metadata:
name: client-host-service
namespace: timetta
spec:
selector:
app: client-host-app
ports:
- protocol: TCP
port: 80
targetPort: 80
---
Конфигурация ingress-контролера с получением TLS сертификатов let's encrypt (через CertManager):
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: client-host-ingress
namespace: timetta
annotations:
cert-manager.io/cluster-issuer: "letsencrypt"
spec:
ingressClassName: "nginx"
tls:
- hosts:
- app.your-domain.com <=== Указать нужное
secretName: client-host-tls
rules:
- host: app.your-domain.com <=== Указать нужное
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: client-host-service
port:
number: 80
В браузере откройте адрес приложения (в примере app.your-domain.com). Убедитесь, что приложение скачивается и TLS сертификат выдан и действителен.