π SigNoz Installation Guide
This guide walks you through installing SigNoz step by step β including port conflict handling, firewall setup, and verification. Follow every step in order.
π Before You Startβ
Make sure you completed the Prerequisites checklist. Specifically:
- Docker is installed and running
- Docker Compose is available
- You know which ports are free on your system
Step 0 β Check Your Existing Ports (Critical)β
Run this before anything else. It tells you which ports are already taken on your server:
Linux / Ubuntu:
sudo ss -ltnp | egrep ':(80|8080|3301|4317|4318|9000|9001)\b' || echo "None of these in use"
Windows PowerShell:
@(80, 8080, 3301, 4317, 4318, 9000, 9001) | ForEach-Object {
$result = netstat -ano | findstr ":$_"
if ($result) { Write-Host "Port $_ IN USE: $result" }
else { Write-Host "Port $_ is FREE" }
}
macOS:
for port in 80 8080 3301 4317 4318 9000 9001; do
lsof -i :$port > /dev/null 2>&1 && echo "Port $port IN USE" || echo "Port $port FREE"
done
Write down which ports are taken. You will need this in Step 4.
Step 1 β Clone the SigNoz Repositoryβ
Linux / macOS:
git clone -b main https://github.com/SigNoz/signoz.git
cd ~/signoz/deploy/docker
Windows (PowerShell or Git Bash):
git clone -b main https://github.com/SigNoz/signoz.git
cd signoz\deploy\docker
Confirm the files are there:
ls -la # Linux/macOS
dir # Windows
You should see docker-compose.yaml in the listing.
Step 2 β Back Up the Compose Fileβ
Always back up before editing. If something goes wrong, you can restore it.
Linux / macOS:
cp docker-compose.yaml docker-compose.yaml.bak
Windows:
Copy-Item docker-compose.yaml docker-compose.yaml.bak
Step 3 β Check What Port SigNoz Is Using by Defaultβ
Open the compose file and find the UI port mapping:
Linux / macOS:
grep -n "8080" docker-compose.yaml
You will likely see something like:
- "8080:8080"
This means: host port 8080 β container port 8080
Step 4 β Change the Port If There Is a Conflictβ
Only do this step if port 8080 was already in use on your server.
In our case, Jenkins was using 8080, so we changed SigNoz's host port to 3301.
Open the file:
Linux / macOS:
nano docker-compose.yaml
Windows (Notepad):
notepad docker-compose.yaml
Find this line:
- "8080:8080"
Change it to:
- "3301:8080"
π Format is always
HOST_PORT:CONTAINER_PORTThe left number (3301) is what your browser or firewall needs to reach. The right number (8080) stays the same β it's inside the container.
Save and close the file.
π‘ Ports 4317 and 4318 (OTLP ingestion) are usually free. Only change those if
ss/netstatshowed them in use.
Step 5 β Validate the Compose Fileβ
Before starting, verify the YAML is valid (catches typos):
docker compose config > /tmp/signoz-rendered.yaml && echo "β
Config OK"
If you see β
Config OK, proceed. If you see an error, re-check your edits.
Step 6 β Start SigNozβ
Linux / macOS / Windows (all the same Docker command):
docker compose -p signoz up -d --remove-orphans
What each flag means:
-p signozβ names this project "signoz" so it's easy to manageup -dβ starts containers in the background (detached mode)--remove-orphansβ cleans up leftover containers from old runs
This will take 2β5 minutes the first time as Docker downloads all the images.
Step 7 β Verify the Containers Are Runningβ
docker compose -p signoz ps
Expected output (all should show healthy or running):
NAME STATUS PORTS
signoz healthy 0.0.0.0:3301->8080/tcp
clickhouse healthy ...
zookeeper healthy ...
otel-collector Up 0.0.0.0:4317->4317/tcp, 0.0.0.0:4318->4318/tcp
Also run this for a cleaner view:
docker ps --format 'table {{.Names}}\t{{.Status}}\t{{.Ports}}'
Step 8 β Verify the Ports Are Listeningβ
# Linux
sudo ss -ltnp | egrep ':(3301|4317|4318)\b'
You should see lines with LISTEN for all three ports.
Step 9 β Test the Dashboard Locallyβ
From inside the VM / server:
curl -I http://localhost:3301
Expected: HTTP/1.1 200 OK
curl http://localhost:3301/api/v1/health
Expected: {"status":"ok"}
If both return correctly, SigNoz is running perfectly on your server. The next step is making it reachable from your browser.
Step 10 β Open the Dashboard in Your Browserβ
If Running Locally (your own laptop/PC):β
Open: http://localhost:3301
If Running on a Remote Server (GCP, AWS, any cloud VM):β
You have two options:
Option A β SSH Tunnel (safest, for testing):
# Run this on YOUR laptop, not the server
ssh -L 3301:localhost:3301 your_username@YOUR_VM_PUBLIC_IP
Then open: http://localhost:3301 in your browser.
Option B β Open firewall port (for team access): See the Firewall & Access section below.
π Production recommendation: Do not keep
0.0.0.0/0open long-term. Start with your office/VPN CIDR only, then put SigNoz behind HTTPS + authentication before wider exposure.
π₯ Firewall & Access Setupβ
Google Cloud Platform (GCP)β
- Go to GCP Console β VPC Network β Firewall
- Click Create Firewall Rule
- Fill in:
- Name:
allow-signoz-ui - Direction: Ingress
- Action: Allow
- Targets: All instances (or specific tag)
- Source IP ranges:
0.0.0.0/0(all) or your office IP range - Protocols and ports: TCP
3301
- Name:
- Click Create
AWS (EC2 Security Group)β
- Go to EC2 β Security Groups
- Select your instance's security group
- Edit Inbound Rules β Add Rule:
- Type: Custom TCP
- Port:
3301 - Source: Your IP or
0.0.0.0/0
Minimum Hardening Checklist (Production)β
Before sharing SigNoz broadly, verify:
- Only trusted CIDRs can reach port
3301 - HTTPS reverse proxy is enabled (Nginx/Cloudflare)
- First admin account is created and strong password policy is enforced
- VM OS firewall (UFW/Security Group) allows only required ports
Ubuntu UFW (local firewall on the server itself)β
Check if UFW is active:
sudo ufw status
If active, allow SigNoz:
sudo ufw allow 3301/tcp
sudo ufw allow 4317/tcp
sudo ufw allow 4318/tcp
sudo ufw status
Windows Firewall (if running locally on Windows)β
# Run PowerShell as Administrator
New-NetFirewallRule -DisplayName "SigNoz UI" -Direction Inbound -Protocol TCP -LocalPort 3301 -Action Allow
New-NetFirewallRule -DisplayName "SigNoz OTLP gRPC" -Direction Inbound -Protocol TCP -LocalPort 4317 -Action Allow
New-NetFirewallRule -DisplayName "SigNoz OTLP HTTP" -Direction Inbound -Protocol TCP -LocalPort 4318 -Action Allow
Step 11 β Create Your First Admin Accountβ
When you open SigNoz for the first time, it shows a sign-up form. Fill it in.
π The first registered user automatically becomes the admin. Create this account right away β do not leave it open for anyone to claim.
π Resource Usage After Installβ
Check how much RAM SigNoz is using:
docker stats --no-stream
free -h
SigNoz typically uses 2β3 GB RAM with ClickHouse. On a shared server, keep at least 1β2 GB free for other services.
βΉοΈ Managing SigNozβ
# Stop SigNoz (containers pause, data is kept)
docker compose -p signoz stop
# Start SigNoz again
docker compose -p signoz start
# Restart SigNoz
docker compose -p signoz restart
# View logs live
docker compose -p signoz logs -f
# View logs for one container
docker compose -p signoz logs -f signoz
# See status
docker compose -p signoz ps
π Auto-Start on Server Rebootβ
Add Docker to start on boot (Linux):
sudo systemctl enable docker
SigNoz containers will auto-restart because they have restart: unless-stopped in the compose file (default in SigNoz's official compose).
Verify the restart policy:
docker inspect signoz | grep -i restart
β Install Completeβ
At this point:
- β SigNoz containers are running
- β Ports 3301, 4317, 4318 are listening
- β
Health check returns
{"status":"ok"} - β You created your admin account
Next: Set up the OTEL Collector β
Official Documentation Linksβ
- SigNoz official install docs (Docker)
- SigNoz deployment options
- SigNoz troubleshooting docs
- OpenTelemetry collector docs
- OpenTelemetry OTLP specification
Read in Sequenceβ
- Previous: 3-theory-prerequisites.md
- Next: 5-otel-collector.md