admiral-project/admiral
Project ID: 239492
Description
Admiral
Admiral is a simple, billing-aware Platform as a Service (PaaS) designed for software agencies and SaaS builders who want to provision, monetize, and operate customer applications quickly without the operational complexity of Kubernetes.
Admiral focuses on simplicity, predictable operations, low cost, and a secure-by-default deployment model.
Status: Early development — not production ready.
Current integration status in this repository:
admirald,admiral-fleet, andadmiralctlare the active backend E2E focus.admiral-flagshipis functional, with working dashboard and instance management views.admiral-flagshipis part of the normal single-node installation flow.admiral-harborremains pre-alpha and is planned for a later phase.
What Admiral Is
Admiral is a lightweight PaaS for running SaaS applications using containers.
It helps software agencies and independent software vendors:
- Provision customer applications
- Operate SaaS products
- Monetize software offerings
- Manage customer lifecycle
- Pause and resume customer environments
- Execute backups
- Scale application resources
- Offer subscription-based services
Admiral is intentionally designed around simple, well-understood infrastructure:
- Linux servers
- Containers
- Podman
- systemd
- PostgreSQL
- PostgreSQL-backed durable queue (
admiral_queue)
No Kubernetes required.
The goal is simple:
Install platform, provision customers, ship software.
What Admiral Is NOT
Admiral is not:
- A Kubernetes replacement for hyperscale workloads
- A cloud provider
- A general-purpose container orchestration system
- A platform for arbitrary enterprise infrastructure
- A complex DevOps framework
Admiral exists to solve a specific problem:
Small and medium software agencies need a practical way to deploy and operate SaaS products without building a DevOps department.
If you need:
- service meshes
- hundreds of microservices
- multi-region orchestration
- advanced scheduling
- cluster-level elasticity
- hyperscale infrastructure
You probably want Kubernetes.
If what you need is:
Provision customer → charge customer → operate software
Admiral may be a good fit.
Why Admiral Exists
Modern infrastructure is often unnecessarily complex for small SaaS businesses.
Many software agencies simply need:
- Customer provisioning
- Billing and subscriptions
- Backups
- Resource management
- Secure operations
- Predictable infrastructure
- Customer self-service
But frequently end up managing:
- Kubernetes
- Helm
- ingress controllers
- complex networking
- secret management systems
- cluster administration
- overengineered CI/CD pipelines
For many small and medium SaaS businesses, this complexity is operationally expensive and unnecessary.
Admiral embraces boring, predictable infrastructure.
Principles:
- Simple
- Secure by default
- Low operational cost
- Easy to install
- Easy to understand
- Minimal moving parts
- Linux-native
- Pragmatic scaling
- Billing-aware operations
Sometimes boring technology is the best technology.
Billing First Principle
Admiral is designed around a billing-first architecture.
Billing is not an afterthought.
Billing is a first-class concern of the platform.
Every provisioned application is assumed to exist within a commercial relationship.
This architectural principle influences the entire system.
Examples:
- Applications belong to subscriptions
- Tiers define allowed resources
- Resource changes may affect billing
- Suspension and resume are billing-aware operations
- Backup retention may depend on plan limits
- Provisioning assumes a commercial plan
- Customer lifecycle is tied to subscription lifecycle
- Operational actions can be constrained by plan capabilities
Admiral intentionally avoids a common mistake:
Build infrastructure first, figure out monetization later.
Instead:
Infrastructure and monetization are designed together.
The result is a platform optimized for agencies that want to launch SaaS products quickly while maintaining predictable operational and commercial behavior.
A simple rule summarizes this philosophy:
Every application exists within a commercial context.
Architecture
Admiral consists of five components.
admirald
The core control plane.
Responsibilities:
- Provision applications
- Deprovision applications
- Pause and resume workloads
- Execute backups
- Change application resources
- Expose the provisioning API
- Coordinate fleet operations
- Propagate application state
admiral-fleet
The worker runtime.
Responsibilities:
- Execute provisioning instructions
- Manage application containers
- Perform health checks
- Enforce resource policies
- Monitor node state
- Execute node-level actions
- Report execution status to admirald
admiral-harbor
Customer portal.
Responsibilities:
- User accounts
- Application catalog
- Subscription lifecycle
- Billing experience
- Plan selection
- Backup access
- Pause and resume applications
- Resource upgrades and downgrades
admiral-flagship
Administrative interface.
Responsibilities:
- Node management
- Fleet visibility
- Application definitions
- Tier management
- Operational administration
- Platform configuration
admiralctl
Administrative command line interface.
Responsibilities:
- Platform administration
- Diagnostics
- Provisioning workflows
- Debugging
- Maintenance operations
Installation Instructions
Installation
Single Node Installation
Requirements:
- Fedora or Enterprise Linux >= 9 (RHEL, Rocky Linux, AlmaLinux, CentOS Stream)
- Fresh server with root or sudo access
- Python 3
- For production: a public domain with DNS management access
Quick Start
Run the installer as root:
curl -fsSL https://raw.githubusercontent.com/admiral-project/admiral/main/scripts/install.sh | sudo bash -s -- --single-node
Or clone the repository and run:
git clone https://github.com/admiral-project/admiral.git
cd admiral
sudo bash scripts/install.sh --single-node
The installer will:
- Enable EPEL and COPR repositories
- Install all Admiral RPM packages via DNF
- Run the Ansible configuration playbook
- Generate secure credentials and self-signed TLS certificates
- Start all services:
postgresql,caddy,admirald,admiral-fleet,admiral-flagship,admiral-harbor,cockpit.socket
On success, all services will be active and the API health endpoint will respond:
curl -sk https://127.0.0.1:8080/api/v1/health
# {"status":"healthy"}
Secrets Safeguard
During installation, all platform secrets are generated and stored at /etc/admiral/secrets:
| Secret | Purpose |
|---|---|
| ADMIRAL_POSTGRES_PASSWORD | PostgreSQL authentication |
| ADMIRAL_SHARED_TOKEN | Internal component authentication |
| ADMIRAL_SECRETS_KEY | Encryption key for stored secrets |
| FLAGSHIP_BOOTSTRAP_USER | Admin console initial user |
| FLAGSHIP_BOOTSTRAP_PASSWORD | Admin console initial password |
| HARBOR_BOOTSTRAP_USER | Customer portal initial user |
| HARBOR_BOOTSTRAP_PASSWORD | Customer portal initial password |
This file is critical. If it is lost, the platform cannot be recovered. Back it up to a secure location off the node immediately:
scp /etc/admiral/secrets user@backup-server:/backup/admiral/
DNS and HTTPS (Production)
HTTPS is intentionally not configured by the installer. A valid wildcard certificate for *.apps.<YOUR_DOMAIN> is required.
Run the HTTPS setup script:
sudo admiral_https_setup --domain cloud.example.com
This script uses certbot with a DNS-01 ACME challenge to obtain a Let's Encrypt wildcard certificate. DNS-01 requires manual intervention — you must add a TXT record to your DNS zone when prompted.
Supported DNS providers (install the corresponding certbot plugin):
# Cloudflare
dnf install -y certbot-dns-cloudflare
# Route53 (Amazon AWS)
dnf install -y certbot-dns-route53
# Google Cloud DNS
dnf install -y certbot-dns-google
# Other providers: certbot-dns-<provider>
After obtaining the certificate, the platform automatically configures Caddy as TLS terminator and restarts the affected services.
QA / Development Mode (No DNS)
For testing without a public domain, configure the platform in QA mode:
# Generate a self-signed wildcard certificate
cd /etc/admiral/tls
openssl genrsa -out caddy-local-key.pem 2048
openssl req -new -key caddy-local-key.pem \
-out caddy-local.csr \
-subj "/C=US/ST=Test/O=Admiral/CN=*.apps.qa.admiral.test"
openssl x509 -req -in caddy-local.csr \
-CA ca.pem -CAkey ca-key.pem \
-CAcreateserial -out caddy-local.pem -days 365 \
-extfile <(printf "subjectAltName=DNS:*.apps.qa.admiral.test,DNS:apps.qa.admiral.test")
# Update admirald configuration
cat >> /etc/admirald.ini << 'EOF'
networking_base_domain=qa.admiral.test
networking_tls_provider=internal
networking_tls_cert_file=/etc/admiral/tls/caddy-local.pem
networking_tls_key_file=/etc/admiral/tls/caddy-local-key.pem
EOF
# Allow self-signed certs in the customer portal
sed -i 's/ADMIRAL_INSECURE_SKIP_VERIFY=0/ADMIRAL_INSECURE_SKIP_VERIFY=1/' /etc/admiral/harbor.env
# Restart services
systemctl restart admirald admiral-fleet admiral-flagship admiral-harbor
In QA mode the web consoles are accessible directly:
| Service | URL |
|---|---|
| Admin Console (flagship) | https://<SERVER_IP>:5000 |
| Customer Portal (harbor) | https://<SERVER_IP>:5001 |
Active Releases
The following unofficial repositories are provided as-is by owner of this project. Contact the owner directly for bugs or issues (IE: not bugzilla).
| Release | Architectures | Repo Download |
|---|---|---|
| Alma+epel 10 | x86_64_v2 (48)* | Alma+epel 10 (6 downloads) |
EPEL 10
|
aarch64 (36)*, x86_64 (1474)* | EPEL 10 (435 downloads) |
Fedora 44
|
aarch64 (25)*, x86_64 (54)* | Fedora 44 (11 downloads) |
Fedora rawhide
|
aarch64 (19)*, x86_64 (28)* | Fedora rawhide (6 downloads) |
| Rhel+epel 10 | aarch64 (37)*, x86_64 (49)* | Rhel+epel 10 (1 downloads) |
* Total number of downloaded packages.
EPEL 10
Fedora 44