diff --git a/blueprints/akaunting/docker-compose.yml b/blueprints/akaunting/docker-compose.yml new file mode 100644 index 00000000..85ca3222 --- /dev/null +++ b/blueprints/akaunting/docker-compose.yml @@ -0,0 +1,55 @@ +version: "3.8" + +services: + akaunting: + image: docker.io/akaunting/akaunting:latest + restart: unless-stopped + depends_on: + akaunting-db: + condition: service_healthy + environment: + # App config + APP_URL: ${APP_URL} + LOCALE: ${LOCALE} + + # Database connection + DB_HOST: akaunting-db + DB_PORT: 3306 + DB_NAME: ${DB_NAME} + DB_USERNAME: ${DB_USERNAME} + DB_PASSWORD: ${DB_PASSWORD} + DB_PREFIX: ${DB_PREFIX} + + # First-run bootstrap (company + admin) + COMPANY_NAME: ${COMPANY_NAME} + COMPANY_EMAIL: ${COMPANY_EMAIL} + ADMIN_EMAIL: ${ADMIN_EMAIL} + ADMIN_PASSWORD: ${ADMIN_PASSWORD} + + # Expose only to internal network; domain routing handled by Dokploy/Traefik + expose: + - "80" + + volumes: + - akaunting-data:/var/www/html + + akaunting-db: + image: mariadb:10.11 + restart: unless-stopped + environment: + MYSQL_DATABASE: ${MYSQL_DATABASE} + MYSQL_USER: ${MYSQL_USER} + MYSQL_PASSWORD: ${MYSQL_PASSWORD} + # Randomizes root password on each deployment (recommended) + MYSQL_RANDOM_ROOT_PASSWORD: "yes" + volumes: + - akaunting-db:/var/lib/mysql + healthcheck: + test: ["CMD", "mysqladmin", "ping", "-h", "localhost"] + interval: 10s + timeout: 5s + retries: 5 + +volumes: + akaunting-data: {} + akaunting-db: {} diff --git a/blueprints/akaunting/image.png b/blueprints/akaunting/image.png new file mode 100644 index 00000000..1ecc6e84 Binary files /dev/null and b/blueprints/akaunting/image.png differ diff --git a/blueprints/akaunting/template.toml b/blueprints/akaunting/template.toml new file mode 100644 index 00000000..b78c412d --- /dev/null +++ b/blueprints/akaunting/template.toml @@ -0,0 +1,54 @@ +[variables] +# Domain & UI +main_domain = "${domain}" +locale = "en-US" + +# DB credentials (safe defaults; user can override in UI) +db_name = "akaunting" +db_user = "admin" +mysql_password = "${password:24}" + +# Akaunting setup variables +company_name = "My Company" +company_email = "${email}" +admin_email = "${email}" +admin_password = "${password:24}" + +# Akaunting table prefix: 3 hex chars + underscore (e.g., "a1f_") +db_prefix = "${hash:3}_" + +# Domain routing for the web UI +[[config.domains]] +serviceName = "akaunting" +port = 80 +host = "${main_domain}" + +[config] +env = [ + # App + "APP_URL=${main_domain}", + "LOCALE=${locale}", + + # Database (app) + "DB_HOST=akaunting-db", + "DB_PORT=3306", + "DB_NAME=${db_name}", + "DB_USERNAME=${db_user}", + "DB_PASSWORD=${mysql_password}", + "DB_PREFIX=${db_prefix}", + + # First-run bootstrap (app) + "COMPANY_NAME=${company_name}", + "COMPANY_EMAIL=${company_email}", + "ADMIN_EMAIL=${admin_email}", + "ADMIN_PASSWORD=${admin_password}", + + # Database (server) + "MYSQL_DATABASE=${db_name}", + "MYSQL_USER=${db_user}", + "MYSQL_PASSWORD=${mysql_password}", + "MYSQL_RANDOM_ROOT_PASSWORD=yes" +] + +# No custom mounts needed; volumes are already defined in compose. +[[config.mounts]] diff --git a/meta.json b/meta.json index 2f6875b1..91353592 100644 --- a/meta.json +++ b/meta.json @@ -122,6 +122,25 @@ "project-management" ] }, + { + "id": "akaunting", + "name": "Akaunting", + "version": "latest", + "description": "Akaunting is a self-hosted, open-source accounting app for small businesses.", + "logo": "image.png", + "links": { + "github": "https://github.com/akaunting/akaunting", + "website": "https://akaunting.com", + "docs": "https://akaunting.com/docs" + }, + "tags": [ + "finance", + "accounting", + "php", + "mariadb", + "self-hosted" + ] + }, { "id": "alist", "name": "AList",