Docs Self-Hosting

Self-Hosting

Deploy ReleaseHub on your infrastructure

Run ReleaseHub on your own servers for complete control over your release management infrastructure.

PHP 8.3+ SQLite/MySQL S3 Compatible
Download .md

Requirements

🐘

PHP 8.3+

With common extensions

📦

Composer

PHP dependency manager

🗃️

SQLite or MySQL

Database backend

Docker (Recommended)

The fastest way to get started. Pull the official Docker image and run with a single command.

1

Quick Start

$ docker run -d -p 8080:80 \
-e APP_URL=http://localhost:8080 \
-e JWT_SECRET=your-secret-key \
-v releasehub-data:/var/www/html/storage \
releasehubdev/server:latest
2

Docker Compose

For production deployments, use Docker Compose:

services:
  releasehub:
    image: releasehubdev/server:latest
    ports:
      - "8080:80"
    environment:
      - APP_URL=https://releases.example.com
      - JWT_SECRET=your-jwt-secret
      - FILESYSTEM_DISK=local
    volumes:
      - ./storage:/var/www/html/storage
      - ./database.sqlite:/var/www/html/database/database.sqlite
    restart: unless-stopped
3

Run Setup

After starting the container, run the setup wizard to create your admin user:

$ docker exec -it releasehub php artisan releasehub:setup

Docker Hub: docker pull releasehubdev/server:latest

Manual Installation

1

Clone and Install Dependencies

$ cd releasehub
$ composer install
2

Environment Setup

$ cp .env.example .env

Edit .env with your configuration:

APP_NAME=ReleaseHub
APP_URL=http://localhost:8000

# Database - SQLite (default) or MySQL
DB_CONNECTION=sqlite

# JWT Authentication (generate a secure random key)
JWT_SECRET=your-jwt-secret-key-here

# File Storage: local or s3
FILESYSTEM_DISK=local
3

Run Migrations

$ php artisan migrate
4

Run Setup Command

$ php artisan releasehub:setup

This interactive wizard will:

  • Ask for admin credentials (name, email, password)
  • Set up default platforms (Android, iOS, Windows, macOS, Linux, Web)
  • Create channel presets
5

Start Development Server

$ php -S localhost:8000 -t public

Storage Configuration

Local Storage (Default)

FILESYSTEM_DISK=local

Files stored in storage/app/releases/

S3-Compatible Storage

FILESYSTEM_DISK=s3
AWS_ACCESS_KEY_ID=your-key
AWS_SECRET_ACCESS_KEY=your-secret
AWS_DEFAULT_REGION=us-east-1
AWS_BUCKET=your-bucket
AWS_ENDPOINT=https://s3.amazonaws.com

Core Features

Multi-Platform Support

APK, AAB, EXE, MSI, DMG, AppImage, DEB, ZIP, TAR.GZ

Chunked Uploads

Multipart uploads to bypass PHP limits for large files

Release Channels

Custom channels per project (Stable, Beta, Alpha, etc.)

Version Comparison

Configurable (build number first OR semver only)

Architecture Detection

Auto-detect from filename + manual override + universal builds

Changelogs

Full Markdown support for release notes

Force Updates

Per-version flag for critical updates

Draft Versions

Optional draft/publish workflow per project

Security & Access Control

JWT Authentication

Secure admin panel and API access

API Keys

Multiple keys per project with granular permissions

Download Auth Options

  • • Public (no auth)
  • • API Key required
  • • Password protected
  • • Access codes (single/multi-use)
  • • Invite links with expiry

Rate Limiting

Tiered by auth type to prevent abuse

Audit Logging

All admin actions logged for compliance

Signed URLs

Time-limited download links for secure distribution

Console Commands

Database Migrations

$ php artisan migrate

Initial Setup

Creates admin user, platforms, channel presets

$ php artisan releasehub:setup

Cleanup Expired Uploads

Remove expired upload sessions and temp files

$ php artisan releasehub:cleanup-uploads

Cleanup Old Versions

Remove old versions based on project retention settings

$ php artisan releasehub:cleanup-versions

Web Routes

RouteDescription
/Public portal - project listings
/project/{slug}Public project detail page
/project/{slug}/latestRedirect to latest release APK
/project/{slug}/{arch}/latestRedirect to latest release APK for specific architecture (arm64-v8a, armeabi-v7a, x86_64)
/invite/{token}Invite link landing page
/admin/loginAdmin login page
/adminAdmin dashboard
/admin/projectsProject management
/admin/platformsPlatform management
/admin/usersUser management
/admin/audit-logsAudit logs
/admin/settingsSettings
/healthHealth check endpoint

Directory Structure

releasehub/
├── app/
│   ├── Console/Commands/       # Artisan commands
│   │   ├── CleanupExpiredUploads.php
│   │   ├── CleanupOldVersions.php
│   │   └── SetupCommand.php
│   ├── Http/
│   │   ├── Controllers/
│   │   │   ├── Api/            # API controllers
│   │   │   ├── Admin/          # Admin API + page controllers
│   │   │   └── Public/         # Public portal controllers
│   │   └── Middleware/         # Auth, rate limiting, etc.
│   ├── Models/                 # Eloquent models
│   └── Services/               # Business logic
├── config/                     # Configuration files
├── database/
│   └── migrations/             # Database migrations
├── public/                     # Web root
├── resources/views/
│   ├── layouts/
│   ├── admin/                  # Admin panel views
│   └── public/                 # Public portal views
├── routes/
│   └── web.php                 # All routes
└── storage/app/
    └── releases/               # Uploaded files (local storage)