feat: Add new Portainer stacks, setup scripts, and configurations for various services including filebrowser, paperless, and firefly.
This commit is contained in:
11
audiobookshelf/create_audiobookshelf_folders.sh
Normal file
11
audiobookshelf/create_audiobookshelf_folders.sh
Normal file
@@ -0,0 +1,11 @@
|
||||
# Define base path
|
||||
BASE="/volume1/docker/audiobookshelf"
|
||||
MEDIABASE="/volume1/media"
|
||||
|
||||
# Create folders
|
||||
mkdir -p "${BASE}/config" "${BASE}/metadata" "${MEDIABASE}/audiobooks" "${MEDIABASE}/podcasts"
|
||||
|
||||
# Set ownership and permissions
|
||||
chmod -R 750 "${BASE}"
|
||||
chmod -R 750 "${MEDIABASE}/audiobooks"
|
||||
chmod -R 750 "${MEDIABASE}/podcasts"
|
||||
19
audiobookshelf/docker-compose.portainer.yml
Normal file
19
audiobookshelf/docker-compose.portainer.yml
Normal file
@@ -0,0 +1,19 @@
|
||||
version: "3.9"
|
||||
|
||||
services:
|
||||
audiobookshelf:
|
||||
image: ghcr.io/advplyr/audiobookshelf:latest
|
||||
container_name: audiobookshelf
|
||||
restart: unless-stopped
|
||||
#this docker image only works with root
|
||||
ports:
|
||||
- "13378:80"
|
||||
|
||||
environment:
|
||||
- TZ=America/Toronto
|
||||
|
||||
volumes:
|
||||
- /volume1/docker/audiobookshelf/config:/config
|
||||
- /volume1/docker/audiobookshelf/metadata:/metadata
|
||||
- /volume1/media/audiobooks:/audiobooks
|
||||
- /volume1/media/podcasts:/podcasts
|
||||
11
calibrewebautomated/create_calibrewebautomated_folders.sh
Normal file
11
calibrewebautomated/create_calibrewebautomated_folders.sh
Normal file
@@ -0,0 +1,11 @@
|
||||
# Define base path
|
||||
BASE="/volume1/docker/calibre-web-automated"
|
||||
|
||||
# Create folders
|
||||
mkdir -p "${BASE}/config" "${BASE}/plugins"
|
||||
|
||||
# Set ownership and permissions
|
||||
chown -R 1029:65538 "${BASE}"
|
||||
# Set ownership and permissions
|
||||
chmod -R 750 "${BASE}"
|
||||
|
||||
249
calibrewebautomated/kobo/Kobo eReader.conf
Normal file
249
calibrewebautomated/kobo/Kobo eReader.conf
Normal file
@@ -0,0 +1,249 @@
|
||||
[General]
|
||||
DictionaryRecentSearches=generously, hordes, idiosyncrasy, taxidermy, taxidermitry, taxidermist, sacrilegious, savoury, savory, juxtaposed
|
||||
LibraryRecentSearches=unsee, "Life 3.0: Being Human in the Age of Artificial Intelligence"
|
||||
StoreRecentSearches=the chaos machine, the chaos, science fiction, man search for meaning, "Artemis (Andy Weir)", "Project Hail Mary (Andy Weir)", poor economics, poor ecnomics, "The New Jim Crow: Mass Incarceration in the Age of Colorblindness by Michelle Alexander | Conversation Starters (dailyBooks)", "The Ride of a Lifetime (Robert Iger)"
|
||||
|
||||
[ApplicationPreferences]
|
||||
AIRPLANE_MODE=false
|
||||
BookstoreViewVisitCount=2
|
||||
BorrowDialogShown=true
|
||||
CurrentLocale=en
|
||||
DesktopSyncCount=2
|
||||
DictionaryOpenCount=-1
|
||||
DuplicateAnnotationsCleanedUp=true
|
||||
EarliestChangeLog=4.13.12410
|
||||
HomePageViewVisitCount=30
|
||||
IntegratedBrowseDialogShown=true
|
||||
IntegratedBrowseDialogTime=@Variant(\0\0\0\x10\0%\x8a:\x4\xaem\xb1\xff)
|
||||
KoboPlusPromoShown=true
|
||||
LargePrintMode=false
|
||||
LastAffiliateSyncTime=@Variant(\0\0\0\x10\0%\x8d|\0\xf2\x8d<\x2)
|
||||
LastAuthorsListSorter_authorList_=sortByFirstName()
|
||||
LastFTEStep=LOGIN
|
||||
LastLibrarySorter_articles_filterByArticles%28%29=sortByDateAdded()
|
||||
LastLibrarySorter_author_filterByAuthor%28Brian%20Christian%29=sortByNewest()
|
||||
LastLibrarySorter_author_filterByAuthor%28Brian%20W.%20Kernighan%29=sortByNewest()
|
||||
LastLibrarySorter_author_filterByAuthor%28David%20Graeber%29=sortByNewest()
|
||||
LastLibrarySorter_author_filterByAuthor%28Ethan%20Siegel%29=sortByNewest()
|
||||
LastLibrarySorter_author_filterByAuthor%28Jason%20Fung%29=sortByNewest()
|
||||
LastLibrarySorter_author_filterByAuthor%28Kevin%20Horsley%29=sortByNewest()
|
||||
LastLibrarySorter_author_filterByAuthor%28Monty%20Lyman%29=sortByNewest()
|
||||
LastLibrarySorter_author_filterByAuthor%28Nassim%20Nicholas%20Taleb%29=sortByNewest()
|
||||
LastLibrarySorter_author_filterByAuthor%28PhD%29=sortByNewest()
|
||||
LastLibrarySorter_author_filterByAuthor%28Richard%20Dawkins%29=sortByNewest()
|
||||
LastLibrarySorter_author_filterByAuthor%28Robert%20Iger%29=sortByNewest()
|
||||
LastLibrarySorter_author_filterByAuthor%28Simon%20Winchester%29=sortByNewest()
|
||||
LastLibrarySorter_author_filterByAuthor%28the%20free%29=sortByNewest()
|
||||
LastLibrarySorter_books_filterByAllItems%28%29=sortByNewest()
|
||||
LastLibrarySorter_series_filterBySeries%285890ad21-74d9-5c72-a9f7-81d8523c33aa%29=sortByBookNumber()
|
||||
LastLibrarySorter_series_filterBySeries%28fa6daece-c358-5efe-82ff-c860dca7fa96%29=sortByBookNumber()
|
||||
LastLibrarySorter_shelf_filterByBookshelf%28Incerto%29=sortByNewest()
|
||||
LastLibrarySorter_shelf_filterByBookshelf%28Kobo%20Forma%29=sortByNewest()
|
||||
LastLibrarySorter_shelf_filterByBookshelf%28Kobo%29=sortByNewest()
|
||||
LastLibrarySorter_shelf_filterByBookshelf%28Oakville%20Library%29=sortByNewest()
|
||||
LastLibrarySorter_shelf_filterByBookshelf%28Photography%29=sortByNewest()
|
||||
LastLibrarySubFilter_ManageBooks_filterByAllItems%28%29=
|
||||
LastLibrarySubFilter_articles_filterByArticles%28%29=
|
||||
LastLibrarySubFilter_author_filterByAuthor%28Brian%20Christian%29=
|
||||
LastLibrarySubFilter_author_filterByAuthor%28Brian%20W.%20Kernighan%29=
|
||||
LastLibrarySubFilter_author_filterByAuthor%28David%20Graeber%29=
|
||||
LastLibrarySubFilter_author_filterByAuthor%28Ethan%20Siegel%29=
|
||||
LastLibrarySubFilter_author_filterByAuthor%28Jason%20Fung%29=
|
||||
LastLibrarySubFilter_author_filterByAuthor%28Kevin%20Horsley%29=
|
||||
LastLibrarySubFilter_author_filterByAuthor%28Monty%20Lyman%29=
|
||||
LastLibrarySubFilter_author_filterByAuthor%28Nassim%20Nicholas%20Taleb%29=
|
||||
LastLibrarySubFilter_author_filterByAuthor%28PhD%29=
|
||||
LastLibrarySubFilter_author_filterByAuthor%28Richard%20Dawkins%29=
|
||||
LastLibrarySubFilter_author_filterByAuthor%28Robert%20Iger%29=
|
||||
LastLibrarySubFilter_author_filterByAuthor%28Simon%20Winchester%29=
|
||||
LastLibrarySubFilter_author_filterByAuthor%28the%20free%29=
|
||||
LastLibrarySubFilter_books_filterByAllItems%28%29=
|
||||
LastLibrarySubFilter_series_filterBySeries%285890ad21-74d9-5c72-a9f7-81d8523c33aa%29=
|
||||
LastLibrarySubFilter_series_filterBySeries%28fa6daece-c358-5efe-82ff-c860dca7fa96%29=
|
||||
LastLibrarySubFilter_shelf_filterByBookshelf%28Incerto%29=
|
||||
LastLibrarySubFilter_shelf_filterByBookshelf%28Kobo%20Forma%29=
|
||||
LastLibrarySubFilter_shelf_filterByBookshelf%28Kobo%29=
|
||||
LastLibrarySubFilter_shelf_filterByBookshelf%28Oakville%20Library%29=
|
||||
LastLibrarySubFilter_shelf_filterByBookshelf%28Photography%29=
|
||||
LastLibraryTab=Collections
|
||||
LastLibraryViewType_articles=viewBy3x3ArticleGrid()
|
||||
LastLibraryViewType_author=viewBy5List()
|
||||
LastLibraryViewType_books=viewBy5List()
|
||||
LastLibraryViewType_series=viewBy5List()
|
||||
LastLibraryViewType_seriesList=viewBy5List()
|
||||
LastLibraryViewType_shelf=viewBy5Shelf()
|
||||
LastManageBooksSorter_ManageBooks_filterByAllItems%28%29=sortByNewest()
|
||||
LastMostPopularSyncTime=@Variant(\0\0\0\x10\0%\x8d|\x3\x9b\x45L\x2)
|
||||
LastSearchType_Home=Library
|
||||
LastSearchType_Library=Dictionary
|
||||
LastSearchType_ReadingView=Dictionary
|
||||
LastSearchType_Store=OverDrive
|
||||
LastSeriesListSorter_seriesList_=sortByRecent()
|
||||
LastShelfListSorter_shelfList_=sortByShelfName()
|
||||
LastShelfListSorter_shelfList_filterByAddToShelf=sortByShelfName()
|
||||
LastShelfSorter_books_filterByAllItems%28%29=sortByNewest()
|
||||
LastSimilarLibrarySorter_books_filterByAllItems%28%29=sortByNewest()
|
||||
LastStoreTab=eBooks
|
||||
LastSyncTime=@Variant(\0\0\0\x10\0%\x8d|\x3\x9f\x13\xe3\x2)
|
||||
LastTopPicksSyncTime=@Variant(\0\0\0\x10\0%\x8d|\0\xf3w\xe9\x2)
|
||||
LastUpdateCheckTime=@Variant(\0\0\0\x10\0%\x8d|\x3\x9b\x37\xae\x2)
|
||||
LibraryCuratedListsDialogShown=true
|
||||
LibraryViewVisitCount=30
|
||||
LongPressDialogShown=true
|
||||
MarkAsFinishedLastShown=@Variant(\0\0\0\x10\0%\x8c\xc1\x1\xe8p\xcf\xff)
|
||||
MarkAsUnreadLastShown=@Variant(\0\0\0\x10\0%\x8b\xf1\x3\x41\xddM\xff)
|
||||
MostRecentReadID=99a8b0c9-94cd-400d-bef1-2b3fdb4a2cb7
|
||||
OverDriveExpiryDialogShown=true
|
||||
OverDriveFilterShown=true
|
||||
OverDriveHoldListSorter_overDriveHoldList_=sortByEstimatedWait()
|
||||
QuickTourWidgetShown=true
|
||||
ReadABookShown2=true
|
||||
ReadingSettingsChanged=true
|
||||
SearchResultsviewVisitCount=2
|
||||
SignInTime=@Variant(\0\0\0\x10\0%\x8a:\x4\xa6\n:\xff)
|
||||
SmartLink_%05=3
|
||||
SmartLink_%06=3
|
||||
SmartLink_%07=3
|
||||
SmartLink_%08=404
|
||||
StylusTipWarning=true
|
||||
SubscriptionPlanAbTestEnabled=true
|
||||
SwipeDialogShown=true
|
||||
VisitedFrontLightLearnMore=true
|
||||
WifiRegulatoryDomain=CA
|
||||
WifiReminderDialogShown=true
|
||||
firstRotateDone=true
|
||||
firstRunDate=@Variant(\0\0\0\x10\0%\x84\xd3\x4\x3\xb5\x92\x2)
|
||||
hasSyncedExistingRelatedItems=true
|
||||
lastPlugTime=@Variant(\0\0\0\x10\0%\x8d|\0\xf4\x16\xe3\x2)
|
||||
lockedOrientation=5
|
||||
sleepOnNextBoot=false
|
||||
syncOnNextBoot=false
|
||||
|
||||
[Browser]
|
||||
certExceptions=@Variant(\0\0\0\x1c\0\0\0\x2\0\0\0\x32\0s\0\x65\0r\0v\0i\0\x63\0\x65\0.\0m\0\x61\0x\0y\0m\0i\0s\0\x65\0r\0.\0n\0\x65\0t\0:\0\x34\0\x34\0\x33\0\0\0\f\0\0\0 [\x81P\xc8\xd0:0\x86\x43\xe1t4\x8a`B\xb1\xee\xf2{\xa4]\xda}\xfe\xad\xb3\x65\x96\x33\xb2\x89\x9d\0\0\0$\0w\0w\0w\0.\0h\0i\0l\0t\0o\0n\0.\0\x63\0o\0m\0:\0\x34\0\x34\0\x33\0\0\0\f\0\0\0 [\x81P\xc8\xd0:0\x86\x43\xe1t4\x8a`B\xb1\xee\xf2{\xa4]\xda}\xfe\xad\xb3\x65\x96\x33\xb2\x89\x9d)
|
||||
|
||||
[DialogSettings]
|
||||
InstapaperJitShown=true
|
||||
ReleaseNotesShown=true
|
||||
ReturningReaderDialogShown=true
|
||||
|
||||
[DropboxSettings]
|
||||
AccessToken=G8wEe4GjZ0cAAAAAAAAa0CEDDyC4crP51r89PTM_XzhanzFFEUqsTgQAArJSVym6
|
||||
SortType=sortByModifiedDate()
|
||||
UserGuideId=id:4gkVQTWkSR8AAAAAAAAMqA
|
||||
Username=jianfeng.cheng@gmail.com
|
||||
|
||||
[FeatureSettings]
|
||||
ExcludeSyncFolders=(\\.(?!kobo|adobe).+|([^.][^/]*/)+\\..+)
|
||||
|
||||
[OneStoreServices]
|
||||
account_page=https://www.kobo.com/account/settings
|
||||
account_page_rakuten=https://my.rakuten.co.jp/
|
||||
annotations_host=https://annotations.kobo.com
|
||||
api_endpoint=http://10.168.168.5:8083/kobo/4020539f4c3a97748766f2895cd717a9
|
||||
autocomplete=https://storeapi.kobo.com/v1/products/autocomplete
|
||||
book=https://storeapi.kobo.com/v1/products/books/{ProductId}
|
||||
book_detail_page=https://www.kobo.com/{region}/{language}/ebook/{slug}
|
||||
book_detail_page_rakuten=http://books.rakuten.co.jp/rk/{crossrevisionid}
|
||||
book_landing_page=https://www.kobo.com/ebooks
|
||||
categories=https://storeapi.kobo.com/v1/categories
|
||||
category=https://storeapi.kobo.com/v1/categories/{CategoryId}
|
||||
category_products=https://storeapi.kobo.com/v1/categories/{CategoryId}/products
|
||||
dictionary_host=https://ereaderfiles.kobo.com
|
||||
discovery_host=https://discovery.kobobooks.com
|
||||
display_accessibility_enabled=
|
||||
display_parental_controls_enabled=
|
||||
dropbox_link_account_poll=
|
||||
eula_page="https://www.kobo.com/termsofuse?style=onestore"
|
||||
featured_list=https://storeapi.kobo.com/v1/products/featured/{FeaturedListId}
|
||||
featured_lists=https://storeapi.kobo.com/v1/products/featured
|
||||
feedback=
|
||||
fte_feedback=https://storeapi.kobo.com/v1/products/ftefeedback
|
||||
googledrive_link_account_start=
|
||||
image_host=http://10.168.168.5:8083
|
||||
image_url_quality_template=http://10.168.168.5:8083/kobo/4020539f4c3a97748766f2895cd717a9/{ImageId}/{width}/{height}/{Quality}/isGreyscale/image.jpg
|
||||
image_url_template=http://10.168.168.5:8083/kobo/4020539f4c3a97748766f2895cd717a9/{ImageId}/{width}/{height}/false/image.jpg
|
||||
instapaper_enabled=
|
||||
instapaper_env_url=
|
||||
instapaper_link_account_start=
|
||||
kobo_audiobooks_credit_redemption=False
|
||||
kobo_audiobooks_enabled=True
|
||||
kobo_dropbox_link_account_enabled=False
|
||||
kobo_googledrive_link_account_enabled=False
|
||||
kobo_nativeborrow_enabled=False
|
||||
kobo_privacyCentre_url=https://www.kobo.com/privacy
|
||||
kobo_redeem_enabled=True
|
||||
kobo_subscriptions_enabled=True
|
||||
kobo_superpoints_enabled=True
|
||||
kobo_wishlist_enabled=True
|
||||
love_data=@ByteArray(\0\0\0\x1\0\0\0\x10\0\x42\0\x65\0n\0\x65\0\x66\0i\0t\0s\0\0\0\b\0\0\0\0\0)
|
||||
love_points_redemption_page="https://www.kobo.com/{region}/{language}/KoboSuperPointsRedemption?productId={ProductId}"
|
||||
magazine_detail_page=
|
||||
magazine_landing_page=https://store.kobobooks.com/emagazines
|
||||
oauth_host=https://oauth.kobo.com
|
||||
password_retrieval_page=https://www.kobo.com/passwordretrieval.html
|
||||
pocket_link_account_start=https://authorize.kobo.com/{region}/{language}/linkpocket
|
||||
privacy_page="https://www.kobo.com/privacypolicy?style=onestore"
|
||||
product_recommendations=https://storeapi.kobo.com/v1/products/{ProductId}/recommendations
|
||||
product_reviews=https://storeapi.kobo.com/v1/products/{ProductIds}/reviews
|
||||
purchase_buy_templated=
|
||||
reading_services_host=https://readingservices.kobo.com
|
||||
registration_page="https://authorize.kobo.com/signup?returnUrl=http://kobo.com/"
|
||||
review=https://storeapi.kobo.com/v1/products/reviews/{ReviewId}
|
||||
review_sentiment=https://storeapi.kobo.com/v1/products/reviews/{ReviewId}/sentiment/{Sentiment}
|
||||
sign_in_page="https://authorize.kobo.com/signin?returnUrl=http://kobo.com/"
|
||||
social_authorization_host=https://social.kobobooks.com:8443
|
||||
social_host=https://social.kobobooks.com
|
||||
store_home=www.kobo.com/{region}/{language}
|
||||
store_host=www.kobo.com
|
||||
store_search="https://www.kobo.com/{region}/{language}/Search?Query={query}"
|
||||
subs_landing_page=https://www.kobo.com/{region}/{language}/plus
|
||||
subs_management_page=https://www.kobo.com/{region}/{language}/account/subscriptions
|
||||
subs_plans_page=https://www.kobo.com/{region}/{language}/plus/plans
|
||||
subs_purchase_buy_templated=https://www.kobo.com/{region}/{language}/Checkoutoption/{ProductId}/{TierId}
|
||||
subscription_publisher_price_page=
|
||||
taste_profile=https://storeapi.kobo.com/v1/products/tasteprofile
|
||||
user_ratings=https://storeapi.kobo.com/v1/user/ratings
|
||||
user_recommendations=https://storeapi.kobo.com/v1/user/recommendations
|
||||
user_reviews=https://storeapi.kobo.com/v1/user/reviews
|
||||
userguide_host=https://ereaderfiles.kobo.com
|
||||
|
||||
[OverDrive]
|
||||
overdrive_account=https://auth.overdrive.com/account
|
||||
overdrive_library=https://{libraryKey}.auth.overdrive.com/library
|
||||
overdrive_library_finder_host=https://libraryfinder.api.overdrive.com
|
||||
overdrive_thunder_host=https://thunder.api.overdrive.com
|
||||
|
||||
[PowerOptions]
|
||||
AutoColorEnabled=true
|
||||
BedTime=@Variant(\0\0\0\xf\x4\xefm\x80)
|
||||
ColorSetting=2480
|
||||
FrontLightLevel=29
|
||||
|
||||
[Reading]
|
||||
chapterProgressType=3
|
||||
deleteVolumeOnFinished=true
|
||||
invertPageTurnButtons=false
|
||||
newBookProgressType=0
|
||||
numPartialUpdatePageTurns=1
|
||||
readingAdobeShowPageNumbers=false
|
||||
readingAlignment=
|
||||
readingFontFamily=Amazon Ember
|
||||
readingFontSharpness\AR%20UDJingxihei=-0.0666666666666667
|
||||
readingFontSharpness\Bookerly=-0.0666666666666667
|
||||
readingFontSharpness\KBJ-TsukuMin%20Pr6N%20RB=-0.28
|
||||
readingFontSharpness\SonyReader%20Kai=-0.0666666666666667
|
||||
readingFontSize=21
|
||||
readingFontWeight\AR%20UDJingxihei=0.1
|
||||
readingFontWeight\Bookerly=0.1
|
||||
readingFontWeight\KBJ-TsukuMin%20Pr6N%20RB=-0.11
|
||||
readingFontWeight\SonyReader%20Kai=0.1
|
||||
readingLeftMargin=2
|
||||
readingLineHeight=1.2
|
||||
readingMenuState=
|
||||
readingRightMargin=2
|
||||
|
||||
[ReadingLife]
|
||||
LastActivityNavItem=1
|
||||
LastReadingLifeSyncTime=@Variant(\0\0\0\x10\0%\x87-\x1\xd1\x38-\x2)
|
||||
LastSocialAnnotationsSyncTime=@Variant(\0\0\0\x10\0%\x86~\x2H\xc2\xb0\x2)
|
||||
9
calibrewebautomated/kobo/tmp
Normal file
9
calibrewebautomated/kobo/tmp
Normal file
@@ -0,0 +1,9 @@
|
||||
sqlite3 /config/app.db "SELECT * FROM kobo;"
|
||||
|
||||
|
||||
|
||||
http://10.168.168.5:8083/kobo/sync
|
||||
http://10.168.168.5:8083/kobo
|
||||
http://10.168.168.5:8083/kobo/0
|
||||
http://10.168.168.5:8083/kobo/device
|
||||
|
||||
6
cloudflared/cloudflared/cert.pem
Normal file
6
cloudflared/cloudflared/cert.pem
Normal file
@@ -0,0 +1,6 @@
|
||||
-----BEGIN ARGO TUNNEL TOKEN-----
|
||||
eyJ6b25lSUQiOiI3ZGY4MWRkMzM4NGI2MDU3ODBkZGYzZGNjYmQyOTI5MCIsImFj
|
||||
Y291bnRJRCI6IjJmZWIxMWZkZDlmYTczYTJhYjQ4MDUyMjM4NmJkNzM1IiwiYXBp
|
||||
VG9rZW4iOiJESmxwNFR3RzVUZlJUZlFRdmdwdlZZdUxodVI4cEhiXzNUVk9xeFJL
|
||||
In0=
|
||||
-----END ARGO TUNNEL TOKEN-----
|
||||
43
cloudflared/commands.sh
Normal file
43
cloudflared/commands.sh
Normal file
@@ -0,0 +1,43 @@
|
||||
#cloudflare API token
|
||||
# AutoUpdateIP WhAIOCeGjws2IFCD32BJn1r8TS1M8SWeGbEYVuVc
|
||||
|
||||
curl "https://api.cloudflare.com/client/v4/user/tokens/verify" \
|
||||
-H "Authorization: Bearer WhAIOCeGjws2IFCD32BJn1r8TS1M8SWeGbEYVuVc"
|
||||
|
||||
#allow ping in cloudflared
|
||||
sudo sysctl -w net.ipv4.ping_group_range="0 65535"
|
||||
|
||||
|
||||
sudo mkdir -p /etc/sysctl.d
|
||||
echo "net.ipv4.ping_group_range = 0 65535" | sudo tee /etc/sysctl.d/99-cloudflared.conf
|
||||
|
||||
|
||||
|
||||
docker exec cloudflare-tunnel tunnel create nas-tunnel
|
||||
|
||||
|
||||
|
||||
docker run -it --rm -v /volume1/docker/cloudflared:/etc/cloudflared cloudflare-tunnel tunnel login
|
||||
|
||||
|
||||
docker run -it --rm \
|
||||
-v /volume1/docker/cloudflared:/etc/cloudflared \
|
||||
cloudflare/cloudflared:latest tunnel login
|
||||
|
||||
|
||||
# tunnel uuid fb59f081-ac72-4fd9-bad3-9211b931d5e5
|
||||
|
||||
|
||||
|
||||
docker stop cloudflare-tunnel
|
||||
docker rm cloudflare-tunnel
|
||||
|
||||
docker run -it --rm \
|
||||
-v /volume1/docker/cloudflared:/root/.cloudflared \
|
||||
-v /volume1/docker/cloudflared/etc:/etc/cloudflared \
|
||||
cloudflare/cloudflared:latest tunnel login
|
||||
|
||||
|
||||
docker run -it --rm \
|
||||
-v /volume1/docker/cloudflared:/root/.cloudflared \
|
||||
cloudflare/cloudflared:latest tunnel token nas
|
||||
20
cloudflared/create_cloudflared_folders.sh
Normal file
20
cloudflared/create_cloudflared_folders.sh
Normal file
@@ -0,0 +1,20 @@
|
||||
# Define base path
|
||||
BASE="/volume1/docker/cloudflared"
|
||||
|
||||
# Create folders
|
||||
mkdir -p "${BASE}/etc"
|
||||
|
||||
# Set ownership and permissions
|
||||
chown -R 1037:65538 "${BASE}"
|
||||
chmod -R 750 "${BASE}"
|
||||
|
||||
|
||||
# Define base path
|
||||
BASE="/volume1/docker/ddns-updater"
|
||||
|
||||
# Create folders
|
||||
mkdir -p "${BASE}"
|
||||
|
||||
# Set ownership and permissions
|
||||
chown -R 1037:65538 "${BASE}"
|
||||
chmod -R 750 "${BASE}"
|
||||
14
cloudflared/ddns-updater/config.json
Normal file
14
cloudflared/ddns-updater/config.json
Normal file
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"settings": [
|
||||
{
|
||||
"provider": "cloudflare",
|
||||
"zone_identifier": "7df81dd3384b605780ddf3dccbd29290",
|
||||
"domain": "chengs.uk",
|
||||
"host": "@",
|
||||
"ttl": 600,
|
||||
"proxied": true,
|
||||
"token": "WhAIOCeGjws2IFCD32BJn1r8TS1M8SWeGbEYVuVc",
|
||||
"ip_version": "ipv4"
|
||||
}
|
||||
]
|
||||
}
|
||||
0
cloudflared/ddns-updater/updates.json
Normal file
0
cloudflared/ddns-updater/updates.json
Normal file
96
cloudflared/docker-compose.portainer.yml
Normal file
96
cloudflared/docker-compose.portainer.yml
Normal file
@@ -0,0 +1,96 @@
|
||||
# Docker Compose configuration for setting up a Cloudflare Tunnel container
|
||||
#
|
||||
# This configuration pulls the latest Cloudflare Tunnel image from the specified repository
|
||||
# and includes options for logging, automatic updates using Watchtower, health checks, and volume mounting.
|
||||
|
||||
services:
|
||||
|
||||
# Cloudflare Tunnel Service
|
||||
cloudflare-tunnel:
|
||||
image: cloudflare/cloudflared:latest # Pull the latest version of the Cloudflare Tunnel image
|
||||
container_name: cloudflare-tunnel # Name of the Cloudflare Tunnel container
|
||||
hostname: cloudflare-tunnel # Hostname for the Cloudflare Tunnel container
|
||||
|
||||
user: root
|
||||
|
||||
restart: unless-stopped # Restart the container unless manually stopped
|
||||
|
||||
# Logging configuration for Cloudflare Tunnel container
|
||||
logging:
|
||||
driver: "json-file" # Use the default json-file logging driver
|
||||
options:
|
||||
max-size: "100m" # Maximum log file size before rotation (100 MB)
|
||||
max-file: "10" # Maximum number of log files to retain (10)
|
||||
|
||||
# Network mode configuration
|
||||
network_mode: "host" # Use the host network (no isolation between host and container)
|
||||
|
||||
# Command to run Cloudflare Tunnel
|
||||
command: 'tunnel --no-autoupdate run' # Command to start the Cloudflare tunnel
|
||||
|
||||
# Volume configuration for time synchronization and hosts file persistence
|
||||
volumes:
|
||||
- /etc/localtime:/etc/localtime:ro # Synchronize time with the host
|
||||
- /volume1/docker/cloudflared:/root/.cloudflared
|
||||
- /volume1/docker/cloudflared/etc:/etc/cloudflared
|
||||
|
||||
#- ./config/hosts:/etc/hosts # Mount hosts file from host to container
|
||||
|
||||
# Environment variables for Cloudflare Tunnel
|
||||
# cloudflared.exe service install eyJhIjoiMmZlYjExZmRkOWZhNzNhMmFiNDgwNTIyMzg2YmQ3MzUiLCJ0IjoiZmI1OWYwODEtYWM3Mi00ZmQ5LWJhZDMtOTIxMWI5MzFkNWU1IiwicyI6IllqWXdaVFEyTURrdFpHVXpPUzAwTnpNMkxUazJPREl0T0RGak9UZ3dOelV3Tm1ZeCJ9
|
||||
environment:
|
||||
- NO_AUTOUPDATE=true
|
||||
- "TUNNEL_TOKEN=${CLOUDFLARE_TUNNEL_TOKEN}" # Pass the Cloudflare Tunnel token from environment variable
|
||||
|
||||
# Health check configuration to verify Cloudflare Tunnel readiness
|
||||
healthcheck:
|
||||
test: ["CMD", "cloudflared", "--version"] # Check if cloudflared version command works
|
||||
interval: 30s # Time between health check attempts
|
||||
timeout: 10s # Time to wait for a response
|
||||
retries: 3 # Number of retries before marking as unhealthy
|
||||
start_period: 10s # Delay before health checks begin
|
||||
|
||||
# Container labels for additional metadata
|
||||
labels:
|
||||
- "com.centurylinklabs.watchtower.enable=true" # Enable automatic updates with Watchtower
|
||||
|
||||
|
||||
#
|
||||
####################################################
|
||||
# #
|
||||
# -------DDNS-Updater------- #
|
||||
# #
|
||||
####################################################
|
||||
#
|
||||
ddns-updater:
|
||||
container_name: ddns-updater
|
||||
restart: always
|
||||
hostname: ddns-updater
|
||||
environment:
|
||||
- TZ=America/Toronto
|
||||
- PUID=$PUID
|
||||
- PGID=$PGID
|
||||
- PERIOD=5m
|
||||
- UPDATE_COOLDOWN_PERIOD=5m
|
||||
- PUBLICIP_FETCHERS=all
|
||||
- PUBLICIP_HTTP_PROVIDERS=all
|
||||
- PUBLICIPV4_HTTP_PROVIDERS=all
|
||||
- PUBLICIPV6_HTTP_PROVIDERS=all
|
||||
- PUBLICIP_DNS_PROVIDERS=all
|
||||
- PUBLICIP_DNS_TIMEOUT=3s
|
||||
- HTTP_TIMEOUT=10s
|
||||
- LISTENING_PORT=8000
|
||||
- HEALTH_SERVER_ADDRESS=127.0.0.1:9999
|
||||
- ROOT_URL=/
|
||||
- BACKUP_PERIOD=24h # 0 to disable
|
||||
- BACKUP_DIRECTORY=/updater/data
|
||||
- LOG_LEVEL=info
|
||||
- LOG_CALLER=hidden
|
||||
- SHOUTRRR_ADDRESSES=pushover://shoutrrr:$PUSHOVER_API@$PUSHOVER_USER_KEY
|
||||
volumes:
|
||||
- /volume1/docker/ddns-updater:/updater/data
|
||||
ports:
|
||||
- 8002:8000/tcp
|
||||
user: $PUID:$PGID
|
||||
image: 'qmcgaw/ddns-updater:latest'
|
||||
#
|
||||
35
coding/docker-compose.portainer.yml
Normal file
35
coding/docker-compose.portainer.yml
Normal file
@@ -0,0 +1,35 @@
|
||||
version: "3.9"
|
||||
|
||||
services:
|
||||
openvscode:
|
||||
image: ghcr.io/gitpod-io/openvscode-server:latest
|
||||
container_name: openvscode
|
||||
restart: unless-stopped
|
||||
|
||||
# Expose the web IDE
|
||||
ports:
|
||||
- "3000:3000"
|
||||
|
||||
# Persist extensions, settings, and workspace files
|
||||
volumes:
|
||||
- /volume1/docker/openvscode/config:/home/workspace/.openvscode-server
|
||||
- /volume1/docker/openvscode/projects:/home/workspace/projects
|
||||
|
||||
# Optional: mount SSH keys for Gitea access
|
||||
# Make sure permissions are correct (600)
|
||||
# volumes:
|
||||
# - /volume1/docker/ssh/id_rsa:/home/workspace/.ssh/id_rsa:ro
|
||||
# - /volume1/docker/ssh/known_hosts:/home/workspace/.ssh/known_hosts:ro
|
||||
|
||||
environment:
|
||||
# Ensures the server listens on all interfaces
|
||||
OPENVSCODE_SERVER_HOST: "0.0.0.0"
|
||||
OPENVSCODE_SERVER_PORT: "3000"
|
||||
|
||||
# Optional: put it on a shared network for Cloudflared or Traefik
|
||||
networks:
|
||||
- openvscode_net
|
||||
|
||||
networks:
|
||||
openvscode_net:
|
||||
driver: bridge
|
||||
11
diagram/docker-compose.portainer.yml
Normal file
11
diagram/docker-compose.portainer.yml
Normal file
@@ -0,0 +1,11 @@
|
||||
services:
|
||||
vert:
|
||||
container_name: vert
|
||||
image: ghcr.io/vert-sh/vert:latest
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- 3002:80
|
||||
environment:
|
||||
- USER_UID=1039
|
||||
- USER_GID=65538
|
||||
- TZ=America/Toronto
|
||||
18
filebrowser/create_filebrowser_folders.sh
Normal file
18
filebrowser/create_filebrowser_folders.sh
Normal file
@@ -0,0 +1,18 @@
|
||||
# Define base path
|
||||
BASE="/volume1/docker/filebrowser"
|
||||
|
||||
# Create folders
|
||||
mkdir -p "${BASE}/config" "${BASE}/database" "${BASE}/data"
|
||||
|
||||
# Set ownership and permissions
|
||||
chown -R 1042:65538 "${BASE}"
|
||||
chmod -R 750 "${BASE}"
|
||||
|
||||
touch "${BASE}/config/settings.json"
|
||||
chown 1042:65538 "${BASE}/config/settings.json"
|
||||
chmod 640 "${BASE}/config/settings.json"
|
||||
|
||||
|
||||
touch "${BASE}/database/filebroser.db"
|
||||
chown 1042:65538 "${BASE}/database/filebroser.db"
|
||||
chmod 640 "${BASE}/database/filebroser.db"
|
||||
16
filebrowser/docker-compose.portainer.yml
Normal file
16
filebrowser/docker-compose.portainer.yml
Normal file
@@ -0,0 +1,16 @@
|
||||
|
||||
version: "3"
|
||||
|
||||
services:
|
||||
filebrowser:
|
||||
image: hurlenko/filebrowser
|
||||
user: "1042:65538"
|
||||
container_name: filebrowser
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- 3020:8080
|
||||
volumes:
|
||||
- /volume1/docker/filebrowser/data:/data
|
||||
- /volume1/docker/filebrowser/config:/config
|
||||
environment:
|
||||
- FB_BASEURL=/filebrowser
|
||||
57
firefly/Categories.txt
Normal file
57
firefly/Categories.txt
Normal 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
|
||||
- Ride‑sharing (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
|
||||
- One‑off purchases
|
||||
|
||||
|
||||
9
firefly/create_fireflyiii_folders.sh
Normal file
9
firefly/create_fireflyiii_folders.sh
Normal 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
45
firefly/dbcommand
Normal 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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
|
||||
79
firefly/docker-compose.portainer.yml
Normal file
79
firefly/docker-compose.portainer.yml
Normal 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
|
||||
80
firefly/import_settings/americanexpress.json
Normal file
80
firefly/import_settings/americanexpress.json
Normal 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
165
firefly/stack.env
Normal 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
|
||||
10
obsidian/create_obsidian_folders.sh
Normal file
10
obsidian/create_obsidian_folders.sh
Normal file
@@ -0,0 +1,10 @@
|
||||
# Define base path
|
||||
BASE="/volume1/docker/obsidian"
|
||||
|
||||
# Create folders
|
||||
mkdir -p "${BASE}/config"
|
||||
|
||||
# Set ownership and permissions
|
||||
chown -R 1038:65538 "${BASE}"
|
||||
chmod -R 750 "${BASE}"
|
||||
chmod -R 770 "${BASE}/config"
|
||||
16
obsidian/docker-composer.portainer.yml
Normal file
16
obsidian/docker-composer.portainer.yml
Normal file
@@ -0,0 +1,16 @@
|
||||
---
|
||||
services:
|
||||
obsidian:
|
||||
image: lscr.io/linuxserver/obsidian:latest
|
||||
container_name: obsidian
|
||||
environment:
|
||||
- PUID=1038
|
||||
- PGID=65538
|
||||
- TZ=America/Toronto
|
||||
volumes:
|
||||
- /volume1/docker/obsidian/config:/config
|
||||
ports:
|
||||
- 3010:3000
|
||||
- 3011:3001
|
||||
shm_size: "1gb"
|
||||
restart: unless-stopped
|
||||
10
paperless/create_paperless_folders.sh
Normal file
10
paperless/create_paperless_folders.sh
Normal file
@@ -0,0 +1,10 @@
|
||||
# Define base path
|
||||
BASE="/volume1/docker/paperless"
|
||||
|
||||
# Create folders
|
||||
mkdir -p "${BASE}/data" "${BASE}/media" "${BASE}/export" "${BASE}/consume" "${BASE}/redisdata"
|
||||
|
||||
# Set ownership and permissions
|
||||
chown -R 1036:65538 "${BASE}"
|
||||
chmod -R 750 "${BASE}"
|
||||
chmod -R 770 "${BASE}/consume"
|
||||
42
paperless/docker-compose.env
Normal file
42
paperless/docker-compose.env
Normal file
@@ -0,0 +1,42 @@
|
||||
###############################################################################
|
||||
# Paperless-ngx settings #
|
||||
###############################################################################
|
||||
|
||||
# See http://docs.paperless-ngx.com/configuration/ for all available options.
|
||||
|
||||
# The UID and GID of the user used to run paperless in the container. Set this
|
||||
# to your UID and GID on the host so that you have write access to the
|
||||
# consumption directory.
|
||||
USERMAP_UID=1036
|
||||
USERMAP_GID=65538
|
||||
|
||||
# See the documentation linked above for all options. A few commonly adjusted settings
|
||||
# are provided below.
|
||||
|
||||
# This is required if you will be exposing Paperless-ngx on a public domain
|
||||
# (if doing so please consider security measures such as reverse proxy)
|
||||
#PAPERLESS_URL=https://paperless.example.com
|
||||
|
||||
# Adjust this key if you plan to make paperless available publicly. It should
|
||||
# be a very long sequence of random characters. You don't need to remember it.
|
||||
PAPERLESS_SECRET_KEY=CHzeaKbF7ZRpkaQT2rnVZUPpBF7KpUQiymVOuVLtdGACUS1h
|
||||
|
||||
# Use this variable to set a timezone for the Paperless Docker containers. Defaults to UTC.
|
||||
PAPERLESS_TIME_ZONE=America/Toronto
|
||||
|
||||
# The default language to use for OCR. Set this to the language most of your
|
||||
# documents are written in.
|
||||
PAPERLESS_OCR_LANGUAGE=eng
|
||||
|
||||
# Additional languages to install for text recognition, separated by a whitespace.
|
||||
# Note that this is different from PAPERLESS_OCR_LANGUAGE (default=eng), which defines
|
||||
# the language used for OCR.
|
||||
# The container installs English, German, Italian, Spanish and French by default.
|
||||
# See https://packages.debian.org/search?keywords=tesseract-ocr-&searchon=names
|
||||
# for available languages.
|
||||
#PAPERLESS_OCR_LANGUAGES=tur ces
|
||||
|
||||
PAPERLESS_ADMIN_USER=admin
|
||||
PAPERLESS_ADMIN_PASSWORD=2pplPtn!
|
||||
|
||||
PAPERLESS_FILENAME_FORMAT=personal/{{ created_year }}/{{ correspondent }}/{{ original_name }}
|
||||
73
paperless/docker-compose.portainer.yml
Normal file
73
paperless/docker-compose.portainer.yml
Normal file
@@ -0,0 +1,73 @@
|
||||
# Docker Compose file for running paperless from the Docker Hub.
|
||||
# This file contains everything paperless needs to run.
|
||||
# Paperless supports amd64, arm and arm64 hardware.
|
||||
#
|
||||
# All compose files of paperless configure paperless in the following way:
|
||||
#
|
||||
# - Paperless is (re)started on system boot, if it was running before shutdown.
|
||||
# - Docker volumes for storing data are managed by Docker.
|
||||
# - Folders for importing and exporting files are created in the same directory
|
||||
# as this file and mounted to the correct folders inside the container.
|
||||
# - Paperless listens on port 8010.
|
||||
#
|
||||
# In addition to that, this Docker Compose file adds the following optional
|
||||
# configurations:
|
||||
#
|
||||
# - Instead of SQLite (default), PostgreSQL is used as the database server.
|
||||
#
|
||||
# To install and update paperless with this file, do the following:
|
||||
#
|
||||
# - Open portainer Stacks list and click 'Add stack'
|
||||
# - Paste the contents of this file and assign a name, e.g. 'paperless'
|
||||
# - Upload 'docker-compose.env' by clicking on 'Load variables from .env file'
|
||||
# - Modify the environment variables as needed
|
||||
# - Click 'Deploy the stack' and wait for it to be deployed
|
||||
#
|
||||
# For more extensive installation and update instructions, refer to the
|
||||
# documentation.
|
||||
services:
|
||||
broker:
|
||||
image: docker.io/library/redis:8
|
||||
restart: unless-stopped
|
||||
volumes:
|
||||
- /volume1/docker/paperless/redisdata:/data
|
||||
networks:
|
||||
- backend-net
|
||||
webserver:
|
||||
image: ghcr.io/paperless-ngx/paperless-ngx:latest
|
||||
restart: unless-stopped
|
||||
depends_on:
|
||||
- broker
|
||||
ports:
|
||||
- "8010:8000"
|
||||
volumes:
|
||||
- /volume1/docker/paperless/data:/usr/src/paperless/data
|
||||
- /volume1/docker/paperless/media:/usr/src/paperless/media
|
||||
- /volume1/docker/paperless/export:/usr/src/paperless/export
|
||||
- /volume1/docker/paperless/consume:/usr/src/paperless/consume
|
||||
environment:
|
||||
PAPERLESS_REDIS: redis://broker:6379
|
||||
PAPERLESS_DBENGINE: postgres
|
||||
PAPERLESS_DBHOST: postgres
|
||||
PAPERLESS_DBPORT: 5432
|
||||
PAPERLESS_DBNAME: paperless
|
||||
PAPERLESS_DBUSER: paperless
|
||||
PAPERLESS_DBPASS: kH8rwrUREJmjOBSb9uV0yXXhCRM9pQxdSk0TOZ8yi0oZTaPZ
|
||||
CSRF_TRUSTED_ORIGINS: https://paperless.chengs.uk
|
||||
|
||||
|
||||
env_file:
|
||||
- stack.env
|
||||
networks:
|
||||
- frontend-net
|
||||
- backend-net
|
||||
healthcheck:
|
||||
test: ["CMD-SHELL", "curl -f http://localhost:8000 || exit 1"]
|
||||
interval: 30s
|
||||
timeout: 5s
|
||||
retries: 5
|
||||
networks:
|
||||
frontend-net:
|
||||
external: true
|
||||
backend-net:
|
||||
external: true
|
||||
9
paperless/postgres.sql
Normal file
9
paperless/postgres.sql
Normal file
@@ -0,0 +1,9 @@
|
||||
psql -U pgadm homelab
|
||||
|
||||
|
||||
CREATE DATABASE paperless;
|
||||
CREATE USER paperless with PASSWORD 'kH8rwrUREJmjOBSb9uV0yXXhCRM9pQxdSk0TOZ8yi0oZTaPZ';
|
||||
GRANT ALL PRIVILEGES ON DATABASE paperless TO paperless;
|
||||
|
||||
\c paperless
|
||||
GRANT ALL ON SCHEMA public TO paperless;
|
||||
11
vert/docker-compose.portainer.yml
Normal file
11
vert/docker-compose.portainer.yml
Normal file
@@ -0,0 +1,11 @@
|
||||
services:
|
||||
vert:
|
||||
container_name: vert
|
||||
image: ghcr.io/vert-sh/vert:latest
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- 3002:80
|
||||
environment:
|
||||
- USER_UID=1039
|
||||
- USER_GID=65538
|
||||
- TZ=America/Toronto
|
||||
Reference in New Issue
Block a user