What would be a weekend without trying out some fun new self-hosted projects? Well, it wouldn’t be fun at all, would it?

I’ve tried a mixture of projects this time, with some small ones, and some of the bigger ones I’ve maybe been putting off.

In all cases, I’m using a Proxmox server I set up on an old laptop to run AdGuard and Unbound DNS.

A quick note on IP addresses: the addresses used throughout this guide — 192.168.1.1 for the gateway, 192.168.1.10 for Proxmox, 192.168.1.12 for Immich — reflect my own network setup. Your network may use a different range entirely, such as 192.168.0.x or 10.0.0.x. Always use the gateway and subnet information from your own ipconfig output rather than copying my addresses directly.

Immich

Self-hosted photo backups

Immich on a MacBook laptop
Amir Bohlooli / MUO

First up, one that I’ve been putting off for a while, but not because it’s an overwhelming or in-depth project. Immich is a self-hosted photo backup tool you can use to replace Google Photos, Amazon Photos, or similar services.

Install LXC container and Debian

First, you’ll need the LXC container template for Debian. An LXC container is a lightweight, isolated Linux environment that keeps everything neat and separate from the host system. Think of it like a self-contained box within your server that runs its own software independently.

  1. Click your node in the left panel. It’ll be named whatever you set as your hostname. For example, mine is just DNS.
  2. Next, select local.
  3. In the middle panel, select CT Templates, then the Templates button at the top.
  4. Search for debian 12 bookworm, then download.

In Proxmox, select Create CT in the top-right corner, then use the following settings:

  • General: Set the hostname to immich, then choose a secure password.
  • Template: Select the Debian 12 Bookworm template you just downloaded.
  • Disks: Set at least 32GB minimum.
  • CPU: Give Immich two cores.
  • Memory: Immich needs a decent chunk of memory to run some of its more advanced features, so allocate 4096MB to both Memory and Swap.
  • Network: Set your IPv4 Static address and Gateway to the IP address uncovered in the ipconfig command you ran earlier.
  • DNS: The host settings should work fine.

Press OK, and launch the container.

Update the container and install Docker

Next up, press select the container in the left-hand column (it’ll be named “immich”), and select Console from the top menu bar, then log in to the Immich container using the password you set earlier.

You now need to update the container, then install Docker so we can run Immich. Run the following commands in order, one at a time.

  1. apt install -y ca-certificates curl gnupg
  2. install -m 0755 -d /etc/apt/keyrings
  3. curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg
  4. chmod a+r /etc/apt/keyrings/docker.gpg
  5. echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null
  6. apt update && apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin

The last one may take a minute, but nothing should take long. Then, run docker --version to check if it’s all installed OK.

Install and update Immich

Next up, we need to make the Immich directory and install Immich. Run the following commands in order:

  1. mkdir /opt/immich && cd /opt/immich
  2. curl -L https://github.com/immich-app/immich/releases/latest/download/docker-compose.yml -o docker-compose.yml
  3. curl -L https://github.com/immich-app/immich/releases/latest/download/example.env -o .env

You now need to make some slight changes to the Immich configuration file before booting it up for the first time. Input nano.env, then adjust the following configuration variables:

  • UPLOAD_LOCATION: change to /opt/immich/photos
  • DB_PASSWORD: change to something secure and memorable

Once done, press CTRL + X, and save the changes.

Now, input mkdir /opt/immich/photos to make the photos directory, and we can finally start to boot everything up.

Still in the Console, input docker compose up -d and wait for everything to fire up. This could take a minute or two, so be patient. When everything is done, run Docker compose ps to check everything is running nice and smoothly.

When everything is done and complete, you’re finally ready to actually launch Immich. Head to your browser and input the Static IPv4 address you assigned the container earlier. So, for me, that’s http://192.168.1.12:2283.

You should see the Immich login page. From here, you’ll need to create an account, download the Immich mobile app, and connect to your server (the previous IP address).


Using Immich for photo backups


I host my own Google Photos alternative and it’s faster than the real thing

Local processing changed how my photo library feels.

Mealie

Self-hosted recipe manager for the whole family

proxmox mealie self hosted recipe

A little while back, I tried to vibe-code a family recipe app that would allow my wife and kids to add recipes, ideas, and shopping items to a local app. Conceptually, it was good, but in practice, I couldn’t get it to where I wanted.

Then I discovered Mealie, a self-hosted recipe and meal-planning app that does much of the same job, without me having to code a new app.

Now, if you’re following along with Proxmox, like I’m using, you’ll need to create a new container, similar to what we did with Immich.

  • General: Set the hostname to mealie, then choose a secure password.
  • Template: Select the Debian 12 Bookworm template you just downloaded.
  • Disks: In this case, 8GB is fine.
  • CPU: Mealie is less intensive, so one core is fine.
  • Memory: Mealie is light in memory, too, so you can assign both Memory and Swap 1024MB.
  • Network: Set your IPv4 Static address and Gateway to the IP address uncovered in the ipconfig command you ran earlier.
  • DNS: The host settings should work fine.

Hit Finish, and then it’s time to get updating. Select your newly created container in the left panel, then hit Start. Open the Console and run the following command: apt update && apt upgrade -yYou’ll now need to install Docker, using the same commands as before. Run the following commands in order, one at a time.

  1. apt install -y ca-certificates curl gnupg
  2. install -m 0755 -d /etc/apt/keyrings
  3. curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg
  4. chmod a+r /etc/apt/keyrings/docker.gpg
  5. echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null
  6. apt update && apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin

Here’s where we deviate from the Immich installation with some Mealie-specific steps, such as making the directory. Input the following commands:

  1. mkdir /opt/mealie && cd /opt/mealie creates the directory.
  2. nano docker-compose.yml opens the configuration file.

Paste the following into the configuration file:

services: mealie: image: ghcr.io/mealie-recipes/mealie:latest container_name: mealie restart: always ports: - "9925:9000" volumes: - mealie-data:/app/data environment: - ALLOW_SIGNUP=true - TZ=Europe/London

volumes: mealie-data:Of course, swap the TZ field out for your own timezone. Press CTRL + O to save the configuration, then CTRL + X to exit.

Now, we’re on the final stretch. Input docker compose up -d to start the container, and you should be good to go. All you need to do now is create an account and start adding your recipes.

Uptime Kuma

How else are you going to track all of your self-hosted projects?

uptime kuma self hosted tracker.

You’re getting stuck into self-hosted projects, right? So now you need a way to keep track of all of your projects and their status and uptime at a glance. And wouldn’t you just know it? There’s a self-hosted project for that: Uptime Kuma.

In Proxmox, select Create CT in the top-right corner, then use the following settings:

  • General: Set the hostname to uptimekuma, then choose a secure password.
  • Template: Select the Debian 12 Bookworm template.
  • Disks: 4GB is enough.
  • CPU: All you need is one.
  • Memory: This time, set 512MB Memory, and 512MB Swap.
  • Network: Set your IPv4 Static address and Gateway to the IP address uncovered in the ipconfig command you ran earlier.
  • DNS: The host settings should work fine.

Hit Finish, and then it’s time to get updating. Select your newly created container in the left panel, then hit Start. Open the Console and run the following command: apt update && apt upgrade -y

You’ll now need to install Docker, using the same commands as before. Run the following commands in order, one at a time.

  1. apt install -y ca-certificates curl gnupg
  2. install -m 0755 -d /etc/apt/keyrings
  3. curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg
  4. chmod a+r /etc/apt/keyrings/docker.gpg
  5. echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null
  6. apt update && apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin

Now, run the following command to get Uptime Kuma running: docker run -d --restart=always -p 3001:3001 -v uptime-kuma:/app/data --name uptime-kuma louislam/uptime-kuma:1You can also use docker ps to check that it’s working properly.

Load Uptime Kuma with the Static IPv4 address you set earlier. You’ll need to create an admin account, but once done, you can start adding your self-hosted projects via their local IP address.


NextCloud login open on a HP laptop kept on a wooden table with an external HDD connected


The hybrid cloud setup that made me ditch paid Storage

My hybrid cloud setup combines the best of self-hosting and cloud backup.

Self-hosting is the dream

In a single weekend, I went from a bare Proxmox server to a private photo backup solution, a family recipe hub, and a live monitoring dashboard for everything running on my network — all on hardware I already owned, all completely free.

What I keep coming back to is how low the self-hosting barrier actually is. Each of these projects took twenty minutes to get running, and another hour for me to write up and take screenshots of.

The hardest part was spinning up the LXC container, and by the third one, that felt routine. Docker does most of the heavy lifting once it’s installed, and the projects themselves are mature enough that things just work.

There is something quite magical about hosting your own projects, and now you’ve seen how fast and simple most of it is, it’s time you spin up a container to see where you end up.



Source link