diff --git a/.github/workflows/build_docker_images.yml b/.github/workflows/build_docker_images.yml
index 5b24d4f..265c11d 100644
--- a/.github/workflows/build_docker_images.yml
+++ b/.github/workflows/build_docker_images.yml
@@ -44,12 +44,12 @@ jobs:
- id: nightly
name: building nightly
- run: docker build -t qgis/${{ env.DOCKER_TAG }}:nightly -f ${{ matrix.qgis_type }}.Dockerfile --build-arg repo=ubuntu-nightly .
+ run: docker build -t qgis/${{ env.DOCKER_TAG }}:nightly -f ${{ matrix.qgis_type }}/Dockerfile --build-arg repo=ubuntu-nightly .
- name: test
if: ${{ matrix.qgis_type == 'server' }}
run: |
- docker run -d -v $(pwd)/test/data:/io/data -p 8010:80 --name qgis-server qgis/qgis-server:nightly
+ docker run -d -v $(pwd)/${{ matrix.qgis_type }}/test/data:/io/data -p 8010:80 --name qgis-server qgis/qgis-server:nightly
docker exec -i qgis-server dpkg -l qgis-server
sleep 5
curl -s 'http://localhost:8010/ogc/test_project?service=WMS&request=GetCapabilities' | grep -ivq exception
diff --git a/README.md b/README.md
index 8473b5a..93c36fc 100644
--- a/README.md
+++ b/README.md
@@ -1,191 +1,6 @@
-# QGIS Docker
-
This repository automates the build of QGIS desktop and QGIS server Docker images.
-## QGIS server
-
-### General information
-
-The Docker image is built using *Ubuntu 20.04 (focal) and 22.04 (jammy)* and official QGIS DEBs from .
-It includes *Nginx* and *Xvfb* and can be used as a standalone service (via HTTP TCP port 80) or as *FCGI* backend (via TCP port 9993).
-
-### Requisites
-
-You need **Docker >= 18.04** with `seccomp`. Support for the `statx` syscall, required by Qt 5.10+, may be made necessary in the future. This is generally included in **libseccomp >= 2.3.3**;
-a kernel with `statx` support is also required; any kernel newer than 4.11 should be ok. Please check with your vendor.
-
-Known good configurations are:
-- Ubuntu 18.04.2+
-- CentOS 8
-- Fedora 29+
-
-See for further details.
-
-Containers are not tested on hosts running OSes other than Linux.
-
-### Services provided
-
-This Docker container exposes HTTP on port `80` via Nginx and a direct FastCGI on port `9993` that can be used directly by an external HTTP proxy (like the provided `docker-compose.yml` does).
-A sample Nginx configuration for using it as a *FastCGI* backend is also [provided](conf/nginx-fcgi-sample.conf).
-
-### Available tags
-
-Image name: `qgis/qgis-server`
-
-- **QGIS stable**: `stable` | `stable-ubuntu`
-- **QGIS LTR**: `ltr` | `ltr-ubuntu`
-
-Example:
-
-```sh
-docker pull qgis/qgis-server:ltr
-```
-
-### Build the container
-
-#### QGIS stable
-
-```sh
-# stable version
-docker build -t qgis/qgis-server:stable .
-
-# ltr version
-docker build --build-arg repo=ubuntu-ltr -t qgis/qgis-server:ltr .
-```
-
-You may skip this step. The container will be downloaded from the Docker Hub.
-
-### Run the docker and map host data
-
-```sh
-docker run -v $(pwd)/data:/io/data --name qgis-server -d -p 8010:80 qgis/qgis-server:ltr
-```
-
-`WMS` and `WFS` for a specific project will be published at `http://localhost:8010/ogc/`.
-An `/ows/` endpoint is also available for direct access to the `fcgi` (bypassing the `map=` rewrite).
-Direct access to `WFS3` is accessible via `http://localhost:8010/wfs3/`.
-
-
-#### PostgreSQL connection service file (optional)
-
-The [connection service file](https://www.postgresql.org/docs/12/libpq-pgservice.html) allows connection parameters to be associated with a single service name and thus to be able to use the same QGIS projects in different environments. This could also be achieved with [QGIS authentications](https://docs.qgis.org/3.16/en/docs/user_manual/auth_system/auth_workflows.html#database-authentication).
-To use a pg_service file you need to bind mount it as shown in the [docker-compose](docker-compose.yml) or on run:
-
-```sh
--v $(pwd)/conf/pg_service.conf:/etc/postgresql-common/pg_service.conf:ro
-```
-
-
-#### Plugins, fonts and SVG symbols (optional)
-
-Plugins, custom fonts and SVG can be optionally exposed from host to the containers:
-
-- plugins: `-v $(pwd)/plugins:/io/plugins`
-- fonts: `-v $(pwd)/fonts:/usr/share/fonts`
-- svg symbols: `-v $(pwd)/svg:/var/lib/qgis/.local/share/QGIS/QGIS3/profiles/default/svg`
-
-Example:
-
-```sh
-docker run -v $(pwd)/data:/io/data -v $(pwd)/plugins:/io/plugins -v $(pwd)/fonts:/usr/share/fonts --name qgis-server -d -p 8010:80 qgis/qgis-server:ltr
-```
-
-#### Access the container via bash
-
-```sh
-docker exec -ti qgis-server /bin/bash
-```
-
-where `qgis-server` is the name of the container.
-
-#### Logs and debugging
-
-QGIS server log can retreived via `docker logs`
-
-```sh
-docker logs [-f] qgis-server
-```
-
-where `qgis-server` is the name of the container.
-
-Default log level is set to `warning`. Log level can be increased during container deployment passing the `-e QGIS_SERVER_LOG_LEVEL=0` option:
-
-```sh
-docker run -e QGIS_SERVER_LOG_LEVEL=0 -v $(pwd)/data:/io/data -v $(pwd)/plugins:/io/plugins --name qgis-server -d -p 8010:80 qgis/qgis-server:ltr
-```
-
-### Run multiple instances of QGIS server
-
-Adjust first the configuration in `conf/nginx.conf` with the proper number of expected workers
-and `docker-compose.yml` with the path of data folder on the host.
-
-Then:
-
-```sh
-docker-compose up -d --scale qgis-server=N
-```
-
-Where N is the number of expected QGIS server workers.
-
-
-### Data dir structure
-
-`$(pwd)/data` must have the following structure:
-
-```text
-data
- |
- |--
- |-- .qgs
-```
-
-[oq-consolidate](https://github.com/gem/oq-consolidate) may helps you in exporting data suitable for QGIS server (consolidating project and layers).
-
-`$(pwd)/plugins` must have the following structure:
-
-```text
-plugins
- |
- |--
- |-- .py
- |-- metadata.txt
- |-- __init__.py
-```
-
-Custom fonts are loaded into `/usr/share/fonts`. `fc-cache` is run when container is started.
-
-### Runtime customizations
-
-The following variables can be customized during container deployment:
-
-#### Nginx
-
-When `SKIP_NGINX` is set to a different value than `0` or `false` the embedded copy of Nginx will not be started and an external reverse proxy is then required to access the FastCGI QGIS backend.
-
-- `SKIP_NGINX`: default is *unset* (do not skip Nginx startup)
-
-#### QGIS
-
-- `QGIS_SERVER_LOG_LEVEL`: default is `1`
-- `QGIS_SERVER_PARALLEL_RENDERING`: default is `true`
-- `QGIS_SERVER_MAX_THREADS`: default is `2`
-- `QGIS_SERVER_WMS_MAX_WIDTH`: not set by default
-- `QGIS_SERVER_WMS_MAX_WIDTH`: not set by default
-
-See [QGIS server documentation](https://docs.qgis.org/testing/en/docs/server_manual/config.html#environment-variables) for further details.
-
-It is also possible to customized the ID of the user running QGIS server processes when it is required to write to host volumes (see [notes](#notes)):
-
-- `QGIS_USER`: default is `nginx`, a numerical id must be proivided
-
-Example: `docker run -e QGIS_USER=1000` or `docker run -e QGIS_USER=$(id -u qgis)`
-
-### Notes
-
-GeoPackages do not play well with multiple processes having gpkg files opened in `rw` mode. By default QGIS server processes lack write permission on `/io/data`.
-If it is required to let QGIS server write data to `/io/data` make sure that either you are using a process-safe datastore (i.e. a Postgres backend) or you are
-limiting horizontal scaling to one container only. QGIS server user can be customized via the `QGIS_USER` environment variable.
-
-## QGIS Desktop
+### Warning
-There is currently no documentation how to run the QGIS Desktop via docker.
+There are discussions on how to build these images and they are not considered stable.
+They are considered as NOT production ready.
diff --git a/desktop.Dockerfile b/desktop/Dockerfile
similarity index 100%
rename from desktop.Dockerfile
rename to desktop/Dockerfile
diff --git a/desktop/README.md b/desktop/README.md
new file mode 100644
index 0000000..7a10554
--- /dev/null
+++ b/desktop/README.md
@@ -0,0 +1,8 @@
+## QGIS Desktop standalone
+
+A simple QGIS desktop Docker image
+
+### Warning
+
+There are discussions on how to build these images and they are not considered stable.
+They are considered as NOT production ready.
\ No newline at end of file
diff --git a/scripts/build-push-docker.sh b/scripts/build-push-docker.sh
index 478390a..5709eac 100755
--- a/scripts/build-push-docker.sh
+++ b/scripts/build-push-docker.sh
@@ -43,5 +43,5 @@ for TAG in ${TAGS}; do
ALL_TAGS="${ALL_TAGS} --tag qgis/${REPO}:${TAG}"
done
-docker buildx build --push --platform linux/amd64,linux/arm64 --build-arg ubuntu_dist=${UBUNTU_DIST} --build-arg repo=${QGIS_UBUNTU_PPA} ${ALL_TAGS} -f ${QGIS_TYPE}.Dockerfile .
+docker buildx build --push --platform linux/amd64,linux/arm64 --build-arg ubuntu_dist=${UBUNTU_DIST} --build-arg repo=${QGIS_UBUNTU_PPA} ${ALL_TAGS} -f ${QGIS_TYPE}/Dockerfile .
diff --git a/server.Dockerfile b/server/Dockerfile
similarity index 97%
rename from server.Dockerfile
rename to server/Dockerfile
index 447236d..d4159a5 100644
--- a/server.Dockerfile
+++ b/server/Dockerfile
@@ -37,7 +37,7 @@ RUN apt update && apt install -y gnupg wget software-properties-common && \
# This part is kept to allow the container to be used in
# standalone mode, without composing it with 'nginx'
ADD conf/qgis-server-nginx.conf /etc/nginx/nginx.conf
-ADD start-xvfb-nginx.sh /usr/local/bin/start-xvfb-nginx.sh
+ADD ../start-xvfb-nginx.sh /usr/local/bin/start-xvfb-nginx.sh
ENV QGIS_PREFIX_PATH /usr
ENV QGIS_PLUGINPATH /io/plugins
diff --git a/server/README.md b/server/README.md
new file mode 100644
index 0000000..81037ba
--- /dev/null
+++ b/server/README.md
@@ -0,0 +1,188 @@
+## QGIS server
+
+### Warning
+
+There are discussions on how to build these images and they are not considered stable.
+They are considered as NOT production ready.
+
+### General information
+
+The Docker image is built using *Ubuntu 20.04 (focal) and 22.04 (jammy)* and official QGIS DEBs from .
+It includes *Nginx* and *Xvfb* and can be used as a standalone service (via HTTP TCP port 80) or as *FCGI* backend (via TCP port 9993).
+
+### Requisites
+
+You need **Docker >= 18.04** with `seccomp`. Support for the `statx` syscall, required by Qt 5.10+, may be made necessary in the future. This is generally included in **libseccomp >= 2.3.3**;
+a kernel with `statx` support is also required; any kernel newer than 4.11 should be ok. Please check with your vendor.
+
+Known good configurations are:
+- Ubuntu 18.04.2+
+- CentOS 8
+- Fedora 29+
+
+See for further details.
+
+Containers are not tested on hosts running OSes other than Linux.
+
+### Services provided
+
+This Docker container exposes HTTP on port `80` via Nginx and a direct FastCGI on port `9993` that can be used directly by an external HTTP proxy (like the provided `docker-compose.yml` does).
+A sample Nginx configuration for using it as a *FastCGI* backend is also [provided](conf/nginx-fcgi-sample.conf).
+
+### Available tags
+
+Image name: `qgis/qgis-server`
+
+- **QGIS stable**: `stable` | `stable-ubuntu`
+- **QGIS LTR**: `ltr` | `ltr-ubuntu`
+
+Example:
+
+```sh
+docker pull qgis/qgis-server:ltr
+```
+
+### Build the container
+
+#### QGIS stable
+
+```sh
+# stable version
+docker build -t qgis/qgis-server:stable .
+
+# ltr version
+docker build --build-arg repo=ubuntu-ltr -t qgis/qgis-server:ltr .
+```
+
+You may skip this step. The container will be downloaded from the Docker Hub.
+
+### Run the docker and map host data
+
+```sh
+docker run -v $(pwd)/data:/io/data --name qgis-server -d -p 8010:80 qgis/qgis-server:ltr
+```
+
+`WMS` and `WFS` for a specific project will be published at `http://localhost:8010/ogc/`.
+An `/ows/` endpoint is also available for direct access to the `fcgi` (bypassing the `map=` rewrite).
+Direct access to `WFS3` is accessible via `http://localhost:8010/wfs3/`.
+
+
+#### PostgreSQL connection service file (optional)
+
+The [connection service file](https://www.postgresql.org/docs/12/libpq-pgservice.html) allows connection parameters to be associated with a single service name and thus to be able to use the same QGIS projects in different environments. This could also be achieved with [QGIS authentications](https://docs.qgis.org/3.16/en/docs/user_manual/auth_system/auth_workflows.html#database-authentication).
+To use a pg_service file you need to bind mount it as shown in the [docker-compose](docker-compose.yml) or on run:
+
+```sh
+-v $(pwd)/conf/pg_service.conf:/etc/postgresql-common/pg_service.conf:ro
+```
+
+
+#### Plugins, fonts and SVG symbols (optional)
+
+Plugins, custom fonts and SVG can be optionally exposed from host to the containers:
+
+- plugins: `-v $(pwd)/plugins:/io/plugins`
+- fonts: `-v $(pwd)/fonts:/usr/share/fonts`
+- svg symbols: `-v $(pwd)/svg:/var/lib/qgis/.local/share/QGIS/QGIS3/profiles/default/svg`
+
+Example:
+
+```sh
+docker run -v $(pwd)/data:/io/data -v $(pwd)/plugins:/io/plugins -v $(pwd)/fonts:/usr/share/fonts --name qgis-server -d -p 8010:80 qgis/qgis-server:ltr
+```
+
+#### Access the container via bash
+
+```sh
+docker exec -ti qgis-server /bin/bash
+```
+
+where `qgis-server` is the name of the container.
+
+#### Logs and debugging
+
+QGIS server log can retreived via `docker logs`
+
+```sh
+docker logs [-f] qgis-server
+```
+
+where `qgis-server` is the name of the container.
+
+Default log level is set to `warning`. Log level can be increased during container deployment passing the `-e QGIS_SERVER_LOG_LEVEL=0` option:
+
+```sh
+docker run -e QGIS_SERVER_LOG_LEVEL=0 -v $(pwd)/data:/io/data -v $(pwd)/plugins:/io/plugins --name qgis-server -d -p 8010:80 qgis/qgis-server:ltr
+```
+
+### Run multiple instances of QGIS server
+
+Adjust first the configuration in `conf/nginx.conf` with the proper number of expected workers
+and `docker-compose.yml` with the path of data folder on the host.
+
+Then:
+
+```sh
+docker-compose up -d --scale qgis-server=N
+```
+
+Where N is the number of expected QGIS server workers.
+
+
+### Data dir structure
+
+`$(pwd)/data` must have the following structure:
+
+```text
+data
+ |
+ |--
+ |-- .qgs
+```
+
+[oq-consolidate](https://github.com/gem/oq-consolidate) may helps you in exporting data suitable for QGIS server (consolidating project and layers).
+
+`$(pwd)/plugins` must have the following structure:
+
+```text
+plugins
+ |
+ |--
+ |-- .py
+ |-- metadata.txt
+ |-- __init__.py
+```
+
+Custom fonts are loaded into `/usr/share/fonts`. `fc-cache` is run when container is started.
+
+### Runtime customizations
+
+The following variables can be customized during container deployment:
+
+#### Nginx
+
+When `SKIP_NGINX` is set to a different value than `0` or `false` the embedded copy of Nginx will not be started and an external reverse proxy is then required to access the FastCGI QGIS backend.
+
+- `SKIP_NGINX`: default is *unset* (do not skip Nginx startup)
+
+#### QGIS
+
+- `QGIS_SERVER_LOG_LEVEL`: default is `1`
+- `QGIS_SERVER_PARALLEL_RENDERING`: default is `true`
+- `QGIS_SERVER_MAX_THREADS`: default is `2`
+- `QGIS_SERVER_WMS_MAX_WIDTH`: not set by default
+- `QGIS_SERVER_WMS_MAX_WIDTH`: not set by default
+
+See [QGIS server documentation](https://docs.qgis.org/testing/en/docs/server_manual/config.html#environment-variables) for further details.
+
+It is also possible to customized the ID of the user running QGIS server processes when it is required to write to host volumes (see [notes](#notes)):
+
+- `QGIS_USER`: default is `nginx`, a numerical id must be proivided
+
+Example: `docker run -e QGIS_USER=1000` or `docker run -e QGIS_USER=$(id -u qgis)`
+
+### Notes
+
+GeoPackages do not play well with multiple processes having gpkg files opened in `rw` mode. By default QGIS server processes lack write permission on `/io/data`.
+If it is required to let QGIS server write data to `/io/data` make sure that either you are using a process-safe datastore (i.e. a Postgres backend) or you are
+limiting horizontal scaling to one container only. QGIS server user can be customized via the `QGIS_USER` environment variable.
diff --git a/conf/nginx-fcgi-sample.conf b/server/conf/nginx-fcgi-sample.conf
similarity index 100%
rename from conf/nginx-fcgi-sample.conf
rename to server/conf/nginx-fcgi-sample.conf
diff --git a/conf/pg_service.conf b/server/conf/pg_service.conf
similarity index 100%
rename from conf/pg_service.conf
rename to server/conf/pg_service.conf
diff --git a/conf/qgis-server-nginx.conf b/server/conf/qgis-server-nginx.conf
similarity index 100%
rename from conf/qgis-server-nginx.conf
rename to server/conf/qgis-server-nginx.conf
diff --git a/test/data/test_project/layers/layer.gpkg b/server/test/data/test_project/layers/layer.gpkg
similarity index 100%
rename from test/data/test_project/layers/layer.gpkg
rename to server/test/data/test_project/layers/layer.gpkg
diff --git a/test/data/test_project/test_project.qgd b/server/test/data/test_project/test_project.qgd
similarity index 100%
rename from test/data/test_project/test_project.qgd
rename to server/test/data/test_project/test_project.qgd
diff --git a/test/data/test_project/test_project.qgs b/server/test/data/test_project/test_project.qgs
similarity index 100%
rename from test/data/test_project/test_project.qgs
rename to server/test/data/test_project/test_project.qgs