feat: Add new Portainer stacks, setup scripts, and configurations for various services including filebrowser, paperless, and firefly.

This commit is contained in:
2026-02-22 11:53:11 -05:00
commit 33ddf7705e
28 changed files with 1164 additions and 0 deletions

57
firefly/Categories.txt Normal file
View File

@@ -0,0 +1,57 @@
🟦 1. Housing
- Mortgage / Rent
- Property Tax
- Home Insurance
- Utilities (Hydro, Gas, Water)
- Internet
- Home Maintenance
- Furniture & Appliances
2. Transportation
- Fuel
- Public Transit
- Parking
- Car Insurance
- Car Maintenance
- Car Loan / Lease
- Ridesharing (Uber, Lyft)
🟦 3. Food & Dining
- Groceries
- Restaurants
- Coffee Shops
- Takeout / Delivery
🟦 4. Health & Wellness
- Health Insurance
- Dental
- Prescriptions
- Medical Services
- Gym / Fitness
- Therapy / Wellness
🟦 5. Personal & Family
- Clothing
- Personal Care (haircuts, cosmetics)
- Childcare
- School / Education
- Gifts
- Pets
🟦 6. Entertainment & Leisure
- Streaming Services
- Hobbies
- Books & Media
- Events / Tickets
- Travel
🟦 7. Financial
- Bank Fees
- Credit Card Interest
- Investment Contributions
- RRSP / TFSA / RESP
- Accountant / Legal Fees
🟦 8. Business / Work (optional)
- Software Subscriptions
- Office Supplies
- Professional Development
🟦 9. Miscellaneous
- Uncategorized
- Oneoff purchases

View File

@@ -0,0 +1,9 @@
# Define base path
BASE="/volume1/docker/fireflyiii"
# Create folders
mkdir -p "${BASE}/upload" "${BASE}/db"
# Set ownership and permissions
chown -R 1040:65538 "${BASE}"
chmod -R 750 "${BASE}"

45
firefly/dbcommand Normal file
View File

@@ -0,0 +1,45 @@
1uQ$g72*$9Gw4yFs
$2y$10$2OcSKhMVh6fXLVcxJ6gPx.jtJisfX/j5WM5DE8dAhIibH6hZp/2ze
INSERT INTO users (email, password, created_at, updated_at)
VALUES ('jeffcheng@live.ca', '$2y$10$2OcSKhMVh6fXLVcxJ6gPx.jtJisfX/j5WM5DE8dAhIibH6hZp/2ze', NOW(), NOW()
INSERT INTO user_groups (title, created_at, updated_at)
VALUES ('User group for jeffcheng@live.ca', NOW(), NOW());
SELECT id, title FROM user_groups ORDER BY id DESC LIMIT 1;
INSERT INTO user_group_membership (user_id, user_group_id, created_at, updated_at)
VALUES (2, 2, NOW(), NOW());
DROP DATABASE firefly;
CREATE DATABASE firefly CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
MULTIUSER=true
apt UPDATE
apt install mysql-client
mysql -u firefly -p
github token: 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

View File

@@ -0,0 +1,79 @@
#
# The Firefly III Data Importer will ask you for the Firefly III URL and a "Client ID".
# You can generate the Client ID at http://localhost/profile (after registering)
# The Firefly III URL is: http://app:8080
#
# Other URL's will give 500 | Server Error
#
services:
app:
image: fireflyiii/core:latest
hostname: app
container_name: firefly_iii_core
networks:
- firefly_iii
restart: always
volumes:
- /volume1/docker/fireflyiii/upload:/var/www/html/storage/upload
env_file: stack.env
ports:
- '8080:8080'
depends_on:
- db
db:
image: mariadb:lts
hostname: db
container_name: firefly_iii_db
networks:
- firefly_iii
restart: always
env_file: stack.env
volumes:
- /volume1/docker/fireflyiii/db:/var/lib/mysql
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
interval: 5s
timeout: 3s
retries: 10
importer:
image: fireflyiii/data-importer:latest
hostname: importer
restart: always
container_name: firefly_iii_importer
networks:
- firefly_iii
ports:
- '8081:8080'
depends_on:
- app
env_file: stack.env
cron:
#
# To make this work, set STATIC_CRON_TOKEN in your .env file or as an environment variable
# The STATIC_CRON_TOKEN must be *exactly* 32 characters long
# Use this URL for inspiration: https://www.random.org/strings/?num=1&len=32&digits=on&upperalpha=on&loweralpha=on&unique=on&format=html&rnd=new
#
image: alpine
container_name: firefly_iii_cron
restart: always
env_file: stack.env
command: sh -c "
apk add tzdata && \
(ln -fs /usr/share/zoneinfo/$$TZ /etc/localtime || true) && \
echo \"0 3 * * * wget -qO- http://app:8080/api/v1/cron/$$STATIC_CRON_TOKEN;echo\"
| crontab - && \
crond -f -L /dev/stdout"
networks:
- firefly_iii
depends_on:
- app
volumes:
firefly_iii_upload:
firefly_iii_db:
networks:
firefly_iii:
driver: bridge

View File

@@ -0,0 +1,80 @@
{
"version": 3,
"source": "ff3-importer-1.9.1",
"created_at": "2025-12-28T12:02:55-05:00",
"date": "d M Y",
"default_account": 9,
"delimiter": "comma",
"headers": true,
"rules": true,
"skip_form": false,
"add_import_tag": true,
"roles": [
"date_transaction",
"date_process",
"description",
"note",
"_ignore",
"amount_debit",
"amount_foreign",
"_ignore",
"_ignore",
"_ignore",
"_ignore",
"_ignore",
"_ignore",
"_ignore",
"_ignore",
"_ignore"
],
"do_mapping": [
true,
true,
true,
true,
true,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false
],
"mapping": {},
"duplicate_detection_method": "classic",
"ignore_duplicate_lines": false,
"unique_column_index": 0,
"unique_column_type": "internal_reference",
"flow": "file",
"content_type": "csv",
"custom_tag": "Inbox",
"identifier": "0",
"connection": "0",
"ignore_spectre_categories": false,
"grouped_transaction_handling": "",
"use_entire_opposing_address": false,
"map_all_data": true,
"pending_transactions": false,
"access_token": "",
"accounts": {},
"new_accounts": [],
"date_range": "",
"date_range_number": 30,
"date_range_unit": "d",
"date_range_not_after_unit": "",
"date_range_not_after_number": 0,
"date_not_before": "",
"date_not_after": "",
"nordigen_country": "",
"nordigen_bank": "",
"nordigen_requisitions": {},
"nordigen_max_days": "90",
"lunch_flow_api_key": "",
"conversion": false,
"ignore_duplicate_transactions": true
}

165
firefly/stack.env Normal file
View File

@@ -0,0 +1,165 @@
# Firefly III
APP_ENV=production
APP_DEBUG=false
SITE_OWNER=mail@example.com
APP_KEY=cwj06oiSL03ua4auOUj6upS3X92QoSI3
DEFAULT_LANGUAGE=en_US
DEFAULT_LOCALE=equal
TZ=America/Toronto
TRUSTED_PROXIES=
LOG_CHANNEL=stack
APP_LOG_LEVEL=notice
AUDIT_LOG_LEVEL=emergency
AUDIT_LOG_CHANNEL=
PAPERTRAIL_HOST=
PAPERTRAIL_PORT=
DB_CONNECTION=mysql
DB_HOST=db
DB_PORT=3306
DB_DATABASE=firefly
DB_USERNAME=firefly
DB_PASSWORD=m5wyMiU0CeEDmiptcZsCA2DC37Bsa5zH
DB_SOCKET=
MYSQL_USE_SSL=false
MYSQL_SSL_VERIFY_SERVER_CERT=true
MYSQL_SSL_CAPATH=/etc/ssl/certs/
MYSQL_SSL_CA=
MYSQL_SSL_CERT=
MYSQL_SSL_KEY=
MYSQL_SSL_CIPHER=
PGSQL_SSL_MODE=prefer
PGSQL_SSL_ROOT_CERT=null
PGSQL_SSL_CERT=null
PGSQL_SSL_KEY=null
PGSQL_SSL_CRL_FILE=null
PGSQL_SCHEMA=public
CACHE_DRIVER=file
SESSION_DRIVER=file
REDIS_SCHEME=tcp
REDIS_PATH=
REDIS_HOST=127.0.0.1
REDIS_PORT=6379
REDIS_USERNAME=
REDIS_PASSWORD=
REDIS_DB="0"
REDIS_CACHE_DB="1"
COOKIE_PATH="/"
COOKIE_DOMAIN=
COOKIE_SECURE=false
COOKIE_SAMESITE=lax
MAIL_MAILER=log
MAIL_HOST=null
MAIL_PORT=2525
MAIL_FROM=changeme@example.com
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null
MAIL_SENDMAIL_COMMAND=
MAIL_ALLOW_SELF_SIGNED=false
MAIL_VERIFY_PEER=true
MAIL_VERIFY_PEER_NAME=true
MAILGUN_DOMAIN=
MAILGUN_SECRET=
MAILGUN_ENDPOINT=api.mailgun.net
MANDRILL_SECRET=
SPARKPOST_SECRET=
MAILERSEND_API_KEY=
SEND_ERROR_MESSAGE=true
SEND_REPORT_JOURNALS=true
ENABLE_EXTERNAL_MAP=false
ENABLE_EXCHANGE_RATES=false
ENABLE_EXTERNAL_RATES=false
MAP_DEFAULT_LAT=51.983333
MAP_DEFAULT_LONG=5.916667
MAP_DEFAULT_ZOOM=6
VALID_URL_PROTOCOLS=
AUTHENTICATION_GUARD=web
AUTHENTICATION_GUARD_HEADER=REMOTE_USER
AUTHENTICATION_GUARD_EMAIL=
PASSPORT_PRIVATE_KEY=
PASSPORT_PUBLIC_KEY=
CUSTOM_LOGOUT_URL=
DISABLE_FRAME_HEADER=false
DISABLE_CSP_HEADER=false
TRACKER_SITE_ID=
TRACKER_URL=
REPORT_ERRORS_ONLINE=false
ALLOW_WEBHOOKS=false
STATIC_CRON_TOKEN=r6FLbFEYByBXy0kPBJEZzBADjPDYWxtl
DKR_CHECK_SQLITE=true
APP_NAME=FireflyIII
BROADCAST_DRIVER=log
QUEUE_DRIVER=sync
CACHE_PREFIX=firefly
PUSHER_KEY=
IPINFO_TOKEN=
PUSHER_SECRET=
PUSHER_ID=
DEMO_USERNAME=
DEMO_PASSWORD=
USE_RUNNING_BALANCE=false
FIREFLY_III_LAYOUT=v1
QUERY_PARSER_IMPLEMENTATION=new
APP_URL=http://localhost
# Data Importer
FIREFLY_III_URL=http://app:8080
VANITY_URL=http://localhost
FIREFLY_III_ACCESS_TOKEN=
FIREFLY_III_CLIENT_ID=
LUNCH_FLOW_API_KEY=
LUNCH_FLOW_API_URL=https://lunchflow.app/api/v1/
NORDIGEN_ID=
NORDIGEN_KEY=
NORDIGEN_SANDBOX=false
RESPOND_TO_GOCARDLESS_LIMIT=wait
GOCARDLESS_GET_ACCOUNT_DETAILS=false
GOCARDLESS_GET_BALANCE_DETAILS=false
FALLBACK_LOCALE=en_US
SPECTRE_APP_ID=
SPECTRE_SECRET=
SIMPLEFIN_TOKEN=
SIMPLEFIN_DEMO_URL=
SIMPLEFIN_DEMO_TOKEN=
SIMPLEFIN_CONNECTION_TIMEOUT=30
SIMPLEFIN_REQUEST_TIMEOUT=60
SIMPLEFIN_RETRY_ATTEMPTS=3
SIMPLEFIN_RETRY_DELAY=
SIMPLEFIN_MAX_TRANSACTIONS=10000
SIMPLEFIN_DEFAULT_DATE_RANGE=90
SIMPLEFIN_ENABLE_CACHING=true
SIMPLEFIN_CACHE_DURATION=3600
SIMPLEFIN_SMART_EXPENSE_MATCHING=true
SIMPLEFIN_EXPENSE_MATCHING_THRESHOLD=0.7
SIMPLEFIN_AUTO_CREATE_EXPENSE_ACCOUNTS=true
SIMPLEFIN_ENABLE_TRANSACTION_CLUSTERING=true
SIMPLEFIN_CLUSTERING_SIMILARITY_THRESHOLD=0.7
USE_CACHE=true
IGNORE_DUPLICATE_ERRORS=false
IGNORE_NOT_FOUND_TRANSACTIONS=false
AUTO_IMPORT_SECRET=
CAN_POST_AUTOIMPORT=false
CAN_POST_FILES=false
IMPORT_DIR_ALLOWLIST=
FALLBACK_IN_DIR=false
VERIFY_TLS_SECURITY=true
JSON_CONFIGURATION_DIR=
CONNECTION_TIMEOUT=31.41
LOG_RETURN_JSON=false
LOG_LEVEL=debug
ENABLE_MAIL_REPORT=false
EXPECT_SECURE_URL=false
FAKE_DATA=false
MAIL_DESTINATION=noreply@example.com
MAIL_FROM_ADDRESS=noreply@example.com
POSTMARK_TOKEN=
QUEUE_CONNECTION=sync
SESSION_LIFETIME=120
IS_EXTERNAL=false
ASSET_URL=
# Database
MYSQL_RANDOM_ROOT_PASSWORD=yes
MYSQL_USER=firefly
MYSQL_PASSWORD=m5wyMiU0CeEDmiptcZsCA2DC37Bsa5zH
MYSQL_DATABASE=firefly