aboutsummaryrefslogtreecommitdiff
path: root/blog/gemini-server
diff options
context:
space:
mode:
authorChristian Cleberg <hello@cleberg.net>2024-03-04 22:34:28 -0600
committerChristian Cleberg <hello@cleberg.net>2024-03-04 22:34:28 -0600
commit797a1404213173791a5f4126a77ad383ceb00064 (patch)
treefcbb56dc023c1e490df70478e696041c566e58b4 /blog/gemini-server
parent3db79e7bb6a34ee94935c22d7f0e18cf227c7813 (diff)
downloadcleberg.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')
-rw-r--r--blog/gemini-server/index.org150
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/