- Services
- Custom Docker Images
- Usage
- Data Persistence
- Service Ports
- Troubleshooting
- GitHub MCP Configuration
- Documentation
This repository contains a Docker Compose configuration to run n8n and Temporal services together.
The setup includes:
- n8n: An automation tool that allows you to create workflows visually
- Temporal: A workflow orchestration platform with the following components:
- Temporal server
- Temporal UI
- PostgreSQL (database)
- OpenSearch (for visibility features)
This project uses custom Docker images built from the following Dockerfiles:
- Dockerfile.n8n: Extends the official n8n image with custom configurations
- Dockerfile.temporal: Extends the official Temporal auto-setup image
Create a .env
file in the root directory of the project with your environment variables:
cp .env.example .env
Then edit the .env
file to set your specific configuration values.
You can start the services in two ways, depending on your environment:
docker compose up -d
docker-compose -f docker-compose.yml -f docker-compose.prod.yml up -d
Rebuild images after modifying the Dockerfiles:
docker compose build
Or to rebuild and start in one command:
docker compose down && docker compose build && docker compose up -d
Check that all containers are running:
docker compose ps
You should see containers for:
- n8n
- temporal
- temporal-ui
- temporal-postgresql
- opensearch
Use the provided script to verify that all services are accessible:
scripts/check_services.sh
This will check:
- n8n health endpoint
- Temporal UI web interface
- OpenSearch API
- Temporal server gRPC port
- PostgreSQL database connection
Example output:
Checking service availability...
Checking n8n at http://localhost:5678/healthz... ACCESSIBLE ✅ (HTTP 200)
Checking temporal-ui at http://localhost:8080... ACCESSIBLE ✅ (HTTP 200)
Checking opensearch at http://localhost:9200... ACCESSIBLE ✅ (HTTP 200)
Checking temporal at localhost:7233... ACCESSIBLE ✅
Checking postgresql at localhost:5432... ACCESSIBLE ✅
Service URLs:
- n8n: http://localhost:5678
- Temporal UI: http://localhost:8080
- OpenSearch: http://localhost:9200
- n8n: http://localhost:5678
- Temporal UI: http://localhost:8080
You can verify the services are responding with:
# Check n8n is responding
curl -I http://localhost:5678
# Check Temporal UI is responding
curl -I http://localhost:8080
docker compose down
To completely remove all data volumes:
docker compose down -v
Data for all services is persisted using Docker volumes. The storage location depends on the environment:
-
Development (default, using
docker-compose.yml
): Docker uses anonymous volumes for each service. These are managed by Docker and are not bound to any directory in your project. Data persists as long as the volume exists, but is not directly accessible from the project folder. -
Production (using
docker-compose.prod.yml
): Volumes are explicitly bound to host directories under/data/
for persistent storage and easier backup/restore.
Note:
- Removing volumes with
docker compose down -v
will delete all persisted data.
- n8n: 5678
- Temporal server: 7233 (gRPC API, not HTTP)
- Temporal UI / OAuth2 Proxy: 8080
- PostgreSQL: 5432
- OpenSearch: 9200
If you encounter any issues:
-
Check container logs:
docker logs temporal docker logs automatization-n8n-1
-
Ensure all required ports are available on your system
-
Make sure Docker has sufficient resources allocated
To use GitHub-related functions with Cursor's Model Context Protocol (MCP), you need to configure a GitHub Personal Access Token:
-
Create the secrets directory if it doesn't exist:
mkdir -p ~/.cursor/mcp
-
Copy or edit the
.env
file in this directory:cp mcp.env.example ~/.cursor/mcp/.env
-
Update your GitHub Personal Access Token to the
~/.cursor/mcp/.env
:GITHUB_PERSONAL_ACCESS_TOKEN=your_token_here
-
Save the file and restart Cursor for the changes to take effect.
To get access to a GitHub Personal Access Token: Ask @killev or
- Go to GitHub Settings > Developer settings > Personal access tokens
- Generate a new token with appropriate permissions (repo, workflow, etc.)
- Copy the token and add it to the
.env
file as shown above