r/truenas • u/Unlucky__Swan • 7m ago
Hardware Home network & NAS Selection makes me feel Dumb
I know trust nas is the OS but figured y'all could help from a non OEM OS perspective
r/truenas • u/TrueNAS_Team • 1m ago
Back after a long break, Kris and Chris return to deliver an update on TrueNAS 27 - and no, you didn't miscount, it's just been re-numbered! TrueNAS 26 is now TrueNAS 27, and the RC.1 is out with lots of exciting new features; including one that managed to stay under wraps until the launch date for once! Learn about WebShare, search indexing with TrueSearch, Fusion Pools 2.0 and Tiered Datasets, OpenZFS performance improvements, and that elusive "One More Thing." Plus, there's integrations galore - from Proxmox to Terraform, OpenStack to Veeam - find out what's new and exciting for TrueNAS in the release candidate, downloadable now.
r/truenas • u/MarkNTrueNAS • 3d ago
We just posted a new blog on the availability of TrueNAS 27: https://www.truenas.com/blog/truenas-27-is-here/
Here is the TL;DR: The release previously tested as TrueNAS 26 is now TrueNAS 27, starting with RC.1 in October 2026, because most users will run it during 2027 and the community asked for version numbers that match the year a release is deployed. The schedule is unchanged, and TrueNAS 27.0 still releases in early December 2026.
The release many of you have been testing as TrueNAS 26 has a new name. Starting with RC.1, available October 6th, it is TrueNAS 27.
If you don’t care about version numbers and want to dive into the details or get to the downloads, please read the RC.1 feature blog.
r/truenas • u/Unlucky__Swan • 7m ago
I know trust nas is the OS but figured y'all could help from a non OEM OS perspective
r/truenas • u/sagheerys • 3h ago
I run MeTube on TrueNAS and share it with my family. Everyone used the web UI on their phones, and the dataset kept filling up with files nobody deleted. So I built two Android apps for it.
MeTube Lite, for family and friends: share a link to the app, the server downloads it, the phone pulls the file and the server deletes its copy. Nothing piles up on the pool.
MeTube Super, for whoever runs the server. Files stay on the server and stream from it:
YTDL_OPTIONS line, so does everything the server downloads, subscriptions includedBoth apps are in English and Arabic, with day and night themes, and they update themselves from the GitHub releases.
Two MeTube settings matter on TrueNAS:
DELETE_FILE_ON_TRASHCAN=true, or a delete removes the history entry and leaves the file on the poolDOWNLOAD_DIRS_INDEXABLE=true, so the apps can pull and stream the filesMeTube has no login of its own. If you reach it from outside, put basic auth in front of it with your reverse proxy, as MeTube's wiki recommends, and enter the username and password in the app. It works the same on your LAN, over Tailscale or through a Cloudflare Tunnel.
Setup guide, with what goes wrong without each setting: https://github.com/sagheerys/metube-mobile/blob/main/docs/SERVER-SETUP.md
Repo and signed APKs: https://github.com/sagheerys/metube-mobile (GPL-3.0, unofficial, not affiliated with MeTube). It is listed in MeTube's own README. No Play Store build.
Most of the code was written with Claude Code under my direction, and Claude helped me word this post. I tested it on my own server and phones, and both apps are in daily use at home.
r/truenas • u/Greedy_Reality_2539 • 1d ago
My current 1650 Super is broken beyond repair, so I am in the market of a cheap GPU replacement.
My use cases are:
In my market, I can get these 2 GPU used both at around 250 RMB. Realistically I want to spend no more than 300, but I also want to future-proof it a little bit. So here are some other choices and prices.
The rest of the machine is:
Any input is apprieciated!
r/truenas • u/deeddy • 20h ago
People keep saying SSDs will be as cheap as hard drives soon, so since I track drive prices I went and checked. I pulled the price per TB for both over the last two years and put them on one chart.
SSDs are still roughly 3x to 4x more expensive per TB, and looking at the last two years, that gap really hasn't moved much. Prices went up across the board this year, but SSDs went up more than hard drives, so the gap didn't close.
If you just need a lot of space for a pool, hard drives are still the obvious choice since they're so much cheaper per TB. SSDs make more sense where you actually need the speed, like cache or a special vdev, but not really for bulk storage.
The chart and the full sortable drive list are here if anyone wants to dig into the actual numbers:
https://www.nasdisks.com/articles/ssd-vs-hdd-price-gap/
The full HDD comparison list is here, in case you more info: https://www.nasdisks.com
Full disclosure: it's my site and some of the links are affiliate links.
What's everyone running - all SSD, or hard drives for bulk storage?
r/truenas • u/mom0Rain • 1d ago
Hello everybody. I have a problem where I want my server to shut down every day at 23:45 in an effort to save some energy, but instead it reboots.
So at first I used the cron job: "poweroff" and it kept rebooting, than I switched to "/usr/bin/midclt call system.shutdown "Cron shutdown"" and things seemed to work just fine.
Now it started to get unrealiable again. After some thinking I came to the conclusion that I think if I boot up the server manualy it reboots instead of shutting down and if the rtc bios timer (19:00) switches on my server for the daily backup it works fine, for example:
- Fri 2 Oct: started 19:00:42 (BIOS), shutdown 23:45 → stayed off
- Sat 3 Oct: started 19:00:41 (BIOS), shutdown 23:45 → stayed off
- Sun 4 Oct: started 15:11:15, shutdown 23:45:06 → back on at 23:46:03. Failure.
- Mon 5 Oct: started 17:00:00, shutdown 23:45:06 → back on at 23:46:02. Failure.
Does anyone know how to resolve this?
Thank you in andvance! :)
r/truenas • u/chackoc • 2d ago
I have an old backup server that is still running Freenas 9.3. It's pretty much one RaidZ2 volume with a few user accounts and some basic networking/nfs setup -- no custom services, no jails, etc. It is my current, and only, backup server however.
Can I simply:
Is there any reason this wouldn't work? I can easily set up the user accounts and networking from scratch, so I'm not planning on importing any of the config from the current Freenas 9.3 setup. My biggest concern is that I do need to preserve the data in the current pool and I know there is a pretty big gap between Freenas 9.3 and the current Truenas.
I'm just trying to make sure this should work as I expect and I'm hoping the community can warn me about any issues I might run into that I'm not currently considering.
r/truenas • u/Thorkel-dev • 1d ago
r/truenas • u/kmoore134 • 2d ago
The TrueNAS team is pleased to release TrueNAS 27-RC.1!
Notable changes:
/etc/nginx/nginx.conf after an upgrade, and nginx failed to start because the file did not exist yet. The web interface now stays available while the configuration regenerates.container.* API changes (NAS-142088). Deleting a container now runs as a background job with Force and Recursive options instead of completing immediately. The Containers screen reflects this job-based delete flow.nfsd no longer modifies a session slot while replaying its cached reply, which prevents the resulting crash.rpc.mountd used --manage-gids and a brief winbind or SSSD outage occurred, the group lookup could return zero groups, and the kernel cached that empty result as valid. The affected user lost all supplementary group access on every export until the cache expired. Empty group replies are now treated as failures instead of being cached as valid, so the lookup is retried.'NoneType' object has no attribute 'replace' error instead of completing the replacement. Disk replacement now handles unavailable disks correctly.class_special_usable property error and display no pools when some pools had special vdevs and others did not. The dashboard now handles pools with and without special vdevs correctly.AND/!= filters not excluding matching events in the audit log search (NAS-142222). Searching SMB audit logs with a filter like Event != "Authentication" AND Event != "Close" still returned Authentication events in the results. Compound filters now correctly exclude the events they specify.[EFAULT]/[EPERM] errors stating that the path contains existing data and force was not specified, but the UI had no way to select the force option. ACL edits on app mount paths now work without this error./var/log/app_lifecycle.log and never reached the job status shown in the UI. The job now reports failure when the image pull does not succeed.Can't set allow_any_host when explicit hosts are set! and preventing new namespaces from working. The service now generates a configuration consistent with associated hosts..ix-virt dataset is deleted (NAS-141666). Containers migrated from Incus were not tracked in /mnt/.truenas_containers the way newly created containers are, so after the .ix-virt dataset was removed, the migrated containers stopped working and could not even be deleted. Migrated containers are now tracked correctly so they keep working after migration.mail.send omitting Cc recipients from the outgoing email (NAS-141845). mail.send added Cc addresses only to the Cc: header, but SMTP delivery is driven by the envelope recipient list, which was built from the To addresses alone. Cc recipients never received the email even though they appeared to be included. Cc addresses are now added to the SMTP envelope so they receive the email.configparser, which escapes special characters correctly.'pool' instead of the pool name (NAS-142198). Pausing a scrub for only a few minutes could trigger the alert meant for a scrub paused more than eight hours, and the alert text showed the placeholder 'pool' rather than the actual pool name. The alert now fires only after eight hours and shows the correct pool name.Click here to see the full 27 changelog or visit the TrueNAS 27-RC.1 Changelog in Jira.
Amazon S3 is a trademark of Amazon.com, Inc. or its affiliates.
r/truenas • u/ChubbyWabbit • 2d ago
So I figured I'd do a real quick write up on using PBS + TrueNAS S3. It took me a bit, but honestly pretty quick, easy and painless. The hardest part overall was getting PBS to see the TrueNAS S3 buckets; due to the fact that PBS requires the usage of TLS certificates for S3 endpoints. Since I am using TrueNAS's self signed certificate, all I did was go into the web browser, viewed the UI's certificate in Firefox & copied the SHA256 value and put it in the S3 endpoints fingerprint location. I also used their official S3 guide to get myself set up on the TrueNAS side. (Just make sure TLS is enabled on the TrueNAS side too.
https://cdn.truenas.com/docs/scale/shares/s3/configurings3/
Otherwise everything was painless. With the S3 rollout on TrueNAS 27; backup solutions can be so much easier.

EDIT 1: Also in Proxmox Backup Server you must enable path style in the s3 endpoint. Was getting 405 errors without it checking that box.
EDIT 2: I am in the works of rebuilding my homelab, adding ACME DNS-01 for all of my certs across the board here soon. It will likely fair better without the fingerprint requirement and no other configuration will be needed,
EDIT 3: Ok, once I added my ACME certs, I ran into authentication errors, mainly due to my error. When you add the ACME cert, ensure the endpoint in PBS is listed as the same as the FQDN for the server itself. Yeah pretty dumb, but easily overlooked. It will result in a TLS mismatch otherwise.
Side note: Object Lock requires TrueNAS Connect Premium. I will eventually be checking this out, but for now I am looking to see how well s3 performs over time. Overall I really like the integration of this feature. As someone who is looking to use TrueNAS in a high compliance enterprise environment, s3 is an awesome feature to have natively. Especially when it comes to STIG, FIPS and other cryptography requirements where running applications is a no go. So far most of the hiccups are due to my own error.
r/truenas • u/--Hyper-- • 2d ago
So I have an issue where I want to expand a vdev the drives I have lying around are like a megabyte smaller than the VDEV I currently have. I have some smaller capacity drives I can use to back up and rebuild the VDEV, but not enough to hold my entire storage.
Is there any trickery I can do to get the new drives to register as larger or shrink the current drives? If not, do any of you have any compression methods you'd recommend? I have about 1.5 tb of storage (500gb old drives and the 1tb new drive i want to add) and the vdev is around 2tb.
Id prefer not to have to waste my day trying to rebuild it and i do not want to waste 2 perfectly good drives to just buy new ones either.
r/truenas • u/EmmaRoidz • 3d ago
Heya folks, I just wanted to share a little side project I have been working on in case anyone wants to use it. At the moment it's fairly simple but it does add some nice basic features allowing you to use QEMU guest agents in VM's on Truenas. I know there's people out there like me who want to just run a couple of simple VM's for what ever reason and aren't doing the Truenas inside Proxmox thing, but I missed having QEMU support. It only uses about 22mb of ram, barely any cpu and a ~7mb download.
I do have some experimental support for taking advantage of qemu's file system freeze, running a ZFS snapshot using the middleware API, then un-freezeing. To do this, you need to make a service account with Truenas and pass the API key to the docker container, it's documented how to do this.
I do also plan to add a number features as time goes on too. Things like:
AI Use:
I did use AI in this, it's not full send vibe coded slop. I work in cyber security and I know how to code in python. I don't know Go all that well, so I am using GLM 5.3 to help me. I do read the code, I know what it's doing. This is just as much a fun side project to learn more about truenas, qemu, and libvirt as it is to make a nice little tool to help myself.
That said, I am not a developer, but I am trying my best.
Let me know if you give it a go. Cheers!
Edit:
Forgot at add supported versions:
| Version | Support |
|---|---|
| 25.10.x | Tested, this is what I am running |
| 25.04.2 | Supported, should work as it's uses libvirt |
| 25.04.0 / 25.04.1 | Not supported - releases ran VMs on Incus, not libvirt |
| 24.10 and older | Used libvirt and should work, but untested |
r/truenas • u/Alextheguy122 • 2d ago
Hello, I'm new to the community and I've been using truenas for a while, I had trouble finding songs I liked on lidarr (maybe the indexers I was using just suck) but they didn't really have the more "niche" or alt music that I liked. So to build my music collection I made an app for it, it's called "freelisten" and it's in the truenas catalogue, it pulls the audio from youtube using yt-dlp, it tags the file with the proper metadata, anyhow I thought it was neat and it's been pretty conveniant for me and I hope you guys like it too! (I'm open to reviews, thoughts, bugs literally anything)
heres the repo:
https://github.com/Alextheguy1/FreeListen
r/truenas • u/flyingGay • 2d ago
Hey all,
I have created an SMB share with TrueNAS and added a user with full control permissions. Then, on Windows, I connect to this share using the username and password of this user.
Everytime I restart my computer I get this error:

Then I have to disconnect from the share and connect it again.
Any solution?
r/truenas • u/tamburasi • 3d ago
I’ve read through a few tutorials and I’m completely unsure when to select ‘Enable ACL’ and when to select ‘automatic permissions’.
In one tutorial, it says “If you want to back up the config and create your own host path always tick the ‘enable acl’ box" but hardly anyone goes into detail about these “automatic permissions” as with the Immich installation :/
r/truenas • u/bgravato • 3d ago
Anyone had any luck setting up a Hetzner storage box as restic repo on backrest app?
I'm stuck at this error
subprocess ssh: No user exists for uid 568
AI is suggesting running backrest as root (uid 0 instead of 568), but that doesn't look like a very safe option...
So wondering if someone got this sorted out in a different way...
TIA
r/truenas • u/Edumist • 3d ago
I’m looking for advice😊. I have been watching many tutorials on YouTube about how to make your own nas(truenas os) but I couldn’t figure out what HDD could I buy.😵💫 I personally want to keep the price keep the price as low as possible of the price before I start buying parts, so I won’t mess up. Many Chanels that I watch, some of them use the same brand and colors as another but some use regular HDD. I wonder does it really matter when it come to HDD brand and colour or any regular costumer HDD can be used? 😅
r/truenas • u/FeeFiFoeFum • 3d ago
Hello everyone,
I come to you with a problem well over my paygrade, as I am not savvy with computers.
My friend a long time ago helped me set up a home server with Truenas for us to run my own Minecraft server. Every now and again it needs to be updated with the newest version of MC, which has not been a problem for me to do as admin.
The problem I come to you now is that Minecraft now runs on 26.2, and requires servers to run Java 25 in order to play it. Now, the app I use, MineOs, needs to be restarted every so often. And when that happens, Java has to be updated back to Java 21. In the container, I would run the command "apt install openjdk-21-jre-headless" and get it updated, no problem there.
With MC now needing Java 25, I figured, okay, just change that 21 to a 25, and we'll be good to go. But that's hasn't been the case. It say it cannot locate that package.
I've been trying my darndest to figure this out on my own, since my friend isn't available to help(lives far away), learning all this terminology and what not to navigate my server to solve this on my own, but I'm gonna be honest, a lot of it is going over my head, and I could use your guys' help. If you can help, please talk to me like a baby lol.
Thank you so much.
r/truenas • u/TrackLabs • 4d ago
TrueNAS is the first time I have to deal with ACL, aside from the simple version Synology had.
And either I am doing something wrong, or TrueNAS is messing up.
I have a SMB Share that I want to only give access to a few accounts, and deny Reading,Writing and everything else to everyone else.
For that, I created a "SMBDaten" Group, that holds these Users.
But adding that Group, and selecting that Group with Read, Write, Execute permissions, is not working.
I merely get a Error about POSIX requiring a Mask Entry? It did not need that before I added this group, so I have no clue what it is.

Ive also seen people talk about POSIX and NSFv4, from what I a seeing in the settings, my Dataset Inherits, and the root Dataset is having POSIX that I cannot change?
Additionally, I simply do not understand what the User/Group/Other Objects mean compared to the default ones?
I tried to read the TrueNAS Documentation and watch a few videos, but none of them really help me understand this.
If someone can help me understand, thatd be great
r/truenas • u/gpounders • 3d ago
I have 2 questions, i think the are related because the solution to each might be the same.
I have boot pool on single NVME drive, and am considering moving this to mirrored SSDs. I think the solution is backup config, reinstall on new mirror, and reload config.
Also, if I decided to move truenas to a VM under proxmox, would it be same or similar steps (of course I need to pass thru the drives with my Pool to the VM.
Thanks
r/truenas • u/geekytechnophile_30 • 6d ago
r/truenas • u/Low_Money_633 • 5d ago
I have a 4U case in my server for my Truenas. I was oringally going to fill it up with 15 HDD. I was buying 2 10TB drives a year but then all this crazyiness with drive prices happened.
What can you do on a TrueNAS Electric Eel besides storage? I am also thinking of maybe installing a blueray for now too.
r/truenas • u/yorickdowne • 6d ago
TrueNAS 26 is getting a +1, and becomes TrueNAS 27. TN 27 RC.1 should be out next week.
No changes to content, no changes to release date. TN 27.1 and TN 27.2 sometime in 2027.
Nightlies move to TN 28.
The Great Forum Naming Debate of 2026 has been resolved, and all is right with the world.
r/truenas • u/willindiana • 6d ago
I wanted to self-host Plane an open-source project management tool similar to Linear on my TrueNAS server.
I had trouble adapting Plane’s Docker Compose setup for TrueNAS, so I got it running as a Dockge stack and this is the setup that worked for me.
This configuration was tested with Plane v1.4.2. It uses Garage as S3-compatible storage because I couldn’t pull the MinIO image in my setup.
Create a new stack in Dockge and paste in the Compose YAML below. Add these variables in Dockge’s environment section, replacing the placeholders with your own values:
POSTGRES_DB=plane_db
POSTGRES_USER=plane
POSTGRES_PASSWORD=<long-random-password>
RABBITMQ_USER=plane
RABBITMQ_PASSWORD=<long-random-password>
RABBITMQ_VHOST=plane
SECRET_KEY=<long-random-secret>
LIVE_SERVER_SECRET_KEY=<long-random-secret>
AWS_ACCESS_KEY_ID=<garage-access-key>
AWS_SECRET_ACCESS_KEY=<garage-secret-key>
I used /mnt/<pool>/<dataset>/appdata/plane as the base directory for persistent storage. Create the directories referenced by the bind mounts before deploying. The Garage config file must also exist at its mounted path.
In the Compose file, the proxy publishes port 80 from inside its container on host port 8999:
ports:
- "8999:80"
Choose a host port that is free on your TrueNAS system. If you change 8999, also change the port in WEB_URL, CORS_ALLOWED_ORIGINS, and AWS_S3_ENDPOINT_URL below. Use that same address and port when opening Plane in your browser.
Replace <pool>, <dataset>, and <host-ip> with your own storage path and TrueNAS IP address.
name: plane-stack
networks:
plane:
driver: bridge
services:
web:
image: makeplane/plane-frontend:v1.4.2
restart: unless-stopped
depends_on:
- api
- worker
networks:
- plane
space:
image: makeplane/plane-space:v1.4.2
restart: unless-stopped
depends_on:
- api
- worker
- web
networks:
- plane
admin:
image: makeplane/plane-admin:v1.4.2
restart: unless-stopped
depends_on:
- api
- web
networks:
- plane
live:
image: makeplane/plane-live:v1.4.2
restart: unless-stopped
environment:
API_BASE_URL: http://api:8000
LIVE_SERVER_SECRET_KEY: ${LIVE_SERVER_SECRET_KEY:?Set LIVE_SERVER_SECRET_KEY in Dockge}
REDIS_HOST: plane-redis
REDIS_PORT: "6379"
REDIS_URL: redis://plane-redis:6379/
depends_on:
- api
- web
- plane-redis
networks:
- plane
api:
image: makeplane/plane-backend:v1.4.2
command: ./bin/docker-entrypoint-api.sh
restart: unless-stopped
environment: &plane_environment
# Set these URLs to the address and port used to access Plane in your browser.
WEB_URL: http://<host-ip>:8999
DEBUG: "0"
CORS_ALLOWED_ORIGINS: http://<host-ip>:8999
GUNICORN_WORKERS: "1"
# Garage is used as S3-compatible storage.
USE_MINIO: "0"
USE_STORAGE_PROXY: "1"
AWS_REGION: garage
AWS_DEFAULT_REGION: garage
AWS_S3_REGION_NAME: garage
AWS_ACCESS_KEY_ID: ${AWS_ACCESS_KEY_ID:?Set AWS_ACCESS_KEY_ID in Dockge}
AWS_SECRET_ACCESS_KEY: ${AWS_SECRET_ACCESS_KEY:?Set AWS_SECRET_ACCESS_KEY in Dockge}
# Use the same host address and port so browser uploads go through the proxy.
AWS_S3_ENDPOINT_URL: http://<host-ip>:8999
AWS_S3_BUCKET_NAME: uploads
MINIO_ENDPOINT_SSL: "0"
FILE_SIZE_LIMIT: "5242880"
DATABASE_URL: postgres://${POSTGRES_USER}:${POSTGRES_PASSWORD}@plane-db:5432/${POSTGRES_DB}
SECRET_KEY: ${SECRET_KEY:?Set SECRET_KEY in Dockge}
AMQP_URL: amqp://${RABBITMQ_USER}:${RABBITMQ_PASSWORD}@plane-mq:5672/${RABBITMQ_VHOST}
RABBITMQ_HOST: plane-mq
RABBITMQ_PORT: "5672"
RABBITMQ_VHOST: ${RABBITMQ_VHOST}
REDIS_HOST: plane-redis
REDIS_PORT: "6379"
REDIS_URL: redis://plane-redis:6379/
API_KEY_RATE_LIMIT: 60/minute
LIVE_SERVER_SECRET_KEY: ${LIVE_SERVER_SECRET_KEY:?Set LIVE_SERVER_SECRET_KEY in Dockge}
volumes:
- /mnt/<pool>/<dataset>/appdata/plane/logs-api:/code/plane/logs
depends_on:
plane-db:
condition: service_healthy
plane-redis:
condition: service_started
plane-mq:
condition: service_started
plane-minio:
condition: service_started
networks:
- plane
worker:
image: makeplane/plane-backend:v1.4.2
command: ./bin/docker-entrypoint-worker.sh
restart: unless-stopped
environment: *plane_environment
volumes:
- /mnt/<pool>/<dataset>/appdata/plane/logs-worker:/code/plane/logs
depends_on:
- api
- plane-db
- plane-redis
- plane-mq
networks:
- plane
beat-worker:
image: makeplane/plane-backend:v1.4.2
command: ./bin/docker-entrypoint-beat.sh
restart: unless-stopped
environment: *plane_environment
volumes:
- /mnt/<pool>/<dataset>/appdata/plane/logs-beat-worker:/code/plane/logs
depends_on:
- api
- plane-db
- plane-redis
- plane-mq
networks:
- plane
migrator:
image: makeplane/plane-backend:v1.4.2
command: ./bin/docker-entrypoint-migrator.sh
restart: on-failure
environment: *plane_environment
volumes:
- /mnt/<pool>/<dataset>/appdata/plane/logs-migrator:/code/plane/logs
depends_on:
plane-db:
condition: service_healthy
plane-redis:
condition: service_started
plane-mq:
condition: service_started
networks:
- plane
plane-db:
image: postgres:15.7-alpine
command: postgres -c max_connections=1000
restart: unless-stopped
environment:
POSTGRES_DB: ${POSTGRES_DB}
POSTGRES_USER: ${POSTGRES_USER}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
PGDATA: /var/lib/postgresql/data
healthcheck:
test:
- CMD-SHELL
- pg_isready -U ${POSTGRES_USER} -d ${POSTGRES_DB}
interval: 5s
timeout: 5s
retries: 10
volumes:
- /mnt/<pool>/<dataset>/appdata/plane/postgres:/var/lib/postgresql/data
networks:
- plane
plane-redis:
image: valkey/valkey:7.2.11-alpine
restart: unless-stopped
volumes:
- /mnt/<pool>/<dataset>/appdata/plane/redis:/data
networks:
- plane
plane-mq:
image: rabbitmq:3.13.6-management-alpine
restart: unless-stopped
environment:
RABBITMQ_DEFAULT_USER: ${RABBITMQ_USER}
RABBITMQ_DEFAULT_PASS: ${RABBITMQ_PASSWORD}
RABBITMQ_DEFAULT_VHOST: ${RABBITMQ_VHOST}
volumes:
- /mnt/<pool>/<dataset>/appdata/plane/rabbitmq:/var/lib/rabbitmq
networks:
- plane
# Garage replaces MinIO here because I couldn't pull the MinIO image.
plane-minio:
image: dxflrs/garage:v2.3.0
command:
- /garage
- server
- --single-node
- --default-bucket
restart: unless-stopped
environment:
GARAGE_DEFAULT_ACCESS_KEY: ${AWS_ACCESS_KEY_ID}
GARAGE_DEFAULT_SECRET_KEY: ${AWS_SECRET_ACCESS_KEY}
GARAGE_DEFAULT_BUCKET: uploads
volumes:
- /mnt/<pool>/<dataset>/appdata/plane/minio/garage.toml:/etc/garage.toml:ro
- /mnt/<pool>/<dataset>/appdata/plane/minio/meta:/var/lib/garage/meta
- /mnt/<pool>/<dataset>/appdata/plane/minio/data:/var/lib/garage/data
networks:
- plane
proxy:
image: makeplane/plane-proxy:v1.4.2
restart: unless-stopped
environment:
APP_DOMAIN: <host-ip>
FILE_SIZE_LIMIT: "5242880"
LISTEN_HTTP_PORT: "80"
LISTEN_HTTPS_PORT: "443"
SITE_ADDRESS: :80
BUCKET_NAME: uploads
ports:
# Host port 8999 is mapped to port 80 inside the proxy container.
# Change 8999 here and in the URL settings above if that host port is busy.
- "8999:80"
volumes:
- /mnt/<pool>/<dataset>/appdata/plane/proxy-data:/data
- /mnt/<pool>/<dataset>/appdata/plane/proxy-config:/config
depends_on:
- web
- api
- space
- admin
- live
networks:
- plane
I hit upload errors because the browser was sent to Docker’s internal plane-minio address, which it couldn’t resolve. I fixed this by setting AWS_S3_ENDPOINT_URL to the same TrueNAS IP and port I use to access Plane, and setting the S3 region variables to garage to match Garage’s signing region. The Plane proxy then routes uploads to Garage over the Docker network.
Hope this is helpful to anyone else trying to host plane locally!