diff --git a/apps/docs/content/bun/how-to/access.mdx b/apps/docs/content/bun/how-to/access.mdx deleted file mode 100644 index a48a3f81..00000000 --- a/apps/docs/content/bun/how-to/access.mdx +++ /dev/null @@ -1,13 +0,0 @@ ---- -title: How to access your Bun application -description: Learn more about how you can access your Bun application on Zerops. ---- - -import { SetVar } from '/src/components/content/var'; -import AccessContent from '/src/components/content/access.mdx'; - - - - - - \ No newline at end of file diff --git a/apps/docs/content/bun/how-to/build-pipeline.mdx b/apps/docs/content/bun/how-to/build-pipeline.mdx index 5d3c8d99..0c793e5a 100644 --- a/apps/docs/content/bun/how-to/build-pipeline.mdx +++ b/apps/docs/content/bun/how-to/build-pipeline.mdx @@ -520,7 +520,7 @@ _OPTIONAL._ Specifies one or more internal ports on which your application will Projects in Zerops represent a group of one or more services. Services can be of different types (runtime services, databases, message brokers, object storage, etc.). All services of the same project share a **dedicated private network**. To connect to a service within the same project, just use the service hostname and its internal port. -For example, to connect to a Bun service with hostname = "app" and port = 3000 from another service of the same project, simply use `app:3000`. Read more about [how to access a Bun service](access). +For example, to connect to a Bun service with hostname = "app" and port = 3000 from another service of the same project, simply use `app:3000`. Read more about [how to access a Bun service](/features/access). Each port has following attributes: diff --git a/apps/docs/content/bun/overview.mdx b/apps/docs/content/bun/overview.mdx index 57cbc9de..69e7e06c 100644 --- a/apps/docs/content/bun/overview.mdx +++ b/apps/docs/content/bun/overview.mdx @@ -193,7 +193,7 @@ Have you build something that others might find useful? Don't hesitate to share }, { type: 'link', - href: '/references/vpn', + href: '/references/networking/vpn', label: 'Zerops VPN', customProps: { icon: Icons['globe-europe'], diff --git a/apps/docs/content/deno/how-to/access.mdx b/apps/docs/content/deno/how-to/access.mdx deleted file mode 100644 index 3416f757..00000000 --- a/apps/docs/content/deno/how-to/access.mdx +++ /dev/null @@ -1,13 +0,0 @@ ---- -title: How to access your Deno application -description: Learn more about how you can access your Deno application on Zerops. ---- - -import { SetVar } from '/src/components/content/var'; -import AccessContent from '/src/components/content/access.mdx'; - - - - - - \ No newline at end of file diff --git a/apps/docs/content/deno/how-to/build-pipeline.mdx b/apps/docs/content/deno/how-to/build-pipeline.mdx index d57c1198..9a91f118 100644 --- a/apps/docs/content/deno/how-to/build-pipeline.mdx +++ b/apps/docs/content/deno/how-to/build-pipeline.mdx @@ -513,7 +513,7 @@ _OPTIONAL._ Specifies one or more internal ports on which your application will Projects in Zerops represent a group of one or more services. Services can be of different types (runtime services, databases, message brokers, object storage, etc.). All services of the same project share a **dedicated private network**. To connect to a service within the same project, just use the service hostname and its internal port. -For example, to connect to a Deno service with hostname = "app" and port = 3000 from another service of the same project, simply use `app:3000`. Read more about [how to access a Deno service](/deno/how-to/access). +For example, to connect to a Deno service with hostname = "app" and port = 3000 from another service of the same project, simply use `app:3000`. Read more about [how to access a Deno service](/references/networking/internal-access#basic-service-communication). Each port has following attributes: diff --git a/apps/docs/content/deno/overview.mdx b/apps/docs/content/deno/overview.mdx index 15171f90..5091e8fb 100644 --- a/apps/docs/content/deno/overview.mdx +++ b/apps/docs/content/deno/overview.mdx @@ -196,7 +196,7 @@ Have you build something that others might find useful? Don't hesitate to share }, { type: 'link', - href: '/references/vpn', + href: '/references/networking/vpn', label: 'Zerops VPN', customProps: { icon: Icons['globe-europe'], diff --git a/apps/docs/content/dotnet/how-to/access.mdx b/apps/docs/content/dotnet/how-to/access.mdx deleted file mode 100644 index 8162d256..00000000 --- a/apps/docs/content/dotnet/how-to/access.mdx +++ /dev/null @@ -1,13 +0,0 @@ ---- -title: How to access your .NET application -description: Learn more about how you can access your .NET application on Zerops. ---- - -import { SetVar } from '/src/components/content/var'; -import AccessContent from '/src/components/content/access.mdx'; - - - - - - \ No newline at end of file diff --git a/apps/docs/content/dotnet/how-to/build-pipeline.mdx b/apps/docs/content/dotnet/how-to/build-pipeline.mdx index dc631c02..43ff2f3e 100644 --- a/apps/docs/content/dotnet/how-to/build-pipeline.mdx +++ b/apps/docs/content/dotnet/how-to/build-pipeline.mdx @@ -515,7 +515,7 @@ _OPTIONAL._ Specifies one or more internal ports on which your application will Projects in Zerops represent a group of one or more services. Services can be of different types (runtime services, databases, message brokers, object storage, etc.). All services of the same project share a **dedicated private network**. To connect to a service within the same project, just use the service hostname and its internal port. -For example, to connect to a .NET service with hostname = "app" and port = 5000 from another service of the same project, simply use `app:5000`. Read more about [how to access a .NET service](/dotnet/how-to/access). +For example, to connect to a .NET service with hostname = "app" and port = 5000 from another service of the same project, simply use `app:5000`. Read more about [how to access a .NET service](/references/networking/internal-access#basic-service-communication). Each port has following attributes: diff --git a/apps/docs/content/dotnet/overview.mdx b/apps/docs/content/dotnet/overview.mdx index c03c0940..fc706102 100644 --- a/apps/docs/content/dotnet/overview.mdx +++ b/apps/docs/content/dotnet/overview.mdx @@ -181,7 +181,7 @@ Have you build something that others might find useful? Don't hesitate to share }, { type: 'link', - href: '/references/vpn', + href: '/references/networking/vpn', label: 'Zerops VPN', customProps: { icon: Icons['globe-europe'], diff --git a/apps/docs/content/elixir/how-to/access.mdx b/apps/docs/content/elixir/how-to/access.mdx deleted file mode 100644 index b446c144..00000000 --- a/apps/docs/content/elixir/how-to/access.mdx +++ /dev/null @@ -1,13 +0,0 @@ ---- -title: How to access your Elixir application -description: Learn more about how you can access your Elixir application on Zerops. ---- - -import { SetVar } from '/src/components/content/var'; -import AccessContent from '/src/components/content/access.mdx'; - - - - - - \ No newline at end of file diff --git a/apps/docs/content/elixir/how-to/build-pipeline.mdx b/apps/docs/content/elixir/how-to/build-pipeline.mdx index 58a0aabd..df663c11 100644 --- a/apps/docs/content/elixir/how-to/build-pipeline.mdx +++ b/apps/docs/content/elixir/how-to/build-pipeline.mdx @@ -516,7 +516,7 @@ _OPTIONAL._ Specifies one or more internal ports on which your application will Projects in Zerops represent a group of one or more services. Services can be of different types (runtime services, databases, message brokers, object storage, etc.). All services of the same project share a **dedicated private network**. To connect to a service within the same project, just use the service hostname and its internal port. -For example, to connect to a Elixir service with hostname = "app" and port = 3000 from another service of the same project, simply use `app:3000`. Read more about [how to access a Elixir service](/elixir/how-to/access). +For example, to connect to a Elixir service with hostname = "app" and port = 3000 from another service of the same project, simply use `app:3000`. Read more about [how to access a Elixir service](/references/networking/internal-access#basic-service-communication). Each port has following attributes: diff --git a/apps/docs/content/elixir/overview.mdx b/apps/docs/content/elixir/overview.mdx index 647ba24f..df311e43 100644 --- a/apps/docs/content/elixir/overview.mdx +++ b/apps/docs/content/elixir/overview.mdx @@ -202,7 +202,7 @@ Have you build something that others might find useful? Don't hesitate to share }, { type: 'link', - href: '/references/vpn', + href: '/references/networking/vpn', label: 'Zerops VPN', customProps: { icon: Icons['globe-europe'], diff --git a/apps/docs/content/features/access.mdx b/apps/docs/content/features/access.mdx index 75348719..f8b096ab 100644 --- a/apps/docs/content/features/access.mdx +++ b/apps/docs/content/features/access.mdx @@ -1,222 +1,112 @@ --- -title: Zerops Domain & Access Configuration -description: Configure subdomains, custom domains and IP access for your Zerops applications. +title: Access & Networking +description: Connect to your services internally and make them publicly accessible from the internet. --- import Image from '/src/components/Image'; -import GroupCards from '../../src/components/GroupCards' -import Video from '../../src/components/Video'; - -export const languages = [ - { name: "Bun", link: "/java/how-to/build-pipeline#ports" }, - { name: "Deno", link: "/go/how-to/build-pipeline#ports" }, - { name: ".NET", link: "/dotnet/how-to/build-pipeline#ports" }, - { name: "Elixir", link: "/php/how-to/build-pipeline#ports" }, - { name: "Gleam", link: "/dotnet/how-to/build-pipeline#ports" }, - { name: "Go", link: "/go/how-to/build-pipeline#ports" }, - { name: "Java", link: "/java/how-to/build-pipeline#ports" }, - { name: "Node.js", link: "/nodejs/how-to/build-pipeline#ports" }, - { name: "PHP", link: "/php/how-to/build-pipeline#ports" }, - { name: "Python", link: "/python/how-to/build-pipeline#ports" }, - { name: "Rust", link: "/rust/how-to/build-pipeline#ports" }, -] - -Zerops provides three ways to make your application accessible from the internet: -- [Zerops subdomain](#public-access-through-zerops-subdomain) - ideal for testing and development -- [Custom domain](#public-access-through-your-domain) - recommended for production deployments -- [Direct port access](#opening-public-ports) - for non-HTTP protocols and specialized use cases - -Each method serves different needs and comes with its own configuration options. + +Zerops provides multiple ways to access your services, whether you need internal communication between services, secure access from your development machine, or public access from the internet. :::note -By default, your runtime service is not publicly accessible until you configure one of these methods. +By default, your services are not publicly accessible until you configure external access. Internal communication between services within the same project works automatically. ::: -## Public Access Through Zerops Subdomain +## How Zerops Networking Works -For development and testing purposes, Zerops offers a quick way to make your application accessible through a `.zerops.app` subdomain. This option requires minimal configuration and includes automatic SSL certificate management. +Every Zerops project includes a **shared networking infrastructure** that handles all access methods: -### Configuration Steps +**Private Project Network:** +- All services within a project share a dedicated private network +- Services communicate directly using hostnames and internal ports +- Traffic stays isolated within your project -1. Navigate to your service detail page in Zerops GUI -2. Select **Public access & internal ports** from the left menu -3. Toggle the **Zerops subdomain access** switch +**Public Access Infrastructure:** +- **Core (L3) Balancer** manages IP addresses and direct port access +- **L7 HTTP Balancer** handles domain routing and SSL termination + - Can be extensively configured for advanced routing, performance optimization, and custom behaviors + - See the [L7 Balancer Configuration Guide](/references/networking/l7-balancer-config) for detailed options +- Both are shared across all services in your project -

- Public Access -

+**Secure External Access:** +- **Built-in VPN** provides secure tunnel access to your project's private network +- Useful for development, debugging, and administration -Once enabled, Zerops assigns a unique subdomain for your application. If you've defined multiple [internal ports](/zerops-yaml/specification#ports-) with HTTP support in your `zerops.yaml`, each port receives its own unique `.zerops.app` subdomain. +## Internal Access - +:::tip Complete Internal Access Setup +See the [Internal access reference guide](/references/networking/internal-access). +::: -### Technical Details +Services within the same project can communicate directly using hostnames and internal ports. No additional configuration required. -When using Zerops subdomains: -- Access your application using the `https://` protocol (Zerops automatically manages SSL certificates) -- Traffic flows through a central HTTP balancer that: - - Terminates SSL connections - - Forwards requests to your application via HTTP - - Handles all security certificates +**Example:** Connect to your `api` service on port 3000: +``` +http://api:3000 +``` -:::warning Production Limitations -- The central HTTPS balancer is shared across all Zerops projects, which creates a scalability bottleneck -- Maximum upload size is limited to 50MB -- Not recommended for production traffic -::: +**Key points:** +- Use service hostname as the address +- Use HTTP (not HTTPS) for internal communication +- Access internal ports defined in your service configuration +- Communication is automatically isolated from other projects -## Public Access Through Your Domain - -When your application is ready for production or you need to test with your actual domain, configure custom domain access. This method provides better performance, scalability, and full control over your domain settings. - -

- Public Access -

- -### IP Address Configuration - -Before setting up domain access, you'll need public IP addresses. Zerops offers the following IP options: - -#### IPv4 Options - -##### Dedicated IPv4 Address ($3/30 days) -- Dedicated to your project and shared across all project services -- One IPv4 address per project limit -- Protects against blacklisting risks associated with shared IPs -- Subscription automatically renews every 30 days *(cannot be purchased with promo credit)* - - Fee is non-refundable but address can be reused in another project until subscription ends -- **Recommended for production workloads** - -##### Shared IPv4 Address (Free) -- Available at no cost -- Shared across all Zerops users and their projects -- Limitations: - - Restricted number of open connections - - Shorter connection timeouts -- **Not recommended for production use** - -#### IPv6 Address (Free) -- Dedicated to your project and shared across all project services -- One IPv6 address per project limit -- Automatically activated with first domain setup -- Available for all projects at no additional cost - -:::tip -Since IPv6 support is not universal, using both IPv4 and IPv6 is recommended for maximum accessibility. -::: +### Environment Variables -### Configuring HTTP Routing +Zerops automatically creates environment variables to help with internal connections between services. -To set up domain access: +## VPN Access +:::tip Complete VPN Setup +See the [VPN reference guide](/references/networking/vpn). +::: -1. Go to your service detail in Zerops GUI and select **Public access & internal ports** -2. Click **Setup first domain access** -3. Configure your domain settings: - - Enter domain names (e.g., `mydomain.com`, `app.mydomain.com`) - - Add multiple domains if needed (useful for multi-language sites) - - Choose SSL certificate management -4. Define routing rules: - - Source: The public path (the part of URL after your domain) - - Destination: Choose which application and internal port receives the traffic - - Add multiple routing configurations as needed +Connect securely to your project's internal network from your local machine: -All settings can be modified later as your needs change. +```bash +# Connect to your project +zcli vpn up -