-
Notifications
You must be signed in to change notification settings - Fork 0
FAQ
- Setup & Configuration
- Nginx Proxy Manager Integration
- Categories
- Icons
- Performance & Troubleshooting
- Security
The admin panel runs on port 3001 by default. Access it at:
-
http://localhost:3001(local development) -
http://your-server:3001(production)
Authentication:
- If
ADMIN_USERNAMEandADMIN_PASSWORDenvironment variables are set, you'll need to log in - Without these variables, the admin panel is accessible without authentication (not recommended for production)
Yes, but Docker is recommended. For manual setup:
# Install dependencies
npm install
# Build the frontend and admin panel
npm run build
npm run admin:build
# Start the server
npm startYou'll need Node.js 18 or higher.
Set environment variables in your docker-compose.yml:
environment:
- PORT=3000 # Main app port (default: 3000)
- ADMIN_PORT=3001 # Admin panel port (default: 3001)All data is stored in the ./data directory:
-
config.json- Base URL, branding, NPM settings -
services.json- Manual services and NPM overrides -
categories.json- Category definitions -
passkeys.json- WebAuthn passkey credentials -
branding/- Custom logo uploads
Important: Back up this directory regularly!
- Create a read-only NPM user (see below)
-
Configure in Admin Panel:
- Go to Admin Panel → Configuration
- Enable "Nginx Proxy Manager Integration"
- Enter your NPM URL (e.g.,
http://nginx-proxy-manager:81) - Enter the read-only user's email and password
- Click "Save Configuration"
Using NPM UI (Recommended)
- Log in to NPM admin panel
- Go to Users → Add User
- Fill in the details:
-
Email:
services-dashboard@local(or any email) -
Name:
Services Dashboard (Read Only) - Password: Generate a strong password
-
Email:
- Important: Do NOT give the user admin privileges
- Click Save
Security Note: A standard NPM user (non-admin) can only view and manage their own proxy hosts. For Services Dashboard, create a dedicated user with minimal permissions.
Check these common issues:
-
NPM URL is incorrect
- Use the internal Docker network URL:
http://nginx-proxy-manager:81 - Don't use
localhostfrom inside Docker - Make sure the NPM API is accessible without a third-party authentication tool if running accessing via an NPM host.
- Use the internal Docker network URL:
-
Credentials are wrong
- Verify email and password in NPM
- Check for typos
-
NPM is not accessible
- Ensure both containers are on the same Docker network if accessing via a docker network
-
NPM integration is disabled
- Check Admin Panel → Configuration
- Ensure "Enable NPM Integration" is checked
-
Check Docker logs:
docker logs services-dashboard
Look for NPM connection errors
Yes, but ensure:
- The NPM URL is accessible from the Services Dashboard container
- Firewall rules allow the connection
- Use HTTPS if exposing NPM publicly
Categories are automatically detected from:
- Icon metadata (from dashboard-icons or simple-icons)
- Service name matching (pre-defined application names and categories)
- Manual assignment (via admin panel)
Services appear in "Other" when:
- They have no categories assigned
- All their categories are hidden in the admin panel
- Auto-detection failed
To fix:
- Go to Admin Panel → Services
- Click "Customize" or "Edit" on the service
- Click "Browse" under Categories
- Select appropriate categories
- Go to Admin Panel → Category Management
- Find the category you want to hide
- Click "Hide" (or "Show" to make it visible again)
Hidden categories won't appear in the main dashboard sidebar.
Yes! In the Admin Panel → Category Management:
- Click "Rename" on any category
- Enter a new display name
- The original category name is preserved for matching
- Auto-detected: Automatically created from services, can be hidden but not deleted
- Configured: Manually created or modified, can be fully managed and deleted
The icon browser supports fuzzy matching:
-
homeassistantfinds "Home Assistant" -
home-assistantfinds "Home Assistant" -
home assistantfinds "Home Assistant"
All variations work regardless of spaces, hyphens, or underscores.
Two sources:
- Dashboard Icons (>2250 icons) - from dashboard-icons
- Simple Icons (>3350 icons) - from simple-icons
Simple Icons are converted to white automatically. If you see black icons:
- Clear your browser cache
- Hard refresh (Ctrl+Shift+R or Cmd+Shift+R)
- Update to the latest version
Currently, custom icon uploads aren't supported. You can:
- Use icons from the 3500+ available in the browser
- Reference external URLs by entering its full URL
- Check browser console for errors
-
Restart the container:
docker restart services-dashboard
-
Verify icon metadata loaded:
Should see:
docker logs services-dashboard | grep "icons"
✓ Loaded X dashboard iconsand✓ Loaded X simple-icons
Common causes:
-
Too many services
- Consider hiding unused services
- Use categories to organize
-
NPM with many hosts
- NPM fetching can be slow
-
Network issues
- Check NPM connectivity
- Use internal Docker networks instead of localhost
- Hard refresh your browser (Ctrl+Shift+R or Cmd+Shift+R)
- Clear browser cache
-
Check if changes saved:
- Verify in
./data/services.jsonor./data/config.json
- Verify in
Symptoms:
SyntaxError: Unexpected non-whitespace character after JSON
Fix:
- Stop the container
- Backup
./data/categories.json - Fix JSON syntax or replace with:
[]
- Restart the container
The system will auto-recreate categories from services.
If you see repeated JSON parsing errors:
- Update to the latest version
- Clear
./data/categories.jsonand restart
Security measures:
- CSRF protection on all write operations
- Session-based authentication
- Rate limiting on API endpoints
- WebAuthn/Passkey support
Best practices:
- Always set
ADMIN_USERNAMEandADMIN_PASSWORD - Use passkeys for passwordless authentication
- Don't expose admin panel to public internet without a reverse proxy
- Use HTTPS in production
- Keep Docker images updated
Main dashboard (port 3000): Can be exposed - it's read-only
Admin panel (port 3001):
⚠️ Not recommended without additional security- If you must:
- Use strong authentication
- Enable passkeys
- Use HTTPS with valid certificates
- Consider VPN access instead
- Go to Admin Panel → Passkey Management
- Click "Add Passkey"
- Enter a name (e.g., "My Laptop")
- Follow your browser's prompts to register
- Use your passkey to log in instead of password
Benefits:
- More secure than passwords
- Resistant to phishing
- Biometric authentication support
None. Services Dashboard:
- Doesn't track usage
- Doesn't send telemetry
- Doesn't require internet access
- All data stays on your server
Causes:
- Backend server not running
- Port 3000 not accessible
Fix:
docker logs services-dashboard
docker restart services-dashboardCauses:
- Session expired
- Browser cached old token
Fix:
- Hard refresh browser (Ctrl+Shift+R)
- Clear cookies for the site
- Log in again
Docker (recommended):
docker pull b12e/services-dashboard:latest
docker-compose down
docker-compose up -dYour data is preserved in the ./data volume.
No! As long as you use Docker volumes or bind mounts, your data persists across updates.
Always backup before major updates:
cp -r ./data ./data-backup-$(date +%Y%m%d)- GitHub Issues: https://github.com/b12e/selfhosted-shortcuts/issues
- Check this FAQ for common issues
-
Docker logs:
docker logs services-dashboard - Browser console: Check for JavaScript errors
Include:
- Version: Check Docker image tag or commit hash
- Environment: Docker/manual, OS, browser
- Steps to reproduce
- Logs: Docker logs and browser console
- Expected vs actual behavior
Open a GitHub issue with:
- Clear description of the feature
- Use case/problem it solves
- Any relevant examples or mockups
Currently, dark theme is the only option.
Automated backup script:
#!/bin/bash
BACKUP_DIR="/backups/services-dashboard"
DATE=$(date +%Y%m%d-%H%M%S)
# Create backup
tar -czf "$BACKUP_DIR/backup-$DATE.tar.gz" ./data
# Keep only last 7 backups
ls -t "$BACKUP_DIR"/*.tar.gz | tail -n +8 | xargs rm -fRun this daily via cron.
Before opening an issue, try:
- Hard refresh browser (Ctrl+Shift+R)
- Clear browser cache and cookies
- Restart Docker container
- Check Docker logs for errors
- Verify data files aren't corrupted (valid JSON)
- Update to latest version
- Check this FAQ
- Review GitHub issues for similar problems
Last updated: 2025-01-22 Version: 1.0.0