diff options
author | Christian Cleberg <hello@cleberg.net> | 2024-03-04 22:34:28 -0600 |
---|---|---|
committer | Christian Cleberg <hello@cleberg.net> | 2024-03-04 22:34:28 -0600 |
commit | 797a1404213173791a5f4126a77ad383ceb00064 (patch) | |
tree | fcbb56dc023c1e490df70478e696041c566e58b4 /blog/gemini-server/index.org | |
parent | 3db79e7bb6a34ee94935c22d7f0e18cf227c7813 (diff) | |
download | cleberg.net-797a1404213173791a5f4126a77ad383ceb00064.tar.gz cleberg.net-797a1404213173791a5f4126a77ad383ceb00064.tar.bz2 cleberg.net-797a1404213173791a5f4126a77ad383ceb00064.zip |
initial migration to test org-mode
Diffstat (limited to 'blog/gemini-server/index.org')
-rw-r--r-- | blog/gemini-server/index.org | 150 |
1 files changed, 150 insertions, 0 deletions
diff --git a/blog/gemini-server/index.org b/blog/gemini-server/index.org new file mode 100644 index 0000000..fd50c20 --- /dev/null +++ b/blog/gemini-server/index.org @@ -0,0 +1,150 @@ +#+title: Hosting a Gemini Server +#+date: 2021-04-17 +#+description: A guide to self-hosting a Gemini web server on your own server. +#+filetags: :sysadmin: + +* Similar Article Available +To read more about Gemini and ways to test out this new protocol without +your own server, see my previous post +[[../launching-a-gemini-capsule/][Launching a Gemini Capsule]]. + +* Preparation +This guide assumes you have access to a server accessible to the world +through a public IP address and that you own a domain name used for this +Gemini capsule. + +* Getting Started with Agate +We are going to use [[https://github.com/mbrubeck/agate][Agate]] for +this tutorial. This is a basic Gemini server written in Rust. It takes +very little time and maintenance to get it running. + +* Install Dependencies +First, you will need to install the Rust package for your system. On +Ubuntu, use the following commands (remember to use =sudo= if you are +not the root user). The Rust installation will give you options to +customize the installation; I used the default installation options. + +#+begin_src sh +sudo apt update && sudo apt upgrade -y +curl https://sh.rustup.rs -sSf | sh +#+end_src + +Remember to configure your shell with the new configuration: + +#+begin_src sh +source $HOME/.cargo/env +#+end_src + +Before we install agate, make sure you have the =gcc= package installed: + +#+begin_src sh +sudo apt install gcc +#+end_src + +Next, you'll need to install the agate executable with Rust's Cargo +package maintainer: + +#+begin_src sh +cargo install agate +#+end_src + +* Create Symlinks +Once Cargo has finished installing all the required packages, symlink +the executable to your $PATH. + +#+begin_src sh +sudo ln -s $HOME/.cargo/bin/agate /usr/local/bin/agate +#+end_src + +* Using Agate's Built-In Installation Tool +If you're running Ubuntu or Debian, use the Debian installation script +found in Agate's GitHub repository, under the =tools/debian= folder. + +#+begin_src sh +git clone https://github.com/mbrubeck/agate +cd agate/tools/debian +sudo ./install.sh +#+end_src + +* Configure the Gemini Service +We have a little more to do, but since this script tries to immediately +run the service, it will likely fail with an exit code. Let's add our +finishing touches. Edit the following file and replace the hostname with +your desired URL. You can also change the directory where content will +be served. + +#+begin_src sh +sudo nano /etc/systemd/system/gemini.service +#+end_src + +#+begin_src sh +# Edit these lines to whatever you want - see the next code block for my personal configuration. +WorkingDirectory=/srv/gemini +ExecStart=agate --hostname $(uname -n) --lang en +#+end_src + +This is my personal config: + +#+begin_src sh +WorkingDirectory=/var/gemini/ +ExecStart=agate --hostname gemini.example.com --lang en +#+end_src + +Since we've altered the systemd configuration files, we have to reload +the daemon. Let's do that, restart our service, and check its status. + +#+begin_src sh +sudo systemctl daemon-reload +sudo systemctl restart gemini.service +sudo systemctl status gemini.service +#+end_src + +* Fixing Systemd Errors +If you're still getting errors, the installation process may not have +properly enabled the gemini service. Fix it with the following commands. + +#+begin_src sh +sudo systemctl enable gemini.service +sudo systemctl restart gemini.service +sudo systemctl status gemini.service +#+end_src + +* Firewall Rules +Great! Our server is now functional and running. The first consideration +now is that you need to be able to access port 1965 on the server. If +you have a firewall enabled, you'll need to open that port up. + +#+begin_src sh +sudo ufw allow 1965 +sudo ufw reload +#+end_src + +* Creating Content +Let's create the Gemini capsule. Note that wherever you set the +WorkingDirectory variable to earlier, Agate will expect you to put your +Gemini capsule contents in a sub-folder called "content." So, I place my +files in "/var/gmi/content." I'm going to create that folder now and put +a file in there. + +#+begin_src sh +sudo mkdir /var/gemini/content +sudo nano /var/gemini/content/index.gmi +#+end_src + +You can put whatever you want in the "index.gmi" file, just make sure +it's valid Gemtext. + +* The Results +Here are some screenshots of the Gemini page I just created in the +[[https://gmi.skyjake.fi/lagrange/][Lagrange]] browser and the +[[https://github.com/makeworld-the-better-one/amfora][amfora]] browser. + +#+caption: GUI Gemini browser +[[https://img.cleberg.net/blog/20210417-hosting-a-gemini-server/lagrange.png]] + +/Lagrange/ + +#+caption: CLI Gemini browser +[[https://img.cleberg.net/blog/20210417-hosting-a-gemini-server/amfora.png]] + +/Amfora/ |