Ubuntu环境QGIS Server部署指南
<h2 id="1-简介">1 简介</h2><p>QGIS是开源GIS软件,有桌面版(QGIS Desktop)和服务端(QGIS Server)两个版本,桌面版可用于GIS数据的可视化以及生产加工,QGIS Server用于地图服务器,发布标准WMS、WFS等协议的地图数据,本文记录了Ubuntu操作系统下QGIS Server的配置流程。</p>
<h2 id="2-qgis安装与配置">2 QGIS安装与配置</h2>
<p>Ubuntu默认仓库中的QGIS版本比较老,为安装最新版本,要将QGIS仓库加入到Ubuntu镜像源列表中。</p>
<pre><code class="language-shell">wget -qO - https://qgis.org/downloads/qgis-2021.gpg.key | sudo gpg --no-default-keyring --keyring gnupg-ring:/etc/apt/trusted.gpg.d/qgis-archive.gpg --import
sudo chmod a+r /etc/apt/trusted.gpg.d/qgis-archive.gpg
sudo add-apt-repository "deb https://qgis.org/ubuntu $(lsb_release -c -s) main"
</code></pre>
<p>更新镜像源</p>
<pre><code class="language-shell">sudo apt update
</code></pre>
<p>安装QGIS-Server</p>
<pre><code class="language-shell">sudo apt install qgis
</code></pre>
<p>安装完后用下面命令测试一下</p>
<pre><code class="language-shell">/usr/lib/cgi-bin/qgis_mapserv.fcgi
</code></pre>
<p>有以下输出表示安装成功(不同版本的QGIS Server输出略微不同,有一些版本可能输出状态码为400)</p>
<p><img src="https://img2022.cnblogs.com/blog/2101975/202207/2101975-20220724141654226-1342248211.png"></p>
<h2 id="3-nginx安装与配置">3 Nginx安装与配置</h2>
<p>要输出WMS、WFS等OGC标准服务,我们还要在QGIS Server之上搭建Web服务器,用来和前端交互。有两种选择:Apache和Nginx,这里选择了Nginx的部署方式。</p>
<h3 id="31-nginx安装">3.1 Nginx安装</h3>
<p>首先安装Nginx</p>
<pre><code class="language-shell">sudo apt install nginx
</code></pre>
<h3 id="32-systemd配置">3.2 systemd配置</h3>
<p>QGIS Server进程的管理需要使用FastCGI,Nginx本身并不直接使用FastCGI。有三种解决方法:</p>
<ul>
<li>spawn-fcgi</li>
<li>fcgiwrap</li>
<li>systemd</li>
</ul>
<p>这里我们采用systemd的方式,优点是无需安装其它组件,同时具有较好的效率和稳定性。</p>
<p>基于systemd部署依靠两个单元:Socket单元和Service单元。Nginx用Scoket单元和QGIS Server交互,Serbvice单元定义了QGIS Server进程属性。先新建一个Socket单元:</p>
<pre><code class="language-shell">vim /etc/systemd/system/qgis-server@.socket
</code></pre>
<p>文本内容如下:</p>
<pre><code class="language-shell">
Description=QGIS Server Listen Socket (instance %i)
Accept=false
ListenStream=/var/run/qgis-server-%i.sock
SocketUser=www-data
SocketGroup=www-data
SocketMode=0600
WantedBy=sockets.target
</code></pre>
<p>注意上面的SocketUser和SocketGroup要和Nginx的用户保持一致(默认是www-data),如果改成root,那么Nginx子进程将无法使用socket和QGIS Server通信了,会提示Permission Denied。</p>
<p>接着创建Service单元:</p>
<pre><code class="language-shell">vim /etc/systemd/system/qgis-server@.service
</code></pre>
<p>内容如下:</p>
<pre><code class="language-shell">
Description=QGIS Server Service (instance %i)
User=www-data
Group=www-data
StandardOutput=null
StandardError=journal
StandardInput=socket
ExecStart=/usr/lib/cgi-bin/qgis_mapserv.fcgi
EnvironmentFile=/etc/qgis-server/env
WantedBy=multi-user.target
</code></pre>
<p>同样要注意User和Group是www-data,以及StandardInput是socket。同时定义了环境变量文件为<code>/etc/qgis-server/env</code>,env文件模板如下:</p>
<pre><code class="language-shell">QGIS_PROJECT_FILE=/etc/qgis/myproject.qgs
QGIS_SERVER_LOG_STDERR=1
QGIS_SERVER_LOG_LEVEL=3
</code></pre>
<p>其中QGIS_PROJECT_FILE指定了默认的地图文件,后续请求时如果不指定MAP参数,将自动请求这里的默认数据。QGIS_SERVER_LOG_STDERR和QGIS_SERVER_LOG_LEVEL分别指定了输出标准错误和输出日志。</p>
<p>Socket和Service都配置好之后就可以启动了,进程数可以按实际CPU数量来分配,这里配置为2个进程。在shell终端输入以下命令:</p>
<pre><code class="language-shell">for i in 1 2; do systemctl start --now qgis-server@$i.socket; done
for i in 1 2; do systemctl start --now qgis-server@$i.service; done
</code></pre>
<h3 id="33-更新nginx配置文件">3.3 更新Nginx配置文件</h3>
<p>将以下内容添加到Nginx的配置文件中:</p>
<pre><code class="language-Nginx">upstream qgis-server_backend {
server unix:/var/run/qgis-server-1.sock;
server unix:/var/run/qgis-server-2.sock;
}
server {
…
location /qgisserver {
gzip off;
include fastcgi_params;
fastcgi_pass qgis-server_backend;
}
}
</code></pre>
<p>重启Nginx使配置生效</p>
<pre><code class="language-shell">systemctl restart nginx
</code></pre>
<h2 id="3-数据验证">3 数据验证</h2>
<p>下载QGIS官方提供的样例数据</p>
<pre><code class="language-shell">mkdir /home/qgis/projects/
cd /home/qgis/projects/
wget https://github.com/qgis/QGIS-Training-Data/archive/release_3.22.zip
unzip release_3.22.zip
mv QGIS-Training-Data-release_3.22/exercise_data/qgis-server-tutorial-data/world.qgs .
mv QGIS-Training-Data-release_3.22/exercise_data/qgis-server-tutorial-data/naturalearth.sqlite .
</code></pre>
<p>发送WMS服务请求(127.0.0.1可替换为实际的domain或者host IP):</p>
<pre><code>http://127.0.0.1/qgisserver?
MAP=/home/qgis/projects/world.qgs&
LAYERS=countries&
SERVICE=WMS&
VERSION=1.3.0&
REQUEST=GetMap&
CRS=EPSG:4326&
WIDTH=400&
HEIGHT=200&
BBOX=-90,-180,90,180
</code></pre>
<p>如果能在浏览器中看到以下内容,说明QGIS Server配置成功了!</p>
<p><img src="https://img2022.cnblogs.com/blog/2101975/202207/2101975-20220724144611863-1196470998.png"></p><br><br>
来源:https://www.cnblogs.com/greyxy/p/16513001.html
頁:
[1]