Last time we discussed how to set up Lemmy locally, this time we will discuss setting up Lemmy in production mode on a Rasberry Pi with functioning image upload by using Docker. This time we have to deviate more from the official guide as some things don’t seem to work. To follow this guide, you will need a basic understanding of the terminal and a Raspberry Pi 3 or 4 (I have only tested this on the Raspberry Pi 4). If you are on Windows 10 or 11 you can use OpenSSH in PowerShell.
Setting up the Raspberry Pi
To prepare an SD card for the Raspberry Pi, download the Raspberry Pi Imager. Insert the SD card, select the Raspberry Pi OS Lite (64-bit) and make sure you pick the SD card for Storage. You could pick the full version of the OS, but make sure you pick a 64-bit version of Debian Bullseye. Before clicking “Write”, go click on the settings icon and enable ssh. You can also set up a user, hostname, authorization keys and WiFi.
Now insert the card into your Raspberry Pi, connect power and you should be able to ssh to the pi. So, with the default pi user, that would be ssh pi@raspberrypi
.
Installing Docker
To install Docker we have to follow the Docker Debian installation guide (The Raspian guide leads to a configuration that won’t be able to find any stable docker installation).
First, we have to install the dependencies for adding the new repository:
sudo apt-get update
sudo apt-get install ca-certificates curl gnupg
Add Docker’s official GPG key:
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
And set up the Docker repository:
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" | \ sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
Now we can install docker and docker-compose:
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin docker-compose
To be able to run docker command without using sudo we have to add our current user to the Docker group:
sudo groupadd docker
`sudo usermod -aG docker $USERz
newgrp docker
Configuring Lemmy
We need to download a few configuration files. The configuration files listed in the guide don’t support Arm64, so I took the files from Lemmy 1.17.3 and modified them, so they pick the ARM version of the docker images. The NGINX configuration does work, but it is included to make the download simpler:
curl https://gist.githubusercontent.com/Fireblade75/95a0dfa7abbedff554eb9109434060cd/raw/5cf6eddbe706dd25b84234ce619f18a4faca854a/docker-compose.yml -o docker-compose.yml
curl https://gist.githubusercontent.com/Fireblade75/95a0dfa7abbedff554eb9109434060cd/raw/5cf6eddbe706dd25b84234ce619f18a4faca854a/lemmy.hjson -o lemmy.hjson
curl https://gist.githubusercontent.com/Fireblade75/95a0dfa7abbedff554eb9109434060cd/raw/5cf6eddbe706dd25b84234ce619f18a4faca854a/nginx.conf -o nginx.conf
If you want to change the default password of the database, make sure that you change it both in the docker-compose file and the lemmy.hjson configuration.
Now we can run docker-compose up
, this downloads all the containers and starts the Lemmy server. Check the logs for errors and see if there is anything we still need to solve. When the services are done starting, we can stop the cluster again by pressing control + C.
A problem I had was that the image server did not get the right permissions to the location where it wants to store its files. To solve this, we simply have to run the following command:
sudo chown -R 991:991 volumes/pictrs/
Running Lemmy
When all errors are solved, we can start the cluster in detached mode. Let’s first destroy the containers by using docker-compse down
. And after that we can run docker-compose up -d
. The containers should start now, but this time docker-compose is running in detached mode, this mode does not block the terminal and lets Docker run in the background.
You now have a working installation of Lemmy on a Raspberry Pi. It listens to port 80, so you should be able to navigate to it from other devices in your network. For example, by going to http://raspberrypi/ . The default user is lemmy and its password is lemmylemmy, this is configured inside the lemmy.hjson file. If you later want to update Lemmy to a newer version, you can just change the version of the Docker images inside the docker-compose file.
Hopefully this helped you understand how to set up Lemmy, if you have any question please ask.
I installed Fedora 40 with Gnome and Wayland a few days ago on my Surface pro gen 1 and have been very happy with the results so far. I do have a type cover and I do use it a lot and I use touch input instead of a mouse. Gnome supports most touch input, and that hasn't been an issue so far. Some third party applications don't understand what 'pinch to zoom' is though. The onscreen keyboard situation on Wayland seems to be a bit messy. I didn't really like the default gnome keyboard and I couldn't get a better keyboard to work (note that for me, it is also important that the OSK is disabled when the type cover is attached, so you won't have that issue).
The performance on the original Surface Pro is fine, I can even emulate Windows games trough Steam, I tried RuneScape (OldSchool and RuneScape 3) and Tunic. Browsing, reading Discord, watching videos all work fine. The main limitation when working with the device seems to be the 4 GB of RAM. So close other apps like the browser when starting a game, or the entire system can freeze. This seems to be mostly an issue when running multiple Electron based applications, gaming and compiling code.
The newer Surface devices have some Microsoft specific hardware that is not always well-supported by the kernel. If you have issues you can try the kernel made specifically for the Surface devices. https://github.com/linux-surface/linux-surface Personally I haven't tried it as everything just worked so far on my device (they do try to get their patches upstream, so that is probably the reason).
For drawing, I always used Adobe and Affinity software, I did try to get Affinity Photo installed, but I did not succeed yet. I tried both version 1 and 2.