appliku.yml Reference
This is the full specification reference for the appliku.yml configuration file. Place this file in the root directory of your application repository to define build settings, processes, databases, volumes, and cron jobs.
For a guide-oriented introduction, see appliku.yml Configuration.
Top-Level Keys
build_settings: # Build and deployment configuration
services: # Application processes
databases: # Database services to provision
volumes: # Persistent storage volumes
cronjobs: # Scheduled tasks
All top-level keys are optional. You can define only the sections you need.
build_settings
Configures how your application is built and prepared for deployment.
| Key | Type | Required | Default | Description |
|---|---|---|---|---|
build_image | string | Yes | -- | Build image or dockerfile/custom |
build_command | string | No | -- | Command to run during the build phase |
dockerfile | string | No | -- | Inline Dockerfile content (when build_image is dockerfile or custom) |
dockerfile_path | string | No | "Dockerfile" | Path to Dockerfile in repository |
dockerfile_context_path | string | No | -- | Build context path for Dockerfile |
container_port | integer | No | -- | Port your application listens on |
release_command | string | No | -- | Command to run after build, before deployment (e.g., migrations) |
skip_release_command | boolean | No | false | Skip the release command |
expose_web_port | boolean | No | false | Expose container port on all interfaces |
is_static_site | boolean | No | false | Mark as a static site |
output_directory | string | No | -- | Directory containing built static files |
environment_variables | array | No | -- | Environment variable definitions |
build_image Values
Python:
python-3.13, python-3.12, python-3.11, python-3.10
Python + Node.js:
python-3.13-node-20.18, python-3.12-node-20.10, python-3.11-node-20.10, python-3.10-node-20.10
Node.js:
node-20-npm, node-20-yarn, node-14
Ruby:
ruby-3.4.1, ruby-3.3-rails
Alternative:
pypy2, pypy3
Custom:
dockerfile (from repository), custom (inline in dashboard)
environment_variables
Each entry in the environment_variables array supports several formats:
Static value:
environment_variables:
- name: MY_VAR
value: my_value
From database (public connection URL):
environment_variables:
- name: DATABASE_URL
from_database:
name: db
property: connection_url
From database (private/internal connection URL):
environment_variables:
- name: DATABASE_URL
from_database:
name: db
property: private_connection_url
From domains (comma-separated list of all application domains):
environment_variables:
- name: ALLOWED_HOSTS
from_domains: true
Manual (placeholder for user-provided values):
environment_variables:
- name: SECRET_KEY
source: manual
services
Defines the processes that run your application. Each key is the service name.
| Key | Type | Required | Default | Description |
|---|---|---|---|---|
command | string | Yes | -- | Command to run the service |
scale | integer | No | 1 | Number of instances |
mode | string | No | "replicated" | replicated or global |
placement_constraints | string | No | -- | Docker Swarm placement constraints |
resources_limits_memory | string | No | -- | Memory limit (e.g., "512M", "2G") |
resources_limits_cpus | string | No | -- | CPU limit (e.g., "0.5", "2") |
resources_reservations_memory | string | No | -- | Memory reservation |
resources_reservations_cpus | string | No | -- | CPU reservation |
image | string | No | -- | Use an existing Docker image instead of building |
volumes | array | No | -- | Docker volume mounts |
shm_size | string | No | -- | Shared memory size |
ports | array | No | -- | Port mappings |
mem_limit | string | No | -- | Memory limit (alternative syntax) |
Example
services:
web:
command: gunicorn project.wsgi --bind 0.0.0.0:8000
scale: 2
resources_limits_memory: 512M
resources_limits_cpus: "1"
worker:
command: celery -A project worker -l info
scale: 1
resources_limits_memory: 256M
release:
command: python manage.py migrate
The release service is special -- it runs once after each deployment (like a release command) rather than as a long-running process.
databases
Defines database services to provision. Each key is a name you choose (used to reference the database in environment_variables).
| Key | Type | Required | Description |
|---|---|---|---|
type | string | Yes | Database engine and version identifier |
Available Types
| Type Key | Engine |
|---|---|
postgresql_17 | PostgreSQL 17 |
postgresql_16 | PostgreSQL 16 |
postgresql_15 | PostgreSQL 15 |
postgresql_12 | PostgreSQL 12 |
postgis_16_34 | PostGIS 16 + 3.4 |
postgresql_16_pgvector | PostgreSQL 16 + pgvector |
timescale_db_15 | TimescaleDB 15 |
mysql_8 | MySQL 8 |
redis_7 | Redis 7 |
redis_6 | Redis 6 |
rabbitmq | RabbitMQ |
elasticsearch_8_17 | Elasticsearch 8.17 |
Example
databases:
db:
type: postgresql_17
cache:
type: redis_7
broker:
type: rabbitmq
volumes
Defines persistent storage volumes that survive container restarts and redeployments.
| Key | Type | Required | Description |
|---|---|---|---|
target | string | Yes | Mount path inside the container |
url | string | No | URL path for web access (served by Nginx) |
environment_variable | string | No | Env var name set to the volume path |
source | string | No | Source path on host (for bind mounts) |
Example
volumes:
media:
target: /app/media/
url: /media/
environment_variable: MEDIA_ROOT
data:
target: /app/data/
environment_variable: DATA_PATH
When you set a url on a volume, Nginx serves files from that volume directly without passing requests to your application. This is efficient for serving user-uploaded media files.
cronjobs
Defines scheduled tasks that run at specified intervals using cron expressions.
| Key | Type | Required | Description |
|---|---|---|---|
schedule | string | Yes | Cron expression (e.g., "0 * * * *") |
command | string | Yes | Command to execute |
Cron Expression Format
┌───────────── minute (0-59)
│ ┌───────────── hour (0-23)
│ │ ┌───────────── day of month (1-31)
│ │ │ ┌───────────── month (1-12)
│ │ │ │ ┌───────────── day of week (0-6, Sunday=0)
│ │ │ │ │
* * * * *
Example
cronjobs:
send_emails:
schedule: "0 * * * *"
command: python manage.py send_emails
daily_backup:
schedule: "0 2 * * *"
command: python manage.py backup
weekly_cleanup:
schedule: "0 3 * * 0"
command: python manage.py cleanup_old_records
Cron job logs are stored on the server at /home/app/_cron_logs/<job_id>. You can view them by SSHing into the server.
Complete Example
build_settings:
build_image: python-3.12-node-20.10
build_command: npm run build
container_port: 8000
environment_variables:
- name: DEBUG
value: "false"
- name: DATABASE_URL
from_database:
name: db
property: private_connection_url
- name: REDIS_URL
from_database:
name: cache
property: connection_url
- name: ALLOWED_HOSTS
from_domains: true
- name: SECRET_KEY
source: manual
services:
web:
command: gunicorn project.wsgi --bind 0.0.0.0:8000 --workers 3
scale: 2
resources_limits_memory: 512M
worker:
command: celery -A project worker -l info
scale: 1
resources_limits_memory: 256M
release:
command: python manage.py migrate
databases:
db:
type: postgresql_17
cache:
type: redis_7
volumes:
media:
target: /app/media/
url: /media/
environment_variable: MEDIA_ROOT
cronjobs:
cleanup:
schedule: "0 3 * * *"
command: python manage.py cleanup_old_files
send_reports:
schedule: "0 8 * * 1"
command: python manage.py send_weekly_report
Related Pages
- appliku.yml Configuration -- guide-oriented introduction
- Build Images
- Predefined Dockerfiles
- Database Types