this post was submitted on 06 Aug 2023
1191 points (98.9% liked)
Announcements
23319 readers
1 users here now
Official announcements from the Lemmy project. Subscribe to this community or add it to your RSS reader in order to be notified about new releases and important updates.
You can also find major news on join-lemmy.org
founded 5 years ago
MODERATORS
you are viewing a single comment's thread
view the rest of the comments
view the rest of the comments
Why is selfhosted Docker such a mess?
What is a mess about it? Its certainly much easier than installing without Docker.
Last time I checked, it wanted me to modify multiple upstream files before composing the container and manually create directories instead of using Docker volumes – for multiple images.
Also the compose file contains a database and a reverse proxy for no reason.
Where’s the simple Docker container that does not want me to do that? Just deploy, set some environment variables, use one volume for persistent data and the sqlite database and that’s it?
A single Docker container is not possible because Lemmy requires multiple different images (postgres, pict-rs, lemmy-ui, lemmy). Supporting two different databases would be too much effort. In the end Lemmy is optimized for large instances with hundreds or thousands of users, not for tiny instances. So more difficult installation is not a major concern.
Why can’t those be bundled? I need 3 containers and another database container just to have an instance. Also, none of those is easy to setup. All of those are messy and annoying and need me to fiddle with upstream files.
Containers should be reusable. None of those is reusable for anything else.
In the long run this is where it will fail. Make it intentionally hard and annoying to setup will lead to people not setting it up.
Edit: Been there, done that, failed. Since then I always try to make my stuff as easy to setup and use as possible.
Its not intentionally hard. If you see a way to simplify it, pull requests are always welcome. But running multiple services in a single docker container is generally a bad idea.
All components that are needed to run a Lemmy instance could be provided as single stack and the containers could be made configurable using environment variables (usernames, passwords, and DB locations). Database and reverse proxy should be handled completely separated from the "Lemmy containers" and the "Lemmy stack". manually editing upstream files before composing the containers should be avoided.
Since I do not use MS GitHub I cannot help with issues, PRs, or anything else there, sorry.
This is what I think about. While those 3 containers contain different programs: are they really different services and not just different components of the same service?
Why is ALL administrative documentation all but absent? Why is there NO documented support for SMTP?
What documentation do you need other than knowing the config fields?
I wouldn't say it's convenient to find, but right here it seems pretty clear: https://github.com/LemmyNet/lemmy/blob/main/config/defaults.hjson
And following up: since Lemmy-easy-deploy is so… well… easy, can’t you make that official as well?
Have an advance option where one could configure everything and one where all is done and automatically works for the somewhat less technical admins?
So its a bash script which manages the docker-compose install for you? I really wouldnt want to maintain almost 2000 lines of bash. Plus such a script has extra complexity and has a chance to break. I think it makes more sense to rely on standard, widespread tools like docker-compose which you can find documentation for all over the internet. Though if you prefer to use that installation method over the official one, theres nothing wrong with it.
In addition to that: I am pretty sure the script assumes an unconfigured system, “stealing” ports 443 and 80, and completely messing up container and volume names (if any volumes are actually used).
As far as I know I think the only not messy solution is setting up a VM and let Lemmy do whatever it wants there and expose only one port mapped to whatever inside-VM port is needed and use my reverse proxy to forward requests on the dedicated subdomain to that VM.