Most services have installation for Docker. I started from knowing nothing about this stuff (albeit quite tech-savvy) and I would say my favorite route is with Docker compose. Don't bother with tutorial videos or courses, this isn't a theory-based activity but rather a practical one. For simple services (I'll come back to this in a bit), you want to skim through the documentation and look for the keywords "Docker" or "compose". Copy the file content as needed and fill in the gaps with the details as you personalize the service. Learn how to convert Docker run commands to compose. Use issue trackers, this community, the old reddit community to look for similar setup and inspirations.
Now, you want to self-host Firefly, Immich, etc. These, as far as I know, all have good docs and a compose file. Immich is a bit more involved. And a lot of them use big separate databases. Database administration is a bit scary, but hopefully, you won't need to manually intervene or fix a broken database until you are better adapted to the world of self-hosting. Run backups, and do what I should have done: test run services before using it in production. Let's say you want to run Immich. Start it up, and upload a few test files, and try to use all the functionalities. If it breaks, you don't lose anything and can run the real thing when you're confident it's what you want.