-
Notifications
You must be signed in to change notification settings - Fork 62
Deploy NodeJS + MongoDB + Nginx (CTM stack)
John Sundarraj edited this page Sep 10, 2024
·
2 revisions
# Modify hosts configuration.
$ notepad C:\Windows\System32\drivers\etc\hosts
192.168.101.61 app.ctm.sloopstash.stg app-static.ctm.sloopstash.stg
192.168.101.61 app.ctm.sloopstash.qaa app-static.ctm.sloopstash.qaa
192.168.101.61 app.ctm.sloopstash.qab app-static.ctm.sloopstash.qab
# Modify hosts configuration.
$ sudo nano /etc/hosts
192.168.101.61 app.ctm.sloopstash.stg app-static.ctm.sloopstash.stg
192.168.101.61 app.ctm.sloopstash.qaa app-static.ctm.sloopstash.qaa
192.168.101.61 app.ctm.sloopstash.qab app-static.ctm.sloopstash.qab
# Allowed values for $ENVIRONMENT variable.
* stg
* qaa
* qab
# Available files containing environment variables.
* STG.env
* QAA.env
* QAB.env
# Store environment variables.
$ export ENVIRONMENT=stg
# Switch to Kubernetes starter-kit directory.
$ cd /opt/kickstart-kubernetes
# Store Kubernetes variables as environment variables.
$ source var/STG.env
# Switch to Kubernetes starter-kit directory.
$ cd /opt/kickstart-kubernetes
# Add labels to Kubernetes node.
$ kubectl label nodes sloopstash-k8s-mtr-1 type=on-premise provider=host service=virtualbox region=local availability_zone=local-a
$ kubectl label nodes sloopstash-k8s-wkr-1 type=on-premise provider=host service=virtualbox region=local availability_zone=local-b node-role.kubernetes.io/worker=worker
$ kubectl label nodes sloopstash-k8s-wkr-2 type=on-premise provider=host service=virtualbox region=local availability_zone=local-c node-role.kubernetes.io/worker=worker
# Create Kubernetes namespace.
$ kubectl create namespace sloopstash-${ENVIRONMENT}-ctm
# Create directories for Kubernetes persistent-volumes on worker nodes.
$ sudo mkdir -p /mnt/sloopstash/${ENVIRONMENT}/ctm/mongo-db/0/data
$ sudo mkdir -p /mnt/sloopstash/${ENVIRONMENT}/ctm/mongo-db/0/log
$ sudo mkdir -p /mnt/sloopstash/${ENVIRONMENT}/ctm/app/log
$ sudo mkdir -p /mnt/sloopstash/${ENVIRONMENT}/ctm/nginx/log
$ sudo chmod -R ugo+rwx /mnt/sloopstash
# Create Kubernetes persistent-volume.
$ envsubst < persistent-volume/ctm/mongo-db.yml | kubectl apply -f -
$ envsubst < persistent-volume/ctm/app.yml | kubectl apply -f -
$ envsubst < persistent-volume/ctm/nginx.yml | kubectl apply -f -
# Create Kubernetes persistent-volume-claim.
$ envsubst < persistent-volume-claim/ctm/app.yml | kubectl apply -f - -n sloopstash-${ENVIRONMENT}-ctm
$ envsubst < persistent-volume-claim/ctm/nginx.yml | kubectl apply -f - -n sloopstash-${ENVIRONMENT}-ctm
# Create Kubernetes config-map.
$ kubectl create configmap mongo-db \
--from-file=workload/mongo-db/${CTM_MONGO_DB_VERSION}/conf/ \
--from-file=supervisor-server=workload/supervisor/conf/server.conf \
-n sloopstash-${ENVIRONMENT}-ctm
$ kubectl create configmap app \
--from-file=supervisor-server=workload/supervisor/conf/server.conf \
--from-file=app-supervisor=stack/ctm/app/conf/supervisor.ini \
-n sloopstash-${ENVIRONMENT}-ctm
$ kubectl create configmap nginx \
--from-file=workload/nginx/${CTM_NGINX_VERSION}/conf/ \
--from-file=supervisor-server=workload/supervisor/conf/server.conf \
--from-file=nginx-app=stack/ctm/nginx/conf/app.conf \
-n sloopstash-${ENVIRONMENT}-ctm
# Create Kubernetes service.
$ kubectl apply -f service/ctm/mongo-db.yml -n sloopstash-${ENVIRONMENT}-ctm
$ kubectl apply -f service/ctm/app.yml -n sloopstash-${ENVIRONMENT}-ctm
$ envsubst < service/ctm/nginx.yml | kubectl apply -f - -n sloopstash-${ENVIRONMENT}-ctm
# Create Kubernetes stateful-set.
$ envsubst < stateful-set/ctm/mongo-db.yml | kubectl apply -f - -n sloopstash-${ENVIRONMENT}-ctm
# Create Kubernetes deployment.
$ envsubst < deployment/ctm/app.yml | kubectl apply -f - -n sloopstash-${ENVIRONMENT}-ctm
$ envsubst < deployment/ctm/nginx.yml | kubectl apply -f - -n sloopstash-${ENVIRONMENT}-ctm
- STG environment: http://app.ctm.sloopstash.stg:30001/dashboard
- QAA environment: http://app.ctm.sloopstash.qaa:30002/dashboard
- QAB environment: http://app.ctm.sloopstash.qab:30003/dashboard
# Switch to Kubernetes starter-kit directory.
$ cd /opt/kickstart-kubernetes
# List resources under Kubernetes namespace.
$ kubectl get pvc,cm,sts,deploy,rs,ds,po,svc,ep,ing -o wide -n sloopstash-${ENVIRONMENT}-ctm
# Delete Kubernetes namespace.
$ kubectl delete namespace sloopstash-${ENVIRONMENT}-ctm
# Delete Kubernetes persistent-volume using template.
$ envsubst < persistent-volume/ctm/redis.yml | kubectl delete -f -
$ envsubst < persistent-volume/ctm/app.yml | kubectl delete -f -
$ envsubst < persistent-volume/ctm/nginx.yml | kubectl delete -f -