Install sPanel

Deployment Guide

Learn how to deploy your application from GitHub using sPanel with zero-downtime traffic switching.

PREREQUISITES

1. Connected GitHub account
2. Application repository ready
3. sPanel installed and active

GitHub Deployment Workflow

Zero Config
1

Create a New Application

Navigate to Applications in the sPanel dashboard, click '+ New Application', and select GitHub as the deployment source.

sPanel will query your authorized repositories and display available projects.
2

Choose Repository & Branch

Select your GitHub repository from the dropdown and specify the branch you want to track (e.g. main or production).

You can also specify a custom root directory if your project is structured as a monorepo.
3

Configure Build Settings & Environment

Set the framework detection preset (or let Nixpacks detect automatically), specify runtime ports, and inject environment variables.

If your project requires a database, click 'Attach Database' to automatically link PostgreSQL, MySQL, or Redis.
4

Trigger Deployment

Click 'Deploy Application'. sPanel will trigger an ephemeral Nixpacks build container and stream live logs directly to your browser.

Once the container responds to HTTP health checks, Traefik routes incoming traffic with zero downtime.

Framework-Specific Configurations

sPanel detects project languages automatically using Nixpacks.

Laravel (PHP 8.2+)

php / composer

Nixpacks automatically runs composer install --optimize-autoloader. Add your APP_KEY in Environment Variables before deploying. sPanel automatically ensures storage permissions and runs database migrations.

Next.js & Node.js

node / pnpm / yarn

Supports Next.js standalone output and SSR out of the box. sPanel passes dynamic PORT injection into the container so Traefik automatically routes traffic without custom nginx configurations.

Python (FastAPI, Flask, Django)

python / pip / poetry

Nixpacks mendeteksi requirements.txt atau pyproject.toml secara otomatis. Masukkan command start (misal: uvicorn main:app --host 0.0.0.0 --port $PORT) pada environment variable NIXPACKS_START_CMD jika menggunakan ASGI runner khusus.

Custom Dockerfile

docker

If your repository contains a root Dockerfile, sPanel switches to native Docker build mode, honoring custom multi-stage build instructions and expose ports.

Environment Variables & Secrets

Securely store credentials with AES-256-GCM encryption.

Environment variables can be defined via the sPanel Project Settings dashboard or uploaded directly as a raw .env file.

Values are encrypted in the local SQLite database prior to storage. When containers start, variables are safely injected into container processes without writing unencrypted secrets to disk.

Domains & Automatic HTTPS (Traefik)

Automated Let's Encrypt SSL certificates for your custom domains.

Point your domain's DNS A Record to your server IP address. In sPanel, add your custom domain in the project routing settings.

example.com → IN A <YOUR_SERVER_IP>

Traefik validates the domain and automatically provisions an SSL certificate via ACME HTTP-01 challenge within 60 seconds.

Database Provisioning & Networking

1-Click PostgreSQL, MySQL, and Redis container provisioning.

Provision managed database containers attached directly to the sPanel internal bridge network. Your applications can connect using private container hostnames (e.g., postgres:5432) without exposing database ports to the public internet.

Web Terminal & Live Logs

Direct container interaction without needing SSH client access.

sPanel provides real-time container log streaming via Server-Sent Events (SSE). Use the integrated xterm.js terminal to execute artisan commands, inspect files, or run database seeders inside active containers.

Container Monitoring & Auto-Restart

Real-time resource utilization and restart policies.

Every active application is monitored via Docker Stats API. Memory limits, CPU throttling, and health check thresholds ensure crashed applications restart automatically with zero manual intervention.

Automatic Staging URL: Your application will be instantly available at the configured domain (or <app>.<ip>.sslip.io) after the deployment health checks pass.