Aptly
Aptly is a Debian/Ubuntu APT repository management tool. Use it to create and publish private APT repositories that your machines can install from.
Configuration
Key settings in your instance's config.yaml:
- domain - Where aptly will be accessible (default:
aptly.{your-cloud-domain}) - storage - Persistent volume size for packages (default:
5Gi)
Access
After deployment:
https://aptly.{your-cloud-domain}/— Published repository root (for APT clients, no auth required)https://aptly.{your-cloud-domain}/api— REST API for managing repos and snapshots (requires credentials)https://aptly.{your-cloud-domain}/public.key— GPG public key for APT clients to import
Credentials
The API is protected by HTTP basic authentication. The username defaults to aptly (configurable via apiUser in config.yaml). The password is auto-generated and stored in your instance's secrets.yaml under apps.aptly.apiPassword.
To retrieve it:
wild secret get aptly apiPassword
To use the API with curl:
curl -u aptly:{your-api-password} https://aptly.{your-cloud-domain}/api/version
GPG Signing
A GPG signing key is generated automatically on first deployment and stored on the persistent volume. The public key is exported to /public.key and is accessible without authentication so APT clients can import it:
curl -fsSL https://aptly.{your-cloud-domain}/public.key | \
sudo tee /usr/share/keyrings/my-repo.gpg > /dev/null
Common Workflows
Aptly is managed through its REST API or the aptly CLI (run inside the pod). The REST API docs are at https://www.aptly.info/doc/api/.
Running aptly commands inside the pod
kubectl -n aptly exec -it deploy/aptly -- bash
Publish a local repository
# Create a local repo
aptly repo create my-packages
# Add packages
aptly repo add my-packages /path/to/package.deb
# Publish
aptly publish repo my-packages
The published repo will be available at https://aptly.{your-cloud-domain}/.
Configure a machine to use the repository
# Import the signing key
curl -fsSL https://aptly.{your-cloud-domain}/public.key | \
sudo tee /usr/share/keyrings/my-repo.gpg > /dev/null
# Add the repo
echo "deb [signed-by=/usr/share/keyrings/my-repo.gpg] https://aptly.{your-cloud-domain}/ stable main" | \
sudo tee /etc/apt/sources.list.d/my-repo.list
sudo apt update
Notes
- All aptly data (GPG keys, database, package pool, published repos) is stored on the persistent volume at
/opt/aptly. - The REST API (port 8080) and the nginx file server (port 80) both run inside the pod via supervisord. The ingress routes to nginx (port 80).