Skip to content

Setup Instructions ​

This section explains how to structure the project, which files and folders are required, and what configuration options you can adjust before running the stack.

Project Structure ​

A typical setup looks like this:

├── docker-compose.yml # Main stack definition
├── .env # Environment variables (secrets, hostnames, tokens)
├── nginx.conf # nginx configuration
├── templates/ # Folder for PHP templates & assets
│ ├── invoice/
│ │ └── index.php
│ ├── quotation/
│ │ └── index.php
│ └── style.css
└── n8n/ # Persistent n8n workflow data

File-by-File Explanation ​

1. .env ​

  • Stores environment variables.
  • Keeps sensitive data (like Cloudflare tokens) out of docker-compose.yml.
  • Common variables:
    • TOKEN → Cloudflare tunnel token.
    • N8N_HOST → Public hostname for n8n (e.g., pdflab.example.com).
    • TZ → Timezone (e.g., Asia/Dhaka).

2. docker-compose.yml ​

  • Defines all services in the stack:
    • tunnel → Cloudflare secure tunnel.
    • gotenberg → PDF rendering service.
    • n8n → Workflow automation.
    • php-fpm → Runs PHP templates.
    • nginx → Serves templates and proxies requests.
  • Handles networking, volumes, and restart policies.
  • You can tweak:
    • Service versions → e.g., update PHP or n8n image.
    • Volumes → map new folders for logs, configs, or templates.
    • Networks → add isolation or connect to other stacks.

3. nginx.conf ​

  • Defines how nginx routes requests to PHP-FPM.
  • Configures document root (usually /var/www/html).
  • Can be customized for:
    • Caching → to improve performance.
    • SSL termination (if not using Cloudflare tunnel directly).
    • Access restrictions → IP whitelisting, basic auth, etc.

4. templates/ ​

  • Contains all PHP templates and assets.
  • documents/ → Dynamic templates (e.g., invoice, quote, certificate).
  • assets/ → CSS, JS, and images (logos, letterhead).
  • Templates use PHP variables to generate HTML (filled by n8n workflows).
  • You can tweak:
    • Add new templates for different document types.
    • Customize CSS for branding.
    • Add headers/footers for corporate style.

5. data/n8n/ ​

  • Stores n8n workflows and execution history.
  • Persistent volume → ensures data survives container restarts.
  • You can tweak:
    • Backup this folder for disaster recovery.
    • Mount it to external storage if workflows need to scale.

Configuration Options ​

  • Timezones → Set TZ in .env to match your region.
  • Public Hostnames → Define N8N_HOST for webhook URLs.
  • Scaling → Adjust replicas (if using Swarm/K8s) or run multiple Gotenberg containers.
  • Security →
    • Use .env for sensitive values.
    • Protect nginx routes if needed (auth, IP filtering).
    • Rotate Cloudflare Tunnel tokens periodically.

Running the Stack ​

Once your files are ready:

bash
docker-compose up -d

Check that each service is running:

  • n8n UI: http://localhost:5678
  • nginx/PHP templates: http://localhost
  • Gotenberg: Available internally at http://gotenberg:3000
  • Cloudflare Tunnel: Accessible via your assigned hostname