Weblate kasutamine
Sissejuhatus
Weblate https://weblate.org/ on Python keeles arendatud tarkvara, mis kasutab lisaks erinevaid vaba tarkvaralisi komponente
- Linux operatsioonisüsteem (nt Debian, Ubuntu)
- PostgreSQL
- Redis
- Nginx
Aadressil https://docs.weblate.org/en/latest/admin/quick.html antakse süsteemi paigaldamiseks erinevaid soovitusi, muu hulgas
- Docker
- virtualenv
Käesolev tekst keskendub Weblate Docker põhise rakenduse kasutamisele kusjuures eeldatakse, et kasutuskohas on kasutada nö üldotstarbeline Nginx. Käesolev tekst ei õpeta süstemaatiliselt Docker kasutamist, aga juhitakse tähelepanu Docker kasutamise võtetele, millest võib Weblate ja tema tööks vajalike abistavate komponentidele puhul kasu olla. Käesolev tekst võib olla hea näitematerjal Docker ja docker compose kasutamise illustreerimiseks.
Tööpõhimõte
Docker abil ettevalmistatud Weblate süsteem koosneb neljast konteinerist
- PostgreSQL - postgres:11-alpine https://hub.docker.com/_/postgres (2020 kevadel Debian v. 10)
- Redis - redis https://hub.docker.com/_/redis
- Nginx - https://hub.docker.com/r/steveltn/https-portal; võib kasutada kasutuskohas juba olemasolevat nö frontend http serverit (ssl offload jms)
- Weblate - https://hub.docker.com/r/weblate/weblate
Väited
- kõik konteinerid sisaldavad ise ainult vastavat rakendust
- konteineritele on külge monteeritud docker volume tehnika abil named volume'id
- kontenerid asuvad ühes spetsiifilises ja eraldi non-default docker subnetis
- kasutamise käigus ei ehitata konteinereid, kasutatakse olemasolevat tavalist docker hub materjali
Võrguskeem
internet | __|__ tulemüür | | | | |_____| | 192.168.1.254 | ----|--------|------------------------------|-------------------------- | | __|__ _______________________|_________________________ | | | | | | | containers: | |_____| | - weblate-docker_cache_1 - 172.20.0.2/16 | | - weblate-docker_database_1 - 172.20.0.3/16 | Ningx | - weblate-docker_weblate_1 - 172.20.0.4/16 | 192.168.1.240/24 | | | networks: | | - br-9b5b7be455d1 - 172.20.0.0/16, gw: .1 | | | | volumes: | | - weblate-docker_redis-data | | - weblate-docker_postgres-data | | - weblate-docker_weblate-data | | | | images: | | - redis:5-alpine | | - postgres:11-alpine | | - weblate/weblate:latest | |_________________________________________________| Docker-host - 192.168.1.11
kus
- Docker host arvuti haldab docker tarkvara arvuti nö mälus virtuaalseid võrke, üks neist tekib weblate asjade käivitamisel ja on nimega weblate-docker_default ja võrgu aadressiga 172.20.0.0/16
- Docker host tarkvara teeb ise konteineritest internetti pöördumiste osas src-nat teisendusi
- docker-compose.yml kirjeldab port forwarding lahenduse, mille tulemusena tekivad sobivad dest-nat reeglid, nt 192.168.1.11:80 -> 172.20.0.4:8080
- Docker tarkvara omistab konteineritele automaatselt ip aadressid ning tekitab vastava nimelahenduse (nt kõik konteinerid teavad, et dns nimele 'cache' vastab ip aadress 172.20.0.2)
Weblate docker keskkonna ettevalmistamine
TODO
Vajalikud komponendid
- operatsioonisüsteem Debian, Ubuntu vms
- docker
- docker compose
Docker konteinerite paigaldamine, seadistamine ja käivitamine
Paigaldamist kirjeldatakse aadressil https://docs.weblate.org/en/latest/admin/install/docker.html#quick-docker Weblate tarkvara docker compose materjali kopeerimiseks sobib öelda
$ git clone https://github.com/WeblateOrg/docker-compose.git weblate-docker $ cd weblate-docker
Muu hulgas on kataloogis sellised failid
- docker-compose-https.yml
- docker-compose.override.yml
- docker-compose.yml
- environment
Lisaks tuleb koostatada konkreetsele kasutusjuhtumisel iseloomulik override fail, nt
$ cat docker-compose.override.yml version: '3' services: weblate: ports: - 80:8080 environment: WEBLATE_EMAIL_HOST: 192.168.1.250 WEBLATE_EMAIL_HOST_USER: user WEBLATE_EMAIL_HOST_PASSWORD: pass WEBLATE_SERVER_EMAIL: imre@auul.pri.ee WEBLATE_DEFAULT_FROM_EMAIL: imre@auul.pri.ee WEBLATE_ALLOWED_HOSTS: localhost,arendus.moraal.ee WEBLATE_ADMIN_PASSWORD: parool WEBLATE_ADMIN_EMAIL: imre@auul.pri.ee WEBLATE_URL_PREFIX: /weblate
Käivitamiseks sobib öelda
root@arendus:~/20200507/weblate-docker# docker-compose up Creating network "weblate-docker_default" with the default driver Creating volume "weblate-docker_weblate-data" with default driver Creating volume "weblate-docker_postgres-data" with default driver Creating volume "weblate-docker_redis-data" with default driver Creating weblate-docker_database_1 ... done Creating weblate-docker_cache_1 ... done Creating weblate-docker_weblate_1 ... done Attaching to weblate-docker_database_1, weblate-docker_cache_1, weblate-docker_weblate_1 ...
kus
- tekitatakse network weblate-docker_default
- tekitatakse kolm volume objekti
- tekitatakse kolm konteinerit
Tulemus paistab nii
$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 37ef224e1e7a weblate/weblate "/app/bin/start runs…" 9 days ago Up 13 minutes 4443/tcp, 0.0.0.0:80->8080/tcp weblate-docker_weblate_1 5637d1db0d45 postgres:11-alpine "docker-entrypoint.s…" 9 days ago Up 13 minutes 5432/tcp weblate-docker_database_1 2e6987949e81 redis:4-alpine "docker-entrypoint.s…" 9 days ago Up 13 minutes 6379/tcp weblate-docker_cache_1
$ docker exec -it weblate-docker_database_1 bash bash-5.0# df Filesystem 1K-blocks Used Available Use% Mounted on overlay 10257556 6536636 3259436 67% / tmpfs 65536 0 65536 0% /dev tmpfs 1019532 0 1019532 0% /sys/fs/cgroup /dev/mapper/system-root 10257556 6536636 3259436 67% /etc/resolv.conf /dev/mapper/system-root 10257556 6536636 3259436 67% /etc/hostname /dev/mapper/system-root 10257556 6536636 3259436 67% /etc/hosts shm 65536 8 65528 0% /dev/shm /dev/mapper/system-root 10257556 6536636 3259436 67% /var/lib/postgresql/data tmpfs 1019532 0 1019532 0% /proc/acpi tmpfs 65536 0 65536 0% /proc/kcore tmpfs 65536 0 65536 0% /proc/keys tmpfs 65536 0 65536 0% /proc/timer_list tmpfs 65536 0 65536 0% /proc/sched_debug tmpfs 1019532 0 1019532 0% /sys/firmware
Nt postgres konteineris töötavad sellised protsessid
bash-5.0# ps aux PID USER TIME COMMAND 1 postgres 0:00 postgres 21 postgres 0:00 postgres: checkpointer 22 postgres 0:00 postgres: background writer 23 postgres 0:00 postgres: walwriter 24 postgres 0:00 postgres: autovacuum launcher 25 postgres 0:00 postgres: stats collector 26 postgres 0:00 postgres: logical replication launcher 44 postgres 0:00 postgres: weblate weblate 172.19.0.4(33910) idle 110 root 0:00 bash 117 root 0:00 ps aux
Konteinerite logi ülesse leidmine
# find /var/lib/docker -name \*\-json.log -ls
docker-compose seadistusfailidele vastava seadistuse kanoonilise kuju esitamiseks sobib öelda
# docker-compose config
Nginx ssl frontend seadistus
Muu nö tavalise Nginx seadistuse hulgas on
location /weblate { proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header X-Forwarded-Proto https; proxy_set_header Host $http_host; proxy_pass http://192.168.112.24/weblate; proxy_redirect http:// $scheme://; proxy_connect_timeout 300; proxy_send_timeout 300; proxy_read_timeout 300; send_timeout 300; }
kus
- TODO
Tulemusena on rakendus aadressil https://arendus.moraal.ee/weblate/
Kasutamine
TODO
Varundamine
Seisata töötamad konteinerid
# docker-compose stop
Andmed asuvad komponentide docker volume peal
# docker volume ls DRIVER VOLUME NAME local weblate-docker_postgres-data local weblate-docker_redis-data local weblate-docker_weblate-data
ja nende kõigi korraga varundamiseks sobib öelda komponent kaupa
# docker run --rm \ -v weblate-docker_redis-data:/data -v weblate-docker_postgres-data:/var/lib/postgresql/data -v weblate-docker_weblate-data:/app/data -v $(pwd):/backup \ --name dbstoretmp ubuntu /bin/bash -c "cd /; tar zcf /backup/redis-postgres-weblate-data.tgz /data /var/lib/postgresql/data /app/data"
kus
- käivitatakse ajutiselt tavaline ubuntu
- tmp konteinerile monteeritakse külge kolm volume samadesse kataloogidesse kus nad on oma konteinerites töötamise ajal (õnne, et nad asuvad erinevate nimedega kataloogides)
- tmp konteinerile monteeritakske külge üks host failisüsteemi kataloog /backup alla
- tmp konteineris moodustatakse juurika suhtes üks tar arhiiv (seda on säilivad loabitid ja omanik:grupp väärtused)
Misc
Varundamine komponent eraldi tar.gz faili
# cat wl-backup.sh docker run --rm \ -v weblate-docker_redis-data:/redis-data -v weblate-docker_postgres-data:/postgres-data -v weblate-docker_weblate-data:/weblate-data -v $(pwd):/backup \ --name dbstoretmp ubuntu \ bash -c "cd /redis-data; tar zcf /backup/redis-data.tgz .; cd /postgres-data; tar zcf /backup/postgres-data.tgz .; cd /weblate-data; tar zcf /backup/weblate-data.tgz "
Käivitada konterinerid
# docker-compose up -d
Taaste
Paigaldamise eelduseks on
- pole ühtegi weblate konteinerit
- pole ühtegi weblate image't
- pole ühtegi weblate võrku
Paigaldise kustutamine docker-compose abil
# docker-compose stop # docker-compose down # docker volume rm weblate-docker_postgres-data weblate-docker_redis-data weblate-docker_weblate-data weblate-docker_postgres-data weblate-docker_redis-data weblate-docker_weblate-data
või docker utiliidi abil
# TODO
Tõmmiste kustatamine
TODO
Taastamiseks tekitatakse vajalikud volume'id ja täidetakse vastava sisuga
# cat wl-restore.sh docker run --rm -v weblate-docker_redis-data:/data -v weblate-docker_postgres-data:/var/lib/postgresql/data -v weblate-docker_weblate-data:/app/data -v /var/tmp:/backup --name dbstoretmp ubuntu /bin/bash -c "cd / && tar --numeric-owner -z -x -f /backup/redis-postgres-weblate-data.tgz "
kus
- käivitatakse ajutiselt tavaline ubuntu
- tmp konteinerile monteeritakse külge kolm volume samadesse kataloogidesse kus nad on oma konteinerites töötamise ajal (õnne, et nad asuvad erinevate nimedega kataloogides)
- tmp konteinerile monteeritakske külge üks host failisüsteemi kataloog /backup alla
- pakitakse arhiiv lahti juurikasse
Käivitada konteinerid
# docker-compose up
Tarkvara uuendamine
Tööpõhimõte
Tarkvara uuendamisel tuleb arvestada selliseid asjaolusid
- uuendamise käigus muutub konteineri tarkvara mitte otse, aga seetõttu, et vastav tõmmis uueneb
- uuenenud tarkvara käivitamisel volume sees olevates andmestikes võivad toimuda muudatused (nö migratsioon uuemale tarkvara versioonile) st sellise muudatuse läbi teinud andmestik ei sobib kasutada eelmise rakenduse versiooniga
Selleks, et saaks pöörduda tagasi viimati töötanud seisule tuleb
- teha kättesaadavaks viimati töötanud tõmmis (nt salvestades tõmmise failisüsteemi .tar failina või tehes tõmmisest nö alias tõmmise)
- teha kättesaadavaks viimati töötanud andmed (nt käivitades erakorraliselt varundamise protseduuri, mille käigus moodustatakse volume peal olevatest andmetest .tgz fail)
Uuendamine ilma tagasipöördumise võimaluseta
Tarkvara uuendamine toimub Docker üldvahendite abil seejuures jättes compose faili sisu samaks
docker-compose stop docker-compose pull docker-compose up
Seejuures kopeeritakse docker isanda juurest võimalusel uued viitatud tõmmised ja käivitatakse süsteem nende abil (väga mugav kuna andmed asuvad eraldi).
Viimati töötanud seisu salvestamine - tõmmise salvestamine failisüsteemis .tar failina
Tõmmise faili salvestamiseks sobib öelda
# docker save -o weblate-slash-weblate.latest.4.0.3.tar weblate/weblate:latest
Salvestatud faili laadimiseks sobib öelda
# docker load -i weblate-slash-weblate.latest.4.0.3
Viimati töötanud seisu salvestamine - tõmmise salvestamine teise nimega tõmmisena
Konteineri tarkvara uuendamiseks tavaliselt ei öelda konteineris apt-get update vms vaid uuendatakse konteineritele vastavad tõmmised. Selleks, et oleks võimalik pöörduda tagasi viimati töötanud seisule saab teha tõmmisest nö koopia (tegelikult midagi hard link taolist).
# docker tag weblate/weblate:latest local-weblate:4.0.3-20200510
Kui seejärel uuendada tõmmis ja sellest tulenevalt uueneb ka konteiner, siis 'local-weblate:4.0.3-20200510' jääb muutumatuks. Tagasipöördumiseks sobib kustutada põhikonteiner
# docker rmi weblate/weblate:latest
ning tekitada alias sellele nimele
# docker tag local-weblate:4.0.3-20200510 weblate/weblate:latest
Haldamine
Konteineriga tegelemine
inspect näitab palju huvitavat infot, nt millised keskkonnamuutujad ja nende väärtused on parasjagu kasutuses
# docker inspect weblate-docker_weblate_1
muu hulgas mis kataloogist compose faili kasutati
"Labels": { "com.docker.compose.config-hash": "77726d2d826145fb05e3dc260a7791a6d0f4c363177ebbb3a6dab4fd21d69dc8", "com.docker.compose.container-number": "1", "com.docker.compose.oneoff": "False", "com.docker.compose.project": "weblate-docker", "com.docker.compose.project.config_files": "docker-compose.yml,docker-compose.override.yml", "com.docker.compose.project.working_dir": "/root/20200509/weblate-docker", "com.docker.compose.service": "weblate", "com.docker.compose.version": "1.25.4", "version": "4.0.4" }
Logimine
Konteinerite logi näeb öeldes
# docker-compose logs -f
Konteinerite automaatne käivitamine arvuti alglaadimisel
docker-compose on tavaliste konteinerite haldamise instrument. St tekkinud konteiner on ikka ühesugune sõltumata sellest kas ta tekitati nt docker käsu või docker-compose abil. Üks viis arvuti alglaadimise käigus konteinerite käivitamiseks on kasutada parameetrit 'restart: always'
Weblate Subversion integratsioon
Logida sisse konteineri shelli weblate kasutajana
# docker exec -it weblate-docker_weblate_1 /bin/bash
ning öelda subversion kasutajanimi ja parooli salvestamiseks üks kord nt
weblate@c6c04a12a798:~$ HOME="/app/data/home" svn ls https://arendus.moraal.ee/svn/projektinimi/branches/weblate Authentication realm: <https://arendus.moraal.ee:443> Subversion Repository Password for 'weblate': ************** ----------------------------------------------------------------------- ATTENTION! Your password for authentication realm: <https://arendus.moraal.ee:443> Subversion Repository can only be stored to disk unencrypted! You are advised to configure your system so that Subversion can store passwords encrypted, if possible. See the documentation for details. You can avoid future appearances of this warning by setting the value of the 'store-plaintext-passwords' option to either 'yes' or 'no' in '/app/data/home/.subversion/servers'. ----------------------------------------------------------------------- Store password unencrypted (yes/no)? yes fail1 kataloog2 ...
Kasulikud lisamaterjalid
Kasulikud lisamaterjalid
- TODO