diff --git a/ci/deploy.yml b/ci/deploy.yml
index 04354f1b05216274a66162c1f33abca9385c6634..b0d3d1a460bd80d38d188936a7d87f65fbb037a8 100644
--- a/ci/deploy.yml
+++ b/ci/deploy.yml
@@ -54,7 +54,7 @@ variables:
     - >
       $BUILD_DIR/float/float create-env
       --domain=${DOMAIN}
-      --services=${BUILD_DIR}/float/services.yml.no-elasticsearch
+      --services=${BUILD_DIR}/float/services.core.yml
       --services=${SERVICES_FILE}
       --passwords=${BUILD_DIR}/float/passwords.yml.default
       --passwords=${PASSWORDS_FILE}
diff --git a/docs/reference.md b/docs/reference.md
index 6fb7e9cdee91376985ca91513532a665e1028c9f..899021b588b9a9b93d90b48576fc3fcd3b7f268a 100644
--- a/docs/reference.md
+++ b/docs/reference.md
@@ -568,7 +568,7 @@ Ansible roles to configure them.
 Note that, in its default setup, float will naturally assume a
 two-tier service topology, with "frontend" hosts handling traffic
 routing in a stateless fashion, and "backend" hosts running the actual
-services. The default *services.yml.default* service description file
+services. The default *services.default.yml* service description file
 literally expects the *frontend* and *backend* Ansible groups to be
 defined in your inventory. However, these are just roles, and there is
 nothing inherent in float that limits you to this kind of topology.
@@ -1831,7 +1831,7 @@ pairs that define group variables.
 ### Groups
 
 While you can define any host groups you want, the default service
-configuration in float (*services.yml.default*) expects you to define
+configuration in float (*services.default.yml*) expects you to define
 at least two:
 
 * *frontend*, for the public-facing reverse proxy hosts
@@ -1924,12 +1924,12 @@ Service metadata is encoded as a dictionary of *service name*:
 Metadata for services that are part of the core infrastructure ships
 embedded with this repository, so when writing your own `services.yml`
 file, you only need to add your services to it. You should include the
-*services.yml.default* file shipped with the float source, which
+*services.default.yml* file shipped with the float source, which
 defines all the built-in services:
 
 ```yaml
 include:
-  - "/path/to/float/services.yml.default"
+  - "/path/to/float/services.default.yml"
 ```
 
 The `include` directive is special: it does not define a service, but
@@ -2511,8 +2511,8 @@ tuples used for redirecting top-level domains to specific destinations
 service which is normally part of the log-collector infrastructure. As
 this is a large Java daemon with significant memory requirements, it
 is often useful to disable it for testing environments. Note that in
-this case one should also import *services.yml.no-elasticsearch*
-instead of the default *services.yml.default*.
+this case one should import *services.core.yml*
+instead of the default *services.default.yml*.
 
 `es_log_keep_days` is a dictionary that specifies the retention time
 for the various log types, in days. The default is `{ audit: 60,
@@ -3335,7 +3335,7 @@ available) for the service.
 
 ```yaml
 include:
-  - "/path/to/float/services.yml.default"
+  - "/path/to/float/services.default.yml"
 ok:
   scheduling_group: backend
   num_instances: 1
@@ -3410,7 +3410,7 @@ The services.yml file:
 
 ```yaml
 include:
-  - "/path/to/float/services.yml.default"
+  - "/path/to/float/services.default.yml"
 videoconf:
   scheduling_group: videoconf
   num_instances: all
diff --git a/float b/float
index 3036e0a382b31eb07eea1c7ffa0d4c7c3eacd7cb..67910fc9360057c200604b3792e549beee106221 100755
--- a/float
+++ b/float
@@ -120,7 +120,7 @@ include:
   - "{{ p | relpath(targetdir) }}"
 {% endfor %}
 {% else %}
-  - "{{ srcdir | relpath(targetdir) }}/services.yml.no-elasticsearch"
+  - "{{ srcdir | relpath(targetdir) }}/services.core.yml"
 {% endif %}
 ''',
     'passwords.yml': '''---
diff --git a/services.core.yml b/services.core.yml
new file mode 100644
index 0000000000000000000000000000000000000000..2ae62b71874d296b6ce0aa797d337db78007e4ab
--- /dev/null
+++ b/services.core.yml
@@ -0,0 +1,325 @@
+---
+
+frontend:
+  scheduling_group: frontend
+  service_credentials:
+    - name: nginx
+      enable_server: false
+    - name: ssoproxy
+      enable_server: false
+    - name: replds-acme
+  systemd_services:
+    - nginx.service
+    - haproxy.service
+    - sso-proxy.service
+    - replds@acme.service
+  ports:
+    - 5005
+  volumes:
+    - name: cache
+      path: /var/cache/nginx
+      size: 20g
+  monitoring_endpoints:
+    - port: 8404
+      scheme: http
+
+dns:
+  scheduling_group: frontend
+  systemd_services:
+    - bind9.service
+  monitoring_endpoints:
+    - name: bind
+      port: 9119
+      scheme: http
+
+log-collector:
+  scheduling_group: backend
+  num_instances: 1
+  service_credentials:
+    - name: log-collector
+      enable_client: false
+  monitoring_endpoints:
+    - port: 9105
+      scheme: http
+  containers:
+    - name: rsyslog
+      image: registry.git.autistici.org/ai3/docker/rsyslog:master
+      ports:
+        - 6514
+        - 9105
+      volumes:
+        - /etc/rsyslog-collector.conf: /etc/rsyslog.conf
+        - /etc/rsyslog-collector-lognorm: /etc/rsyslog-collector-lognorm
+        - /var/spool/rsyslog-collector: /var/spool/rsyslog
+        - /var/log/remote: /var/log/remote
+      egress_policy: internal
+  ports:
+    - 6514
+
+prometheus:
+  scheduling_group: backend
+  num_instances: 1
+  service_credentials:
+    - { name: prometheus }
+  containers:
+    - name: prometheus
+      image: registry.git.autistici.org/ai3/docker/prometheus:master
+      port: 9090
+      volumes:
+        - /etc/prometheus: /etc/prometheus
+        - /var/lib/prometheus/metrics2: /var/lib/prometheus/metrics2
+      args: "--storage.tsdb.retention.time={{ prometheus_tsdb_retention | default('90d') }} --web.external-url=https://monitor.{{ domain_public[0] }} --web.enable-lifecycle --query.max-samples={{ prometheus_max_samples | default('5000000') }}"
+    - name: alertmanager
+      image: registry.git.autistici.org/ai3/docker/prometheus-alertmanager:master
+      ports:
+        - 9093
+        - 9094
+      volumes:
+        - /etc/prometheus: /etc/prometheus
+        - /var/lib/prometheus/alertmanager: /var/lib/prometheus/alertmanager
+      args: "--web.external-url=https://alertmanager.{{ domain_public[0] }} --cluster.listen-address=:9094 --cluster.advertise-address={{ float_host_dns_map.get(inventory_hostname + '.prometheus', ['']) | list | first }}:9094{% for h in groups['prometheus']|sort if h != inventory_hostname %} --cluster.peer={{ h }}.prometheus.{{ domain }}:9094{% endfor %}"
+    - name: blackbox
+      image: registry.git.autistici.org/ai3/docker/prometheus-blackbox:master
+      ports:
+        - 9115
+      volumes:
+        - /etc/prometheus: /etc/prometheus
+      args: "--config.file /etc/prometheus/blackbox.yml"
+      docker_options: "--cap-add=NET_RAW"
+      drop_capabilities: false
+    - name: grafana
+      image: registry.git.autistici.org/ai3/docker/grafana:master
+      port: 2929
+      volumes:
+        - /etc/grafana: /etc/grafana
+        - /var/lib/grafana: /var/lib/grafana
+      egress_policy: internal
+    - name: thanos
+      image: registry.git.autistici.org/ai3/docker/thanos:master
+      ports:
+        - 10901 # sidecar grpc
+        - 10902 # sidecar http
+        - 10903 # query grpc
+        - 10904 # query http
+        - 10905 # query-frontend grpc
+        - 10906 # query-frontend http
+      resources:
+        ram: "1G"
+      env:
+        QUERY_FLAGS: "--query.replica-label=monitor {% for h in groups['prometheus']|sort %} --store={{ h }}.prometheus.{{ domain }}:10901{% endfor %}"
+        SIDECAR_FLAGS: ""
+        QUERY_FRONTEND_FLAGS: "--query-range.response-cache-config-file=/etc/thanos/query-frontend-cache.yml"
+      volumes:
+        - /etc/thanos: /etc/thanos
+      egress_policy: internal
+    - name: karma
+      image: registry.git.autistici.org/ai3/docker/karma:master
+      ports:
+        - 9193
+      env:
+        # https://github.com/prymitive/karma/blob/master/docs/CONFIGURATION.md#environment-variables
+        CONFIG_FILE: "/etc/karma/float.yml"
+        PORT: 9193
+      volumes:
+        - /etc/karma: /etc/karma
+      egress_policy: internal
+  public_endpoints:
+    - name: monitor
+      port: 9090
+      scheme: http
+      enable_sso_proxy: true
+    - name: prober
+      port: 9115
+      scheme: http
+      enable_sso_proxy: true
+    - name: grafana
+      port: 2929
+      scheme: https
+      enable_sso_proxy: true
+    - name: thanos
+      port: 10906
+      scheme: http
+      enable_sso_proxy: true
+    - name: alerts
+      port: 9193
+      scheme: http
+      enable_sso_proxy: true
+  monitoring_endpoints:
+    - port: 9090
+      scheme: http
+      healthcheck_http_method: OPTIONS
+    - port: 9093
+      scheme: http
+      healthcheck_http_method: OPTIONS
+    - port: 9193
+      scheme: http
+      healthcheck_http_method: GET
+    - port: 2929
+      scheme: https
+    - port: 10904
+      scheme: http
+    - port: 10902
+      scheme: http
+    - port: 10906
+      scheme: http
+  ports:
+    - 9094
+    - 10901
+  volumes:
+    - name: metrics
+      path: /var/lib/prometheus
+      owner: docker-prometheus
+      group: docker-prometheus
+      mode: "0755"
+  annotations:
+    dependencies:
+      - client: prometheus
+        server: alertmanager
+      - client: karma
+        server: alertmanager
+      - client: thanos
+        server: prometheus
+
+sso-server:
+  num_instances: 1
+  scheduling_group: backend
+  service_credentials:
+    - name: sso-server
+      enable_server: false
+  public_endpoints:
+    - name: login
+      port: 5002
+      scheme: http
+  monitoring_endpoints:
+    - port: 5002
+      scheme: http
+  systemd_services:
+    - sso-server.service
+  annotations:
+    dependencies:
+      - client: sso-server
+        server: user-meta-server/user-meta-server
+
+auth-cache:
+  scheduling_group: backend
+  containers:
+    - name: memcache
+      image: registry.git.autistici.org/ai3/docker/memcached:master
+      ports:
+        - 11212
+        - 11213
+      env:
+        PORT: "11212"
+      egress_policy: internal
+  ports:
+    - 11212
+  monitoring_endpoints:
+    - port: 11213
+      scheme: http
+
+user-meta-server:
+  num_instances: 1
+  scheduling_group: backend
+  service_credentials:
+    - name: user-meta-server
+  monitoring_endpoints:
+    - port: 5505
+      scheme: https
+  ports:
+    - 5505
+  systemd_services:
+    - user-meta-server.service
+  datasets:
+    - name: db
+      type: litestream
+      path: /var/lib/user-meta-server
+      filename: usermeta.db
+      owner: user-meta-server
+      litestream_params:
+        sync-interval: "60s"
+
+service-dashboard:
+  scheduling_group: frontend
+  service_credentials:
+    - name: service-dashboard
+  containers:
+    - name: http
+      image: registry.git.autistici.org/ai3/tools/float-dashboard:master
+      port: 8011
+      volumes:
+        - /etc/float: /etc/float
+      env:
+        ADDR: ":8011"
+        DOMAIN: "{{ domain_public[0] }}"
+      egress_policy: internal
+  public_endpoints:
+    - name: service-dashboard
+      port: 8011
+      scheme: http
+      enable_sso_proxy: true
+
+backup-metadata:
+  num_instances: 1
+  scheduling_group: backend
+  service_credentials:
+    - name: backup-metadata
+      enable_client: false
+  monitoring_endpoints:
+    - port: 5332
+      scheme: https
+  public_endpoints:
+    - name: backups
+      port: 5332
+      scheme: https
+      enable_sso_proxy: true
+  ports:
+    - 5332
+  systemd_services:
+    - tabacco-metadb.service
+  datasets:
+    - name: db
+      type: litestream
+      path: /var/lib/tabacco-metadb
+      filename: meta.db
+      owner: backup-metadata
+
+acme:
+  num_instances: 1
+  scheduling_group: frontend
+  service_credentials:
+    - name: acme
+      enable_server: false
+  monitoring_endpoints:
+    - port: 5004
+      scheme: http
+  ports:
+    - 5004
+  systemd_services:
+    - acmeserver.service
+
+assets:
+  num_instances: 1
+  scheduling_group: backend
+  service_credentials:
+    - name: assetmon
+  containers:
+    - name: http
+      image: registry.git.autistici.org/ai3/tools/assetmon:master
+      volumes:
+        - /etc/assetmon/server.yml: /etc/assetmon/server.yml
+        - /var/lib/assetmon: /var/lib/assetmon
+      ports:
+        - 3798
+      egress_policy: internal
+  monitoring_endpoints:
+    - port: 3798
+      scheme: https
+  public_endpoints:
+    - name: assets
+      port: 3798
+      scheme: https
+      enable_sso_proxy: true
+  datasets:
+    - name: db
+      path: /var/lib/assetmon
+      owner: docker-assets
diff --git a/services.default.yml b/services.default.yml
new file mode 100644
index 0000000000000000000000000000000000000000..7d07664a7d001f8b0ca7f9d19d2e5e532299cd03
--- /dev/null
+++ b/services.default.yml
@@ -0,0 +1,105 @@
+---
+
+include:
+  - "services.core.yml"
+
+reports-collector:
+  scheduling_group: frontend
+  containers:
+    - name: http
+      image: registry.git.autistici.org/ai3/tools/reports-collector:master
+      ports:
+        - 3995
+        - 3996
+      env:
+        ADDR: ":3995"
+        SMTP_ADDR: ":3996"
+      volumes:
+        - /var/lib/GeoIP: /var/lib/GeoIP
+  public_endpoints:
+    - name: live-reports
+      port: 3995
+      scheme: http
+  monitoring_endpoints:
+    - port: 3995
+      scheme: http
+  ports:
+    - 3996
+
+log-collector:
+  scheduling_group: backend
+  num_instances: 1
+  service_credentials:
+    - name: log-collector
+      enable_client: false
+  monitoring_endpoints:
+    - port: 9105
+      scheme: http
+    - port: 9201
+      scheme: http
+  public_endpoints:
+    - name: logs
+      port: 5601
+      scheme: http
+      enable_sso_proxy: true
+  containers:
+    - name: rsyslog
+      image: registry.git.autistici.org/ai3/docker/rsyslog:master
+      ports:
+        - 6514
+        - 9105
+      volumes:
+        - /etc/rsyslog-collector.conf: /etc/rsyslog.conf
+        - /etc/rsyslog-collector: /etc/rsyslog-collector
+        - /etc/rsyslog-collector-lognorm: /etc/rsyslog-collector-lognorm
+        - /var/spool/rsyslog-collector: /var/spool/rsyslog
+        - /var/log/remote: /var/log/remote
+      egress_policy: internal
+    - name: kibana
+      image: registry.git.autistici.org/ai3/docker/kibana:master
+      port: 5601
+      volumes:
+        - /etc/kibana: /etc/kibana
+        - /var/lib/kibana: /var/lib/kibana
+      env:
+        BABEL_CACHE_PATH: "/var/lib/kibana/.babelcache.json"
+    - name: elasticsearch
+      image: registry.git.autistici.org/ai3/docker/elasticsearch:master
+      port: 9200
+      volumes:
+        - /etc/elasticsearch: /etc/elasticsearch
+        - /var/lib/elasticsearch: /var/lib/elasticsearch
+        - /var/log/elasticsearch: /var/log/elasticsearch
+      env:
+        PORT: 9200
+        EXPORTER_PORT: 9201
+  ports:
+    - 6514
+    - 9200
+  volumes:
+    - name: elasticsearch
+      path: /var/lib/elasticsearch
+      size: 100g
+      owner: docker-log-collector
+      group: docker-log-collector
+      mode: "0700"
+  annotations:
+    dependencies:
+      - client: kibana
+        server: elasticsearch
+      - client: log-collector-e2e/prober
+        server: elasticsearch
+
+log-collector-e2e:
+  scheduling_group: all
+  containers:
+    - name: prober
+      image: registry.git.autistici.org/ai3/tools/dye-injector:master
+      port: 7094
+      env:
+        ADDR: ":7094"
+  monitoring_endpoints:
+    - name: log-collector-e2e-prober
+      port: 7094
+      scheme: http
+
diff --git a/services.yml.default b/services.yml.default
deleted file mode 100644
index c7c67a69723caaca45c8275b352894af3018f504..0000000000000000000000000000000000000000
--- a/services.yml.default
+++ /dev/null
@@ -1,105 +0,0 @@
----
-
-include:
-  - "services.yml.no-elasticsearch"
-
-reports-collector:
-  scheduling_group: frontend
-  containers:
-    - name: http
-      image: registry.git.autistici.org/ai3/tools/reports-collector:master
-      ports:
-        - 3995
-        - 3996
-      env:
-        ADDR: ":3995"
-        SMTP_ADDR: ":3996"
-      volumes:
-        - /var/lib/GeoIP: /var/lib/GeoIP
-  public_endpoints:
-    - name: live-reports
-      port: 3995
-      scheme: http
-  monitoring_endpoints:
-    - port: 3995
-      scheme: http
-  ports:
-    - 3996
-
-log-collector:
-  scheduling_group: backend
-  num_instances: 1
-  service_credentials:
-    - name: log-collector
-      enable_client: false
-  monitoring_endpoints:
-    - port: 9105
-      scheme: http
-    - port: 9201
-      scheme: http
-  public_endpoints:
-    - name: logs
-      port: 5601
-      scheme: http
-      enable_sso_proxy: true
-  containers:
-    - name: rsyslog
-      image: registry.git.autistici.org/ai3/docker/rsyslog:master
-      ports:
-        - 6514
-        - 9105
-      volumes:
-        - /etc/rsyslog-collector.conf: /etc/rsyslog.conf
-        - /etc/rsyslog-collector: /etc/rsyslog-collector
-        - /etc/rsyslog-collector-lognorm: /etc/rsyslog-collector-lognorm
-        - /var/spool/rsyslog-collector: /var/spool/rsyslog
-        - /var/log/remote: /var/log/remote
-      egress_policy: internal
-    - name: kibana
-      image: registry.git.autistici.org/ai3/docker/kibana:master
-      port: 5601
-      volumes:
-        - /etc/kibana: /etc/kibana
-        - /var/lib/kibana: /var/lib/kibana
-      env:
-        BABEL_CACHE_PATH: "/var/lib/kibana/.babelcache.json"
-    - name: elasticsearch
-      image: registry.git.autistici.org/ai3/docker/elasticsearch:master
-      port: 9200
-      volumes:
-        - /etc/elasticsearch: /etc/elasticsearch
-        - /var/lib/elasticsearch: /var/lib/elasticsearch
-        - /var/log/elasticsearch: /var/log/elasticsearch
-      env:
-        PORT: 9200
-        EXPORTER_PORT: 9201
-  ports:
-    - 6514
-    - 9200
-  volumes:
-    - name: elasticsearch
-      path: /var/lib/elasticsearch
-      size: 100g
-      owner: docker-log-collector
-      group: docker-log-collector
-      mode: "0700"
-  annotations:
-    dependencies:
-      - client: kibana
-        server: elasticsearch
-      - client: log-collector-e2e/prober
-        server: elasticsearch
-
-log-collector-e2e:
-  scheduling_group: all
-  containers:
-    - name: prober
-      image: registry.git.autistici.org/ai3/tools/dye-injector:master
-      port: 7094
-      env:
-        ADDR: ":7094"
-  monitoring_endpoints:
-    - name: log-collector-e2e-prober
-      port: 7094
-      scheme: http
-
diff --git a/services.yml.default b/services.yml.default
new file mode 120000
index 0000000000000000000000000000000000000000..77b8ad4edbc93952387aed9d73b6914003c76e6b
--- /dev/null
+++ b/services.yml.default
@@ -0,0 +1 @@
+services.default.yml
\ No newline at end of file
diff --git a/services.yml.no-elasticsearch b/services.yml.no-elasticsearch
deleted file mode 100644
index 2ae62b71874d296b6ce0aa797d337db78007e4ab..0000000000000000000000000000000000000000
--- a/services.yml.no-elasticsearch
+++ /dev/null
@@ -1,325 +0,0 @@
----
-
-frontend:
-  scheduling_group: frontend
-  service_credentials:
-    - name: nginx
-      enable_server: false
-    - name: ssoproxy
-      enable_server: false
-    - name: replds-acme
-  systemd_services:
-    - nginx.service
-    - haproxy.service
-    - sso-proxy.service
-    - replds@acme.service
-  ports:
-    - 5005
-  volumes:
-    - name: cache
-      path: /var/cache/nginx
-      size: 20g
-  monitoring_endpoints:
-    - port: 8404
-      scheme: http
-
-dns:
-  scheduling_group: frontend
-  systemd_services:
-    - bind9.service
-  monitoring_endpoints:
-    - name: bind
-      port: 9119
-      scheme: http
-
-log-collector:
-  scheduling_group: backend
-  num_instances: 1
-  service_credentials:
-    - name: log-collector
-      enable_client: false
-  monitoring_endpoints:
-    - port: 9105
-      scheme: http
-  containers:
-    - name: rsyslog
-      image: registry.git.autistici.org/ai3/docker/rsyslog:master
-      ports:
-        - 6514
-        - 9105
-      volumes:
-        - /etc/rsyslog-collector.conf: /etc/rsyslog.conf
-        - /etc/rsyslog-collector-lognorm: /etc/rsyslog-collector-lognorm
-        - /var/spool/rsyslog-collector: /var/spool/rsyslog
-        - /var/log/remote: /var/log/remote
-      egress_policy: internal
-  ports:
-    - 6514
-
-prometheus:
-  scheduling_group: backend
-  num_instances: 1
-  service_credentials:
-    - { name: prometheus }
-  containers:
-    - name: prometheus
-      image: registry.git.autistici.org/ai3/docker/prometheus:master
-      port: 9090
-      volumes:
-        - /etc/prometheus: /etc/prometheus
-        - /var/lib/prometheus/metrics2: /var/lib/prometheus/metrics2
-      args: "--storage.tsdb.retention.time={{ prometheus_tsdb_retention | default('90d') }} --web.external-url=https://monitor.{{ domain_public[0] }} --web.enable-lifecycle --query.max-samples={{ prometheus_max_samples | default('5000000') }}"
-    - name: alertmanager
-      image: registry.git.autistici.org/ai3/docker/prometheus-alertmanager:master
-      ports:
-        - 9093
-        - 9094
-      volumes:
-        - /etc/prometheus: /etc/prometheus
-        - /var/lib/prometheus/alertmanager: /var/lib/prometheus/alertmanager
-      args: "--web.external-url=https://alertmanager.{{ domain_public[0] }} --cluster.listen-address=:9094 --cluster.advertise-address={{ float_host_dns_map.get(inventory_hostname + '.prometheus', ['']) | list | first }}:9094{% for h in groups['prometheus']|sort if h != inventory_hostname %} --cluster.peer={{ h }}.prometheus.{{ domain }}:9094{% endfor %}"
-    - name: blackbox
-      image: registry.git.autistici.org/ai3/docker/prometheus-blackbox:master
-      ports:
-        - 9115
-      volumes:
-        - /etc/prometheus: /etc/prometheus
-      args: "--config.file /etc/prometheus/blackbox.yml"
-      docker_options: "--cap-add=NET_RAW"
-      drop_capabilities: false
-    - name: grafana
-      image: registry.git.autistici.org/ai3/docker/grafana:master
-      port: 2929
-      volumes:
-        - /etc/grafana: /etc/grafana
-        - /var/lib/grafana: /var/lib/grafana
-      egress_policy: internal
-    - name: thanos
-      image: registry.git.autistici.org/ai3/docker/thanos:master
-      ports:
-        - 10901 # sidecar grpc
-        - 10902 # sidecar http
-        - 10903 # query grpc
-        - 10904 # query http
-        - 10905 # query-frontend grpc
-        - 10906 # query-frontend http
-      resources:
-        ram: "1G"
-      env:
-        QUERY_FLAGS: "--query.replica-label=monitor {% for h in groups['prometheus']|sort %} --store={{ h }}.prometheus.{{ domain }}:10901{% endfor %}"
-        SIDECAR_FLAGS: ""
-        QUERY_FRONTEND_FLAGS: "--query-range.response-cache-config-file=/etc/thanos/query-frontend-cache.yml"
-      volumes:
-        - /etc/thanos: /etc/thanos
-      egress_policy: internal
-    - name: karma
-      image: registry.git.autistici.org/ai3/docker/karma:master
-      ports:
-        - 9193
-      env:
-        # https://github.com/prymitive/karma/blob/master/docs/CONFIGURATION.md#environment-variables
-        CONFIG_FILE: "/etc/karma/float.yml"
-        PORT: 9193
-      volumes:
-        - /etc/karma: /etc/karma
-      egress_policy: internal
-  public_endpoints:
-    - name: monitor
-      port: 9090
-      scheme: http
-      enable_sso_proxy: true
-    - name: prober
-      port: 9115
-      scheme: http
-      enable_sso_proxy: true
-    - name: grafana
-      port: 2929
-      scheme: https
-      enable_sso_proxy: true
-    - name: thanos
-      port: 10906
-      scheme: http
-      enable_sso_proxy: true
-    - name: alerts
-      port: 9193
-      scheme: http
-      enable_sso_proxy: true
-  monitoring_endpoints:
-    - port: 9090
-      scheme: http
-      healthcheck_http_method: OPTIONS
-    - port: 9093
-      scheme: http
-      healthcheck_http_method: OPTIONS
-    - port: 9193
-      scheme: http
-      healthcheck_http_method: GET
-    - port: 2929
-      scheme: https
-    - port: 10904
-      scheme: http
-    - port: 10902
-      scheme: http
-    - port: 10906
-      scheme: http
-  ports:
-    - 9094
-    - 10901
-  volumes:
-    - name: metrics
-      path: /var/lib/prometheus
-      owner: docker-prometheus
-      group: docker-prometheus
-      mode: "0755"
-  annotations:
-    dependencies:
-      - client: prometheus
-        server: alertmanager
-      - client: karma
-        server: alertmanager
-      - client: thanos
-        server: prometheus
-
-sso-server:
-  num_instances: 1
-  scheduling_group: backend
-  service_credentials:
-    - name: sso-server
-      enable_server: false
-  public_endpoints:
-    - name: login
-      port: 5002
-      scheme: http
-  monitoring_endpoints:
-    - port: 5002
-      scheme: http
-  systemd_services:
-    - sso-server.service
-  annotations:
-    dependencies:
-      - client: sso-server
-        server: user-meta-server/user-meta-server
-
-auth-cache:
-  scheduling_group: backend
-  containers:
-    - name: memcache
-      image: registry.git.autistici.org/ai3/docker/memcached:master
-      ports:
-        - 11212
-        - 11213
-      env:
-        PORT: "11212"
-      egress_policy: internal
-  ports:
-    - 11212
-  monitoring_endpoints:
-    - port: 11213
-      scheme: http
-
-user-meta-server:
-  num_instances: 1
-  scheduling_group: backend
-  service_credentials:
-    - name: user-meta-server
-  monitoring_endpoints:
-    - port: 5505
-      scheme: https
-  ports:
-    - 5505
-  systemd_services:
-    - user-meta-server.service
-  datasets:
-    - name: db
-      type: litestream
-      path: /var/lib/user-meta-server
-      filename: usermeta.db
-      owner: user-meta-server
-      litestream_params:
-        sync-interval: "60s"
-
-service-dashboard:
-  scheduling_group: frontend
-  service_credentials:
-    - name: service-dashboard
-  containers:
-    - name: http
-      image: registry.git.autistici.org/ai3/tools/float-dashboard:master
-      port: 8011
-      volumes:
-        - /etc/float: /etc/float
-      env:
-        ADDR: ":8011"
-        DOMAIN: "{{ domain_public[0] }}"
-      egress_policy: internal
-  public_endpoints:
-    - name: service-dashboard
-      port: 8011
-      scheme: http
-      enable_sso_proxy: true
-
-backup-metadata:
-  num_instances: 1
-  scheduling_group: backend
-  service_credentials:
-    - name: backup-metadata
-      enable_client: false
-  monitoring_endpoints:
-    - port: 5332
-      scheme: https
-  public_endpoints:
-    - name: backups
-      port: 5332
-      scheme: https
-      enable_sso_proxy: true
-  ports:
-    - 5332
-  systemd_services:
-    - tabacco-metadb.service
-  datasets:
-    - name: db
-      type: litestream
-      path: /var/lib/tabacco-metadb
-      filename: meta.db
-      owner: backup-metadata
-
-acme:
-  num_instances: 1
-  scheduling_group: frontend
-  service_credentials:
-    - name: acme
-      enable_server: false
-  monitoring_endpoints:
-    - port: 5004
-      scheme: http
-  ports:
-    - 5004
-  systemd_services:
-    - acmeserver.service
-
-assets:
-  num_instances: 1
-  scheduling_group: backend
-  service_credentials:
-    - name: assetmon
-  containers:
-    - name: http
-      image: registry.git.autistici.org/ai3/tools/assetmon:master
-      volumes:
-        - /etc/assetmon/server.yml: /etc/assetmon/server.yml
-        - /var/lib/assetmon: /var/lib/assetmon
-      ports:
-        - 3798
-      egress_policy: internal
-  monitoring_endpoints:
-    - port: 3798
-      scheme: https
-  public_endpoints:
-    - name: assets
-      port: 3798
-      scheme: https
-      enable_sso_proxy: true
-  datasets:
-    - name: db
-      path: /var/lib/assetmon
-      owner: docker-assets
diff --git a/services.yml.no-elasticsearch b/services.yml.no-elasticsearch
new file mode 120000
index 0000000000000000000000000000000000000000..3685dcfa3ee27fafe719fe48736f7a1d72028857
--- /dev/null
+++ b/services.yml.no-elasticsearch
@@ -0,0 +1 @@
+services.core.yml
\ No newline at end of file
diff --git a/test/README.md b/test/README.md
index 82d8db7c1766960b70adfa794ed189423b1a32e8..86a856fd1f9c1ab2e6aac84ed3510cefaa719a34 100644
--- a/test/README.md
+++ b/test/README.md
@@ -135,8 +135,8 @@ clear speed improvement.
 This is, in fact, already the default for test environments created
 with "float create-env" and it can be achieved by:
 
-* importing "services.yml.no-elasticsearch" instead of
-  "services.yml.default" for the float built-in service definitions;
+* importing "services.core.yml" instead of
+  "services.default.yml" for the float built-in service definitions;
 * setting the configuration variable "enable_elasticsearch" to false.
 
 The resulting environment will still run the *log-collector* service,
diff --git a/test/backup.ref/services.yml b/test/backup.ref/services.yml
index 3f422c92d269401dc7aef00fe44f1b6f256a5cb2..48d3bf301dbc4ab782626fcc6ef4d1abe132e49d 100644
--- a/test/backup.ref/services.yml
+++ b/test/backup.ref/services.yml
@@ -1,7 +1,7 @@
 ---
 
 include:
-  - "../../services.yml.no-elasticsearch"
+  - "../../services.core.yml"
 
 ok:
   scheduling_group: backend
diff --git a/test/float_integration_test/test_system.py b/test/float_integration_test/test_system.py
index 7777128319aaacc98d2c5d76cde9b6882c783b3c..7b088871d6eb58781c0787e202b4f6dcfaea0b4e 100644
--- a/test/float_integration_test/test_system.py
+++ b/test/float_integration_test/test_system.py
@@ -43,7 +43,7 @@ class TestBuiltinServiceURLs(URLTestBase):
     """Verify that all the public_endpoints are reachable.
 
     Tests will only run if the corresponding service (from
-    services.yml.default) is actually enabled.
+    services.yml) is actually enabled.
 
     """
 
diff --git a/test/full.ref/services.yml b/test/full.ref/services.yml
index 9ac1fd0e61722eac8c95403278c36907ef74f12c..95fcd23934341423ced22fdf519603535dd30e6d 100644
--- a/test/full.ref/services.yml
+++ b/test/full.ref/services.yml
@@ -1,7 +1,7 @@
 ---
 
 include:
-  - "../../services.yml.no-elasticsearch"
+  - "../../services.core.yml"
 
 ok:
   scheduling_group: backend