Post

Discovering n8n: The Workflow Automation Platform

Discovering n8n: The Workflow Automation Platform

Automation has always fascinated me for its ability to simplify complex processes and free up time for creative work. That curiosity naturally led me to explore new tools and that’s how I discovered n8n, a workflow automation platform that has quickly become one of my favourite tools.

I kept seeing videos and articles about n8n pop up and it was one of those tools that never quite left my “must-try” list. As someone who’s passionate about automation, I was curious to see what made it stand out. Once I started digging deeper, I quickly realised how powerful and flexible it was.

What is n8n?

n8n (short for “nodemation” and pronounced n-eight-n) is a workflow automation platform that lets you connect apps, services, and APIs without writing complex code. Think of it as a self-hosted alternative to Zapier or Make but with far greater flexibility and control.

It uses nodes to represent actions or data transformations, and you can chain these nodes together in workflows to automate almost anything - from sending emails and integrating APIs to building AI-powered data agents.

Best of all, you can self-host n8n, giving you full control over your data and privacy, something that really resonated with me.

Setting It Up in My Homelab

Before diving in, there are a few prerequisites: a running Docker environment (or Portainer if you prefer a GUI), a domain managed through a provider like Cloudflare, and some basic knowledge of reverse proxying with tools such Nginx Proxy Manager. Once those are set up, the rest is easy.

With plenty of spare resources in my homelab, running n8n on my VPS was an obvious choice. I deployed it via Portainer and tweaked the stack configuration to suit my setup.

Here is my docker-compose.yaml file:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
services:
  n8n:
    image: docker.n8n.io/n8nio/n8n:latest
    container_name: n8n
    expose:
      - "5678"
    restart: unless-stopped
    user: "1000:1000"
    environment:
      # General settings
      - TZ=Europe/London
      - N8N_HOST=${SUBDOMAIN}.${DOMAIN_NAME}        # e.g., n8n.example.com
      - N8N_PORT=5678
      - N8N_PROTOCOL=https
      - NODE_ENV=production
      - WEBHOOK_URL=https://${SUBDOMAIN}.${DOMAIN_NAME}/
      - N8N_RUNNERS_ENABLED=true
      - N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=true

      # Database
      - DB_TYPE=postgresdb
      - DB_POSTGRESDB_HOST=n8n-db
      - DB_POSTGRESDB_PORT=5432
      - DB_POSTGRESDB_USER=${N8N_DB_USER}
      - DB_POSTGRESDB_PASSWORD=${N8N_DB_PASSWORD}
      - DB_POSTGRESDB_DATABASE=${N8N_DB_NAME}

      # Security / Privacy
      - N8N_BLOCK_ENV_ACCESS_IN_NODE=false
      - N8N_DIAGNOSTICS_ENABLED=false
      - N8N_VERSION_NOTIFICATIONS_ENABLED=false
      - N8N_TRUSTED_PROXIES=${N8N_TRUSTED_PROXIES}

    volumes:
      - n8n_data:/home/node/.n8n
      - ./local-files:/files
    networks:
      - edge-net
      - n8n-backend
    depends_on:
      n8n-db:
        condition: service_healthy
    security_opt:
      - no-new-privileges:true
    read_only: true
    tmpfs:
      - /tmp
      - /home/node/.cache:uid=1000,gid=1000,mode=770
    logging:
      options:
        max-size: "10m"
        max-file: "3"

  n8n-db:
    image: postgres:15-alpine
    container_name: n8n-db
    restart: unless-stopped
    environment:
      - TZ=Europe/London
      - POSTGRES_USER=${N8N_DB_USER}
      - POSTGRES_PASSWORD=${N8N_DB_PASSWORD}
      - POSTGRES_DB=${N8N_DB_NAME}
    volumes:
      - n8n-db:/var/lib/postgresql/data
    networks:
      - n8n-backend
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U ${N8N_DB_USER} -h localhost"]
      interval: 10s
      timeout: 5s
      retries: 5
      start_period: 30s
    security_opt:
      - no-new-privileges:true
    logging:
      options:
        max-size: "10m"
        max-file: "3"

volumes:
  n8n_data:
  n8n-db:

networks:
  edge-net:
    external: true
  n8n-backend:
    driver: bridge

Here is my .env file:

1
2
3
4
5
6
DOMAIN_NAME=example.com
SUBDOMAIN=n8n
N8N_DB_USER=myuser
N8N_DB_PASSWORD=supersecretpassword
N8N_DB_NAME=n8n
N8N_TRUSTED_PROXIES=127.0.0.1

Portainer Dashboard

After confirming the stack was running, I configured my Cloudflare Tunnel and linked my subdomain through Nginx Proxy Manager for external access. Then I created the owner account, registered for the free license key, and activated my instance - simple and seamless.

n8n Owner Account

n8n License Registration

n8n License Activation

Note: If you want to self-host n8n, check out the official installation guide.

Learning by Doing

n8n acts as a bridge between systems that were never designed to talk to each other, a simple yet powerful way to connect APIs, webhooks, and apps into one cohesive ecosystem.

I learn best by doing, so I watched a few YouTube tutorials to understand the basics: workflows, nodes, and credentials. The official n8n Tutorials playlist is a great place to start: YouTube.

It only took a few days to feel comfortable, and once I understood the fundamentals, everything clicked. The visual interface makes experimentation easy, while the modular design means you can start small and gradually build more complex automations at your own pace.

From Linear Workflows to AI-Powered Agents

The feature that really caught my attention was AI Agents. This isn’t your standard “if-this-then-that” automation - AI Agents bring context and memory into workflows. Instead of following a rigid sequence of actions, they can make decisions based on previous interactions.

As someone deeply invested in AI, this immediately stood out. You can connect to major LLM providers such as OpenAI, Google, or my personal favourite, OpenRouter, for its wide range of models and flexibility. Setting it up is as easy as adding your OpenRouter API key in the credentials section.

Final Thoughts

Exploring n8n has been very rewarding and it reminded me how powerful automation tools can be when paired with curiosity and experimentation. If you’re considering trying it, start small,  connect two tools you already use and see what happens. You’ll be amazed at how quickly ideas evolve once you see what’s possible.

After just a few weeks, n8n has become a cornerstone of my automation workflow stack. It’s flexible, powerful, and endlessly extendable and best of all, it’s free and self-hostable.

If you’re passionate about automation, have a homelab, or simply want to connect your favourite tools in smarter ways, n8n is absolutely worth your time. I’ll be sharing more about the workflows I’m building soon, including how I’m using AI Agents to create dynamic, context-aware automations.

This post is licensed under CC BY 4.0 by the author.