manifests

This commit is contained in:
2023-09-27 22:27:52 +01:00
parent 8870c1f7b8
commit e9a1653c4e
17 changed files with 683 additions and 10 deletions

View File

View File

@@ -0,0 +1,76 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: auth-service
spec:
replicas: 1
selector:
matchLabels:
app: auth-service
strategy: {}
template:
metadata:
labels:
app: auth-service
spec:
containers:
- name: auth-service
image: panels/auth-service
ports:
- containerPort: 9090
env:
- name: JWT_PUBLIC_KEY
valueFrom:
secretKeyRef:
name: panels-jwtkeys-secret
key: public-key
- name: JWT_PRIVATE_KEY
valueFrom:
secretKeyRef:
name: panels-jwtkeys-secret
key: private-key
- name: PASSWORD_PEPPER
valueFrom:
configMapKeyRef:
name: auth-service-config
key: password-pepper
- name: POSTGRES_HOST
valueFrom:
configMapKeyRef:
name: auth-service-config
key: postgres-host
- name: POSTGRES_USER
valueFrom:
configMapKeyRef:
name: auth-service-config
key: postgres-user
- name: POSTGRES_PASS
valueFrom:
configMapKeyRef:
name: auth-service-config
key: postgres-pass
- name: POSTGRES_DATABASE
valueFrom:
configMapKeyRef:
name: auth-service-config
key: postgres-database
- name: KAFKA_BROKERS
valueFrom:
configMapKeyRef:
name: panels-shared-config
key: kafka-brokers
resources: {}
---
apiVersion: v1
kind: Service
metadata:
name: auth-service
spec:
selectors:
app: auth-service
type: ClusterIP
ports:
- name: grpc
port: 9090
targetPort: 9090
protocol: TCP

View File

@@ -0,0 +1,71 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: comment-service
spec:
replicas: 1
selector:
matchLabels:
app: comment-service
strategy: {}
template:
metadata:
labels:
app: comment-service
spec:
containers:
- name: comment-service
image: panels/comment-service
ports:
- containerPort: 9090
env:
- name: POSTGRES_HOST
valueFrom:
configMapKeyRef:
name: comment-service-config
key: postgres-host
- name: POSTGRES_USER
valueFrom:
configMapKeyRef:
name: comment-service-config
key: postgres-user
- name: POSTGRES_PASS
valueFrom:
configMapKeyRef:
name: comment-service-config
key: postgres-pass
- name: POSTGRES_DATABASE
valueFrom:
configMapKeyRef:
name: comment-service-config
key: postgres-database
- name: REDIS_HOST
valueFrom:
configMapKeyRef:
name: comment-service-config
key: redis-host
- name: REDIS_PASS
valueFrom:
configMapKeyRef:
name: comment-service-config
key: redis-pass
- name: KAFKA_BROKERS
valueFrom:
configMapKeyRef:
name: panels-shared-config
key: kafka-brokers
resources: {}
---
apiVersion: v1
kind: Service
metadata:
name: comment-service
spec:
selectors:
app: comment-service
type: ClusterIP
ports:
- name: grpc
port: 9090
targetPort: 9090
protocol: TCP

35
manifests/frontend.yaml Normal file
View File

@@ -0,0 +1,35 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: frontend
spec:
replicas: 1
selector:
matchLabels:
app: frontend
template:
metadata:
labels:
app: frontend
spec:
containers:
- name: frontend
image: panels/frontend
ports:
- containerPort: 80
resources: {}
restartPolicy: Always
---
apiVersion: v1
kind: Service
metadata:
name: frontend
spec:
selectors:
app: frontend
type: ClusterIP
ports:
- name: http
port: 80
targetPort: 80
protocol: TCP

View File

@@ -0,0 +1,66 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: gateway-service
spec:
replicas: 1
selector:
matchLabels:
app: gateway-service
strategy: {}
template:
metadata:
labels:
app: gateway-service
spec:
containers:
- name: gateway-service
image: panels/gateway-service
ports:
- containerPort: 3000
env:
- name: JWT_PUBLIC_KEY
valueFrom:
secretKeyRef:
name: panels-jwtkeys-secret
key: public-key
- name: AUTH_SVC_ADDR
valueFrom:
configMapKeyRef:
name: gateway-service-config
key: auth-service-address
- name: COMMENT_SVC_ADDR
valueFrom:
configMapKeyRef:
name: gateway-service-config
key: comment-service-address
- name: PANEL_SVC_ADDR
valueFrom:
configMapKeyRef:
name: gateway-service-config
key: panel-service-address
- name: POST_SVC_ADDR
valueFrom:
configMapKeyRef:
name: gateway-service-config
key: post-service-address
- name: USER_SVC_ADDR
valueFrom:
configMapKeyRef:
name: gateway-service-config
key: user-service-address
resources: {}
---
apiVersion: v1
kind: Service
metadata:
name: gateway-service
spec:
selectors:
app: gateway-service
type: ClusterIP
ports:
- name: http
port: 3000
targetPort: 3000
protocol: TCP

View File

@@ -0,0 +1,44 @@
apiVersion: v1
kind: Secrets
metadata:
name: panels-jwtkeys-secret
type: Opaque
data:
public-key: |
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA7LhPzG5rcU2A55qek4fK
E7T0YyXLTkEXjUXvd7f/7UY21BelgHVTS2L71Qms/sOjHEXwR8lwvP9VxWDTA0bx
n9rpXTV0UuFEam8JFe70O7Z9+43WujjbagMON/15YkwF94xiZPrYrZ18LE2eVHiC
eQmtW3W8AK5qZzrvDDwAdbTLvmKEkDpeJa82Ay0O/cqmIQ7Ctu4GWczwRJMbM2Tm
5PY3YCVgEtXMVcP0eeawcIAtY5WrYrtOUdMAhtYtFXXUiNmibAR8lS8Mu20juFw9
bgoaPQvR7aW/8K/hpiGfmsyWYfljG3LNbRB0JbrU9q6z6W/rD3FUBBeCyoVzP8N3
SwIDAQAB
-----END PUBLIC KEY-----
private-key: |
-----BEGIN RSA PRIVATE KEY-----
MIIEpgIBAAKCAQEA7LhPzG5rcU2A55qek4fKE7T0YyXLTkEXjUXvd7f/7UY21Bel
gHVTS2L71Qms/sOjHEXwR8lwvP9VxWDTA0bxn9rpXTV0UuFEam8JFe70O7Z9+43W
ujjbagMON/15YkwF94xiZPrYrZ18LE2eVHiCeQmtW3W8AK5qZzrvDDwAdbTLvmKE
kDpeJa82Ay0O/cqmIQ7Ctu4GWczwRJMbM2Tm5PY3YCVgEtXMVcP0eeawcIAtY5Wr
YrtOUdMAhtYtFXXUiNmibAR8lS8Mu20juFw9bgoaPQvR7aW/8K/hpiGfmsyWYflj
G3LNbRB0JbrU9q6z6W/rD3FUBBeCyoVzP8N3SwIDAQABAoIBAQDXsrab2/2xF2Mf
JwfZ/ICI5nlNotGXM77HLvOejh340eMB7a4T2FSWu9Im9BMbbZ7CE4R3lTlSLgO0
v55nPQzMkYfVM/ET2EokBZsszjjj9EzlnAAOXeKovbIGGMSzafyB7fx2cRBhWsAc
Cnn8FHcm3UeGsEgoAsXX3J6X8lCk7uGHGgHg2OoIGy3gHxbp8BbVRWxAH2nkWcqz
zC45jzE+knmZkW7I99eAwLN77AzDfXYIMkv6EvxpYWPgUIknwyww2ghcGmlXpk7L
gT3kyujDh+j9ZkAZv7QwbKVka/HWAD2CGKP4XL+gaeoseGC19ckEolywaf1c4gy2
DN5gBCHpAoGBAPrjQhochIu1c3S8NawCaE77gF1qDWA35onIKFuhT0a5wV/YLsUr
k2IzNvhLqoWKSndaNgxici95d+wXVOpKKCYX+GcU5fDubIx7joKVqLj+hMtb/5AK
S0P00rjBPfPqMk+mWaG1XMbx1/ne3boWVVCr+PnVo72eZ9z8ul+7mzstAoGBAPGL
Je7iE7fdKYx1Cr3l7ImqhpmTmG+wohwpZuTx4KCyc0eZRPJJGKq3+TtzzxSdG94T
3czyRZ7MbjYKryVOw4G2Ii1eZ1oiIRkI8Q2CBWCYaiyXXAwLeJHoC9yjgAD0zWmS
LGqfpJpZJE9CsuH2U27qcFkA8o3kf8CE8rCFCKdXAoGBAJf9i3M0KZxVzd8/kihl
wPlwZeCxue67jt+TsddpDxTiveKpnhP3BS+tpTSg6mpCUECkFzBDh7d5GAygSeIy
EMabKPKR94eReZNV2w0DS5bfImXskxOZGOXPcMVa1IRrMhWMyqorrEweAWCwApWU
qBTaSlhYc/0Q9Q0s0l/i0PT1AoGBANOpILt9ZtQGvML1SU1w7t8QDFUFzl2JRfUx
npXfEv0egwBp4c4Cmdf30TH04LDqn6HyfLl8T9/Auo8mu6YQqCfBR5/ECwMjxycd
+8XfewDTbq7Wj/WKE8Sft81HhQLRgjMRwVRJwr7ygGvoQcLazO/0BjEoMGSAqCY3
Gkfuu8+PAoGBAOUxFqskISqop2PbYFd8HE74xJbVAG1Jf8uXIe2ysDqkvu9Fbzv5
Zw5invtp5VHpZ0SLSytUb6KsHcRiqI5s2mnMnaLip2RgtnEsA5fcnWx1aFQIrXXb
UQqDvIKwRhOfcfDdu1CLYiobtcCesBHIG1sO2+/TbauXnlpaWYz7CXkV
-----END RSA PRIVATE KEY-----

56
manifests/kafka.yaml Normal file
View File

@@ -0,0 +1,56 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: kafka
spec:
replicas: 1
selector:
matchLabels:
app: kafka
template:
metadata:
labels:
app: kafka
spec:
containers:
- name: kafka
image: bitnami/kafka:3.4
ports:
- containerPort: 19093
- containerPort: 19092
- containerPort: 9092
env:
- name: KAFKA_CFG_ADVERTISED_LISTENERS
value: INTERNAL://kafka:19092,EXTERNAL://localhost:9092
- name: KAFKA_CFG_CONTROLLER_LISTENER_NAMES
value: CONTROLLER
- name: KAFKA_CFG_CONTROLLER_QUORUM_VOTERS
value: 0@kafka:19093
- name: KAFKA_CFG_INTER_BROKER_LISTENER_NAME
value: INTERNAL
- name: KAFKA_CFG_LISTENERS
value: CONTROLLER://:19093,INTERNAL://:19092,EXTERNAL://:9092
- name: KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP
value: CONTROLLER:PLAINTEXT,INTERNAL:PLAINTEXT,EXTERNAL:PLAINTEXT
- name: KAFKA_CFG_NODE_ID
value: "0"
- name: KAFKA_CFG_PROCESS_ROLES
value: controller,broker
- name: KAFKA_KRAFT_CLUSTER_ID
value: g9rbXaCaSGqB3CURPeEvTA
resources: {}
restartPolicy: Always
---
apiVersion: v1
kind: Service
metadata:
name: kafka
spec:
selectors:
app: kafka
type: ClusterIP
ports:
- name: kafka
port: 19092
targetPort: 19092
protocol: TCP

View File

@@ -0,0 +1,76 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: panel-service
spec:
replicas: 1
selector:
matchLabels:
app: panel-service
strategy: {}
template:
metadata:
labels:
app: panel-service
spec:
containers:
- name: panel-service
image: panels/panel-service
ports:
- containerPort: 9090
env:
- name: POSTGRES_HOST
valueFrom:
configMapKeyRef:
name: panel-service-config
key: postgres-host
- name: POSTGRES_USER
valueFrom:
configMapKeyRef:
name: panel-service-config
key: postgres-user
- name: POSTGRES_PASS
valueFrom:
configMapKeyRef:
name: panel-service-config
key: postgres-pass
- name: POSTGRES_DATABASE
valueFrom:
configMapKeyRef:
name: panel-service-config
key: postgres-database
- name: REDIS_HOST
valueFrom:
configMapKeyRef:
name: panel-service-config
key: redis-host
- name: REDIS_PASS
valueFrom:
configMapKeyRef:
name: panel-service-config
key: redis-pass
- name: LOG_LEVEL
valueFrom:
configMapKeyRef:
name: panel-service-config
key: log-level
- name: KAFKA_BROKERS
valueFrom:
configMapKeyRef:
name: panels-shared-config
key: kafka-brokers
resources: {}
---
apiVersion: v1
kind: Service
metadata:
name: panel-service
spec:
selectors:
app: panel-service
type: ClusterIP
ports:
- name: grpc
port: 9090
targetPort: 9090
protocol: TCP

View File

@@ -0,0 +1,76 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: post-service
spec:
replicas: 1
selector:
matchLabels:
app: post-service
strategy: {}
template:
metadata:
labels:
app: post-service
spec:
containers:
- name: post-service
image: panels/post-service
ports:
- containerPort: 9090
env:
- name: POSTGRES_HOST
valueFrom:
configMapKeyRef:
name: post-service-config
key: postgres-host
- name: POSTGRES_USER
valueFrom:
configMapKeyRef:
name: post-service-config
key: postgres-user
- name: POSTGRES_PASS
valueFrom:
configMapKeyRef:
name: post-service-config
key: postgres-pass
- name: POSTGRES_DATABASE
valueFrom:
configMapKeyRef:
name: post-service-config
key: postgres-database
- name: REDIS_HOST
valueFrom:
configMapKeyRef:
name: post-service-config
key: redis-host
- name: REDIS_PASS
valueFrom:
configMapKeyRef:
name: post-service-config
key: redis-pass
- name: LOG_LEVEL
valueFrom:
configMapKeyRef:
name: post-service-config
key: log-level
- name: KAFKA_BROKERS
valueFrom:
configMapKeyRef:
name: panels-shared-config
key: kafka-brokers
resources: {}
---
apiVersion: v1
kind: Service
metadata:
name: post-service
spec:
selectors:
app: post-service
type: ClusterIP
ports:
- name: grpc
port: 9090
targetPort: 9090
protocol: TCP

View File

@@ -0,0 +1,73 @@
apiVersion: v1
kind: ConfigMap
metadata:
name: panels-shared-config
data:
kafka-brokers: kafka:19092
---
apiVersion: v1
kind: ConfigMap
metadata:
name: gateway-service-config
data:
auth-service-address: auth-service:9090
comment-service-address: comment-service:9090
panel-service-address: panel-service:9090
post-service-address: post-service:9090
user-service-address: user-service:9090
---
apiVersion: v1
kind: ConfigMap
metadata:
name: auth-service-config
data:
password-pepper: 4d0c18c368489d4c0b48c497efb1d6b3
postgres-host: host.docker.internal:5434
postgres-user: postgres
postgres-pass: postgres
postgres-database: postgres
---
apiVersion: v1
kind: ConfigMap
metadata:
name: comment-service-config
data:
postgres-host: host.docker.internal:5435
postgres-user: postgres
postgres-pass: postgres
postgres-database: postgres
redis-host: host.docker.internal:6381
redis-pass: redis
---
apiVersion: v1
kind: ConfigMap
metadata:
name: panel-service-config
data:
postgres-host: host.docker.internal:5432
postgres-user: postgres
postgres-pass: postgres
postgres-database: postgres
redis-host: host.docker.internal:6379
redis-pass: redis
log-level: info
---
apiVersion: v1
kind: ConfigMap
metadata:
name: post-service-config
data:
postgres-host: host.docker.internal:5433
postgres-user: postgres
postgres-pass: postgres
postgres-database: postgres
redis-host: host.docker.internal:6380
redis-pass: redis
log-level: info
---
apiVersion: v1
kind: ConfigMap
metadata:
name: user-service-config
data:
mongodb-uri: mongodb://mongo:mongo@host.docker.internal:27017/

View File

@@ -0,0 +1,46 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: user-service
spec:
replicas: 1
selector:
matchLabels:
app: user-service
strategy: {}
template:
metadata:
labels:
app: user-service
spec:
containers:
- name: user-service
image: panels/user-service
ports:
- containerPort: 9090
env:
- name: MONGODB_URI
valueFrom:
configMapKeyRef:
name: user-service-config
key: mongodb-uri
- name: KAFKA_BROKERS
valueFrom:
configMapKeyRef:
name: panels-shared-config
key: kafka-brokers
resources: {}
---
apiVersion: v1
kind: Service
metadata:
name: user-service
spec:
selectors:
app: user-service
type: ClusterIP
ports:
- name: grpc
port: 9090
targetPort: 9090
protocol: TCP

View File

@@ -3,6 +3,7 @@ import type { BaseQueryFn } from '@reduxjs/toolkit/query'
import { setUnauthed } from './auth'
import type { RootState } from '../store'
import type { QueryError } from '../types/api';
const baseQuery = fetchBaseQuery({
baseUrl: import.meta.env.VITE_API_URL,
@@ -18,7 +19,8 @@ const baseQuery = fetchBaseQuery({
}
})
const wrappedBaseQuery: BaseQueryFn = async (args, api, extraOptions) => {
// eslint-disable-next-line @typescript-eslint/no-explicit-any
const wrappedBaseQuery: BaseQueryFn<any, unknown, QueryError> = async (args, api, extraOptions) => {
const result = await baseQuery(args, api, extraOptions)
if ((api.getState() as RootState).auth.accessToken && result?.error?.status === 403) {
api.dispatch(setUnauthed())

View File

@@ -1,3 +1,9 @@
import type { FetchBaseQueryError } from '@reduxjs/toolkit/query'
export type QueryError = FetchBaseQueryError | {
data: ErrorResponse;
}
export type RawResponse = {
status: string;
msg?: string;

View File

@@ -6,7 +6,7 @@ import LoadingBar from '../components/LoadingBar'
import { useAppSelector } from '../app/hooks'
import { useGetPanelByNameQuery } from '../app/api/panels'
import type { Panel } from '../app/types/common'
import type { ErrorResponse } from '../app/types/api'
import type { QueryError, ErrorResponse } from '../app/types/api'
export type PanelContext = {
panel: Panel;
@@ -63,8 +63,8 @@ function PanelLayout() {
} else if (!data) {
if (!error) {
throw Error('Unknown error occured')
} else if ('data' in error) {
const errResponse = error.data as ErrorResponse
} else if ((error as QueryError).data) {
const errResponse = (error as QueryError).data as ErrorResponse
if (errResponse.msg) {
throw Error(errResponse.msg)
} else {

View File

@@ -7,7 +7,7 @@ import LoadingBar from './LoadingBar'
import { User } from '../app/types/common'
import { useAppSelector } from '../app/hooks'
import { useGetUserByNameQuery } from '../app/api/users'
import type { ErrorResponse } from '../app/types/api'
import type { ErrorResponse, QueryError } from '../app/types/api'
export type UserContext = {
user: User
@@ -40,8 +40,8 @@ function UserLayout() {
} else if (!data) {
if (!error) {
throw Error('Unknown error occured')
} else if ('data' in error) {
const errResponse = error.data as ErrorResponse
} else if ((error as QueryError).data) {
const errResponse = (error as QueryError).data as ErrorResponse
if (errResponse.msg) {
throw Error(errResponse.msg)
} else {

View File

@@ -10,7 +10,7 @@ import LoadingBar from '../components/LoadingBar'
import { useAppSelector } from '../app/hooks'
import { useGetPanelPostQuery } from '../app/api/posts'
import type { PanelContext } from '../components/PanelLayout'
import type { ErrorResponse } from '../app/types/api'
import type { QueryError, ErrorResponse } from '../app/types/api'
import type { Comment } from '../app/types/common'
type PanelPostPageParams = {
@@ -37,8 +37,8 @@ function PanelPostPage() {
} else if (!data) {
if (!error) {
throw Error('Unknown error occured')
} else if ('data' in error) {
const errResponse = error.data as ErrorResponse
} else if ((error as QueryError).data) {
const errResponse = (error as QueryError).data as ErrorResponse
if (errResponse.msg) {
throw Error(errResponse.msg)
} else {

46
skaffold.yaml Normal file
View File

@@ -0,0 +1,46 @@
apiVersion: skaffold/v3
kind: Config
metadata:
name: panels
build:
artifacts:
- image: panels/auth-service
context: services/auth-service
docker:
dockerfile: Dockerfile
- image: panels/comment-service
context: services/comment-service
docker:
dockerfile: Dockerfile
- image: panels/frontend
context: services/frontend
docker:
dockerfile: Dockerfile
- image: panels/gateway-service
context: services/gateway-service
docker:
dockerfile: Dockerfile
- image: panels/panel-service
context: services/panel-service
docker:
dockerfile: Dockerfile
- image: panels/post-service
context: services/post-service
docker:
dockerfile: Dockerfile
- image: panels/user-service
context: services/user-service
docker:
dockerfile: Dockerfile
manifests:
rawYaml:
- ./manifests/jwtkeys-secret.yaml
- ./manifests/services-configmap.yaml
- ./manifests/kafka.yaml
- ./manifests/frontend.yaml
- ./manifests/auth-service.yaml
- ./manifests/gateway-service.yaml
- ./manifests/panel-service.yaml
- ./manifests/post-service.yaml
- ./manifests/user-service.yaml
- ./manifests/comment-service.yaml