Pomoc Mattermost - Migracja z Qnap 5.0.0.7 - Do najnowszej wersji

fnx

Entry Technician
Q Associate
28 Marzec 2021
53
5
8
QNAP
null
Ethernet
1 GbE
Rozwiązanie problemu napisałem na w ost. poście.

Cześć,

siedzę próbuję ale już się poddaję. Proszę o pomoc.

Mam Qnap 251d, a na nim Mattermost 5.0.0.7
Z racji tego, że to stara wersja chciałem przejś na coś wyższego np.: w Dockerze.
Tutaj nie mam problemów wszystko łądnie działa łącznie z bazą wewnętrzną ale...
Jak zrobić backup bazy danych z tej "fabrycznej" aplikacji?

Sprawdzałem pliki i tu:
mattermost\volumes\db\var\lib\postgresql\data

wg mnie trzyma bazę. W katalogu base są inne (pewnie z bazą mattermost) i tam mnóstwo plików.

Próbowałem na komputerze postawić w tej samej wersji: postgresql, a następnie wyłączyć usługę podmienić wszystkie pliki i włączyć ale wtedy mi się wywala.

Próbowałem podłączyć się do qnapa na porcie 5432 przez aplikację pgadmin ale nie widzi nic.

W pliku docker-compose.yml jest to:

- MM_USERNAME=mmuser
- MM_PASSWORD=mmuser_password
- MM_DBNAME=mattermost

Więc strzelam, ze to są dane do bazy danych.

Niestety mimo różnych prób nie udaje mi się do niej wejść. Zalezy mi albo aby dostać się do bazy albo w jakiś sposób przekonwertować pliki do sql.

POMOCY.


Wersja oprogramowania Firmware: x.x.x Build 20YYMMDD
Model serwera: QNAP XX-XXX
 
Sprawdzałem pliki i tu:
mattermost\volumes\db\var\lib\postgresql\data
Ten katalog jest zmapowany na hosta (volume lub bind)?

Próbowałem na komputerze postawić w tej samej wersji: postgresql, a następnie wyłączyć usługę podmienić wszystkie pliki i włączyć ale wtedy mi się wywala.
Tak chyba to nie zadziała albo musisz mieć dokładnie tę samą wersję pg.

Próbowałem podłączyć się do qnapa na porcie 5432 przez aplikację pgadmin ale nie widzi nic.
W docker-compose masz port 5432 wypuszczony? No i czy QFirewall nie blokuje tego portu?

Może pokaż docker-compose.yml to coś wymyślimy.
 
Sprawdzałem pliki i tu:
mattermost\volumes\db\var\lib\postgresql\data
Ten katalog jest zmapowany na hosta (volume lub bind)?

/share/CACHEDEV1_DATA/.qpkg/mattermost/volumes/db/var/lib/postgresql/data

Próbowałem na komputerze postawić w tej samej wersji: postgresql, a następnie wyłączyć usługę podmienić wszystkie pliki i włączyć ale wtedy mi się wywala.
Tak chyba to nie zadziała albo musisz mieć dokładnie tę samą wersję pg.

Niby miałem bo sprawdzałem w pliku: PG_VERSION
ale kicha, usługa na windzie nie wstaje więc albo login inny albo coś innego :-(


Próbowałem podłączyć się do qnapa na porcie 5432 przez aplikację pgadmin ale nie widzi nic.
W docker-compose masz port 5432 wypuszczony? No i czy QFirewall nie blokuje tego portu?

Może pokaż docker-compose.yml to coś wymyślimy.


Proszę uprzejmie (znajduje się w: /share/CACHEDEV1_DATA/.qpkg/mattermost):


Kod:
version: "2"

services:

  db:
    image: mattermost/db:${BUILD_HASH}
    restart: unless-stopped
    volumes:
      - ./volumes/db/var/lib/postgresql/data:/var/lib/postgresql/data
      - ./flags:/flags
      - /etc/localtime:/etc/localtime:ro
    environment:
      - POSTGRES_USER=mmuser
      - POSTGRES_PASSWORD=mmuser_password
      - POSTGRES_DB=mattermost

  app:
    image: mattermost/app:${BUILD_HASH}
    depends_on:
      - db
    expose:
      - "${APP_PORT_NUMBER}"
    restart: unless-stopped
    volumes:
      - ./volumes/app/mattermost/config:/mattermost/config:rw
      - ./volumes/app/mattermost/data:/mattermost/data:rw
      - ./volumes/app/mattermost/logs:/mattermost/logs:rw
      - ./flags:/flags
      - /etc/localtime:/etc/localtime:ro
    environment:
      # set same as db credentials and dbname
      - MM_USERNAME=mmuser
      - MM_PASSWORD=mmuser_password
      - MM_DBNAME=mattermost
    links:
      - db:Db
  #
  # web:
  #  image: mattermost/web:${BUILD_HASH}
  #  depends_on:
  #    - db
  #    - app
  #  environment:
  #  - MATTERMOST_USE_SSL=${MATTERMOST_USE_SSL}
  #  - APP_PORT_NUMBER=${APP_PORT_NUMBER}
  #  - Forward80To443=${Forward80To443}
  #  ports:
  #    - "${MATTERMOST_HTTP}:80"
  #    - "${MATTERMOST_HTTPS}:443"
  #  restart: unless-stopped
  #  volumes:
  #    # This directory must have cert files
  #    - ./volumes/web/cert:/cert:ro
  #    - /etc/localtime:/etc/localtime:ro
  #  links:
  #    - app:app

networks:
  default:
    external:
      name: mattermost_app_network
w putty przeszedłem do katalogu:
/share/CACHEDEV1_DATA/.qpkg/mattermost

i następnie polecenie:
sudo -u mattermost bin/mattermost export bulk file.json --all-teams

ale nie działa.

Rozumiem, że mam przejść do katalogu gdzie to zainstalowane...



Część pliku: config.json z: /share/CACHEDEV1_DATA/.qpkg/mattermost/volumes/app/mattermost/config

Wygląda tak:


Kod:
    "SqlSettings": {
        "DriverName": "postgres",
        "DataSource": "postgres://mmuser:mmuser_password@db:5432/mattermost?sslmode=disable\u0026connect_timeout=10",
        "DataSourceReplicas": [],
        "DataSourceSearchReplicas": [],
        "MaxIdleConns": 20,
        "MaxOpenConns": 300,
        "Trace": false,
        "AtRestEncryptKey": "oClq5ps9SdKW7ot45YxChulC8mrWR20Uzdz0LE7neSAdaxUP",
        "QueryTimeout": 30


Dobrze rozumiem, że prócz loginu i hasła jest jeszcze jakiś klucz?
 
Dobrze rozumiem, że prócz loginu i hasła jest jeszcze jakiś klucz?
wg dokumentacji - nie jest uzywany .. na ile to prawda - no idea

wg mnie to
bin/mattermost export bulk file.json --all-teams
jest poprawniejsze - bedąć w folderze qpkg mattermost ;)
pozostaje dla mnei zagadką tylko od której wersji to polecenie działa
 
Dobrze rozumiem, że prócz loginu i hasła jest jeszcze jakiś klucz?
wg dokumentacji - nie jest uzywany .. na ile to prawda - no idea

wg mnie to
bin/mattermost export bulk file.json --all-teams
jest poprawniejsze - bedąć w folderze qpkg mattermost ;)
pozostaje dla mnei zagadką tylko od której wersji to polecenie działa


Niestety:

bin/mattermost: No such file or directory

Moze to musi być inny katalog :(
 

Załączniki

  • 1.png
    1.png
    21 KB · Wyświetleń: 73
  • 2.jpg
    2.jpg
    26,3 KB · Wyświetleń: 66
  • 3.jpg
    3.jpg
    108,9 KB · Wyświetleń: 73
Jeśli jesteś w katalogu mattermost może wystarczy tylko:
sh mattermost.sh export bulk file.json --all-teams
Chyba nic z tego:
[2021/11/13 13:35:34] ================= Calling export ========================
Usage: mattermost.sh {start|stop|restart}

Albo nie ma tego polecenia albo coś nie działa.

A da się jakoś coś zrobić własnie z tymi plikami postgres - może tu się uda jakoś wyodrębnić dane....
 
dobra - czyli to odpala kontener , to trzeba to wklepać z poziomu kontenera :D

To jest ciekawostka.

Jeśli chcesz zainstalować na Qnap Mattermost (fabryczny) to wymaga instalacji Container Station.

Zrobiłem mały test.
Odinstalowałem i usunąłem katalogi związane z Container Station.
Utworzyłem katalog na nowy, zainstalowałem to i odpaliłem mattermost.

Przeszperałem katalogi i szczerze mówiąc nie ma tam nic odnośnie Mattermost. Czyli tak jakby on działał w obrębie:
/share/CACHEDEV1_DATA/.qpkg/mattermost/

Ale do czego mu potrzebny Container Station?

Jak to polecenie tam odpalić poprawnie? Nie ma w nim żadnych kontenerów....
 
Dzięki za pomoc ale nie chcę dawać dostępu do nasa, wolę poprzez forum wymieniać się informacjami.
No dobra trochę chyba to rozgryzłem poprzez też inne wersje.

Wygląda na to, że Mattermost wrzuca się do katalogu:
/share/CACHEDEV1_DATA/.qpkg/mattermost

ale baza danych w postgres jest w:
/share/CACHEDEV1_DATA/.qpkg/mattermost/volumes/db

za to config aplikacji w:
/share/CACHEDEV1_DATA/.qpkg/mattermost/volumes/app/mattermost/config

W nim znajdziemy wpis:
"DataSource": "postgres://mmuser:mmuser_password@db:5432/mattermost?sslmode=disable\u0026connect_timeout=10",

zatem dane (ja też wcześniej) do logowania mamy:
login:
mmuser
pass:
mmuser_password
nazwa serwera bazy danych (zamiast ip)
db
port:
5432

I do tego miejsca jest ok.

Dalej zaczynają się schody bo wygląda na to, że postgres jest w jakiś sposób Container Station ale pewnie poprzez to:


Kod:
version: "2"

services:

  db:
    image: mattermost/db:${BUILD_HASH}
    restart: unless-stopped
    volumes:
      - ./volumes/db/var/lib/postgresql/data:/var/lib/postgresql/data
      - ./flags:/flags
      - /etc/localtime:/etc/localtime:ro
    environment:
      - POSTGRES_USER=mmuser
      - POSTGRES_PASSWORD=mmuser_password
      - POSTGRES_DB=mattermost

  app:
    image: mattermost/app:${BUILD_HASH}
    depends_on:
      - db
    expose:
      - "${APP_PORT_NUMBER}"
    restart: unless-stopped
    volumes:
      - ./volumes/app/mattermost/config:/mattermost/config:rw
      - ./volumes/app/mattermost/data:/mattermost/data:rw
      - ./volumes/app/mattermost/logs:/mattermost/logs:rw
      - ./flags:/flags
      - /etc/localtime:/etc/localtime:ro
    environment:
      # set same as db credentials and dbname
      - MM_USERNAME=mmuser
      - MM_PASSWORD=mmuser_password
      - MM_DBNAME=mattermost
    links:
      - db:db
     
      system-docker exec -it mattermost_app_1 /bin/sh
  #
  # web:
  #  image: mattermost/web:${BUILD_HASH}
  #  depends_on:
  #    - db
  #    - app
  #  environment:
  #  - MATTERMOST_USE_SSL=${MATTERMOST_USE_SSL}
  #  - APP_PORT_NUMBER=${APP_PORT_NUMBER}
  #  - Forward80To443=${Forward80To443}
  #  ports:
  #    - "${MATTERMOST_HTTP}:80"
  #    - "${MATTERMOST_HTTPS}:443"
  #  restart: unless-stopped
  #  volumes:
  #    # This directory must have cert files
  #    - ./volumes/web/cert:/cert:ro
  #    - /etc/localtime:/etc/localtime:ro
  #  links:
  #    - app:app

networks:
  default:
    external:
      name: mattermost_app_network

wg. mnie wskazuje, że baza znajduje się nie w katalogu gdzieś Container Station tylko w:
/volumes/db/var/lib/

Więc mamy to wyjaśnione.

Co więcej aplikacja jest inaczej napisana, bo część rzeczy mamy w katalogu:
nginx

Natomiast teraz powstaje problem.
Wiemy teoretycznie, że bazadanych (serwer postgres) znajduje się / odpala sie poprzez container ale jak do niej się połączyć?
Poprzez putty czy jednak jakimś narzędziem np: HeidiSQL wybierając postgresql ssh tunnel?

Jak się do tego połączyć?

Znalezione w sieci:
https://forum.mattermost.org/t/qnap-mattermost-app-backup/9870

https://forum.mattermost.org/t/how-to-acces-cli-on-qnap-server/8402

https://forum.mattermost.org/t/admin-locked-out-with-no-email-enabled/7836/9

Ktoś ma jakiś pomysł?
Udało się!

Przy pomocy putty wklepałem polecenie:
system-docker exec -it mattermost_app_1 /bin/sh

Następnie zrobiłem ping nazwy "db" to ta co występowała tu:
"DataSource": "postgres://mmuser:mmuser_password@db:5432/mattermost?sslmode=disable\u0026connect_timeout=10",

To pokazało mi adres IP:
172.30.68.2
Odpowiedziało tylko raz, za każdym razem.

Na Qnapie w aplikacji przełącznik wirtualny odnalazłem Virtual switch, tam zdjąłem natowanie i ustawiłem dnsy na Qnap i router.

Następnie dodałęm na komputerze routing:

route add 172.30.68.0 mask 255.255.255.0 IP Qnapa

Od tego momentu pingowało mi IP:
172.30.68.2

Następnie przy pomocy programu: HeidiSQL

połączyłem się z tym adresem na porcie i danych które są już wiadome i działa.
Mam dostęp do bazy!


dla zainteresowanych - prośba pomocy zdalnej odpadła - @fnx nie chce - no cóż - im OUT ! :D

Da się bez udostępniania swojego nasa.
 
połowa sukcesu:
czy wy - exportowane pliki poprawnie zaczytały się do nowej wersji ?

równie dobrze można było odpalic shella w tym dockerze mattermost i odpalic to polecenie
docker exec -it <container name> /bin/bash i rozejrzeć się co jest w środku
*optymistycznie zakładam że ten kontener na to pozwala*
 
połowa sukcesu:
czy wy - exportowane pliki poprawnie zaczytały się do nowej wersji ?

równie dobrze można było odpalic shella w tym dockerze mattermost i odpalic to polecenie
docker exec -it <container name> /bin/bash i rozejrzeć się co jest w środku
*optymistycznie zakładam że ten kontener na to pozwala*

To co było ważne, pięknie się zrzuciło. Tabele musiałem poprawić tzn z" na ` ale to żaden problem.

Działa i to najważniejsze.
Ok z racji, ze trochę mi to zajęło ale mam efekt to podaję instrukcję.

Konwersja wiadomości Mattermost:

Skopiować katalog Mattermost z (backup):
/share/CACHEDEV1_DATA/.qpkg/mattermost

Połączyć się putty do Qnap, wywołać polecenie:

system-docker exec -it mattermost_app_1 /bin/sh

zrobić ping bazy danych mattermost, nazwa hosta bazy to "db".
ping db

----
Mattermost z wersji fabrycznej Qnap tworzy dodatkowo Postgres (serwer) w ContainerStation i trzeba do niego się dostać.

Dane do bazy można sprawdzić tu:
docker-compose.yml
----

Po uzyskaniu adresu IP wchodzimy do aplikacji Sieć i przełącznik wirtualny, tam odnajdujemy przełącznik wirtualny z bramą IP adresu, który odpowiedział w putty.

Na przełączniku kikamy ustawienia wyłączamy NAt oraz dopisujemy DNS primary jako Qnap i ew. Secondary jako naszego routera.

następnie na komputerze uruchamiamy CMD i wpisujemy zmieniając wcześniej na poprawne IP:

route add IP PRZELACZNIKA mask 255.255.255.0 IP QNAP

Teraz powinno udać nam się zrobić ping do bazy danych w Cointainer Station Mattermosta.


Przy pomocy proogramu:
HeidiSQL
lub
dbeaver

Możemy połączyć się z bazą danych Mattermosta, pamiętając, że to POSTGRES.


Konwersja/import:

Jeśli chcemy zostawić nasze wiadomości, itp. z mattermost to musimy postawić np: Sql`a, odradzam na Qnapie bo ma starszą wesję i nie wszystko czyta poprawnie (sprawdzone, no chyba, ze ktoś chce sie bawić).


Możemy postawić Mysql w Dockerze. Tam nie musimy nic konfigurować ew. mozemy dodać:
Set MYSQL_RANDOM_ROOT_PASSWORD = "admin" (dla zmiany hasła)

Jeśli nie chcemy wystawiać bezpośrednio na świat serwera to wybieramy nat w Host wpisujemy port pod jakim ma być znajdywany np: 23306 (aby nie gryzł się z innym sql), a docker jaki będzie odpowiadał czyli 3306.


----
Po tej operacji musimy wrzucić bazę z Mattermost do nowego serwera sql.

Tutaj polecam zrobić inaczej (ze względu na komplikacje przy transwerze i migracji bazy).

Zainstalować w dokerze taką samą lub najbliższą wersję Mattermost.

W konfiguracji należy ustawić (zmieniając na swoje dane):

DB_HOST
adres IP Qnap
DB_PORT_NUMBER
Port serwera sql
MM_DBNAME
nazwa bazy danych
MM_PASSWORD
hasło do sql
MM_SQLSETTINGS_DATASOURCE
login:pass@tcp(ip:port)/mattermost?charset=utf8mb4,utf8&readTimeout=30s&writeTimeout=30s
MM_SQLSETTINGS_DRIVERNAME
mysql
MM_USERNAME
login do sql

POSTGRES_DB
nazwa bazy danych
POSTGRES_USER
login

Jeśli nie wystawiamy na świat to natowanie i ustawiamy odpowiednie porty jak przy sql. Www zew. dla mattermost to 8065.

Po utworzeniu kontenera powinnien się odpalić. Jeśli wszystko wpisaliśmy poprawnie to utworzy się baza danych w naszym sewwerze. Chwilę to będzie trwać. Mozemy podejrzeć poprzez ww. programy.

Po utworzeniu bazy wyłączmy nasz kontener z mattermost i uruchamiamy program:

ESF Database Migration Toolkit.

Przy jego pomocy dokonamy migracji baz.

Wpisujemy serwer postgres mattermosta
bazadanych to public lub mattermost

W kolejnym kroku wypełniamy pola dla sql który postawiliśmy, charset utf8.


W ostatnim kroku nie wybieramy Overwrite Database!!!

Zaznaczamy tam wszystkie bazy danych i następnie w Destination musimy przeklikać wybór baz docelowych. Chodzi o to aby nazwa bazy danych była z Dużej litery (ma to znaczenie).

Nie możemy usunąć tabel i dokonać migracji i utworzenia nowych, bo potem mattermost będzie sypać błędami. Dlatego najpierw stworzyliśmy bazę przy pomocy instalacji nowego mattermosta.

(info: https://www.dbsofts.com/articles/postgresql_to_mysql/)

Klikamy Next, submint i niech się dzieje.

Jeśli sypie błędami dla bazy post czyli dla wiadomości to przy pomocy
HeidiSQL
lub
dbeaver
łączymy się do db mattermost (w container) i odszukujemy wiadomosci, przy których sypie błędami. Moze to dotyczyć wiadomosci gdzie była emotka wysyłana lub coś podobnego wystarczy z treści wiadomosci usunąc to i zadziała.


-----

Jeśli wszystko poszło to mamy dorzuconą naszą bazę z mattermost qnapa do bazy na nowym sql gdzie wcześniej była baza nowego mattermost (czystego).

Następnie tworzymy nowy kontener mattermosta ale już z wersją wyższą ale nie spiesząc sie czyli wersja na qnap 5.0.0.7 do kontenera tworzymy np: 5.3...
Jeśli chcemy przejśc z wersji 5.0.0.7 (taka jak na qnap) do najnowszej np.: 6

Dane takie same jak wcześniej.


Teraz uruchamiamy kontener nowego mattermosta.

Teraz w oknie terminala powinny pojawiać się wiadomości odnośnie konwersji. Jeśli wszystko pójdzie poprawnie to na końcu uda nam się naszym starym loginem zalogować do nowego mattermosta i mamy dostęp do wszysktich wiadomości.

Teraz możemy zainstalować w dokerze ostatnią najnowszą wersję np.: 6.0 wpisać ponownie dane konfiguracyjne, uruchomić i powinno przejsć ten sam proces konwersji, a na końcu mamy już oczekiwany efekt. Czyli wersja Mattermost 6 i nasze wiadomosći, itp.



 

Użytkownicy znaleźli tą stronę używając tych słów:

  1. mattermost
  2. PostgreSQL qpkg
  3. migracja danych