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
commands: # Saved commands for the Run Command autocomplete
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.14, python-3.13, python-3.12, python-3.11, python-3.10, python-3.9, python-3.8
Python with uv:
python-3.14-uv, python-3.13-uv, python-3.12-uv, python-3.11-uv
Python + Node.js:
python-3.14-node-25.6, python-3.13-node-20.18, python-3.12-node-20.10, python-3.11-node-20.10, python-3.10-node-20.10
Python (uv) + Node.js:
python-3.14-uv-node-25.6, python-3.13-uv-node-25.6, python-3.12-uv-node-25.6, python-3.11-uv-node-25.6
Node.js:
node-25-npm, node-24-npm, node-22-npm, node-20-npm, node-20-yarn
Ruby:
ruby-3.4.1, ruby-3.3-rails
Alternative:
pypy2, pypy3
Custom:
dockerfile (from repository), custom (inline in dashboard)
Static Sites:
no-build-static (requires is_static_site: true)
environment_variables¶
Each entry in the environment_variables array supports several formats:
Static value:
From database (public 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):
Manual (placeholder for user-provided values):
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
Note
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_18 |
PostgreSQL 18 |
postgresql_17 |
PostgreSQL 17 |
postgresql_16 |
PostgreSQL 16 |
postgresql_15 |
PostgreSQL 15 |
postgresql_12 |
PostgreSQL 12 |
postgis_16_34 |
PostGIS 16 + 3.4 |
postgis |
PostGIS |
postgresql_16_pgvector |
PostgreSQL 16 + pgvector |
timescale_db_17 |
TimescaleDB 17 |
timescale_db_17_ha |
TimescaleDB 17 HA |
timescale_db_15 |
TimescaleDB 15 |
mysql_8 |
MySQL 8 |
redis_8 |
Redis 8 |
redis_7 |
Redis 7 |
redis_6 |
Redis 6 |
rabbitmq |
RabbitMQ |
elasticsearch_8_17 |
Elasticsearch 8.17 |
Example¶
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
Tip
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
Note
Cron job logs are stored on the server at /home/app/_cron_logs/<job_id>. You can view them by SSHing into the server.
commands¶
Defines a list of frequently used commands that appear as autocomplete suggestions in the Run Command tab. The list is a flat array of strings and is fully replaced on every deployment.
| Type | Required | Description |
|---|---|---|
list(string) |
No | Ordered list of command strings |
Example¶
commands:
- python manage.py show_urls
- python manage.py validate_templates
- python manage.py check
- python manage.py send_queued_mail
Note
Commands are suggestions only — they are never executed automatically. Users select or type a command in the Run Command tab and trigger it manually.
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
commands:
- python manage.py migrate
- python manage.py createsuperuser
- python manage.py shell
Related Pages¶
- appliku.yml Configuration -- guide-oriented introduction
- Build Images
- Predefined Dockerfiles
- Database Types