클라우드/DevOps

[LitmusChaos] Developer Guide

happyso 2025. 5. 25. 23:10

https://docs.litmuschaos.io/docs/developer-guide/chaoscenter-developer-guide

백엔드 컴포넌트

  • GraphQL 서버
  • Authentication 서버
  • MongoDB

프론트 컴포넌트

  • React

 

로컬 세팅 과정은 다음과 같다.

1. mongodb 설치/세팅

## mongodb 설치
❯ docker pull mongo:5
❯ docker network create mongo-cluster
❯ docker run -d --net mongo-cluster -p 27015:27015 --name m1 mongo:5 mongod --replSet rs0 --port 27015
❯ docker run -d --net mongo-cluster -p 27016:27016 --name m2 mongo:5 mongod --replSet rs0 --port 27016
❯ docker run -d --net mongo-cluster -p 27017:27017 --name m3 mongo:5 mongod --replSet rs0 --port 27017

❯ docker ps
CONTAINER ID   IMAGE                  COMMAND                  CREATED              STATUS              PORTS                                                      NAMES
22137383c039   mongo:5                "docker-entrypoint.s…"   20 seconds ago       Up 19 seconds       0.0.0.0:27017->27017/tcp, :::27017->27017/tcp              m3
d0c89e3aebe1   mongo:5                "docker-entrypoint.s…"   39 seconds ago       Up 38 seconds       0.0.0.0:27016->27016/tcp, :::27016->27016/tcp, 27017/tcp   m2
1059960182e1   mongo:5                "docker-entrypoint.s…"   About a minute ago   Up About a minute   0.0.0.0:27015->27015/tcp, :::27015->27015/tcp, 27017/tcp   m1


## 호스트 등록
❯ sudo vim /etc/hosts
127.0.0.1       m1 m2 m3


## mongodb 세팅
❯ docker exec -it m1 mongo -port 27015
> config={"_id":"rs0","members":[{"_id":0,"host":"m1:27015"},{"_id":1,"host":"m2:27016"},{"_id":2,"host":"m3:27017"}]}
{
	"_id" : "rs0",
	"members" : [
		{
			"_id" : 0,
			"host" : "m1:27015"
		},
		{
			"_id" : 1,
			"host" : "m2:27016"
		},
		{
			"_id" : 2,
			"host" : "m3:27017"
		}
	]
}
> rs.initiate(config)
{ "ok" : 1 }
rs0:PRIMARY> db.getSiblingDB("admin").createUser({user:"admin",pwd:"1234",roles:[{role:"root",db:"admin"}]});
Successfully added user: {
	"user" : "admin",
	"roles" : [
		{
			"role" : "root",
			"db" : "admin"
		}
	]
}

 

2. Authentication 서버 실행

export ADMIN_USERNAME=admin
export ADMIN_PASSWORD=litmus
export DB_SERVER="mongodb://m1:27015,m2:27016,m3:27017/?replicaSet=rs0"
export DB_USER=admin
export DB_PASSWORD=1234
export JWT_SECRET=litmus-portal@123
export PORTAL_ENDPOINT=http://localhost:8080
export LITMUS_SVC_ENDPOINT=""
export SELF_AGENT=false
export INFRA_SCOPE=cluster
export INFRA_NAMESPACE=litmus
export LITMUS_PORTAL_NAMESPACE=litmus
export PORTAL_SCOPE=namespace
export SUBSCRIBER_IMAGE=litmuschaos/litmusportal-subscriber:ci
export EVENT_TRACKER_IMAGE=litmuschaos/litmusportal-event-tracker:ci
export CONTAINER_RUNTIME_EXECUTOR=k8sapi
export ARGO_WORKFLOW_CONTROLLER_IMAGE=argoproj/workflow-controller:v2.11.0
export ARGO_WORKFLOW_EXECUTOR_IMAGE=argoproj/argoexec:v2.11.0
export CHAOS_CENTER_SCOPE=cluster
export WORKFLOW_HELPER_IMAGE_VERSION=3.0.0
export LITMUS_CHAOS_OPERATOR_IMAGE=litmuschaos/chaos-operator:3.0.0
export LITMUS_CHAOS_RUNNER_IMAGE=litmuschaos/chaos-runner:3.0.0
export LITMUS_CHAOS_EXPORTER_IMAGE=litmuschaos/chaos-exporter:3.0.0
export VERSION=ci
export HUB_BRANCH_NAME=v2.0.x
export INFRA_DEPLOYMENTS="[\"app=chaos-exporter\", \"name=chaos-operator\", \"app=event-tracker\",\"app=workflow-controller\"]"                                                                         
export INFRA_COMPATIBLE_VERSIONS='["0.2.0", "0.1.0","ci"]'
export DEFAULT_HUB_BRANCH_NAME=master
export ENABLE_INTERNAL_TLS=false
export REST_PORT=3000
export GRPC_PORT=3030
❯ git clone https://github.com/litmuschaos/litmus.git
❯ cd chaoscenter/authentication/api
❯ go run main.go

 

3. GraphQL 서버 실행

export DB_SERVER="mongodb://m1:27015,m2:27016,m3:27017/?replicaSet=rs0"
export DB_USER=admin
export DB_PASSWORD=1234
export JWT_SECRET=litmus-portal@123
export PORTAL_ENDPOINT=http://localhost:8080
export LITMUS_SVC_ENDPOINT=""
export SELF_AGENT=false
export INFRA_SCOPE=cluster
export INFRA_NAMESPACE=litmus
export LITMUS_PORTAL_NAMESPACE=litmus
export PORTAL_SCOPE=namespace
export SUBSCRIBER_IMAGE=litmuschaos/litmusportal-subscriber:ci
export EVENT_TRACKER_IMAGE=litmuschaos/litmusportal-event-tracker:ci
export CONTAINER_RUNTIME_EXECUTOR=k8sapi
export ARGO_WORKFLOW_CONTROLLER_IMAGE=argoproj/workflow-controller:v2.11.0
export ARGO_WORKFLOW_EXECUTOR_IMAGE=argoproj/argoexec:v2.11.0
export CHAOS_CENTER_SCOPE=cluster
export WORKFLOW_HELPER_IMAGE_VERSION=3.0.0
export LITMUS_CHAOS_OPERATOR_IMAGE=litmuschaos/chaos-operator:3.0.0
export LITMUS_CHAOS_RUNNER_IMAGE=litmuschaos/chaos-runner:3.0.0
export LITMUS_CHAOS_EXPORTER_IMAGE=litmuschaos/chaos-exporter:3.0.0
export ADMIN_USERNAME=admin
export ADMIN_PASSWORD=litmus
export VERSION=ci
export HUB_BRANCH_NAME=v2.0.x
export INFRA_DEPLOYMENTS="[\"app=chaos-exporter\", \"name=chaos-operator\", \"app=event-tracker\",\"app=workflow-controller\"]"
export INFRA_COMPATIBLE_VERSIONS='["0.2.0", "0.1.0","ci"]'
export DEFAULT_HUB_BRANCH_NAME=master
❯ cd chaoscenter/graphql/server
❯ go run server.go

 

3. 프론트 세팅

❯ cd chaoscenter/web

❯ yarn
yarn install v1.22.19
[1/4] 🔍  Resolving packages...
warning Resolution field "d3-color@3.1.0" is incompatible with requested version "d3-color@1"
warning Resolution field "d3-color@3.1.0" is incompatible with requested version "d3-color@1 - 2"
[2/4] 🚚  Fetching packages...
[--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------] 0/1202(node:19423) [DEP0040] DeprecationWarning: The `punycode` module is deprecated. Please use a userland alternative instead.
(Use `node --trace-deprecation ...` to show where the warning was created)
[##################################################################------------------------------------------------------------------------------------------------------------------------------] 415/1202

❯ yarn generate-certificate
yarn run v1.22.19
$ sh scripts/generate-certificate.sh
.+.+.....+.......+...+..+.......+...+............+..+++++++++++++++++++++++++++++++++++++++++++++*...+............+++++++++++++++++++++++++++++++++++++++++++++*.+.+.........+..+..................+.+...........+....+.................................+.....+.+..+....+...+++++
..+.+.....+...+.+.........+.....+.......+...+......+..+.......+++++++++++++++++++++++++++++++++++++++++++++*.+..+............+......+...+.+.....+....+..+.......+...+..+.+...........+...+..........+...+..+...+.........+...+......+.......+...+..+....+...+..+.............+......+.....+......+.+...+..+....+.........+..............+...+.........+....+.....+++++++++++++++++++++++++++++++++++++++++++++*...+...+......+....+.....+......+.+...+..+.+............+++++
-----
✨  Done in 0.29s.

❯ yarn dev
yarn run v1.22.19
$ webpack serve --config config/webpack.dev.js
<i> [webpack-dev-server] [HPM] Proxy created: /api  -> http://localhost:8080
<i> [webpack-dev-server] [HPM] Proxy rewrite rule created: "^/api" ~> ""
<i> [webpack-dev-server] [HPM] Proxy created: /auth  -> http://localhost:3000
<i> [webpack-dev-server] [HPM] Proxy rewrite rule created: "^/auth" ~> ""
<i> [webpack-dev-server] Project is running at:
<i> [webpack-dev-server] Loopback: https://localhost:8185/
<i> [webpack-dev-server] On Your Network (IPv4): https://172.30.1.87:8185/
<i> [webpack-dev-server] On Your Network (IPv6): https://[fe80::1]:8185/
<i> [webpack-dev-server] Content not from webpack is served from '/Users/snchoi/Documents/project/src/litmus/chaoscenter/web/src/static' directory
<i> [webpack-dev-server] 404s will fallback to '/index.html'