This weekend I installed my own Lemmy instance, so I want to share the instructions to help others, who want to do the same.
I used the Ansible script and it was pretty easy. First I wanted to use my existing PosgreSQL server, what I already use for my Akkoma server. It didn't really work out that well, the migrations failed and I couldn't figure out what didn't work. Eventually I just went back using PostgreSQL on Docker. If you don't start modifying the script, and just use the dockerized PostgreSQL, you will have no problems with the installation.
What you need first is a cheap (or expensive, if you decide to invite million friends to your instance) VPS: I use Hetzner Cloud, which has been working for me super well for many years and I'm very happy with the service. I got the second cheapest AMD instance, with two cores and two gigabytes of RAM. Before buying the instance, you need to upload an SSH key to Hetzner. If you don't have one, creating is easy from the command line: ssh-keygen -t ecdsa
. What you need to give to Hetzner is your public key; the one with the .pub
extension in your $HOME/.ssh
directory. Do not give the private key to anyone. Go with Ubuntu, might work the best with the Ansible script.
You can now SSH to the instance: ssh root@<ip-address from the Hetzner control panel>
.
Next what you need is a domain name for the server. Lemmy wants an A
record, and being a good internet citizen, you also get an AAAA
record for the IPv6 users. I use Cloudflare for my DNS records. It's very easy to set them from their control panel. Do not set the proxy on just yet, we'll come back to that later. You can get the IP addresses from the Hetzner panel. The IPv4 you just copy, for the IPv6 you have to replace the ::/64
with ::1
.
Now you should be able to ssh to your instance with the new domain name. It's time to follow the Ansible instructions for Lemmy, just run the script and see it's done correctly with no errors. When you can login to your Lemmy instance as an admin, go back to Cloudflare and turn on proxying to your A
and AAAA
records to hide your server IP and prevent DDOS attacks.
The first time federation is a bit slow in the beginning. Go to search in your instance, and search for !lemmy@lemmy.ml. It takes a while for the result to arrive. You can SSH to your instance, and look for the logs of your Lemmy image:
root@lemmy:~# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9e940b84cc45 dessalines/lemmy-ui:0.17.3 "docker-entrypoint.s…" 22 hours ago Up 22 hours 127.0.0.1:6719->1234/tcp lemmynaukio_lemmy-ui_1
6442d9d93554 dessalines/lemmy:0.17.3 "/app/lemmy" 22 hours ago Up 22 hours 127.0.0.1:20926->8536/tcp lemmynaukio_lemmy_1
36a030f7bf27 asonix/pictrs:0.3.1 "/sbin/tini -- /usr/…" 22 hours ago Up 22 hours 6669/tcp, 127.0.0.1:8934->8080/tcp lemmynaukio_pictrs_1
979be89076b2 postgres:15-alpine "docker-entrypoint.s…" 22 hours ago Up 22 hours 5432/tcp lemmynaukio_postgres_1
774112d48c87 mwader/postfix-relay "/root/run" 23 hours ago Up 23 hours 25/tcp lemmynaukio_postfix_1
> docker logs -f 6442d9d93554
This should start showing you the federated posts in real time. Eventually your search will show up, you can click the community open and subscribe to it. Do the same for other communities what you want to follow, federate other instances and eventually you are part of the federation. It gets faster and easier for the other users, but the beginning is a bit slow.
Congratulations, you're now a Lemmy admin and part of the bigger federation.
How does it compare when hosting own instance. I have dedicated server and probably going to spin up instance just for me and friends.
Skip the Ansible and install the Docker containers by yourself. Something Lemmy should document a bit better is what version and what extensions of PostgreSQL it needs. If you have an existing server, some of the migrations might fail. Their docker image is using PostgreSQL version 15, so I think that is a safe bet to start.
And even better, if using NixOS, there's already a recipe for Lemmy: https://nixos.wiki/wiki/Lemmy