Skip to main content

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.

KeyTypeRequiredDefaultDescription
build_imagestringYes--Build image or dockerfile/custom
build_commandstringNo--Command to run during the build phase
dockerfilestringNo--Inline Dockerfile content (when build_image is dockerfile or custom)
dockerfile_pathstringNo"Dockerfile"Path to Dockerfile in repository
dockerfile_context_pathstringNo--Build context path for Dockerfile
container_portintegerNo--Port your application listens on
release_commandstringNo--Command to run after build, before deployment (e.g., migrations)
skip_release_commandbooleanNofalseSkip the release command
expose_web_portbooleanNofalseExpose container port on all interfaces
is_static_sitebooleanNofalseMark as a static site
output_directorystringNo--Directory containing built static files
environment_variablesarrayNo--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.

KeyTypeRequiredDefaultDescription
commandstringYes--Command to run the service
scaleintegerNo1Number of instances
modestringNo"replicated"replicated or global
placement_constraintsstringNo--Docker Swarm placement constraints
resources_limits_memorystringNo--Memory limit (e.g., "512M", "2G")
resources_limits_cpusstringNo--CPU limit (e.g., "0.5", "2")
resources_reservations_memorystringNo--Memory reservation
resources_reservations_cpusstringNo--CPU reservation
imagestringNo--Use an existing Docker image instead of building
volumesarrayNo--Docker volume mounts
shm_sizestringNo--Shared memory size
portsarrayNo--Port mappings
mem_limitstringNo--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).

KeyTypeRequiredDescription
typestringYesDatabase engine and version identifier

Available Types

Type KeyEngine
postgresql_17PostgreSQL 17
postgresql_16PostgreSQL 16
postgresql_15PostgreSQL 15
postgresql_12PostgreSQL 12
postgis_16_34PostGIS 16 + 3.4
postgresql_16_pgvectorPostgreSQL 16 + pgvector
timescale_db_15TimescaleDB 15
mysql_8MySQL 8
redis_7Redis 7
redis_6Redis 6
rabbitmqRabbitMQ
elasticsearch_8_17Elasticsearch 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.

KeyTypeRequiredDescription
targetstringYesMount path inside the container
urlstringNoURL path for web access (served by Nginx)
environment_variablestringNoEnv var name set to the volume path
sourcestringNoSource 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.

KeyTypeRequiredDescription
schedulestringYesCron expression (e.g., "0 * * * *")
commandstringYesCommand 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.


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