97 lines
2.8 KiB
Markdown
97 lines
2.8 KiB
Markdown
# Domani
|
|
|
|
Domani is a self-hosted rust service which connects a DNS hostname to a data
|
|
backend (e.g. a git repository), all with no account needed. The user only
|
|
inputs their domain name, their desired backend, and then adds two entries to
|
|
their DNS server.
|
|
|
|
[Demo](https://domani.micropelago.net)
|
|
|
|
Domani supports serving domains using the following protocols:
|
|
|
|
- HTTP
|
|
- HTTPS (with SSL certificates automatically retrieved using LetsEncrypt)
|
|
- [Gemini](https://gemini.circumlunar.space/)
|
|
|
|
Files are served as-is, with their extension being used to determine
|
|
Content-Type. If a directory is requested (e.g. `/some/dir/`) then `index.html`
|
|
will be requested if the protocol is HTTP, or `index.gmi` if the protocol is
|
|
gemini.
|
|
|
|
## Build
|
|
|
|
Domani uses nix flakes for building and setting up the development environment.
|
|
|
|
In order to create a release binary:
|
|
|
|
```
|
|
nix build
|
|
```
|
|
|
|
A statically compiled binary will be placed in the `result` directory.
|
|
|
|
A full release, which cross-compiles binaries for all supported platforms, can
|
|
be generated by doing:
|
|
|
|
```
|
|
nix build '.#release'
|
|
```
|
|
|
|
*NOTE* that cross-compiling will download a separate build environment for each
|
|
target platform, which can take up quite a bit of disk space (>10GB).
|
|
gigs).
|
|
|
|
## Configuration
|
|
|
|
Domani is configured via a YAML file whose path is given on the command-line.
|
|
The format of the YAML file, along with all default values, can be found in the
|
|
`config.yml` file in this repo.
|
|
|
|
The YAML config file can be passed to the Domani process via the `--config-path`
|
|
CLI parameter:
|
|
|
|
```
|
|
domani --config-path <path>
|
|
```
|
|
|
|
### HTTPS Support
|
|
|
|
By default HTTPS is not enabled, but can be enabled by setting the
|
|
`service.http.https_addr` field in the YAML config. There are a few other fields
|
|
in the configuration file which must be correctly configured if HTTPS is set up,
|
|
please read through the example file above carefully.
|
|
|
|
Once HTTPS is enabled, Domani will automatically handle setting it up via
|
|
LetsEncrypt for both the Domani web interface and all domains which it is
|
|
configured to serve.
|
|
|
|
## Development
|
|
|
|
Domani uses nix flakes for building and setting up the development environment.
|
|
In order to open a shell with all necessary tooling (expected rust toolchain
|
|
versions, etc...) simply do:
|
|
|
|
```
|
|
cp config-dev.yml.tpl config-dev.yml
|
|
nix develop
|
|
```
|
|
|
|
Within the shell which opens you can do `cargo run` to start a local instance.
|
|
|
|
Using the default configuration, the domain `domani-test.localhost` should be
|
|
immediately available at:
|
|
|
|
* `http://domani-test.localhost:3080`
|
|
* `gemini://domani-test.localhost:3965`
|
|
|
|
## Roadmap
|
|
|
|
* Tutorials aimed at beginner users.
|
|
|
|
* Support for more backends than just git repositories, including:
|
|
* IPFS/IPNS
|
|
* Small static files (e.g. for well-knowns)
|
|
|
|
* Automatic HTTP/gemtext rendering for markdown files.
|
|
* Automatic HTTP rendering for gemtext files.
|