Documentation Index
Fetch the complete documentation index at: https://docs.ardor.cloud/llms.txt
Use this file to discover all available pages before exploring further.

Overview
Every service in Ardor gets network connectivity out of the box. Services can talk to each other over the internal network, and you can expose them publicly when needed.Internal Network
Services communicate privately using internal URLs. Fast, secure, no internet roundtrip.
Public Access
Expose services to the internet with a public URL for APIs, websites, and webhooks.
How Services Connect
Each service gets two URLs:| URL Type | Use For |
|---|---|
| Internal | Service-to-service communication |
| Public | Browser access, external clients |
Cross-Service Communication
Backend services can reach any other service by its internal URL:Public vs Private Services
When configuring a service, you choose its visibility:- Public
- Private
When to use:
- Web applications users visit
- APIs external clients call
- Webhook endpoints
- Service gets a public URL:
https://<port>-<uuid>.ardor.cloud - Anyone on the internet can access it
- Still accessible internally too
Bind Custom Domain

Choose the Environment
Select the environment where the domain should route traffic, such as development, staging, or production. Domain bindings are environment-specific.
Select a Public Service
Pick the service that should receive traffic for the domain. Private services cannot be selected as custom domain targets.
Changing or removing a custom domain follows the same rule: save the change, then deploy the environment so services receive the updated system variables and routing configuration.
Port Configuration
Each service listens on a specific port. Ardor passes this as thePORT environment variable.
How Ports Work
- You configure the port in service settings (default: 8080)
- Ardor injects it as
PORTenvironment variable - Your app reads
PORTand listens on it - Both internal and public URLs route to this port
Reading the Port
- Python
- Node.js
- Go
Port in Internal URL
The port is included in the internal URL you get from service settings. Use it directly — no need to specify the port separately.Common Patterns
API + Database
Setup:- PostgreSQL service — Private
- API service — Public, connects via internal URL stored in env var
Frontend + Backend + Database (Recommended)
Setup:- PostgreSQL — Private
- Redis — Private
- API Backend — Private, only reachable via internal URL
- Frontend — Public with reverse proxy, routes
/api/*to backend internally
Frontend + Public API (when needed)
If you intentionally need a public API (for external clients, mobile apps, webhooks): Use this when:- External apps need to call your API directly
- You’re building a public API for third parties
- Mobile apps need direct backend access
Microservices
Setup:- Only the API Gateway is public
- All microservices are private, communicate via internal URLs
Troubleshooting
Can't connect to another service
Can't connect to another service
Check:
- Is the target service running? Check its status and logs
- Are you using the correct internal URL and port?
- Are both services in the same environment?
Connection refused errors
Connection refused errors
Cause: Target service isn’t listening on the expected port.Check:
- Is the service reading the
PORTenvironment variable? - Is it binding to
0.0.0.0? - Check the service logs for startup errors
Public URL not working
Public URL not working
Check:
- Is the service set to Public visibility?
- Is the service running and healthy?
- Is it listening on the configured port?
Timeout connecting to database
Timeout connecting to database
Check:
- Is the database service running?
- Are you using the internal URL (not trying to connect externally)?
- Check database logs for connection limit issues
Best Practices
Keep databases private
Keep databases private
Never expose databases to the internet. Always use private visibility and connect via internal URLs.
Keep API backends private when possible
Keep API backends private when possible
Unless you need a public API for external clients, keep your backend private and route requests through your frontend’s reverse proxy. One public endpoint = smaller attack surface.
Use environment variables for URLs
Use environment variables for URLs
Don’t hardcode internal URLs. Store them in variables so you can change them without code changes.
Minimize public services
Minimize public services
Only expose what needs to be public. Fewer public endpoints = smaller attack surface.
Add authentication to sensitive services
Add authentication to sensitive services
Add authentication for extra security on services that handle sensitive data.
What’s Next
Variables & Secrets
Store connection strings and credentials securely
Docker Images
Deploy databases and caches from Docker Hub
Deployments
Deploy your connected services to production
Logging
Debug connection issues with logs

