diff --git a/content/baguette/index.md b/content/baguette/index.md index b3bf7ae..173bd97 100644 --- a/content/baguette/index.md +++ b/content/baguette/index.md @@ -767,56 +767,72 @@ Ports: ``` **`Service`: a service example.**
-A service configuration has two parts: the service description and its configuration file template(s). -Let's use `gitea` as example, the `git` web server handling [our repositories][baguette-gitea]. +A service is defined by its description in a `.spec` file and its template(s). +Let's use `gitea` as an example, the `git` web server handling [our repositories][baguette-gitea]. ```YAML # `gitea.spec` -# The actual command to run to start the service +# The command which is run to start the service. command: gitea -C . -w . -c gitea.cfg -# what tokens the service needs, see that http is optional +# The tokens needed by the service. Here http is optional. consumes: database, http? -# does the service requires a domain name to be configured? -# this name may be used in the service configuration, or its (forward|backward) dependencies +# Does the service require a domain name to be configured? +# If so, service will require a "domain" token, such as `service add $service domain=example.com` +# This name may be used in the service configuration, or its (forward or backward) dependencies. requires-domain: true -# the service requires a simgle port to be open -# by default, 80 +# The port(s) the service requires. +# By default, if a service requires a port named "http", its value will be 80. ports: http -# `%configuration` indicates the name of the configuration template +# `%configuration` indicates the name of the configuration template. +# For example, if the template file is `/usr/baguette/service/templates/gitea.cfg.j2`: %configuration gitea.cfg ``` *We **currently** use a bit more configuration for the database, but we will get there at some point.* -Now, a quick look at its configuration template. *just a sample, we'll skip most, don't worry*
+Now, a quick look at the `gitea` configuration template. *just a sample, we'll skip most, don't worry*
Templating is done with `Jinja2` templates: [see more about Jinja2 templating][crinja]. +First, let's say we created a `gitea` service this way: +```zsh +service add gitea domain=example.com database=postgresql +``` + +Now, we want to see the template used to configure `gitea`. + ```YAML [database] -# providers = list of services behind the tokens -# for example: behind 'database' there is a `postgresql` service -# and we want the main port to use (for a database, 'ports.main' = port to access it remotely) +# `service` passes data to the templates. +# `providers` is the list of services behind the tokens used. +# For example, behind "providers.database" there is a `postgresql` service. + +# Gitea needs to establish a connection to its database. +# The database ports can be accessed with "database.ports". +# The port used to connect to the database is named "main" by convention. # See the definition of the postgresql service for details. HOST = 127.0.0.1:{{ providers.database.ports.main }} -# we have to enter the database name -# by default, databases are configured with a name convention as follow: environment_service_db -# service.id is 'environment/service', which identifies uniquely the service -# to get the right database name, we should take the service.id template variable and replace the "/" by "_" then add "_db" +# Here, the template requires the database name. +# By convention, databases are named: $environment_$service_db. +# In our example, `service` creates the database "root_gitea_db", as the default environment is "root". +# `service.id` is '$environment/$service', which uniquely identifies the service. +# In our example, `service.id` is "root/gitea". +# The database name will be obtained by replacing "/" by "_" and adding "_db" to the service.id variable. +# This is performed this way: NAME = {{ service.id | replace("/", "_") }}_db -# by default, the user name is identical to the database name, but without the "_db" suffix +# By convention the user name is identical to the database name without the "_db" suffix. USER = {{ service.id | replace("/", "_") }} -# we have created the `random_password` function, taking a service id in parameter -# `random_password` creates a unique password the first time it is called -# after that, it provides the same password each time it is called with the same service id -# `random_password` enables sharing a password between two service configurations +# The `random_password` function creates a unique password the first time it is called. +# This function takes a service id in parameter. +# After that, it provides the same password each time it is called with the same service id. +# `random_password` enables sharing a password between two service configurations. PASSWD = {{ random_password( service.id ) }} [repository] @@ -832,8 +848,8 @@ ROOT_URL = http://{{ service.domain }}:{{ service.ports.http }}/ **Current implementation of `service`**
It [currently works][working-service-asciinema], and we just need to add more services! -Every new corner case will be thoroughly investigated to provide the smoothest experience possible under BaguetteOS. -We currently use it for a few services, such as the nginx providing this very website. +Every new corner case will be thoroughly investigated to provide the smoothest experience possible with BaguetteOS. +We currently use it for the nginx providing this very website. Currently, there are no fancy environments, just plain directories. @@ -842,7 +858,7 @@ First, we want to work on databases, to export data and get a simple backup serv Then, we could let users manage their own services, but this is of little interest in practice since services are running under different users already. -The most useful thing to do right now is to provide new services. +The most useful contributions right now would be to provide new service configurations. [Back to top](#top)