💾 Archived View for gmi.bacardi55.io › blog › 2021 › 02 › 06 › deploying-my-own-gemini-capsule captured on 2023-06-14 at 14:07:45. Gemini links have been rewritten to link to archived content
⬅️ Previous capture (2023-01-29)
-=-=-=-=-=-=-
Posted on 2021-02-06
I've been following Gemini for a bit of time and as I liked the concept and I love to play with new things, I decided to launch my own gemini capsule (aka, my own "site" on the gemini "web").
You can access it here: gemini://gmi.bacardi55.io
Disclaimer: The result is not perfect yet. For now I've only put my blog posts but internal links to other content or images do not fully work yet but I'll fix this later.
I do plan to create specific content on gmi at some point, for things that are not really "blog post" material but still worth typing for my future self :D.
I'd like to highlight and thanks some posts that convince me of doing it:
And others that I've seen in my RSS feeds or on mastodon :).
1: https://samsai.eu/post/introduction-to-gemini/
2: https://sylvaindurand.org/discovering-the-gemini-protocol/
3: https://lottalinuxlinks.com/my-gemini-capsule-has-launched/
For those that don't know, as said on the gemini website[4]:
4: https://gemini.circumlunar.space/
Gemini is a new, collaboratively designed internet protocol, which explores the space inbetween gopher and the web, striving to address (perceived) limitations of one while avoiding the (undeniable) pitfalls of the other.
I suggest you read more about it on the FAQ page[5] that contains all the necessary informations :).
5: https://gemini.circumlunar.space/docs/faq.html
I was looking for an extra lightweight server and trying to avoid Go or Rust for server part. In the end, I I selected gmnisrv[6], developed by Drew Devault[7] in C. Easy to install, self manage certificate and very light to run on an old raspberry pi.
6: https://git.sr.ht/~sircmpwn/gmnisrv
You should already have openssl installed, but if not, install it with your packet manager.
Also, on the project page[8] it says that scdoc[9] is optional, but I couldn't install without it, so I ended up installing it too.
8: https://git.sr.ht/~sircmpwn/gmnisrv
9: https://git.sr.ht/~sircmpwn/scdoc
To install scdoc:
git clone https://git.sr.ht/~sircmpwn/scdoc cd scdoc make sudo make install
Then, to install gmnisrv:
git clone https://git.sr.ht/~sircmpwn/gmnisrv cd gmnisrv mkdir build cd build ../configure --prefix=/usr make sudo make install
Copy the default config file at the right place:
cp /usr/share/gmnisrv/gmnisrv.ini /etc/gmnisrv.ini
And edit it as needed for the certificate path and the files path.
I use /srv/gemini/gmi.bacardi55.io as the path where my *.gmi files will be.
For now, let's create a default hellowolrd page:
echo "hellowolrd55!" > /srv/gemini/gmi.bacardi55.io/index.gmi
To automate the (re)start of the server, I created a systemd service. To do so, I created /etc/systemd/system/gmnisrv.service with the following content:
[Unit] Description=Gemini Server gminisrv After=network.target [Service] Type=simple # Another Type: forking User=gemini ExecStart=/usr/bin/gmnisrv Restart=always [Install] WantedBy=multi-user.target
As you can see, I use a dedicated gemini user on my system to run it as a limited users.
Then, enable the service and then start it:
sudo systemctl enable gmnisrv sudo systemctl start gmnisrv
Remember also that it uses port 1965, so if you selfhost at home, don't forget to open the port and redirect flow on this port on the right server.
To test locally first, edit your /etc/hosts to map the domain config in the server file and the IP of the server in a gemini client.
You can find a list of clients on this page[10]. On my side, I used gmni[11] but any client will do.
10: https://github.com/kr1sp1n/awesome-gemini
11: https://git.sr.ht/~sircmpwn/gmni
To test it works from the outside, either install a cli/tui client on an external server or test it via an online portal like this one[12].
12: https://portal.mozz.us/gemini/gemini.circumlunar.space/
And voilà, you should see your hellowolrd page :)
In the next post, I talk about how I use my blog generator Hugo[13] to generate both this blog and the gemini pages.