Deploying an Application
ServerPlane uses a guided 5-step wizard to deploy applications to your managed servers. The wizard handles all server-side setup automatically.
Navigate to Applications > Deploy App or visit https://serverplane.xyz/apps/create to begin.
Step 1: Select a Server
Choose the server where your app will be deployed. Only servers with an Active status are available. If you arrived from a server's detail page, that server is pre-selected.
If no servers appear, you need to provision one first under Servers > Add Server.
Step 2: Choose Application Type
Select one of the five supported application types:
| Type | What it deploys |
|---|---|
| WordPress | Full WordPress installation with PHP and a database |
| Node.js | Node.js runtime with process management |
| Python | Python runtime with WSGI server |
| Docker | Docker container(s) from an image or docker-compose repository |
| Static | Plain HTML/CSS/JS served directly by the web server |
Step 3: Configure
The configuration fields change depending on the app type you selected.
Common fields (all types)
- App Name — A human-readable label for your app.
- Domain — The domain that will serve this app (e.g.,
myapp.example.com). The domain must not already be in use on the platform. DNS must point to your server's IP before the app will be accessible.
WordPress
- PHP Version — Choose from 8.1, 8.2, 8.3, or 8.4.
Node.js
- Node.js Version — Select the major version (e.g., 20).
- App Port — The port your Node.js app listens on (default: 3000).
- Git Repository (optional) — Provide a repo URL and branch, or browse GitHub if you have connected your account. You can also specify a build command (e.g.,
npm run build).
Python
- Python Version — Select the version (e.g., 3.12).
- App Port — The port your Python app listens on (default: 8000).
- Git Repository (optional) — Same Git options as Node.js.
Docker
Docker apps support two deploy modes:
- Docker Image — Enter an image name (e.g.,
nginx:latest). Optionally specify the container's internal port; if left blank it is auto-detected from the image'sEXPOSEdirective. - Git Repository — Point to a repo containing a
docker-compose.yml. ServerPlane auto-detects compose files in standard locations (docker-compose.yml,compose.yml,docker/,deploy/). Click Analyze to preview detected services, ports, and environment variables before deploying.
You can also choose from pre-configured Docker templates (e.g., popular self-hosted apps). Templates pre-fill the image, ports, and volumes so you only need to provide a name and domain.
- Host Port — Automatically assigned to avoid conflicts with other apps on the same server.
Static
- Git Repository (optional) — Clone a static site or SSG project. Leave empty to upload files via SFTP or File Manager after deployment.
- Build Command (optional) — For static site generators (e.g.,
hugo,jekyll build,npm run build). Output directories (dist/,build/,_site/,out/) are auto-detected and served.
GitHub integration
If you have connected your GitHub account, the wizard shows a GitHub tab that lets you:
- Search and browse your repositories (including private repos).
- Select a branch from a dropdown.
- For Docker apps, analyze the compose file directly from GitHub before deploying.
If GitHub is not connected, you can enter a repository URL manually or connect GitHub from the link provided.
Step 4: Review
A summary of your configuration is displayed. Verify the server, app type, domain, runtime version, port, and any Git settings. Click Back to make changes, or Deploy to start.
Step 5: Deployment
Once you click Deploy, the app enters a Pending state while it is queued, then moves to Deploying. During deployment:
- Required software (e.g., PHP, Node.js, Docker) is installed on the server if not already present.
- Your app's web server configuration, directory structure, and services are set up automatically.
- If a Git repository was provided, the code is cloned to the server.
- Real-time deployment progress is shown on the page — it updates automatically without refreshing.
When deployment completes, the app status changes to Active and you are shown a link to open the app detail page. If deployment fails, the status changes to Failed and you can retry from the app detail page.