From frappe-apps-manager
Add a new microservice to dev-podman-compose.yml with proper configuration, dependencies, and networking.
How this skill is triggered — by the user, by Claude, or both
Slash command
/frappe-apps-manager:frappe-add-service-composeThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Add a new microservice to `dev-podman-compose.yml` following the established patterns.
Add a new microservice to dev-podman-compose.yml following the established patterns.
Add to dev-podman-compose.yml in the services: section:
# <Service Name> Microservice
<service-name>-service:
image: localhost/frappe-microservices-base:latest
ports:
- "<port>:8000" # Use next available port (8002, 8003, 8004, etc.)
environment:
- FRAPPE_SITE=dev.localhost
- FRAPPE_SITES_PATH=/app/sites
- PYTHONUNBUFFERED=1
- CENTRAL_SITE_URL=http://dev-frappe-ms-poc-dev-central-site-1:8000
# Database configuration (central site)
- DB_HOST=dev-frappe-ms-poc-dev-central-site-1
- DB_PORT=3306
- DB_NAME=_9079b9524fe5ca86
- DB_PASSWORD=687FNguLvKKbFH3T
- DB_TYPE=mariadb
# Redis configuration
- REDIS_HOST=dev-frappe-ms-poc-dev-central-site-1
- REDIS_PORT=6379
depends_on:
dev-central-site:
condition: service_started
networks:
- dev-frappe-network
volumes:
- ./<service-name>-service:/app/service
- ./<service-name>-service/entrypoint.py:/app/entrypoint.py
- dev_site_data:/app/sites:ro # Optional: if service needs site data
- ./frappe-microservice-lib/frappe_microservice:/opt/venv/lib/python3.11/site-packages/frappe_microservice:ro
Check existing ports and use next available:
Next available: 8007, 8008, etc.
<service-name>-service (kebab-case)./<service-name>-service/ (matches service name)dev-frappe-ms-poc-<service-name>-service-1All services depend on dev-central-site:
depends_on:
dev-central-site:
condition: service_started
If service depends on another microservice, add it:
depends_on:
dev-central-site:
condition: service_started
orders-service:
condition: service_started
Required volumes:
volumes:
- ./<service-name>-service:/app/service
- ./<service-name>-service/entrypoint.py:/app/entrypoint.py
- ./frappe-microservice-lib/frappe_microservice:/opt/venv/lib/python3.11/site-packages/frappe_microservice:ro
Optional volumes:
- dev_site_data:/app/sites:ro # If service needs site data (read-only)
Required:
FRAPPE_SITE=dev.localhostFRAPPE_SITES_PATH=/app/sitesPYTHONUNBUFFERED=1CENTRAL_SITE_URL=http://dev-frappe-ms-poc-dev-central-site-1:8000Service-specific (add as needed):
- SERVICE_SPECIFIC_VAR=value
Update kong.yml to add route for new service:
services:
- name: <service-name>-service
url: http://<service-name>-service:8000
routes:
- name: <service-name>-route
paths:
- /<service-name>
Then update dev-podman-compose.yml Kong service dependencies:
kong:
depends_on:
- auth-service
- signup-service
- subscription-service
- company-service
- orders-service
- <service-name>-service # Add here
For a new inventory-service on port 8007:
# Inventory Microservice
inventory-service:
image: localhost/frappe-microservices-base:latest
ports:
- "8007:8000"
environment:
- FRAPPE_SITE=dev.localhost
- FRAPPE_SITES_PATH=/app/sites
- PYTHONUNBUFFERED=1
- CENTRAL_SITE_URL=http://dev-frappe-ms-poc-dev-central-site-1:8000
- DB_HOST=dev-frappe-ms-poc-dev-central-site-1
- DB_PORT=3306
- DB_NAME=_9079b9524fe5ca86
- DB_PASSWORD=687FNguLvKKbFH3T
- DB_TYPE=mariadb
- REDIS_HOST=dev-frappe-ms-poc-dev-central-site-1
- REDIS_PORT=6379
depends_on:
dev-central-site:
condition: service_started
networks:
- dev-frappe-network
volumes:
- ./inventory-service:/app/service
- ./inventory-service/entrypoint.py:/app/entrypoint.py
- ./frappe-microservice-lib/frappe_microservice:/opt/venv/lib/python3.11/site-packages/frappe_microservice:ro
After adding service:
Check syntax:
podman compose -f dev-podman-compose.yml config
Start service:
podman compose -f dev-podman-compose.yml up -d <service-name>-service
Check logs:
podman compose -f dev-podman-compose.yml logs <service-name>-service
Test endpoint:
curl http://localhost:<port>/health
dev-frappe-network for all servicesnpx claudepluginhub vyogotech/frappe-apps-manager --plugin frappe-apps-managerGuides completion of development work by verifying tests, detecting environment, and presenting structured options for merge, PR, or cleanup.
Enforces test-driven development: write failing test first, then minimal code to pass. Use when implementing features or bugfixes.
Guides creation and editing of skills using test-driven development with pressure scenarios and subagents to verify agent compliance.