Server virtual cu Docker¶
Aceasta este versiunea actualizată și acceptată în prezent a mediului virtual OpenBioMaps.
Este adecvată atât pentru testare și dezvoltare, cât și pentru utilizarea într-un mediu de producție.
Pentru utilizarea obm-docker sunt necesari 4 pași:
Instalați docker-compose
Obțineți imaginea obm-docker
Configurați Docker în funcție de particularitățile gazdei (de exemplu, SSL, SMTP)
Porniți mediul Docker
Pregătirea/instalarea Docker și Compose¶
sudo curl -L https://github.com/docker/compose/releases/download/1.29.2/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
docker-compose --version
docker-compose version 1.29.2, build f46880fe
Pentru mai multe informații despre instalarea Docker, vizitați această pagină:
Instalarea/configurarea unei instanțe OpenBioMaps¶
Într-un singur pas:
curl -s https://gitlab.com/openbiomaps/docker/obm-composer/-/raw/master/install.sh > /tmp/install.sh && sudo bash /tmp/install.sh
Accesarea aplicației OBM¶
http://YOUR_SERVER_NAME:9080/projects/sablon/
Autentificați-vă în baza de date șablon folosind numele de utilizator valaki@openbiomaps.org și parola abc123. După prima autentificare, modificați această parolă implicită!
Dacă ați instalat Docker pe calculatorul local, puteți accesa serviciile de mai sus prin localhost.
Actualizați serverul și proiectul sablon urmând acest ghid:
Accesul la baza de date¶
Puteți accesa baza de date Postgres prin următoarele aplicații online preconfigurate pentru administrarea bazelor de date. Totuși, acest lucru depinde de relația dintre gazdă și Docker.
!PhpPgAdmin nu este disponibil în prezent!
*Phppgadmin: http://YOUR_SERVER_NAME:9881/*
Observații privind PhpPgadmin:
Este un instrument foarte ușor de utilizat, dar, din păcate, nu mai este întreținut în prezent, așadar trebuie să ne creăm propria ediție sau să așteptăm ca altcineva să o facă…
Adminer: http://YOUR_SERVER_NAME:9882/
Observații privind Adminer:
server = openbiomaps_biomaps_db_1
db_name = biomaps | gisadmin
db_user = biomapsadmin | sablon_admin | YOUR_PROJECT_admin
password = (check the .env file for the biomapsadmin's password or the local_vars.php.inc for ..._admin's password)
Puteți administra baza de date cu utilizatorul biomapsadmin. Acesta este un superutilizator. Parola sa este generată de sistem în timpul instalării și poate fi găsită în fișierul /srv/docker/openbiomaps/.env.
Pentru fișierul mapfile MapServer, parola criptată pentru conexiunea la baza de date poate fi generată cu /var/lib/openbiomaps/maps/access.key.
OpenBioMaps creează implicit două baze de date. Baza de date „biomaps” conține tabelele necesare funcționării sistemului, iar „gisdata” conține tabelele de date ale bazelor de date ale proiectelor. Cu alte cuvinte, în cea din urmă vor fi stocate datele colectate de utilizatori și la aceasta se pot conecta utilizatorii. „biomapsadmin” este un superutilizator în ambele baze de date. Parola sa este generată de sistem în timpul instalării și este stocată în fișierul /srv/docker/openbiomaps/.env.
Aplicație pentru întreținerea Docker¶
Acest pas nu este obligatoriu, dar poate fi util dacă aveți nevoie de o interfață web de administrare complexă pentru gestionarea Docker.
mkdir -p /srv/docker/portainer && cd /srv/docker/portainer
git clone https://gitlab.com/openbiomaps/docker/obm-portainer.git .
sudo su
docker-compose pull
# Genereate a strong random password for the admin user
bash ./password_gen.sh
docker-compose up -d
On the portainer interface use the "Get started" button...
Accesați aplicația de administrare Docker (Portainer)
Autentificați-vă în aplicație folosind numele de utilizator admin și parola dumneavoastră.
Dacă ați instalat Docker pe calculatorul local, puteți accesa serviciile de mai sus prin localhost.
Întreținerea OBM: Supervisor¶
Puteți accesa interfața de administrare a serverului OBM la: http://localhost:9880/supervisor.php
sau
https://yourserver.com/supervisor.php
cu numele de utilizator supervisor și parola creată de obm_post_install.sh. Această parolă se află în /etc/openbiomaps/.htpasswd.
Puteți regenera parola pentru Supervisor cu comanda ./obm_post_install.sh update supervisor.
Actualizări: actualizarea aplicației cu Docker¶
Aceste comenzi sunt sigure și nu distrug modificările efectuate prin interfața web OpenBioMaps.
foo@bar:~$ docker-compose pull
Pulling biomaps_db ... done
Pulling mapserver ... done
Pulling app ... done
## Pulling phppgadmin ... done -- There is no PhpPgAdmin currently
Pulling adminer ... done
foo@bar:~$ docker-compose up -d
Creating obm-composer_biomaps_db_1 ... done
Creating obm-composer_mapserver_1 ... done
Creating obm-composer_adminer_1 ... done
## Creating obm-composer_phppgadmin_1 ... done
Creating obm-composer_app_1 ... done
Actualizarea unui singur container
foo@bar:~$ docker-compose up -d app
Configurarea e-mailului pentru proiecte¶
Trebuie să configurați accesul la un server de e-mail pentru a trimite e-mailuri din aplicație.
Presupunând că serverul nou nu are propriul nume de domeniu, valoarea implicită pentru trimiterea e-mailurilor este setată la SMTP (/etc/openbiomaps/system_vars.php.inc), ceea ce necesită configurarea serverelor SMTP de ieșire și a autentificării asociate pentru fiecare proiect (/var/www/html/biomaps/projects/…/local_vars.php.inc).
Aceste fișiere de configurare pot fi editate în interfața Supervisor.
Găsiți secțiunea cu setările pentru e-mail și configurați gazda SMTP și autentificarea, dacă este necesară.
Dacă există un server SMTP extern, iată un exemplu:
// Mail settings
define('SMTP_AUTH',true); # true
define('SMTP_HOST','mail.my-mail-server.com');
define('SMTP_USERNAME','my-name@my-mail-server.com');
define('SMTP_PASSWORD','something');
define('SMTP_SECURE','tls'); # Or starttls
define('SMTP_PORT','587'); # 465
define('SMTP_SENDER','openbiomaps@my-mail-server.com');
Dacă SMTP_SENDER nu este setat, SMTP_USERNAME va fi expeditorul. Trimiterea e-mailurilor prin Google nu este posibilă cu aceste setări simple, deoarece Google utilizează stratul xoauth pentru autentificare! Este posibilă includerea stratului respectiv aici!
Dacă sistemul gazdă va fi serverul SMTP:
// Mail settings
define('SMTP_AUTH',false);
define('SMTP_HOST','172.17.0.1');
define('SMTP_PORT','25');
define('SMTP_SENDER','info@you-smtp-server');
Pentru adresa IP de mai sus, verificați pe gazdă cu „ip addr | grep docker0”.
Pe gazdă, în funcție de MTA utilizat, aveți câteva exemple:
Exim4¶
În fișierul /etc/exim4/update-exim4.conf
dc_relay_nets=»172.21.0.0/16»
dc_local_interfaces=»127.0.0.1 ; ::1 ; 172.17.0.1»
aceste linii trebuie actualizate, dar, în funcție de configurația Exim, este posibil să fie necesare și alte modificări.
În fișierul /etc/exim4/exim4.config
linia „hostlist relay_from_hosts…” trebuie extinsă cu rețeaua obm_back, de exemplu:
hostlist relay_from_hosts = localhost :172.20.0.0/16 :172.17.0.0/16 :172.21.0.0/16
Observație: „Este posibil ca una dintre cele trei rețele de mai sus să fie suficientă; acest lucru nu a fost încă testat.”
Postfix¶
inet_interfaces = 172.17.0.1
mynetworks = 172.21.0.4 172.20.0.6
Iată cum puteți afla rețelele Docker și adresele IP:
docker container ls
Căutați obm-composer_app_1.
docker inspect xxxxx_obm-composer_app_1
Căutați interfețele obm_back și obm_web:
obm-composer_obm_back {
…
„IPAddress”: „172.20.0.6”,
}
obm-composer_obm_web {
…
„IPAddress”: „172.21.0.4”,
}
Firewall¶
Este posibil să fie necesară și actualizarea firewall-ului pentru a permite mesajele primite de la imagine către gazdă. Adresa de rețea obm_back trebuie permisă drept rețea de intrare în firewall. De exemplu:
ufw allow from 172.20.0.0/16 proto tcp to any port 25
Setări SMTP globale¶
Cel mai probabil, veți dori să utilizați aceleași setări SMTP pentru toate proiectele de pe server. În acest caz, utilizați parametrii:
SMTP_GLOBAL_HOST
SMTP_GLOBAL_AUTH
SMTP_GLOBAL_USERNAME
SMTP_GLOBAL_PASSWORD
SMTP_GLOBAL_SECURE
SMTP_GLOBAL_PORT
SMTP_GLOBAL_SENDER
în sytem_vars.php.inc. Cel puțin SMTP_GLOBAL_HOST trebuie setat dacă doriți să utilizați parametrii globali. Parametrii locali îi suprascriu întotdeauna pe cei globali.
Configurarea accesului ssl/https (foarte recomandată)¶
Este posibil să fie necesară actualizarea setării protocolului de acces al proiectului în Supervisor; totuși, aceasta depinde de configurația gazdei.
Nu există niciun server web pe gazdă, dar gazda furnizează certificate SSL pentru Docker.
O modalitate posibilă este utilizarea certificatelor SSL ale gazdei prin montarea directoarelor necesare de pe gazdă în Docker. Puteți crea certificate letsencrypt:
apt install dehydrated
vi /etc/dehydrated/domain.txt
YOURDOMAIN
dehydrated -c
docker-compose.yml:
services:
app:
image: registry.gitlab.com/openbiomaps/web-app:latest
volumes:
...
- /etc/letsencrypt/YOURDOMAIN:/etc/apache2/certs
- ./apache2/default-ssl.conf:/etc/apache2/sites-enabled/default-ssl.conf
ports:
- 80:80
- 443:443
...
Gazda are un server web și furnizează un proxy pentru Docker.
O altă modalitate este utilizarea proxy-ului Apache al gazdei.
Gazdă: /etc/apache2/sites-enabled/000-default.conf
RedirectMatch permanent ^(?!/.well-known/.*) https://YOURDOMAIN/
Gazdă: /etc/apache2/sites-enabled/default-ssl.conf
RequestHeader set X-Forwarded-Proto 'https'
RequestHeader set X-Forwarded-Host 'YOURDOMAIN'
RequestHeader set X-Forwarded-Port "443"
ProxyPass /.well-known !
ProxyPass /
http://localhost:8090/
ProxyPassReverse /
http://localhost:8090/
ProxyPreserveHost On
<Proxy *>
allow from all
</Proxy>
docker-compose.yml:
services:
app:
...
ports:
- 80:8090
...
În acest caz, nu este necesară utilizarea protocolului HTTPS în setările proiectului, deoarece OBM poate recunoaște solicitarea HTTPS prin setările HTTP-X-FORWARD.
Utilizarea Traefik pentru procesarea solicitărilor către domenii diferite la nivelul Docker. De exemplu, aveți mai multe containere Docker pe gazdă…
Pentru configurarea unui router de trafic HTTPS bazat pe Docker, recomandăm utilizarea Traefik 2.x într-un alt container:
https://gitlab.com/openbiomaps/docker/traefik2.0-proxy
Și actualizați fișierul docker-compose.yml pentru a comunica cu Traefik:
networks:
traefik20_default:
external: true
#obm_web:
# external: true
services:
app:
....
# Do not use ports, traefik provides them!!!
# ports:
# - 80:80
# - 443:443
networks:
- obm_back
#- obm_web
- traefik20_default
labels:
- traefik.enable=true
- traefik.docker.network=traefik20_default
- traefik.http.routers.obm-secured.rule=Host(`YOUR_DOMAIN`)
- traefik.http.routers.obm-secured.entrypoints=https
- traefik.http.routers.obm-secured.middlewares=hsts@file
- traefik.http.routers.obm-secured.tls.certresolver=letsencrypt
- "traefik.http.middlewares.obm-biotika-redirect.redirectregex.regex=^https?://biotika.YOURDOMAIN(.*)"
- "traefik.http.middlewares.obm-biotika-redirect.redirectregex.replacement=https://YOUR_DOMAIN/projects/YOURPROJECT/"
- traefik.http.middlewares.obm-biotika-redirect.redirectregex.permanent=true
phppgadmin:
...
networks:
#- obm_web
- obm_back
- traefik20_default
labels:
- "traefik.enable=true"
- "traefik.docker.network=traefik20_default"
- "traefik.http.routers.obm-pgadmin.rule=Host(`phppgadmin.YOURDOMAIN`)"
- "traefik.http.routers.obm-pgadmin.entrypoints=https"
- "traefik.http.routers.obm-pgadmin.tls.certresolver=letsencrypt"
- "traefik.http.services.obm-pgadmin.loadbalancer.server.port=8080"
volumes:
...
traefik20_letsencrypt:
external: true
Este posibil ca acest ultim exemplu să nu fie încă complet…
Dacă oferiți acces la PostgreSQL, trebuie să configurați și SSL pentru PostgreSQL.
Dacă utilizați Traefik, puteți configura acolo accesul SSL. În caz contrar, puteți furniza certificate SSL containerului bazei de date și configura PostgreSQL astfel încât să accepte conexiuni numai prin SSL.
docker-compose.yml:
services:
...
biomaps_db:
volumes:
- /PATH_TO_CERTS/ssl.cert:/etc/ssl/certs/YOURDOMAIN.cert
- /PATH_TO_CERTS/ssl.key:/etc/ssl/certs/YOURDOMAIN.key
- ./postgresql.conf:/var/lib/postgresql/data/postgresql.conf
- ./pg_hba.conf:/var/lib/postgresql/data/pg_hba.conf
În containerul biomaps_db: /…./pg_hba.conf:
hostssl all all all md5
/…./postgres.conf:
ssl = on
ssl_cert_file = '/etc/ssl/certs/YOURDOMAIN.cert'
ssl_key_file = '/etc/ssl/certs/YOURDOMAIN.key'
Puteți testa conexiunea PostgreSQL fără SSL:
psql "postgresql://gisadmin@YOURDMAIN:5432/gisdata?sslmode=disable"
Dacă obligativitatea SSL funcționează, veți primi un mesaj de eroare asemănător cu acesta:
psql: FATAL: no pg_hba.conf entry for host „xxxxxxx”, user „gisadmin”, database „gisdata”, SSL off
Întreținerea Docker¶
Oprirea Docker¶
foo@bar:~$ docker-compose down
Ștergerea tuturor elementelor (inclusiv datele și bazele de date)¶
foo@bar:~$ docker-compose down -v
Accesul la shell-ul sistemului din imaginea containerului¶
foo@bar:~$ docker-compose exec app bash
Aici am accesat serviciul app. Consultați numele serviciilor în fișierul docker-compose.yml.
Citirea jurnalelor¶
foo@bar:~$ docker-compose logs -f app
Utilizarea pgtop¶
docker-compose exec -u postgres
Repornirea aplicației¶
Nu reporniți Apache din shell-ul Docker, ci din exterior:
foo@bar:~$ docker-compose restart app
Eliminarea unui număr mare de imagini Docker vechi și neutilizate¶
Avem multe?
docker images | grep "<none>"
Să le ștergem…
docker images | grep "<none>" | awk '{print $3}' | sed -e 's/^/docker rmi /' | bash
Este posibil să fie necesară editarea fișierelor traefik2.0/traefik.yml, traefik2.0/docker-compose.yml și traefik2.0/acme.json.
Actualizarea automată a Docker¶
https://github.com/OpenBioMaps/scripts/blob/master/docker-auto-update.readme
Arhivarea tabelelor, datelor, …¶
Pentru scripturi, consultați acest depozit:
https://github.com/OpenBioMaps/scripts
utilizați archive.sh pentru a configura exporturi SQL periodice ale tabelelor importante
Exemple de setări crontab pentru archive.sh¶
#dumping normal tables from Monday to Saturday
15 04 * * 1-6 /root/archive.sh normal &
#dumping all tables and whole databases on every Sunday
15 04 * * 7 /root/archive.sh full &
Exemple de setări în obm_archive_settings.sh¶
#path of table list
table_list="${HOME}/.archive_list.txt"
#postgres parameters
project_database="gisdata"
system_database="biomaps"
admin_user="gisadmin"
archive_path="/home/archives"
pgport="5432"
pg_dump="pg_dump -p $pgport"
psql="psql -p $pgport"
#FOR DOCKER based OBM systems
#docker="/usr/bin/docker-compose -f /path/to/docker-compose.yml exec -T"
#pg_dump="$docker biomaps_db pg_dump -p $pgport"
#psql="$docker biomaps_db psql -p $pgport"
#table dayof_week dayofmonth month
#foo at every day
#foo * * *
#bar every Monday
#bar 1 * *
#casbla at every 1st day of every June
#casbla * 1 6
Exportarea unui tabel din baza de date utilizând Docker¶
docker-compose exec -T biomaps_db bash -c „pg_dump -U biomapsadmin –table public.YOUR_TABLE gisdata” > YOUR_TABLE.sql