<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
</head>
<body text="#000000" bgcolor="#FFFFFF">
<div class="moz-text-flowed" style="font-family: -moz-fixed;
font-size: 13px;" lang="x-unicode">Hi,
<br>
<br>
I'm trying to make QGIS Server to serve projects from PostgreSQL
database on the web.
<br>
Could anyone tell me please, is it possible to do that, or I can
serve only files?
<br>
<br>
The general workflow should look like this:
<br>
<br>
1. Operators with QGIS Desktop are connecting to PostgreSQL, and
create/modify projects in it.
<br>
No files are involved. This part works, I was able to save test
project on one system, and open it on the other.
<br>
<br>
2. After finishing project creation/modification, Operators send a
link to it to the consumers/implementors.
<br>
The idea is to be able to view the project in a browser on any
device. No editing is needed, at least at this moment.
<br>
I've installed QGIS Server on the same host as PostgreSQL, set
nginx/related stuff, and tested that it successfully serves file
project.
<br>
Then I've tried to get the project from database. qgis user, under
which QGIS server is run, was allowed passwordless connection to
PostgreSQL via localhost.
<br>
<br>
Having test URL for file like this
<br>
<a class="moz-txt-link-freetext"
href="https://domain.com/qgisserver/cgi-bin/qgis_mapserv.fcgi?LAYERS=countries&SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&CRS=EPSG:4326&WIDTH=400&HEIGHT=200&BBOX=-90,-180,90,180&MAP=/home/qgis/projects/world.qgs">https://domain.com/qgisserver/cgi-bin/qgis_mapserv.fcgi?LAYERS=countries&SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&CRS=EPSG:4326&WIDTH=400&HEIGHT=200&BBOX=-90,-180,90,180&MAP=/home/qgis/projects/world.qgs</a>
<br>
<br>
I've replaced file path with naive PostgreSQL URL like this
<br>
<a class="moz-txt-link-freetext"
href="https://domain.com/qgisserver/cgi-bin/qgis_mapserv.fcgi?LAYERS=countries&SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&CRS=EPSG:4326&WIDTH=400&HEIGHT=200&BBOX=-90,-180,90,180&MAP=postgresql://127.0.0.1:5432?sslmode=disable&dbname=qgis&schema=world&project=world">https://domain.com/qgisserver/cgi-bin/qgis_mapserv.fcgi?LAYERS=countries&SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&CRS=EPSG:4326&WIDTH=400&HEIGHT=200&BBOX=-90,-180,90,180&MAP=postgresql://127.0.0.1:5432?sslmode=disable&dbname=qgis&schema=world&project=world</a>
<br>
But got this error:
<br>
<br>
<ServerException>
<br>
Project file error. For OWS services: please provide a SERVICE and
a MAP parameter pointing to a valid QGIS project file
<br>
</ServerException>
<br>
<br>
The error says that QGIS Server wants file, no mentions about
database.
<br>
On other hand, documentation below says that for MAP parameter
either file path or PostgreSQL URL is needed, so it should work?
<br>
<br>
<a class="moz-txt-link-freetext"
href="https://docs.qgis.org/3.34/en/docs/server_manual/config.html#qgis-server-envvar">https://docs.qgis.org/3.34/en/docs/server_manual/config.html#qgis-server-envvar</a>
<br>
QGIS_PROJECT_FILE
<br>
The .qgs or .qgz project file, normally passed as a parameter in
the query string (with MAP), you can also set it as an environment
variable (for example by using mod_rewrite Apache module).
<br>
<br>
**Note that you may also indicate a project stored in
PostgreSQL**, e.g.
postgresql://localhost:5432?sslmode=disable&dbname=mydb&schema=myschema&project=myproject
or inside a geopackage file, e.g.
geopackage:/path/to/geopackage/file.gpkg?projectName=myProjectName.
<br>
<br>
<br>
Searching in the Internet for the error above, I've found this bug
report
<br>
<a class="moz-txt-link-freetext"
href="https://github.com/qgis/QGIS/issues/31192">https://github.com/qgis/QGIS/issues/31192</a>
<br>
<br>
From which I've got the idea to encode PostgreSQL URL in test URL,
but it didn't work with the same error as above.
<br>
Also, it looks like report author is connecting with QGIS Desktop
to QGIS Server, not browser, so this is not my case?
<br>
Also-also, as I've stuck with nginx for unrelated to QGIS reasons,
I cannot test proposed there Apache rewrite magic.
<br>
<br>
I've tried to see if there is anything useful in QGIS Server logs,
but there are no any related messages in them.
<br>
I've set QGIS_SERVER_LOG_PROFILE to true, but that didn't change
anything. I see my request to QGIS server only in nginx logs, but
nothing in QGIS Server logs, and no even failed connection
attempts in PostgreSQL logs.
<br>
<br>
So, is there any way to have PostreSQL projects served via QGIS
Server, or I can use only files? <span class="moz-smiley-s1"
title=":)"></span>
<br>
</div>
</body>
</html>