When you first launch a local n8n instance, your browser journey begins at http://localhost:5678/setup. This address is the starting line for your automation adventures, serving as the initial configuration page where you create the owner account for your self-hosted n8n. Whether you’re using Docker, npm, or another method, understanding this local endpoint is fundamental to getting your workflows off the ground and troubleshooting the inevitable hiccups that come with a new setup.
Your First Encounter: The http://localhost:5678/setup
Screen
So, you’ve successfully run the command to start n8n, and you’ve navigated to that magic address. What’s next? This first screen is arguably the most important one you’ll see. It’s the gateway to your entire instance.
What is localhost:5678
Anyway?
Let’s break this down. Think of localhost
as the street address for your own computer. It’s a universal name that a computer uses to refer to itself. The :5678
part is like the apartment number. It’s a specific “port” or channel that the n8n application is listening on. So when you go to http://localhost:5678
, you’re telling your browser, “Hey, connect to the application running on my own machine on port 5678.”
Simple, right? But this simplicity is also why we run into problems later when we want the outside world to talk to our n8n instance. More on that in a bit.
Creating Your Owner Account
The /setup
part of the URL directs you to the user creation page. n8n requires you to set up an owner account to secure your instance. You’ll enter your email and create a password. This is straightforward.
But what if you’re met with a login screen instead, asking for a password you never set? I’ve seen this trip up countless new users. This usually happens if you’ve run n8n before, even briefly. n8n creates a small database file (usually database.sqlite
in a hidden .n8n
folder in your user’s home directory) to store user data. If that file exists, n8n assumes it’s already been set up and asks for a login.
The Fix: If you’re sure you don’t have any important data, you can either:
- Find and delete the
~/.n8n
directory. - Use the n8n command-line interface (CLI) to reset the user:
n8n user-management:reset
Running this command and restarting n8n will bring you back to the fresh setup screen. Easy peasy.
Common Roadblocks After Initial Setup
Okay, you’re in. You’re building workflows. Life is good. But then you hit a wall. Let’s be honest, we all do. Here are the two most common issues I see people face right after getting past the setup screen.
Problem #1: “I Can’t Connect to localhost:5678!” (The Docker Dilemma)
This is a classic. You’ve used Docker Desktop to run the n8n image, the logs say it’s running, but localhost:5678
gives you a “This site can’t be reached” error. Frustrating, isn’t it?
The problem is almost always port mapping. A Docker container is like its own isolated little computer. Just because n8n is running on port 5678 inside the container doesn’t mean your main computer (the “host”) can access it. You have to explicitly create a bridge.
In Docker, you do this by mapping a host port to a container port. For n8n, you want to map port 5678 on your machine to port 5678 inside the container.
- If using the command line: You need the
-p
flag:docker run -p 5678:5678 n8nio/n8n
- If using Docker Desktop UI: When you run the image, there’s an “Optional settings” section where you can input the host port. You’d put
5678
in the host port field, which maps to the default5678
container port.
Forgetting this step is like having a house with no doors. The lights are on, but nobody can get in.
Problem #2: My Webhooks Point to localhost:5678
!
This is the big one. You’ve built an amazing workflow triggered by a webhook. You copy the webhook URL to use in another service (like Stripe or GitHub), and it looks like this:
http://localhost:5678/webhook/123-abc-456-def
Stripe has no idea what localhost
is—that’s your computer’s address, not a public one! How do you fix this? The answer lies in environment variables.
The Fix: The WEBHOOK_URL
Environment Variable
You need to tell n8n what its public-facing address is. You do this by setting the WEBHOOK_URL
environment variable. If you’re using docker-compose.yml
(which I highly recommend for a more permanent setup), it’s as simple as adding it to the environment section for your n8n service.
Here’s a comparison of a setup without and with the proper variable:
Configuration Type | docker-compose.yml Snippet |
Resulting Webhook URL |
---|---|---|
Default (Incorrect) | ... (No WEBHOOK_URL) |
http://localhost:5678/... |
Corrected (Production) | environment: - WEBHOOK_URL=https://n8n.yourdomain.com/ |
https://n8n.yourdomain.com/... |
By setting this variable, n8n will automatically generate all future webhook URLs with your public domain. You’ll also want to set other variables like N8N_HOST
and N8N_PROTOCOL
to ensure the entire application behaves correctly behind a domain name and HTTPS.
Navigating the initial http://localhost:5678/setup
is your first step into the powerful world of n8n. While it might present a few early challenges, understanding these core concepts—port mapping, user setup, and environment variables—will set you up for success. Treat your local instance as a safe playground, and when you’re ready to go live, you’ll know exactly how to tell n8n its new address in the big, wide world of the internet.