我按照以下步骤设置QWC服务https://github.com/qwc-services/qwc-services-core#quick-开始,我可以运行演示。但如果加载我自己的QGIS项目,我会收到以下错误消息:
qwc-qgis-server_1 | 07:50:07 WARNING Server[99]: <ServerException>Layer(s) not valid</ServerException>
qwc-qgis-server_1 |
qwc-qgis-server_1 | 07:50:07 WARNING ClearCapabilities[99]: Cached cleared : /data/MeasurementDemo.qgs
qwc-qgis-server_1 | 07:50:07 WARNING PostGIS[99]: Connection to database failed
qwc-qgis-server_1 | could not connect to server: No such file or directory
qwc-qgis-server_1 | Is the server running locally and accepting
qwc-qgis-server_1 | connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?
qwc-qgis-server_1 |
qwc-qgis-server_1 | 07:50:07 CRITICAL Server[99]: Error, Layer(s) measurement_b46e976f_2d0f_4bf0_942a_9d9462b40c3e not valid in project /data/MeasurementDemo.qgs
qwc-qgis-server_1 | 07:50:07 WARNING Server[99]: <ServerException>Layer(s) not valid</ServerException>
qwc-qgis-server_1 |
qwc-config-service_1 | [2022-01-04 07:50:09,360] WARNING in config_generator: Skipping theme item '': Could not get capabilities for /ows/MeasurementDemo
qwc-config-service_1 | [2022-01-04 07:50:19,468] CRITICAL in config_generator: The generation of the configuration files resulted in a failure
qwc-config-service_1 | [2022-01-04 07:50:19,468] CRITICAL in config_generator: The configuration files were not updated!
qwc-config-service_1 | [2022-01-04 07:50:20,856] CRITICAL in config_generator: The generation of the permission files resulted in a failure.
qwc-config-service_1 | [2022-01-04 07:50:20,857] CRITICAL in config_generator: The permission files were not updated!
qwc-config-service_1 | [pid: 15|app: 0|req: 18/18] 172.18.0.11 () {30 vars in 408 bytes} [Tue Jan 4 07:50:05 2022] POST /generate_configs?tenant=default => generated 2881 bytes in 15083 msecs (HTTP/1.1 200) 2 headers in 81 bytes (1 switches on core 0)
由于错误与这个问题非常相似:PostgreSQL:为什么psql可以';t连接到服务器?,我照着答案做,但没有结果。
ps -ef | grep postgres
给了我以下结果:
postgres 203911 1 0 07:35 ? 00:00:00 /usr/lib/postgresql/13/bin/postgres -D /var/lib/postgresql/13/main -c config_file=/etc/postgresql/13/main/postgresql.conf
我还在中找到了插座
/var/run/postgresql/.s.PGSQL.5432
我运行命令
psql -h /var/run/postgresql/ GeoDB
但没有结果。之后,我检查了ph_hba.conf
文件:
# "local" is for Unix domain socket connections only
local all all peer
运行命令pg_lsclusters
会给我:
Ver Cluster Port Status Owner Data directory Log file
13 main 5432 online postgres /var/lib/postgresql/13/main /var/log/postgresql/postgresql-13-main.log
同样,在重新启动pg_ctlcluster和PostgreSQL之后,错误保持不变。
编辑1收到cnaimi的回复后,我检查了postgresql.conf
文件:
# - Connection Settings -
#listen_addresses = '*' # what IP address(es) to listen on;
# comma-separated list of addresses;
# defaults to 'localhost'; use '*' for all
# (change requires restart)
port = 5432 # (change requires restart)
max_connections = 100 # (change requires restart)
#superuser_reserved_connections = 3 # (change requires restart)
unix_socket_directories = '/var/run/postgresql' # comma-separated list of directories
# (change requires restart)
#unix_socket_group = '*' # (change requires restart)
#unix_socket_permissions = 0777 # begin with 0 to use octal notation
# (change requires restart)
#bonjour = off # advertise server via Bonjour
# (change requires restart)
#bonjour_name = '' # defaults to the computer name
# (change requires restart)
但我在那里找不到错误,因为端口是5432,它会监听所有地址。
编辑2在搜索过程中,我发现了几个pg_service.conf
文件:
./qwc-services/qwc-docker/wsgi-service/pg_service.conf
./qwc-services/qwc-docker/qgis-server/pg_service.conf
./qwc-services/qwc-docker/postgis/pg_service.conf
./qwc-services/qwc-docker/pg_service.conf
每个if都包含一个或多个数据库凭据,如以下所示:
[qwc_geodb]
host=qwc-postgis
port=5432
dbname=qwc_demo
user=qwc_service
password=qwc_service
sslmode=disable
据我所见,所有文件中的端口都是正确的。但是数据库名称和用户/密码当然是错误的。这会导致错误吗?或者QWS是通过.qgs文件获得凭据的?
编辑3感谢Devdatta Tenghee的提示,我将PostgreSQL的主机设置为127.0.0.1。通过使用sudo docker-compose ps
,可以看到使用过的容器及其端口:
Name Command State Ports
-------------------------------------------------------------------------------------------------------------------------------
qwc-docker_qwc-admin-gui_1 /bin/sh -c uwsgi --http-so ... Up 127.0.0.1:5031->9090/tcp
qwc-docker_qwc-api-gateway_1 /docker-entrypoint.sh ngin ... Up 0.0.0.0:8088->80/tcp,:::8088->80/tcp
qwc-docker_qwc-auth-service_1 /bin/sh -c uwsgi --http-so ... Up 127.0.0.1:5017->9090/tcp
qwc-docker_qwc-config-service_1 /bin/sh -c uwsgi --http-so ... Up 127.0.0.1:5010->9090/tcp
qwc-docker_qwc-data-service_1 /bin/sh -c uwsgi --http-so ... Up 127.0.0.1:5012->9090/tcp
qwc-docker_qwc-elevation-service_1 /bin/sh -c uwsgi --http-so ... Up 127.0.0.1:5002->9090/tcp
qwc-docker_qwc-fulltext-search-service_1 /bin/sh -c uwsgi --http-so ... Up 127.0.0.1:5011->9090/tcp
qwc-docker_qwc-map-viewer_1 /bin/sh -c uwsgi --http-so ... Up 127.0.0.1:5030->9090/tcp
qwc-docker_qwc-mapinfo-service_1 /bin/sh -c uwsgi --http-so ... Up 127.0.0.1:5016->9090/tcp
qwc-docker_qwc-ogc-service_1 /bin/sh -c uwsgi --http-so ... Up 127.0.0.1:5013->9090/tcp
qwc-docker_qwc-permalink-service_1 /bin/sh -c uwsgi --http-so ... Up 127.0.0.1:5001->9090/tcp
qwc-docker_qwc-postgis_1 docker-entrypoint.sh postgres Up (healthy) 127.0.0.1:5439->5432/tcp
qwc-docker_qwc-qgis-server_1 /sbin/my_init Up 127.0.0.1:8001->80/tcp
qwc-docker_qwc-solr_1 docker-entrypoint.sh solr- ... Up 127.0.0.1:8983->8983/tcp
您能检查位于/etc/postgresql/13/main/postgresql.conf特别是参数列表地址
也许你必须指定你正在收听哪个主机的节目。但是,如果演示示例正在运行,那么数据库配置应该是可以的
您也可以在postgres.conf上检查postgres的端口,并验证它是5432。
要使其正常工作,需要解决一些问题。
我假设Postgres服务器运行在主机上,而不是在任何Docker容器中。
当您配置QGIS映射文件时,您可能连接到localhost,并且这些信息保存在.qgs文件中。
这就是为什么您的第一条错误消息说它正在尝试连接到localhost,但没有找到服务器。此错误是在qwc docker容器中引发的。
出现此错误是因为QGIS服务器(在docker容器内(无法连接到主机上运行的postgres服务器,使用"localhost"作为主机名
要解决此问题,您需要执行以下操作:
-
在QGIS中,使用127.0.0.1而不是localhost连接到Postgres服务器。
-
使用此新连接保存qgs文件。
-
当您为qwc运行docker容器时,请使用
--network="host"
作为命令行参数。
请参阅:在Docker容器内部,如何连接到机器的localhost?
之后,qgis服务器(在docker容器中(应该能够使用127.0.0.1作为IP地址连接到主机上运行的Postgres服务器。