Deploying a Service
Learn how to create a new service in Sliplane
A service is an application running in a container with its configuration. Deploy from GitHub or a container registry by opening a project and clicking Deploy Service.
Project
Select the project that will contain the service.
Deploy to Server
Choose a server or create one. A server can run multiple services within its resource limits.
Services
Click Add service to configure each service. You can deploy several at once.
Deploy source
Choose a GitHub repository, a container registry image, or a preset with prefilled configuration.
Deploy from GitHub
You can deploy services by selecting a repository from GitHub. A Dockerfile is optional — if your repository contains one, Sliplane will use it. If it doesn't, Sliplane will automatically detect your application's stack and build it for you using Railpack.
Docker compose files do not work yet. For now, you'd have to spin up each service individually or use our built in Docker compose parser to extract service configuration from a docker-compose.yml file.
Select GitHub in the deploy form. You need repository admin access; see GitHub integration for permissions.
Select a Repository
Choose a repository from the dropdown. If it is missing, click Configure Repository Access and grant Sliplane access on GitHub. Return to the dropdown and click Refresh List; changes may take a minute to appear.
Select a Deploy Branch
Select the branch to deploy. New commits deploy automatically unless you disable Automatically deploy new commits in the service settings.
Dockerfile Path
Sliplane detects and prefills your Dockerfile path. Check it for renamed files or monorepos, and include the filename, such as /app/Dockerfile.
Leave it empty to build with Railpack when your repository has no Dockerfile.
Docker context
The build context is the directory used by Dockerfile commands such as COPY . .. It defaults to /, the repository root. For a monorepo, select the folder whose contents the image needs.
Deploy from a Registry
Select Registry to pull an image from an OCI-compatible container registry.
Image URL
Enter registry/namespace/image:tag, without http:// or https://:
- Docker Hub:
docker.io/namespace/image-name:tag - GitHub Container Registry:
ghcr.io/namespace/image-name:tag
Official Docker Hub images use the library namespace. You can also search Docker Hub by image name and select a version from the results.
Use an explicit image tag in production. Redeploying latest can pull an untested upgrade.
Credentials
For a private image, select or add registry credentials. Credentials belong to the team.
When using the GitHub (GHCR) credential type, only "classic" GitHub personal access tokens starting with ghp_... are supported. Alternatively, you can use the "Generic" credential type which works with any token format and any container registry.
Expose Service
Enable this for public websites, APIs or other internet-facing services. Sliplane supports one public port per service and detects it automatically. Set PORT explicitly if needed, for example PORT=3000.
Disable it to allow connections only from services on the same server. Connect through the internal hostname shown in service settings.
This setting can not be changed later on! If you want to change it, you need to redeploy the service. You can make use of the "Deploy Copy" feature.
Networking protocol
Use TCP/HTTP for websites and HTTP APIs. Choose TCP or UDP for services using those protocols directly, such as databases.
Health check route
For HTTP services, set a route that returns a 2XX response to a GET request without authentication. The default is /; /health is another common choice. Health checks use the detected port or your PORT setting.
Sliplane checks the route before switching traffic to a new deployment, then every minute. Three consecutive failures trigger an email notification.
Environment Variables
Set environment variables as key-value pairs or paste a .env file. They are available during build and runtime. If no .env exists in the project root, Sliplane creates one from your configured variables.
Values are stored encrypted. Mark a variable as secret to prevent its value from being viewed again.
Configure HTTP servers to listen on 0.0.0.0 so Sliplane can reach them from outside the container.
Reserved keys
Sliplane provides deployment metadata and recognizes the following configuration variables. SLIPLANE_COMMIT_HASH and SLIPLANE_DOMAIN are platform-provided values. The other variables below let you configure deployment behavior.
PORT: Set this to your application’s listening port inside the container (1–65535). Sliplane uses it to route requests and run health checks. Your application must listen on the same port.
SLIPLANE_COMMIT_HASH: The git commit hash of the current deploy.
SLIPLANE_DOMAIN: The managed domain (e.g. your-service-name.sliplane.app) of the service.
SLIPLANE_SKIP_CACHE: If set to true, the Docker build cache will be skipped.
SLIPLANE_GRACE_PERIOD: Time in seconds that Sliplane will wait for your container to start, before cancelling the deploy.
SLIPLANE_USER_ID: Specify the user id that owns volumes, that are attached, e.g. 1000
SLIPLANE_GROUP_ID: Specify the group id that owns the volumes, that are attached e.g. 1000
Variables in environment variables
Reference another variable using ${VARIABLE_NAME} or $VARIABLE_NAME:
DOMAIN=${SLIPLANE_DOMAIN}
DATABASE_URL=postgres://${DB_USER}:${DB_PASSWORD}@${DB_HOST}:${DB_PORT}/${DB_NAME}Volumes
Attach a volume for files that must survive deployments. Set its mount path to the absolute path of the container folder, including your application’s working directory where applicable. See Volumes for attachment and removal.
Volumes disable zero-downtime deployments to avoid data corruption. Sliplane stops the old container before starting its replacement.
Service Name
Enter a name for your service. The default is your repository name. Your subdomain will be your-service-name.sliplane.app if available.
Override CMD
Optionally replace the image’s CMD. Enter a command string, such as echo "Hello World!", rather than array syntax like ["echo", "hello world"].
Using the Docker Command Parser
In the Add service form, click the terminal icon and paste a Docker run command or Compose file. Click Add service to import the configuration.
You can provide environment variables referenced as ${VARIABLE_NAME}. For services that reference each other, the parser tries to substitute Sliplane internal hostnames using $SERVICE_NAME.INTERNAL_HOST in environment variables.
The parser supports a subset of Docker flags and Compose options, including service definitions, volumes and environment variables. Review the imported settings before deploying.
What happens if a new deploy fails?
If a new build fails, the existing deployment keeps running. For services without mounted volumes, Sliplane starts and checks the replacement before switching traffic. Services with mounted volumes require the old container to stop before the replacement starts, so a startup failure can cause downtime. Inspect the failed deployment’s logs before retrying.
How is this guide?