Svarbu
Vertimas yra bendruomenės pastangos, prie kurių jūs galite prisijungti. Šis puslapis šiuo metu išverstas 100.00%.
8. Konteinerizuotas išdėstymas
Yra daug būdų, kaip galima naudoti konteinerizuotą aplikaciją, nuo pačių paprasčiausių (paprastas Docker vaizdas) iki sudėtingų (Kubernetes ir pan.).
Pastaba
Tokio tipo išdėstymui reikia, kad būtų įdiegta ir paleista docker aplikacija. Peržiūrėkite šį vadovą.
Patarimas
Docker run yra iš anksto supakuota aplikacija (dar žinoma kaip vaizdas). Ją galima sukurti atsisiuntus kaip šaltinį (Dockerfile ir resursus), arba gauti jau sukurtą iš registrų (privačių ar viešų).
Pastaba
QGIS Debian-Ubuntu paketui reikia tinkamo gpg autentifikacijos rakto. Prašome skaityti diegimo puslapius, kad keistumėte šį Dockerfile.
8.1. Paprasti docker vaizdai
Kadangi viešame registre docker vaizdo nėra, jums reikės jį susikurti. Kad tai padarytumėte, sukurkite aplanką qgis-server
ir jame:
sukurkite failą
Dockerfile
su tokiu turiniu:
FROM debian:bookworm-slim
ENV LANG=en_EN.UTF-8
RUN apt-get update \
&& apt-get install --no-install-recommends --no-install-suggests --allow-unauthenticated -y \
gnupg \
ca-certificates \
wget \
locales \
&& localedef -i en_US -f UTF-8 en_US.UTF-8 \
# Add the current key for package downloading
# Please refer to QGIS install documentation (https://www.qgis.org/fr/site/forusers/alldownloads.html#debian-ubuntu)
&& mkdir -m755 -p /etc/apt/keyrings \
&& wget -O /etc/apt/keyrings/qgis-archive-keyring.gpg https://download.qgis.org/downloads/qgis-archive-keyring.gpg \
# Add repository for latest version of qgis-server
# Please refer to QGIS repositories documentation if you want other version (https://qgis.org/resources/installation-guide/#repositories)
&& echo "deb [signed-by=/etc/apt/keyrings/qgis-archive-keyring.gpg] https://qgis.org/debian bookworm main" | tee /etc/apt/sources.list.d/qgis.list \
&& apt-get update \
&& apt-get install --no-install-recommends --no-install-suggests --allow-unauthenticated -y \
qgis-server \
spawn-fcgi \
xauth \
xvfb \
&& apt-get remove --purge -y \
gnupg \
wget \
&& rm -rf /var/lib/apt/lists/*
RUN useradd -m qgis
ENV TINI_VERSION v0.19.0
ADD https://github.com/krallin/tini/releases/download/${TINI_VERSION}/tini /tini
RUN chmod +x /tini
ENV QGIS_PREFIX_PATH /usr
ENV QGIS_SERVER_LOG_STDERR 1
ENV QGIS_SERVER_LOG_LEVEL 2
COPY cmd.sh /home/qgis/cmd.sh
RUN chmod -R 777 /home/qgis/cmd.sh
RUN chown qgis:qgis /home/qgis/cmd.sh
USER qgis
WORKDIR /home/qgis
ENTRYPOINT ["/tini", "--"]
CMD ["/home/qgis/cmd.sh"]
sukurkite failą
cmd.sh
su tokiu turiniu:
#!/bin/bash
[[ $DEBUG == "1" ]] && env
exec /usr/bin/xvfb-run --auto-servernum --server-num=1 /usr/bin/spawn-fcgi -p 5555 -n -d /home/qgis -- /usr/lib/cgi-bin/qgis_mapserv.fcgi
sukurkite vaizdą su:
docker build -f Dockerfile -t qgis-server ./
8.1.1. Pirmas paleidimas
Kad paleistumėte serverį, jums reikės QGIS projekto failo. Jūs galite naudoti vieną iš jūsų, arba pasirinkti šį pavyzdį.
Kad tai padarytumėte, sukurkite aplanką data
viduje anksčiau sukurto aplanko qgis-server
ir nukopijuokite į jį savo failą. Kad tiktų žemiau einantys paaiškinimai, pervadinkite jį į osm.qgs
.
Pastaba
Jums gali reikėti pridėti reklamuojamą URL kortelėje QGIS Serveris, kurią rasite , jei GetCapabilities bus neteisingas. Pavyzdžiui, jei jūsų serveris išorėje matomas per prievadą 8080, jūs įrašysite kaip reklamuojamą URL http://localhost:8080/qgis-server/
. Daugiau informacijos rasite skiltyje Jūsų projekto konfigūravimas ir tolimesnėse.
Dabar jūs galite paleisti serverį įvykdydami:
docker network create qgis
docker run -d --rm --name qgis-server --net=qgis --hostname=qgis-server \
-v $(pwd)/data:/data:ro -p 5555:5555 \
-e "QGIS_PROJECT_FILE=/data/osm.qgs" \
qgis-server
Naudotos parinktys:
-d: vykdyti fone
–rm: pašalinti konteinerį, kai jis sustabdomas
–name: kuriamo konteinerio pavadinimas
–net: (anksčiau sukurtas) potinklis
–hostname: konteinerio mašinos pavadinimas, vėlesniam naudojimui
-v: vietinis duomenų aplankas, kurį reikia prijungti prie konteinerio
-p: mašinos/konteinerio prievadų sugretinimas
-e: aplinkos kintamasis, kurį reikia naudoti konteineryje
Kad patikrintumėte, rašykite docker ps | grep qgis-server
ir tada turėtumėte matyti eilutę su qgis-server:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4de8192da76e qgis-server "/tini -- /home/qgis…" 3 seconds ago Up 2 seconds 0.0.0.0:5555->5555/tcp qgis-server
8.1.2. Panaudojamas pavyzdys
Kadangi serveris priima tik fastcgi jungtis, jums reikia HTTP serverio, kuris apdoroja protokolą. Kad tai padarytumėte, jums reikia sukurti paprastą Nginx konfigūracijos failą ir paleisti Nginx vaizdą.
Dabartiniame aplanke sukurkite nginx.conf
su tokiu turiniu:
server {
listen 80;
server_name _;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
location /qgis-server {
proxy_buffers 16 16k;
proxy_buffer_size 16k;
gzip off;
include fastcgi_params;
fastcgi_pass qgis-server:5555;
}
}
Ir įrašykite tokią komandą:
docker run -d --rm --name nginx --net=qgis --hostname=nginx \
-v $(pwd)/nginx.conf:/etc/nginx/conf.d/default.conf:ro -p 8080:80 \
nginx:1.13
Kad patikrintumėte galimybių pasiekiamumą, įrašykite naršyklėje http://localhost:8080/qgis-server/?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetCapabilities
8.1.3. Susitvarkymas
Kad išvalytumėte vykdomus vaizdus, įrašykite:
docker stop qgis-server nginx
8.2. Doker rinkiniai
Ankstesnį būdą galima aprašyti scenarijumi, bet jo negalima lengvai supakuoti ar standartizuoti bei lengvai valdyti.
Norint dirbti su docker vaizdų rinkiniu, jūs galėtumėte naudoti docker rinkinį, kurį valdo orkestratorius. Rinkinyje vaizdai veikia tame pačiame privačiame potinklyje ir jūs galite paleisti / sustabdyti visą rinkinį ar išplatinti rinkinį į kitus darbininkus. Yra daug orkestratorių, pavyzdžiui Swarm, Kubernetes ir Mesos.
Žemiau pateiktos paprastos konfigūracijos, skirtos testavimui. Jos netinka gamybai.
8.2.1. Swarm/docker-compose
Docker dabar turi savo orkestratorių: Swarm (suderinamą su docker-compose failais). Jūs turite jį įjungti (Mac versija veiks ir su Linux).
Rinkinio aprašymas
Dabar, kai turite veikiantį Swarm, sukurkite paslaugos failą (žr. Išplatinti į Swarm) qgis-stack.yaml
:
version: '3.7'
services:
qgis-server:
# Should use version with utf-8 locale support:
image: qgis-server:latest
volumes:
- REPLACE_WITH_FULL_PATH/data:/data:ro
environment:
- LANG=en_EN.UTF-8
- QGIS_PROJECT_FILE=/data/osm.qgs
- QGIS_SERVER_LOG_LEVEL=0 # INFO (log all requests)
- DEBUG=1 # display env before spawning QGIS Server
nginx:
image: nginx:1.13
ports:
- 8080:80
volumes:
- REPLACE_WITH_FULL_PATH/nginx.conf:/etc/nginx/conf.d/default.conf:ro
depends_on:
- qgis-server
Kad pateiktumėte (ar atnaujintumėte) rinkinį, rašykite:
docker stack deploy -c qgis-stack.yaml qgis-stack
Tikrinkite rinkinio pateikimo būseną, kol gausite 1/1 stulpelyje replicas:
docker stack services qgis-stack
Kažkas panašaus į:
ID NAME MODE REPLICAS IMAGE PORTS
gmx7ewlvwsqt qgis_nginx replicated 1/1 nginx:1.13 *:8080->80/tcp
l0v2e7cl43u3 qgis_qgis-server replicated 1/1 qgis-server:latest
Kad patikrintumėte WMS galimybes, įrašykite naršyklėje http://localhost:8080/qgis-server/?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetCapabilities
Susitvarkymas
Kad apsitvarkytumėte, rašykite:
docker stack rm qgis-stack
8.2.2. Kubernetes
Įdiegimas
Jei turite įsidiegę Docker Desktop, Kubernetes (dar vadinamo k8s) naudojimas yra gan paprastas: įjunkite k8s.
Priešingu atveju sekite minikube vadovą arba microk8s skirtą Ubuntu.
Kadangi Kubernetes diegimas gali būti tikrai sudėtingas, mes koncentruosimės tik ties šios demonstracijos aspektais. Tolimesnę / detalesnę informaciją rasite oficialioje dokumentacijoje.
microk8s
microk8s reikia kelių papildomų žingsnių: jūs turite įjungti registrą ir pridėti žymą qgis-server vaizdui, kad Kubernetes rastų sukurtus vaizdus.
Visų pirmą, įjunkite registrą:
microk8s enable dashboard dns registry
Tada pridėkite žymą ir sustumkite vaizdą į jūsų naujai sukurtą registrą:
docker tag qgis-server 127.0.0.1:32000/qgis-server && docker push 127.0.0.1:32000/qgis-server
Galų gale, pridėkite ir pabaikite /etc/docker/daemon.json
, kad jūsų registras 127.0.0.1:32000 būtų sąraše lauke insecure-registries:
{
"insecure-registries": ["127.0.0.1:32000"]
}
Manifestų kūrimas
Kubernetes yaml manifestuose aprašo platinamus objektus. Yra daug skirtingų tipų, bet mes naudosime tik platinimus (valdyti podus, t.y. docker vaizdus) ir paslaugas, kad išplatinimai būtų matomi vidiniais ar išoriniais tikslais.
Platinimo manifestai
Sukurkite failą deployments.yaml
su tokiu turiniu:
apiVersion: apps/v1
kind: Deployment
metadata:
name: qgis-server
namespace: default
spec:
replicas: 1
selector:
matchLabels:
myLabel: qgis-server
template:
metadata:
labels:
myLabel: qgis-server
spec:
containers:
- name: qgis-server
image: localhost:32000/qgis-server:latest
imagePullPolicy: Always
env:
- name: LANG
value: en_EN.UTF-8
- name: QGIS_PROJECT_FILE
value: /data/osm.qgs
- name: QGIS_SERVER_LOG_LEVEL
value: "0"
- name: DEBUG
value: "1"
ports:
- containerPort: 5555
volumeMounts:
- name: qgis-data
mountPath: /data/
volumes:
- name: qgis-data
hostPath:
path: REPLACE_WITH_FULL_PATH/data
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: qgis-nginx
namespace: default
spec:
replicas: 1
selector:
matchLabels:
myLabel: qgis-nginx
template:
metadata:
labels:
myLabel: qgis-nginx
spec:
containers:
- name: qgis-nginx
image: nginx:1.13
ports:
- containerPort: 80
volumeMounts:
- name: nginx-conf
mountPath: /etc/nginx/conf.d/
volumes:
- name: nginx-conf
configMap:
name: nginx-configuration
---
kind: ConfigMap
apiVersion: v1
metadata:
name: nginx-configuration
data:
nginx.conf: |
server {
listen 80;
server_name _;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
location /qgis-server {
proxy_buffers 16 16k;
proxy_buffer_size 16k;
gzip off;
include fastcgi_params;
fastcgi_pass qgis-server:5555;
}
}
Paslaugos manifestas
Sukurkite failą services.yaml
su tokiu turiniu:
apiVersion: v1
kind: Service
metadata:
name: qgis-server
namespace: default
spec:
type: ClusterIP
selector:
myLabel: qgis-server
ports:
- port: 5555
targetPort: 5555
---
apiVersion: v1
kind: Service
metadata:
name: qgis-nginx
namespace: default
spec:
type: NodePort
selector:
myLabel: qgis-nginx
ports:
- port: 80
targetPort: 80
nodePort: 30080
Manifestų platinimas
Norint platinti vaizdus ir paslaugus Kubernetes, galima naudoti švieslentę (spauskite + viršutiniame dešiniame kampe) arba komandinę eilutę.
Pastaba
Kai komandinė eilutė naudojama su microk8s, jūs turėsite prieš kiekvieną komandą rašyti priešdėlį microk8s.
Norėdami platinti ar atnaujinti jūsų manifestus:
kubectl apply -f ./
Kad patikrintumėte, kas šiuo metu išplatinta:
kubectl get pods,services,deployment
Turėtumėte gauti kažką panašaus į tai:
NAME READY STATUS RESTARTS AGE
pod/qgis-nginx-54845ff6f6-8skp9 1/1 Running 0 27m
pod/qgis-server-75df8ddd89-c7t7s 1/1 Running 0 27m
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/Kubernetes ClusterIP 10.152.183.1 <none> 443/TCP 5h51m
service/qgis-exec-server ClusterIP 10.152.183.218 <none> 5555/TCP 35m
service/qgis-nginx NodePort 10.152.183.234 <none> 80:30080/TCP 27m
service/qgis-server ClusterIP 10.152.183.132 <none> 5555/TCP 27m
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/qgis-nginx 1/1 1 1 27m
deployment.apps/qgis-server 1/1 1 1 27m
Norėdami skaityti nginx/qgis žurnalą, rašykite:
kubectl logs -f POD_NAME
Norėdami patikrinti WMS galimybes, naršyklėje rašykite http://localhost:30080/qgis-server/?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetCapabilities
Susitvarkymas
Norėdami apsitvarkyti rašykite:
kubectl delete service/qgis-server service/qgis-nginx deployment/qgis-nginx deployment/qgis-server configmap/nginx-configuration
8.3. Platinimas debesyje
Nuosavo serverių spiečiaus tvarkymas valdant konteinerizuotų aplikacijų platinimą yra sudėtingas darbas. Jūs turite valdyti kelis dalykus, tokius kaip aparatinė įranga, pralaidumas ir saugumas skirtinguose lygmenyse.
Debesų platinimo sprendimai gali būtų gera alternatyva, kai jūs nenorite gilintis į infrastruktūros valdymą.
Platinimas debesyje gali naudoti nuosavybinius mechanizmus, bet jie taipogi suderinami su etapais, paaiškintais anksčiau (docker vaizdai ir rinkinių valdymas).
8.3.1. AWS atvejis
Su Amazon AWS, per ECS (Elastic Container Service) funkcionalumus, jūs galite naudoti docker-compose ar Kubernetes suderinamus įrankius jūsų rinkinio valdymui. Jūs turėsite sukurti vaizdų registrą, kad jūsų savi vaizdai būtų prieinami.
Norėdami naudoti į docker-compose panašų funkcionalumą, turite įdiegti ecs-cli klientą ir turėti reikiamas teises / vaidmenis. Tada, naudodami ecs-cli compose komandas jūs galite perpanaudoti rinkinio aprašymą.
Norėdami naudoti Kubernetes, jūs galite naudoti AWS žiniatinklio konsolę ar komandinės eilutės įrankį eksctl ir turėti reikiamas teises / vaidmenis. Tada su gerai sukonfigūruota kubectl aplinka jūs galite perpanaudoti Kubernetes manifestus.