Domani connects your domain to whatever you want to host on it, all with no account needed
Go to file
2023-07-09 13:43:38 +02:00
.github/workflows init 2023-05-03 09:58:06 +02:00
src Config struct for http server 2023-07-09 13:43:38 +02:00
.env.dev Rename to domani 2023-06-25 13:35:59 +02:00
.gitignore Build release as a static binary 2023-05-15 22:58:40 +02:00
Cargo.lock Rename to domani 2023-06-25 13:35:59 +02:00
Cargo.toml Rename to domani 2023-06-25 13:35:59 +02:00
default.nix init 2023-05-03 09:58:06 +02:00
flake.lock Switch to using nightly 2023-05-08 18:25:51 +02:00
flake.nix Implemented acme store, started on manager 2023-05-18 12:22:35 +02:00
README.md move roadmap to README 2023-07-04 19:09:07 +02:00
rust-toolchain.toml Build release as a static binary 2023-05-15 22:58:40 +02:00
shell.nix init 2023-05-03 09:58:06 +02:00
TODO Removed usage of sync::Arc where possible 2023-06-21 14:02:42 +02:00

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 which may or may not be live

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.

Configuration

Domani is configured via command-line arguments or environment variables:

      --http-domain <HTTP_DOMAIN>
          [env: DOMANI_HTTP_DOMAIN=]

      --http-listen-addr <HTTP_LISTEN_ADDR>
          [env: DOMANI_HTTP_LISTEN_ADDR=] [default: [::]:3030]

      --https-listen-addr <HTTPS_LISTEN_ADDR>
          E.g. '[::]:443', if given then SSL certs will automatically be retrieved for all domains using LetsEncrypt [env: DOMANI_HTTPS_LISTEN_ADDR=]

      --passphrase <PASSPHRASE>
          [env: DOMANI_PASSPHRASE=]

      --origin-store-git-dir-path <ORIGIN_STORE_GIT_DIR_PATH>
          [env: DOMANI_ORIGIN_STORE_GIT_DIR_PATH=]

      --domain-checker-target-a <DOMAIN_CHECKER_TARGET_A>
          [env: DOMANI_DOMAIN_CHECKER_TARGET_A=]

      --domain-checker-resolver-addr <DOMAIN_CHECKER_RESOLVER_ADDR>
          [env: DOMANI_DOMAIN_CHECKER_RESOLVER_ADDR=] [default: 1.1.1.1:53]

      --domain-config-store-dir-path <DOMAIN_CONFIG_STORE_DIR_PATH>
          [env: DOMANI_DOMAIN_CONFIG_STORE_DIR_PATH=]

      --domain-acme-store-dir-path <DOMAIN_ACME_STORE_DIR_PATH>
          [env: DOMANI_DOMAIN_ACME_STORE_DIR_PATH=]

      --domain-acme-contact-email <DOMAIN_ACME_CONTACT_EMAIL>
          [env: DOMANI_DOMAIN_ACME_CONTACT_EMAIL=]

  -h, --help
          Print help

  -V, --version
          Print version

HTTPS Support

Domani will automatically handle setting up HTTPS via LetsEncrypt for both the domani frontend site and all domains which it has been configured to serve.

By default HTTPS is not enabled, but can be easily enabled by setting the following arguments:

--https-listen-addr='[::]:443'
--domain-acme-contact-email='foo@example.com'
--domain-acme-store-dir-path='/some/secure/directory'

The contact email can be anything, it doesn't have to be real. The store directory will have all SSL private keys written to it, and so should be secured as best as possible.

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:

nix develop

Within the shell which opens you can do cargo run to start a local instance.

Roadmap

  • Support for AAAA and CNAME records
  • Support for more backends than just git repositories, including:
    • IPFS/IPNS
    • Alternative URLs (reverse proxy)
    • Google Drive
    • Dropbox