91 lines
3.9 KiB
Raw Normal View History

2018-06-11 22:10:13 -04:00
lemoncurry (always all-lowercase) is a Django-based personal site designed to
operate as part of the [IndieWeb][]. It currently supports the following
IndieWeb specifications natively.
- All content is exposed using standard [microformats2][] markup, making it
easy for other sites and applications across the IndieWeb to consume.
- Additionally, the site owner's profiles are exposed using [rel-me][],
enabling independent verification of their identity across various services.
This permits [IndieAuth.com][] to authenticate the site's owner using a
social profile, such as a Twitter account. However, this functionality is not
necessary because lemoncurry also fully implements…
2018-06-11 22:10:13 -04:00
- [IndieAuth][], an protocol derived from OAuth 2.0 which enables the site's
owner to authorise access to their domain directly from the lemoncurry site
itself. Additionally, tokens for further access to the lemoncurry site may be
requested and issued, including customisable token scope as in OAuth.
2018-06-11 22:10:13 -04:00
- [Micropub][] is *partially* supported - using a token obtained through
IndieAuth, clients may post new content to the lemoncurry site using either
the form-encoded or JSON request formats. There is currently no support for
updating or deleting existing content through Micropub, although this is of
course planned.
2018-06-11 22:10:13 -04:00
- [Webmention][], used to enable rich commenting and social interaction between
separate IndieWeb sites, is partially supported. lemoncurry will correctly
*send* webmentions to all URLs mentioned in a published entry. However, it
currently does not expose an endpoint for *receiving* webmentions.
2018-06-11 22:10:13 -04:00
- [WebSub][] is also partially supported. When content is posted through
Micropub, WebSub is pinged as it should be - however, since only creating
*new* content through Micropub is supported, updates do not currently cause a
WebSub ping.
2018-06-11 22:10:13 -04:00
[IndieAuth]: https://www.w3.org/TR/indieauth/
[IndieAuth.com]: https://indieauth.com/
[IndieWeb]: https://indieweb.org/
[microformats2]: http://microformats.org/wiki/microformats2
[Micropub]: https://www.w3.org/TR/micropub/
[rel-me]: http://microformats.org/wiki/rel-me
[Webmention]: https://www.w3.org/TR/webmention/
[WebSub]: https://www.w3.org/TR/websub/
# Requirements
lemoncurry uses the following tools:
* [Pipenv][] - developed with Pipenv 2018.5.18, but should work with most versions.
* [Yarn][] - again, developed with Yarn 1.7.0, but should work with most versions.
As well as the following services:
* [PostgreSQL][] - create a database named `lemoncurry`. Socket auth is
recommended, so ensure the UNIX user you'll be running lemoncurry with has
access to that database. Alternatively, set the `POSTGRES_PASSWORD`
environment variable to use password auth.
2018-06-11 22:10:13 -04:00
* [Redis][] - lemoncurry expects to find Redis on port 6380, rather than the
standard port of 6379. Sorry about that.
If you're running in production, I'd recommend [Gunicorn][], which is already part
of lemoncurry's Pipfile. Ensure you run Gunicorn behind a secure reverse proxy,
such as [Nginx][].
If you're running in development, the usual Django `runserver` command should
2018-06-11 22:10:13 -04:00
be fine.
[Gunicorn]: https://gunicorn.org/
[Nginx]: https://nginx.org/en/
[Pipenv]: https://docs.pipenv.org/
[PostgreSQL]: https://www.postgresql.org/
[Redis]: https://redis.io/
[Yarn]: https://yarnpkg.org/
# Installation
Clone the repo recursively - since it uses Git submodules - and then install
both Python and Node dependencies.
2018-06-11 22:10:13 -04:00
$ git clone --recursive https://git.00dani.me/00dani/lemoncurry
2018-06-11 22:10:13 -04:00
$ cd lemoncurry
$ pipenv install --dev
2018-06-11 22:10:13 -04:00
$ yarn install
Once those steps complete, you should be able to perform the usual Django steps
to get a development server up and running. (If you'd prefer, you can use
`pipenv shell` to activate lemoncurry's virtualenv, rather than prefacing each
command with `pipenv run`. I like being explicit.)
$ pipenv run ./manage.py migrate
$ pipenv run ./manage.py collectstatic
$ pipenv run ./manage.py runserver 3000