Skip to content

Local Development Setup

We initially started using minikube as the local development environment but we later realised that it adds an extra layer of complexity to our developers. Therefore we resorted to a setup powered by docker-compose.

Sample directory structure

kubeflex-platform
--auth-service
----Dockerfile
--frontend
----Dockerfile
--backend
----Dockerfile
--docker-compose.yaml

Sample content of docker-compose.yaml file

services:
  frontend:
    build: ./frontend
    ports:
      - "3000:3000"
    environment:
      BACKEND_SERVICE: backend
      BACKEND_SERVICE_PORT: 8080
  backend:
    build: ./backend
    ports:
      - "8080:8080"
    environment:
      SERVICE_PORT: 8080
      MONGODB_URI: mongodb+srv://<user>:<password>@<cluster-name>.xxx.mongodb.net/
  auth-service:
    build: ./auth-service
    ports:
      - "3200:3200"
    environment:
      SERVICE_PORT: 3200
      MYSQL_HOST: mysqldb
      MYSQL_PORT: 3306
      MYSQL_USER: dev-user
      MYSQL_PASSWD: devpassword
  mysqldb:
    image: mysql:8.0.36
    ports:
      - 3306:3306
    restart: unless-stopped
    environment:
      MYSQL_USER: keycloakapp-user
      MYSQL_PASSWORD: keycloak123
      MYSQL_DATABASE: keycloakdb
      MYSQL_ROOT_PASSWORD: devpassword
    volumes:
      - ./mysql_data:/var/lib/mysql
  keycloak:
    image: quay.io/keycloak/keycloak:24.0
    command: start-dev
    ports:
      - 9081:8080
    restart: unless-stopped
    environment:
      KEYCLOAK_ADMIN: admin
      KEYCLOAK_ADMIN_PASSWORD: admin@1234
      KC_DB: mysql
      KC_DB_USERNAME: keycloakapp-user
      KC_DB_PASSWORD: keycloak123
      KC_DB_URL: jdbc:mysql://mysqldb:3306/keycloakdb
      KC_HOSTNAME: localhost
    depends_on:
      - mysqldb
volumes:
  mysql_data:

These exact environment variable keys are available in kubernetes in form of secrets (with different values of course)