Feat : Add BigCapital template -#47 (#511)

* feat: add BigCapital template

* Refactor docker-compose.yml to use ports instead of expose

Removed container names and exposed sections for services. Updated to use ports instead of expose for webapp, server, mysql, mongo, redis, and gotenberg services.

---------

Co-authored-by: Mauricio Siu <47042324+Siumauricio@users.noreply.github.com>
This commit is contained in:
Harikrishnan Dhanasekaran
2025-11-08 11:07:11 +05:30
committed by GitHub
parent e562010556
commit 72eda8f5d4
4 changed files with 343 additions and 0 deletions

View File

@@ -0,0 +1,152 @@
services:
webapp:
image: bigcapitalhq/webapp:latest
restart: unless-stopped
depends_on:
- server
ports:
- '80'
server:
image: bigcapitalhq/server:latest
restart: unless-stopped
depends_on:
mysql:
condition: service_healthy
mongo:
condition: service_started
redis:
condition: service_started
ports:
- '3000'
environment:
# Mail
- MAIL_HOST=${MAIL_HOST}
- MAIL_USERNAME=${MAIL_USERNAME}
- MAIL_PASSWORD=${MAIL_PASSWORD}
- MAIL_PORT=${MAIL_PORT}
- MAIL_SECURE=${MAIL_SECURE}
- MAIL_FROM_NAME=${MAIL_FROM_NAME}
- MAIL_FROM_ADDRESS=${MAIL_FROM_ADDRESS}
# Database
- DB_HOST=mysql
- DB_USER=${DB_USER}
- DB_PASSWORD=${DB_PASSWORD}
- DB_CHARSET=${DB_CHARSET}
# System database
- SYSTEM_DB_NAME=${SYSTEM_DB_NAME}
# Tenants databases
- TENANT_DB_NAME_PERFIX=${TENANT_DB_NAME_PERFIX}
# Authentication
- JWT_SECRET=${JWT_SECRET}
# MongoDB
- MONGODB_DATABASE_URL=mongodb://mongo/bigcapital
# Application
- BASE_URL=${BASE_URL}
# Agendash
- AGENDASH_AUTH_USER=${AGENDASH_AUTH_USER}
- AGENDASH_AUTH_PASSWORD=${AGENDASH_AUTH_PASSWORD}
# Sign-up restrictions
- SIGNUP_DISABLED=${SIGNUP_DISABLED}
- SIGNUP_ALLOWED_DOMAINS=${SIGNUP_ALLOWED_DOMAINS}
- SIGNUP_ALLOWED_EMAILS=${SIGNUP_ALLOWED_EMAILS}
# Sign-up email confirmation
- SIGNUP_EMAIL_CONFIRMATION=${SIGNUP_EMAIL_CONFIRMATION}
# Gotenberg (Pdf generator)
- GOTENBERG_URL=${GOTENBERG_URL}
- GOTENBERG_DOCS_URL=${GOTENBERG_DOCS_URL}
# Exchange Rate
- EXCHANGE_RATE_SERVICE=${EXCHANGE_RATE_SERVICE}
- OPEN_EXCHANGE_RATE_APP_ID=${OPEN_EXCHANGE_RATE_APP_ID}
# Bank Sync
- BANKING_CONNECT=${BANKING_CONNECT}
# Plaid
- PLAID_ENV=${PLAID_ENV}
- PLAID_CLIENT_ID=${PLAID_CLIENT_ID}
- PLAID_SECRET=${PLAID_SECRET}
- PLAID_LINK_WEBHOOK=${PLAID_LINK_WEBHOOK}
# Lemon Squeez
- LEMONSQUEEZY_API_KEY=${LEMONSQUEEZY_API_KEY}
- LEMONSQUEEZY_STORE_ID=${LEMONSQUEEZY_STORE_ID}
- LEMONSQUEEZY_WEBHOOK_SECRET=${LEMONSQUEEZY_WEBHOOK_SECRET}
- HOSTED_ON_BIGCAPITAL_CLOUD=${HOSTED_ON_BIGCAPITAL_CLOUD}
# New Relic metrics tracking
- NEW_RELIC_DISTRIBUTED_TRACING_ENABLED=${NEW_RELIC_DISTRIBUTED_TRACING_ENABLED}
- NEW_RELIC_LOG=${NEW_RELIC_LOG}
- NEW_RELIC_AI_MONITORING_ENABLED=${NEW_RELIC_AI_MONITORING_ENABLED}
- NEW_RELIC_CUSTOM_INSIGHTS_EVENTS_MAX_SAMPLES_STORED=${NEW_RELIC_CUSTOM_INSIGHTS_EVENTS_MAX_SAMPLES_STORED}
- NEW_RELIC_SPAN_EVENTS_MAX_SAMPLES_STORED=${NEW_RELIC_SPAN_EVENTS_MAX_SAMPLES_STORED}
- NEW_RELIC_LICENSE_KEY=${NEW_RELIC_LICENSE_KEY}
- NEW_RELIC_APP_NAME=${NEW_RELIC_APP_NAME}
# S3
- S3_REGION=${S3_REGION}
- S3_ACCESS_KEY_ID=${S3_ACCESS_KEY_ID}
- S3_SECRET_ACCESS_KEY=${S3_SECRET_ACCESS_KEY}
- S3_ENDPOINT=${S3_ENDPOINT}
- S3_BUCKET=${S3_BUCKET}
mysql:
image: mariadb:10.11
restart: unless-stopped
environment:
- MYSQL_DATABASE=${SYSTEM_DB_NAME}
- MYSQL_USER=${DB_USER}
- MYSQL_PASSWORD=${DB_PASSWORD}
- MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
volumes:
- mysql:/var/lib/mysql
ports:
- '3306'
healthcheck:
test: ["CMD-SHELL", "mysqladmin ping -h localhost -u root -p$$MYSQL_ROOT_PASSWORD || exit 1"]
interval: 10s
timeout: 5s
retries: 5
start_period: 30s
mongo:
image: mongo:7
restart: unless-stopped
ports:
- '27017'
volumes:
- mongo:/data/db
redis:
image: redis:7-alpine
restart: unless-stopped
ports:
- '6379'
volumes:
- redis:/data
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 10s
timeout: 5s
retries: 5
gotenberg:
image: gotenberg/gotenberg:7
restart: unless-stopped
ports:
- '9000'
volumes:
mysql:
name: bigcapital_mysql
driver: local
mongo:
name: bigcapital_mongo
driver: local
redis:
name: bigcapital_redis
driver: local

View File

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" data-icon="bigcapital" width="214" height="37" viewBox="0 0 309.09 42.89"><desc>bigcapital</desc><path d="M56,3.16,61.33,8.5,31.94,37.9l-5.35-5.35Z" fill="#ffffff" fill-rule="evenodd"></path><path d="M29.53,6.94l5.35,5.34L5.49,41.67.14,36.33l15.8-15.8Z" fill="#ffffff" fill-rule="evenodd"></path><path d="M94.36,38.87H79.62v-31H94c6.33,0,10.22,3.15,10.22,8V16a7.22,7.22,0,0,1-4.07,6.69c3.58,1.37,5.8,3.45,5.8,7.61v.09C106,36,101.35,38.87,94.36,38.87Zm3.1-21.81c0-2-1.59-3.19-4.47-3.19H86.26v6.55h6.29c3,0,4.91-1,4.91-3.28Zm1.72,12.39c0-2.08-1.54-3.37-5-3.37H86.26V32.9h8.1c3,0,4.82-1.06,4.82-3.36Z" fill="#ffffff" fill-rule="evenodd"></path><path d="M110.56,12.54v-6h7.08v6Zm.18,26.33V15.15h6.72V38.87Z" fill="#ffffff" fill-rule="evenodd"></path><path d="M134,46a22.55,22.55,0,0,1-10.49-2.47l2.3-5a15.52,15.52,0,0,0,8,2.17c4.61,0,6.78-2.21,6.78-6.46V33.08c-2,2.39-4.16,3.85-7.75,3.85-5.53,0-10.53-4-10.53-11.07v-.09c0-7.08,5.09-11.06,10.53-11.06a9.63,9.63,0,0,1,7.66,3.54v-3.1h6.72V33.52C147.2,42.46,142.78,46,134,46Zm6.6-20.27a5.79,5.79,0,0,0-11.56,0v.09a5.42,5.42,0,0,0,5.76,5.49,5.49,5.49,0,0,0,5.8-5.49Z" fill="#ffffff" fill-rule="evenodd"></path><path d="M164,39.41a12.11,12.11,0,0,1-12.35-12.26v-.09a12.18,12.18,0,0,1,12.44-12.35c4.47,0,7.25,1.5,9.47,4l-4.12,4.43a6.93,6.93,0,0,0-5.4-2.61c-3.36,0-5.75,3-5.75,6.46v.09c0,3.63,2.34,6.55,6,6.55,2.26,0,3.8-1,5.44-2.53l3.94,4A12,12,0,0,1,164,39.41Z" fill="#ffffff" fill-rule="evenodd"></path><path d="M191.51,38.87V36.31a9.15,9.15,0,0,1-7.17,3c-4.47,0-8.15-2.57-8.15-7.26V32c0-5.18,3.94-7.57,9.56-7.57a16.74,16.74,0,0,1,5.8,1V25c0-2.79-1.72-4.34-5.09-4.34a17.57,17.57,0,0,0-6.55,1.28l-1.68-5.13a21,21,0,0,1,9.21-1.9c7.34,0,10.57,3.8,10.57,10.22V38.87Zm.13-9.55a10.3,10.3,0,0,0-4.29-.89c-2.88,0-4.65,1.15-4.65,3.27v.09c0,1.82,1.5,2.88,3.67,2.88,3.15,0,5.27-1.73,5.27-4.16Z" fill="#ffffff" fill-rule="evenodd"></path><path d="M217.49,39.32a9.1,9.1,0,0,1-7.39-3.54V46h-6.73V15.15h6.73v3.41a8.7,8.7,0,0,1,7.39-3.85c5.53,0,10.8,4.34,10.8,12.26v.09C228.29,35,223.11,39.32,217.49,39.32ZM221.56,27c0-3.94-2.66-6.55-5.8-6.55S210,23,210,27v.09c0,3.94,2.61,6.55,5.75,6.55s5.8-2.57,5.8-6.55Z" fill="#ffffff" fill-rule="evenodd"></path><path d="M232.93,12.54v-6H240v6Zm.18,26.33V15.15h6.73V38.87Z" fill="#ffffff" fill-rule="evenodd"></path><path d="M253.73,39.27c-4.11,0-6.9-1.63-6.9-7.12V20.91H244V15.15h2.83V9.09h6.73v6.06h5.57v5.76h-5.57V31c0,1.55.66,2.3,2.16,2.3A6.84,6.84,0,0,0,259,32.5v5.4A9.9,9.9,0,0,1,253.73,39.27Z" fill="#ffffff" fill-rule="evenodd"></path><path d="M277.55,38.87V36.31a9.15,9.15,0,0,1-7.18,3c-4.46,0-8.14-2.57-8.14-7.26V32c0-5.18,3.94-7.57,9.56-7.57a16.74,16.74,0,0,1,5.8,1V25c0-2.79-1.73-4.34-5.09-4.34A17.57,17.57,0,0,0,266,21.92l-1.68-5.13a20.94,20.94,0,0,1,9.2-1.9c7.35,0,10.58,3.8,10.58,10.22V38.87Zm.13-9.55a10.31,10.31,0,0,0-4.3-.89c-2.87,0-4.64,1.15-4.64,3.27v.09c0,1.82,1.5,2.88,3.67,2.88,3.14,0,5.27-1.73,5.27-4.16Z" fill="#ffffff" fill-rule="evenodd"></path><path d="M289.72,38.87V6.57h6.72v32.3Z" fill="#ffffff" fill-rule="evenodd"></path><path d="M302.06,38.87V31.79h7.17v7.08Z" fill="#ffffff" fill-rule="evenodd"></path></svg>

After

Width:  |  Height:  |  Size: 3.1 KiB

View File

@@ -0,0 +1,170 @@
[variables]
main_domain = "${domain}"
base_url = "https://${main_domain}"
# Database configuration
db_user = "bigcapital"
db_password = "${password:32}"
db_root_password = "${password:32}"
db_charset = "utf8mb4"
system_db_name = "bigcapital"
tenant_db_name_prefix = "bigcapital_tenant_"
# JWT Secret
jwt_secret = "${hash:64}"
# Mail configuration (optional - can be left empty)
mail_host = ""
mail_username = ""
mail_password = ""
mail_port = "587"
mail_secure = "false"
mail_from_name = "BigCapital"
mail_from_address = "noreply@${main_domain}"
# Agendash authentication
agendash_auth_user = "admin"
agendash_auth_password = "${password:24}"
# Sign-up configuration
signup_disabled = "false"
signup_allowed_domains = ""
signup_allowed_emails = ""
signup_email_confirmation = "false"
# Gotenberg configuration
gotenberg_url = "http://gotenberg:9000"
gotenberg_docs_url = "http://gotenberg:9000"
# Exchange Rate Service
exchange_rate_service = "openexchangerates"
open_exchange_rate_app_id = ""
# Banking Connect
banking_connect = "false"
# Plaid configuration (optional)
plaid_env = "sandbox"
plaid_client_id = ""
plaid_secret = ""
plaid_link_webhook = ""
# Lemon Squeezy configuration (optional)
lemonsqueezy_api_key = ""
lemonsqueezy_store_id = ""
lemonsqueezy_webhook_secret = ""
hosted_on_bigcapital_cloud = "false"
# New Relic configuration (optional)
new_relic_distributed_tracing_enabled = "false"
new_relic_log = "false"
new_relic_ai_monitoring_enabled = "false"
new_relic_custom_insights_events_max_samples_stored = "10000"
new_relic_span_events_max_samples_stored = "10000"
new_relic_license_key = ""
new_relic_app_name = "BigCapital"
# S3 configuration (optional)
s3_region = ""
s3_access_key_id = ""
s3_secret_access_key = ""
s3_endpoint = ""
s3_bucket = ""
[config]
[[config.domains]]
serviceName = "webapp"
port = 80
host = "${main_domain}"
[config.env]
# Mail
MAIL_HOST = "${mail_host}"
MAIL_USERNAME = "${mail_username}"
MAIL_PASSWORD = "${mail_password}"
MAIL_PORT = "${mail_port}"
MAIL_SECURE = "${mail_secure}"
MAIL_FROM_NAME = "${mail_from_name}"
MAIL_FROM_ADDRESS = "${mail_from_address}"
# Database
DB_HOST = "mysql"
DB_USER = "${db_user}"
DB_PASSWORD = "${db_password}"
DB_CHARSET = "${db_charset}"
# System database
SYSTEM_DB_NAME = "${system_db_name}"
# Tenants databases
TENANT_DB_NAME_PERFIX = "${tenant_db_name_prefix}"
# Authentication
JWT_SECRET = "${jwt_secret}"
# MongoDB
MONGODB_DATABASE_URL = "mongodb://mongo/bigcapital"
# Application
BASE_URL = "${base_url}"
# Agendash
AGENDASH_AUTH_USER = "${agendash_auth_user}"
AGENDASH_AUTH_PASSWORD = "${agendash_auth_password}"
# Sign-up restrictions
SIGNUP_DISABLED = "${signup_disabled}"
SIGNUP_ALLOWED_DOMAINS = "${signup_allowed_domains}"
SIGNUP_ALLOWED_EMAILS = "${signup_allowed_emails}"
# Sign-up email confirmation
SIGNUP_EMAIL_CONFIRMATION = "${signup_email_confirmation}"
# Gotenberg (Pdf generator)
GOTENBERG_URL = "${gotenberg_url}"
GOTENBERG_DOCS_URL = "${gotenberg_docs_url}"
# Exchange Rate
EXCHANGE_RATE_SERVICE = "${exchange_rate_service}"
OPEN_EXCHANGE_RATE_APP_ID = "${open_exchange_rate_app_id}"
# Bank Sync
BANKING_CONNECT = "${banking_connect}"
# Plaid
PLAID_ENV = "${plaid_env}"
PLAID_CLIENT_ID = "${plaid_client_id}"
PLAID_SECRET = "${plaid_secret}"
PLAID_LINK_WEBHOOK = "${plaid_link_webhook}"
# Lemon Squeez
LEMONSQUEEZY_API_KEY = "${lemonsqueezy_api_key}"
LEMONSQUEEZY_STORE_ID = "${lemonsqueezy_store_id}"
LEMONSQUEEZY_WEBHOOK_SECRET = "${lemonsqueezy_webhook_secret}"
HOSTED_ON_BIGCAPITAL_CLOUD = "${hosted_on_bigcapital_cloud}"
# New Relic metrics tracking
NEW_RELIC_DISTRIBUTED_TRACING_ENABLED = "${new_relic_distributed_tracing_enabled}"
NEW_RELIC_LOG = "${new_relic_log}"
NEW_RELIC_AI_MONITORING_ENABLED = "${new_relic_ai_monitoring_enabled}"
NEW_RELIC_CUSTOM_INSIGHTS_EVENTS_MAX_SAMPLES_STORED = "${new_relic_custom_insights_events_max_samples_stored}"
NEW_RELIC_SPAN_EVENTS_MAX_SAMPLES_STORED = "${new_relic_span_events_max_samples_stored}"
NEW_RELIC_LICENSE_KEY = "${new_relic_license_key}"
NEW_RELIC_APP_NAME = "${new_relic_app_name}"
# S3
S3_REGION = "${s3_region}"
S3_ACCESS_KEY_ID = "${s3_access_key_id}"
S3_SECRET_ACCESS_KEY = "${s3_secret_access_key}"
S3_ENDPOINT = "${s3_endpoint}"
S3_BUCKET = "${s3_bucket}"
# MySQL
MYSQL_DATABASE = "${system_db_name}"
MYSQL_USER = "${db_user}"
MYSQL_PASSWORD = "${db_password}"
MYSQL_ROOT_PASSWORD = "${db_root_password}"
[[config.mounts]]

View File

@@ -662,6 +662,26 @@
"alerts"
]
},
{
"id": "bigcapital",
"name": "BigCapital",
"version": "latest",
"description": "BigCapital is a great open source alternative to QuickBooks. A comprehensive accounting and financial management system for businesses.",
"logo": "logo.svg",
"links": {
"github": "https://github.com/bigcapitalhq/bigcapital",
"website": "https://bigcapital.app/",
"docs": "https://github.com/bigcapitalhq/bigcapital"
},
"tags": [
"accounting",
"finance",
"bookkeeping",
"quickbooks",
"erp",
"business"
]
},
{
"id": "blender",
"name": "Blender",