Skip to content

Getting Started

Install the Skyport panel for a production deployment.

This guide covers a recommended production-style installation of the Skyport panel.

  • Ubuntu 24.04 LTS or Debian 12
  • PHP 8.4
  • Composer 2
  • Bun 1.3+
  • PostgreSQL 16+
  • Redis 7+
  • Nginx
  • Laravel Octane with Swoole

For production, we strongly recommend:

  • PostgreSQL as the main database
  • Redis for cache, sessions, and queues
  • Octane + Swoole behind Nginx
  • a dedicated machine or VM for each node daemon

Install the standard Laravel extensions plus the ones commonly needed for this stack:

  • bcmath
  • curl
  • ctype
  • dom
  • fileinfo
  • mbstring
  • openssl
  • pcntl
  • pdo_pgsql
  • redis
  • session
  • tokenizer
  • xml
  • zip
  • swoole

The exact package names vary by distribution, but your host should have:

Terminal window
sudo apt update
sudo apt install -y git unzip curl ca-certificates nginx redis-server postgresql postgresql-contrib

Then install PHP 8.4, Composer, Bun, and the Swoole extension using your preferred package sources.

Terminal window
sudo mkdir -p /var/www/skyport
sudo chown "$USER":"$USER" /var/www/skyport
cd /var/www/skyport
git clone https://github.com/skyportsh/panel.git .
Terminal window
composer install --no-dev --optimize-autoloader
bun install --frozen-lockfile
Terminal window
cp .env.example .env

At minimum, update these values for production:

APP_NAME=Skyport
APP_ENV=production
APP_DEBUG=false
APP_URL=https://panel.example.com
DB_CONNECTION=pgsql
DB_HOST=127.0.0.1
DB_PORT=5432
DB_DATABASE=skyport
DB_USERNAME=skyport
DB_PASSWORD=change-me
CACHE_STORE=redis
SESSION_DRIVER=redis
QUEUE_CONNECTION=redis
REDIS_HOST=127.0.0.1
REDIS_PORT=6379
REDIS_PASSWORD=null
LOG_CHANNEL=stack
LOG_LEVEL=info
OCTANE_SERVER=swoole

5. Generate the application key and migrate

Section titled “5. Generate the application key and migrate”
Terminal window
php artisan key:generate
php artisan migrate --force
Terminal window
bun run build

For a first boot test:

Terminal window
php artisan octane:start --server=swoole --host=127.0.0.1 --port=8000

If the app loads on port 8000, continue to the webserver configuration step and place Nginx in front of it.

Skyport includes a registration flow, so you can create the first account through the web UI at /register.

If you need to promote that first user to admin manually, use Tinker:

Terminal window
php artisan tinker
$user = App\Models\User::where('email', 'you@example.com')->first();
$user->is_admin = true;
$user->save();

Even if the panel boots successfully, background work still needs a worker process in production.

A simple foreground check:

Terminal window
php artisan queue:work --tries=1 --timeout=0

You will convert this into a systemd service in Additional Configuration.

Continue with Webserver Configuration.