Refactor how the configuration is documented

This commit is contained in:
Brian Picciano 2023-08-25 18:44:55 +02:00
parent 0b02400f4e
commit 0b5b2cb3f3
5 changed files with 135 additions and 137 deletions

2
.gitignore vendored
View File

@ -1,4 +1,4 @@
/target /target
.cargo .cargo
/result /result
config.yml config-dev.yml

138
README.md
View File

@ -33,140 +33,8 @@ A statically compiled binary will be placed in the `result` directory.
## Configuration ## Configuration
Domani is configured via a YAML file whose path is given on the command-line. 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, is as follows: The format of the YAML file, along with all default values, can be found in the
`config.yml` file in this repo.
```yaml
origin:
# Path under which all origin data (i.e. git repositories, file caches,
# etc...) will be stored.
#
# This should be different than any other store_dir_paths.
#store_dir_path: REQUIRED
domain:
# Path under which all domain data (i.e. domains configured by users, HTTPS
# certificates, etc...) will be stored.
#
# This should be different than any other store_dir_paths.
#store_dir_path: REQUIRED
#dns:
# Address of DNS resolver to use.
#resolver_addr: "1.1.1.1:53"
#acme:
# Contact email to use when creating HTTPS certificates using LetsEncrypt.
# This email will be used for notifying you if certificates are not being
# renewed.
#contact_email: REQUIRED if service.http.https_addr is set
# The domain name which will be used to serve the web interface of Domani. If
# service.http.https_addr is enabled then an HTTPS certificate for this domain
# will be retrieved automatically.
#
# This can be set to null to disable the web interface entirely.
#interface_domain: "localhost"
# builtins are domains whose configuration is built into domani. These domains
# are not able to be configured via the web interface, and will be hidden from
# it unless the `public` key is set to true.
#builtin_domains:
# An example built-in domain backed by a git repo.
#git.example.com:
#kind: git
#url: "https://somewhere.com/some/repo.git"
#branch_name: main
# If true then the built-in will be included in the web interface's
# domain list, but will not be configurable in the web interface
#public: false
#proxied_domains:
# An example proxied domain backed by an gemini and HTTP reverse-proxies to
# other backends.
#
# HTTP requests will be proxied to http_url, and gemini requests will be
# proxied to gemini_url. Either can be null to disable serving on that
# protocol.
#
# HTTP requests to the backing service will automatically have
# X-Forwarded-For and (if HTTPS) X-Forwarded-Proto headers added to them.
#
# Proxies are currently limited in the following ways:
# * http_url must be to an http endpoint (not https)
# * dns.resolver_addr is ignored and the system-wide dns is used
#
#example.com:
#http_url: "http://some.other.service.com"
#gemini_url: "gemini://some.other.service.com"
# Extra headers to add to proxied requests
#http_request_headers:
# - name: Host
# value: "yet.another.service.com"
# - name: X-HEADER-TO-DELETE
# value: ""
# Set to true to prevent the domain from being served over https, even if
# http_url is set.
#https_disabled: false
# External domains will have a TLS key/cert generated and signed for them, but
# which will not be served by domani itself. The key/cert files will be placed
# in the configured paths.
#
# HTTPS must be enabled for external_domains to be used.
#external_domains:
#example.com
# tls_key_path: /dir/path/key.pem
# tls_cert_path: /dir/path/cert.pem
service:
# Passphrase which must be given by users who are configuring new domains via
# the web interface.
#passphrase: REQUIRED
# DNS records which users must add to their domain's DNS so that
# Domani can serve the domains. All records given must route to this Domani
# instance.
#
# A CNAME record with the interface_domain of this server is automatically
# included, if it's not null itself.
#dns_records:
#- kind: A
# addr: 127.0.0.1
#- kind: AAAA
# addr: ::1
# NOTE that the name given here must resolve to the Domani server.
#- kind: CNAME
# name: domain.com
#http:
# The address to listen for HTTP requests on. This must use port 80 if
# https_addr is set.
#http_addr: "[::]:3080"
# The address to listen for HTTPS requests on. Defaults to not having HTTP
# enabled. You can enable HTTPS by setting this to "[::]:443".
#https_addr: null
#gemini:
# The address to listen for gemini requests on. Set this to null to disable
# gemini support.
#gemini_addr: "[::]:3965"
```
The YAML config file can be passed to the Domani process via the `--config-path` The YAML config file can be passed to the Domani process via the `--config-path`
CLI parameter: CLI parameter:
@ -193,7 +61,7 @@ In order to open a shell with all necessary tooling (expected rust toolchain
versions, etc...) simply do: versions, etc...) simply do:
``` ```
cp config.yml.tpl config.yml cp config-dev.yml.tpl config-dev.yml
nix develop nix develop
``` ```

130
config.yml Normal file
View File

@ -0,0 +1,130 @@
origin:
# Path under which all origin data (i.e. git repositories, file caches,
# etc...) will be stored.
#
# This should be different than any other store_dir_paths.
#store_dir_path: REQUIRED
domain:
# Path under which all domain data (i.e. domains configured by users, HTTPS
# certificates, etc...) will be stored.
#
# This should be different than any other store_dir_paths.
#store_dir_path: REQUIRED
#dns:
# Address of DNS resolver to use.
#resolver_addr: "1.1.1.1:53"
#acme:
# Contact email to use when creating HTTPS certificates using LetsEncrypt.
# This email will be used for notifying you if certificates are not being
# renewed.
#contact_email: REQUIRED if service.http.https_addr is set
# The domain name which will be used to serve the web interface of Domani. If
# service.http.https_addr is enabled then an HTTPS certificate for this domain
# will be retrieved automatically.
#
# This can be set to null to disable the web interface entirely.
#interface_domain: "localhost"
# builtins are domains whose configuration is built into domani. These domains
# are not able to be configured via the web interface, and will be hidden from
# it unless the `public` key is set to true.
#builtin_domains:
# An example built-in domain backed by a git repo.
#git.example.com:
#kind: git
#url: "https://somewhere.com/some/repo.git"
#branch_name: main
# If true then the built-in will be included in the web interface's
# domain list, but will not be configurable in the web interface
#public: false
#proxied_domains:
# An example proxied domain backed by an gemini and HTTP reverse-proxies to
# other backends.
#
# HTTP requests will be proxied to http_url, and gemini requests will be
# proxied to gemini_url. Either can be null to disable serving on that
# protocol.
#
# HTTP requests to the backing service will automatically have
# X-Forwarded-For and (if HTTPS) X-Forwarded-Proto headers added to them.
#
# Proxies are currently limited in the following ways:
# * http_url must be to an http endpoint (not https)
# * dns.resolver_addr is ignored and the system-wide dns is used
#
#example.com:
#http_url: "http://some.other.service.com"
#gemini_url: "gemini://some.other.service.com"
# Extra headers to add/remove to proxied requests
#http_request_headers:
# - name: Host
# value: "yet.another.service.com"
# - name: X-HEADER-TO-DELETE
# value: ""
# Set to true to prevent the domain from being served over https.
#https_disabled: false
# External domains will have a TLS key/cert generated and signed for them, but
# which will not be served by domani itself. The key/cert files will be placed
# in the configured paths.
#
# HTTPS must be enabled for external_domains to be used.
#external_domains:
#example.com
# tls_key_path: /dir/path/key.pem
# tls_cert_path: /dir/path/cert.pem
service:
# Passphrase which must be given by users who are configuring new domains via
# the web interface.
#passphrase: REQUIRED
# DNS records which users must add to their domain's DNS so that
# Domani can serve the domains. All records given must route to this Domani
# instance.
#
# A CNAME record with the interface_domain of this server is automatically
# included, if it's not null itself.
#dns_records:
#- kind: A
# addr: 127.0.0.1
#- kind: AAAA
# addr: ::1
# NOTE that the name given here must resolve to the Domani server.
#- kind: CNAME
# name: domain.com
#http:
# The address to listen for HTTP requests on. This must use port 80 if
# https_addr is set.
#http_addr: "[::]:3080"
# The address to listen for HTTPS requests on. Defaults to not having HTTP
# enabled. You can enable HTTPS by setting this to "[::]:443".
#https_addr: null
#gemini:
# The address to listen for gemini requests on. Set this to null to disable
# gemini support.
#gemini_addr: "[::]:3965"

View File

@ -51,7 +51,7 @@
export CARGO_HOME=$(pwd)/.cargo export CARGO_HOME=$(pwd)/.cargo
if [ -f "config.yml" ]; then if [ -f "config.yml" ]; then
export DOMANI_CONFIG_PATH=config.yml export DOMANI_CONFIG_PATH=config-dev.yml
fi fi
''; '';
} // opensslEnv); } // opensslEnv);