Weblate kasutamine

Allikas: Imre kasutab arvutit
Mine navigeerimisribaleMine otsikasti

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

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