Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/jfmcbrayer/germinal
A gemini protocol server in Common Lisp; moving to https://git.carcosa.net/jmcbray/germinal
https://github.com/jfmcbrayer/germinal
Last synced: 2 months ago
JSON representation
A gemini protocol server in Common Lisp; moving to https://git.carcosa.net/jmcbray/germinal
- Host: GitHub
- URL: https://github.com/jfmcbrayer/germinal
- Owner: jfmcbrayer
- License: agpl-3.0
- Created: 2019-06-23T20:46:33.000Z (over 5 years ago)
- Default Branch: master
- Last Pushed: 2021-05-11T12:05:23.000Z (over 3 years ago)
- Last Synced: 2024-08-03T17:09:39.672Z (6 months ago)
- Language: Common Lisp
- Homepage:
- Size: 80.1 KB
- Stars: 40
- Watchers: 5
- Forks: 2
- Open Issues: 0
-
Metadata Files:
- Readme: README.org
- License: LICENSE.md
Awesome Lists containing this project
- awesome-gemini - Germinal - serves any type of document with an appropriate mime type. (Servers / Graphical)
README
* Germinal, a Gemini Protocol server
Germinal is a server for the [[gopher://zaibatsu.circumlunar.space/1/~solderpunk/gemini][Gemini Protocol]], written in Common Lisp.
It is named after the early 20th century Yiddish-language anarchist
newspaper [[https://en.wikipedia.org/wiki/Germinal_(journal)][Germinal]]. I wanted to name it after an anarchist publication to
convey the idea of people sharing information and ideas with each other, in
contrast to the way the web is used to push advertising from corporations to
people. And it happened that Germinal shares some sounds with Gemini.** Features
*** Current
- Serves any type of document with an appropriate mime type.
- Serves .gmi files as text/gemini, the gemini mapfile format.
- Serves index.gmi as a directory listing, if it exists
- Serves a simple directory listing for directories without index.gml
- Serves only world-readable content, much like [[http://www.gophernicus.org/][Gophernicus]].
- Configuration in Lisp, including routes and middleware
- Handle defined routes with custom Lisp functions
- Add middleware to add side-effects (like logging) to every request.*** Planned
- More example handlers and middleware functions
- Keep up to date with any specification changes/clarifications.
*** Maybe
- authentication by client certificate
- cgi-bin support** Installation
*** With Roswell
1. Install [[https://github.com/roswell/roswell/wiki/Installation][Roswell]].
2. Put the Germinal sources in a folder that Common Lisp knows about;
usually, either ~~/common-lisp/~, or ~~/.roswell/local-projects/~.
You can just put a symbolic link to the folder containing the sources
into either of those directories.
3. Edit ~germinal.ros~, setting the configuration variables to what's
appropriate for your server. In particular, you'll want to use
[[https://tildegit.org/solderpunk/gemcert][gemcert]] to generate keys for your domain, and set your domain name
and the path to the keys in ~germinal.ros~. If you don't want to run
a swank (debugging) server on localhost, you'll want to comment out
the lines that start it.
4. Run ~germinal.ros~. For production deployment, you'll probably want
to create a user such as ~germinal~ for Germinal to run as. They'll
need to own their home directory, and to run ~ros setup~ before you
run ~germinal.ros~ as them. They'll also need the Germinal sources
symlinked into someplace Roswell can find it, as above.The ~germinal.service~ file is a pretty typical systemd configuration for
running Germinal from Roswell.
*** ManuallyGerminal doesn't *depend* on Roswell; you can start it up any old way,
as long as you have all the dependencies installed (generally with
quicklisp). You can write a script to start it with ~sbcl -load~ or
whatever you like; it just has to set the configuration variables and
run ~germinal:start~.