Running n8n on Azure AppService (Docker) — Login, and a Live Webhook Tutorial
This is Part 2 of a two‑part series on deploying n8n on Azure AppService. In this post we cover creating your login account, using Templates, and building two tiny APIs you can call from Postman or curl.
Refer Part 1 for AppService creation, environment variables, and persistence.
Create your account (and first login)
Self‑hosted (your Azure AppService)
When your container first starts, n8n shows the Owner setup screen. Create the owner account (email + password) and you’re in. This initializes user management for your instance.
The owner can invite other users later (Settings → Users), but advanced roles/projects depend on your plan (see below).
n8n Cloud (hosted by n8n)
If you prefer not to self‑host, sign up for n8n Cloud and pick a plan. All paid plans allow unlimited workflows/steps/users; features like Projects, advanced roles, and concurrency vary by tier.
Personal vs Enterprise (what changes)
- Personal (Community/Self‑hosted, single space): great for solo use and lightweight teams. You get the owner + members flow, but RBAC Projects aren’t available on Community Edition. If you need project‑level access control, upgrade to Pro/Enterprise (Cloud) or Self‑hosted Enterprise.
- Enterprise (Cloud or Self‑hosted Enterprise): adds Projects (group workflows + credentials), RBAC roles (Admin/Editor/Viewer), higher concurrency, extended insights/retention, log streaming, and org‑level governance on Cloud Enterprise.
Snapshot from pricing: Enterprise includes unlimited shared projects, high concurrency, 365‑day insights, external secret stores, log streaming, and extended retention.
Create Projects (Enterprise/Pro)
Who can create projects? Instance Owners/Admins.
Steps (UI):
- In the left sidebar, select ➕ Add project.
- Name it (e.g.,
marketing-automation,data-pipeline-prod) and choose settings. - Save. You’ll see the project in the sidebar; new workflows created inside it belong to that project.
Assign roles to teammates:
- Invite users, then set their project role: Admin, Editor, or Viewer. A user can be Admin on one project and Viewer on another—access is per project. (Viewer availability depends on plan.)
Good patterns:
- Separate projects by team (Marketing, Ops) or environment (Dev/Stage/Prod).
- Keep credentials scoped to the project that needs them (least‑privilege).
On n8n Cloud, you’ll often see a default Personal space plus additional Projects you create for collaboration. Plan limits determine how many projects/roles you get.
Using Templates (fastest way to start)
n8n Templates are pre‑built workflow blueprints you can import and run in minutes—great for learning or bootstrapping common automations.
A) Import from the in‑product Templates catalog
- Open your n8n editor at
https://<yourapp>.azurewebsites.net/and sign in. - Click Templates in the top bar (or use the search box in the node panel and switch to the Templates tab).
- Search for a use case (e.g., “Slack message”, “HTTP to Google Sheets”, “Webhook to Notion”).
- Click Use template → Create workflow.
- When prompted, create credentials for any nodes that need them (Slack, Notion, Google, etc.). Credentials are encrypted at rest using your
N8N_ENCRYPTION_KEYand stored at/home/node/.n8n(Azure Files), so they persist across restarts. - Click Test workflow to validate; then Activate to go live.
B) Import from a JSON export (community or your own)
- In the editor, click Import (top bar).
- Choose Paste JSON or From file and provide a valid n8n workflow JSON.
- Review the nodes, set any missing credentials, Save, then Activate.
Templates sometimes use placeholder credentials (like “No Authentication”). Replace them with real credentials and test each node. If your template includes a Webhook node, remember the difference between test (/webhook-test/...) and production (/webhook/...) URLs.
Build two tiny APIs in under 5 minutes
We’ll create two workflows you can call from Postman or curl.
A) Echo API (Webhook → Respond to Webhook)
Create
- New workflow → name:
Echo API - Add Webhook node
- Method: POST
- Path:
echo(no leading slash) - Click Save
- Add Respond to Webhook and connect Webhook → Respond to Webhook
- Response Code:
200 - Response Body (switch to Expression):
={{
ok: true,
receivedAt: new Date().toISOString(),
youSent: $json
}}
- Response Code:
Test mode
curl -X POST "https://<yourapp>.azurewebsites.net/webhook-test/echo" -H "Content-Type: application/json" -d '{"name":"Arina","email":"arina@example.com","message":"Hi from Azure"}'
Go live (Activate the workflow)
curl -X POST "https://<yourapp>.azurewebsites.net/webhook/echo" -H "Content-Type: application/json" -d '{"status":"prod test"}'
Test URLs use
/webhook-test/*and only work while Test workflow is active.
Production URLs use/webhook/*and work only when the workflow is Activated.
B) Joke API (Webhook → HTTP Request → Respond to Webhook)
Create
- New workflow → name:
Joke API - Webhook: Method GET, Path
joke - HTTP Request (connect Webhook → HTTP Request):
- Method: GET
- URL:
https://icanhazdadjoke.com/ - Headers:
Accept: application/json
- Respond to Webhook (connect HTTP Request → Respond to Webhook):
- Response Code:
200 - Response Body (Expression):
={{
ok: true,
joke: $json.joke || 'No joke returned',
source: 'icanhazdadjoke'
}}
- Response Code:
Test mode
curl "https://<yourapp>.azurewebsites.net/webhook-test/joke"
Go live
curl "https://<yourapp>.azurewebsites.net/webhook/joke"
If you configured a base path like N8N_BASE_PATH=/n8n, prepend it to the URLs, e.g., https://<yourapp>.azurewebsites.net/n8n/webhook/echo.
Troubleshooting checklist
- Blank site / Kudu shows .NET logs → your container didn’t front the app. Confirm:
- Linux + Docker Container web app kind
WEBSITES_PORT=5678- No custom Startup Command
- Container pulled & started (check Container Settings → Logs/Events)
- Webhook URLs wrong → set
N8N_HOST,N8N_PROTOCOL=https,WEBHOOK_URLto your public URL and restart. - Persistence not working → mount
/home/node/.n8nto Azure Files, ensure status is Connected. - Time‑outs in test mode → send the request within ~2 minutes of pressing Test workflow.
- Security → prefer
N8N_BLOCK_ENV_ACCESS_IN_NODE=trueunless you must read env vars in a Code node.
Call to Action
Choosing the right platform depends on your team’s goals and guardrails. For weekly tips and deep dives on Azure, n8n, and automation patterns, subscribe to our newsletter.
Ready to deploy n8n on Azure—or stand up a secure, scalable automation backbone? Contact us and we’ll help you architect, harden, and launch with confidence.

