Thinkpad Photo NAS
· 2 min read
Selecting my toolkit
- I used Ubuntu Server 24.04 LTS for my ThinkPad server operating system. I chose this simply because it’s the most widely used Linux server OS, which means it has the best documentation and longest support life (LTS means long term support, so it’ll be maintained until 2029).
- Immich is the only self-hosted photos solution that matches Google Photos features (auto backup, face recognition, object search, albums, map view, shared libraries, mobile app). The alternative choices for this were Photoprism and Piwigo, which are slower to develop, have fewer features and are harder to set up. Immich was exactly the right tool I needed for this project.
- Immich is made up of multiple services (main server, machine learning worker, database, cache). Running all of those manually would be tricky to set up and maintain, so I chose to use Docker to solve this. Docker wraps each service in a container so they’re isolated. I also used Docker Compose which lets me start/stop/update all of them with a single command. It also means when Immich releases an update, I can just run one command:
docker compose pull && docker compose up -d. Because of this, I won’t need to manually reinstall anything. - I needed a way to access my server off my home network. The simplest option would be to use port forwarding - simply open a port on my router to expose Immich to the internet directly. This would work, but is insecure, as anyone on the internet scanning that port can access Immich directly, allowing anyone to reach my login page from the internet. Bots are constantly scanning the internet for open ports, so this can be exploited within a few minutes of the port being open. The best solution I found was to use Tailscale, which creates an encrypted private network between my connected devices so nothing is ever exposed publicly. It’s also simple to set up, which for this project is much better than self managing a VPN.
Setting up my server
Have thoughts on this post? Let's discuss on Twitter or GitHub Discussions