Migracja plików binarnych
Nadchodzące wydanie głównej wersji6.0 Server Pro i Community Edition zmniejszy o połowę wykorzystanie przestrzeni dyskowej przez pliki binarne. Wersja 5.5.7 zawiera migrację online, która pozwala ograniczyć do minimum przestój podczas aktualizacji.
Od Server Pro 4.x pliki binarne są przechowywane dwukrotnie: w magazynie aktywnych plików w “filestore” oraz w systemie pełnej historii projektów. Od teraz pojedyncza kopia każdego pliku będzie przechowywana w systemie pełnej historii projektów.
Migracja do skonsolidowanego systemu przechowywania składa się z dwóch części: nowej flagi sterującej fazą migracji oraz skryptu przetwarzającego wszystkie aktywne i miękko usunięte (soft-deleted) projekty.
Fazy:
OVERLEAF_FILESTORE_MIGRATION_LEVEL=0(domyślnie) — pliki są odczytywane z filestore i do niego zapisywane. Do historii pliki są zapisywane asynchronicznie.OVERLEAF_FILESTORE_MIGRATION_LEVEL=1— pliki są odczytywane z historii, z awaryjnym odczytem z filestore, i zapisywane zarówno w filestore, jak i w historii. Możliwy jest powrót doOVERLEAF_FILESTORE_MIGRATION_LEVEL=0.OVERLEAF_FILESTORE_MIGRATION_LEVEL=2— pliki są odczytywane i zapisywane wyłącznie w historii. Powrót doOVERLEAF_FILESTORE_MIGRATION_LEVEL=1nie jest możliwy, chyba że migrację przeprowadzono w trybie “offline”.
OVERLEAF_FILESTORE_S3_ACCESS_KEY_ID) i historii (OVERLEAF_HISTORY_S3_ACCESS_KEY_ID): nadaj użytkownikowi filestore uprawnienia do odczytu bucketu historii dla blobów OVERLEAF_HISTORY_PROJECT_BLOBS_BUCKET . Od teraz usługa filestore będzie obsługiwać odczyty z usługi kompilatora.
Standardowa licencja Server Pro pozwala na uruchomienie aplikacji zarówno w środowisku produkcyjnym, jak i w jednym środowisku nieprodukcyjnym/testowym; zdecydowanie zalecamy przygotowanie środowiska nieprodukcyjnego do testów.
Jeśli zaktualizujesz Server Pro/CE do wersji
6.0, a później zdecydujesz się na powrót do wcześniejszej wersji, musisz przywrócić system z pełnej kopii zapasowej.Procedura migracji
1
Utwórz kopię zapasową
Utwórz pełną kopię zapasową swojej instancji ze spójną migawką katalogów mongo, redis i sharelatex.
2
Zaktualizuj
Toolkit: użyj skryptu
$ bin/upgrade, aby zaktualizować toolkit do najnowszej wersji. Gdy pojawi się pytanie Upgrade image?, nie potwierdzaj go — zamiast tego ręcznie edytuj plik config/version i ustaw w nim wartość 5.5.7.Starsza konfiguracja docker-compose.yml: zaktualizuj wersję usługi sharelatex do 5.5.7.3
Oszacuj liczbę projektów, których dotyczy migracja
4
Opróżnij kolejki historii projektów
"project_ids":0).Jeśli wartość “failedProjects” jest różna od zera, skontaktuj się z pomocą techniczną i nie kontynuuj migracji plików binarnych.
5
Przejdź do fazy migracji 1
Toolkit: ustaw
OVERLEAF_FILESTORE_MIGRATION_LEVEL=1 w config/variables.env.Starsza konfiguracja docker-compose.yml: ustaw OVERLEAF_FILESTORE_MIGRATION_LEVEL: '1' w sekcji environment usługi sharelatex.6
Zastosuj zmianę konfiguracji i uruchom instancję
Toolkit:
bin/up -dStarsza konfiguracja docker-compose.yml: docker compose up -d7
Sprawdź dostęp do plików binarnych
Otwórz projekt w edytorze Overleaf w przeglądarce i wybierz plik binarny, na przykład obraz.
8
Uruchom skrypt migracji
Jeśli zapisujesz pliki logów poza kontenerem sharelatex, upewnij się, że właścicielem katalogu logów jest użytkownik
www-data (uid=33), aby można było zapisać wynikowy plik logu.0, a ostatnie wiersze będą wskazywać na brak błędów:9
Zatrzymaj instancję
Toolkit:
bin/stop sharelatexStarsza konfiguracja docker-compose.yml: docker compose stop sharelatex10
Uczyń stare pliki niedostępnymi dla aplikacji
Możesz teraz przenieść stare pliki do magazynu pomocniczego. Zalecamy zachowanie tych plików przez pewien czas na wypadek, gdyby później pojawiły się problemy.
11
Przejdź do fazy migracji 2
Toolkit: ustaw
OVERLEAF_FILESTORE_MIGRATION_LEVEL=2 w config/variables.env.Starsza konfiguracja docker-compose.yml: ustaw OVERLEAF_FILESTORE_MIGRATION_LEVEL: '2' w sekcji environment usługi sharelatex.12
Zastosuj zmianę konfiguracji i uruchom instancję
Toolkit:
bin/up -dStarsza konfiguracja docker-compose.yml: docker compose up -d13
Sprawdź dostęp do plików binarnych
Otwórz projekt w edytorze Overleaf w przeglądarce i wybierz plik binarny, na przykład obraz.
Migracja offline
Jeśli chcesz uniemożliwić użytkownikom logowanie podczas działania skryptu migracji plików binarnych, wykonaj następujące kroki:- Zaloguj się do instancji Overleaf na konto administratora
- Kliknij przycisk Admin i wybierz Manage Site
- Kliknij kartę Open/Close Editor
- Kliknij przycisk Close Editor
- Kliknij przycisk Disconnect all users
Migracja online
Skrypty migracji można uruchamiać, gdy aplikacja nadal działa. Należy jednak wziąć pod uwagę kilka kwestii:- Proces migracji intensywnie obciąża operacje wejścia/wyjścia (IO), dlatego podczas działania skryptu należy monitorować wykorzystanie zasobów.
- Przy dużej współbieżności przetwarzania pętla zdarzeń w usłudze
filestoremoże być blokowana, co pogorszy komfort użytkowników. Zalecamy rozpoczęcie od wartości domyślnych--concurrency=10i--concurrent-batches=1. - Skrypt można zatrzymać w dowolnym momencie. Ponowne uruchomienie zweryfikuje wcześniej przetworzone projekty i pominie już przetworzone pliki. Jest to przydatne, jeśli wolisz przeprowadzać migrację w godzinach mniejszego obciążenia (np. w nocy).
--report). Jeśli projektów jest dużo, możesz uruchomić skrypt, monitorować jego postęp, a następnie zdecydować, czy kontynuować migrację online, czy offline, w zależności od konkretnej sytuacji.
Usuwanie starszych danych plików binarnych
Po zakończeniu migracji i sprawdzeniu, że projekty nadal mają dostęp do wszystkich swoich plików, możesz usunąć stary magazyn plików w/var/lib/overleaf/data/user_files. Zdecydowanie zalecamy zachowanie tych plików przez pewien czas — możesz najpierw uczynić je niedostępnymi dla aplikacji, zmieniając nazwę folderu.
Rozwiązywanie problemów
W tym miejscu będziemy dodawać porady dotyczące rozwiązywania problemów. Pamiętaj, że choć zwykle zapewniamy wsparcie tylko klientom Server Pro, ze względu na charakter tej migracji dołożymy również wszelkich starań, aby pomóc użytkownikom CE, którzy napotkają problemy związane konkretnie z migracją plików binarnych. Jeśli skrypt migracji plików binarnych zakończy się niepowodzeniem (tj. zakończy działanie z błędem lub wyświetli niezerową liczbę projektów, których nie udało się przetworzyć), wyślij następujące informacje do naszego zespołu wsparcia na adres e-mail support+filestoremigration@overleaf.com, podając: Temat: Binary file migration problem Treść:- Typ instancji: CE lub Server Pro (niepotrzebne skreślić)
- Typ instalacji: Overleaf toolkit,
docker-compose.ymllub inny (niepotrzebne skreślić) - Wersja: 5.5.x (toolkit:
$ cat config/version) - Wynik skryptu migracji (powinien znajdować się w kontenerze w katalogu
/var/log/overleaf) - Raport: (uruchom skrypt migracji z opcją
--report) - Przetworzone projekty: (według ostatniego uruchomienia skryptu)
- Czas trwania migracji:
- Wynik
bin/doctor(w przypadku korzystania z toolkitu) - Wersja Toolkit:
$ git rev-parse HEAD(w przypadku korzystania z Toolkit)
filestore. Znajdziesz je w /var/log/overleaf/filestore.log w kontenerze sharelatex i możesz je wyeksportować w następujący sposób:
Brakujące pliki
Starsze wersje Server Pro/CE tworzyły wpisy w drzewie plików przed zakończeniem przesyłania plików przez użytkownika, co w przypadku nieudanego przesłania mogło powodować, że pliki były wyświetlane jako brakujące. Podczas przetwarzania wszystkich drzew plików kilka takich przypadków może zostać zgłoszonych jako błędy. Jeśli brakujących plików jest niewiele, rozważ ręczne przejrzenie tych przypadków i usunięcie ich z poziomu edytora w przeglądarce. Jeśli brakujących plików jest dużo, rozważ kontakt z pomocą techniczną — zobacz szablon wiadomości e-mail powyżej.Wyszukiwanie uszkodzonych drzew plików
Migracja może się nie powieść w przypadku projektów z nieprawidłowo sformatowanym drzewem plików (na przykład z pustymi nazwami plików). Listę takich problemów możesz uzyskać za pomocą skryptufind_malformed_filetrees, który sprawdza wszystkie projekty w bazie danych:
fix_malformed_filetree, uruchamiając polecenie raz dla każdej błędnej ścieżki:

