Rekonstrukcja środowiska Leantime
Odtworzenie, inicjalizacja i walidacja środowiska kontenerowego wyłącznie na podstawie raportu inżynierii odwrotnej.
1. Executive Summary
Zrekonstruowano działające środowisko Leantime złożone z aplikacji leantime/leantime:latest i bazy mysql:8.4. Usługi pracują w dedykowanej sieci bridge leantime-net, korzystają z pięciu trwałych wolumenów i są wystawione pod http://localhost:8080.
Oba kontenery osiągnęły stan healthy. Zakończono instalację schematu, utworzono administratora [email protected], domyślny projekt My Project oraz dane startowe. Przeprowadzono testy logowania, dashboardu, projektów, zadań, Kanbanu, kalendarza, zarządzania użytkownikami, połączenia sieciowego i trwałości.
.env, który został wyłączony z kontroli wersji.2. Analiza dokumentacji źródłowej
Informacje wystarczające do rozpoczęcia
- Topologia dwóch usług, wymagane obrazy i mapowanie portu
8080:8080. - MySQL 8.4, baza
leantime, użytkownikadmini wymaganie UTF8MB4. - Pięć logicznych obszarów trwałości:
db_data,userfiles,public_userfiles,plugins,logs. - Nazwa sieci
leantime-net, URL aplikacji i podstawowe zmienneLEAN_DB_*. - Oczekiwany administrator, projekt domyślny, model domenowy i scenariusze ST01-ST04.
Niekompletności i niejednoznaczności
| Obszar | Stan dokumentacji | Wpływ |
|---|---|---|
| Wersja aplikacji | Tag latest, brak wersji lub digestu. | Rekonstrukcja nie jest deterministyczna w czasie. |
| Nazwa hosta bazy | Tabela używa leantime_db, przykład ENV używa mysql_leantime. | Ryzyko błędnego DNS. |
| Wolumeny | Podano nazwy, nie podano punktów montowania. | Compose nie może być odtworzony literalnie. |
| Sekrety | Brak hasła root, wartości sesji i hasła administratora aplikacji. | Brak kompletnego startu i ST01. |
| Inicjalizacja | Stwierdzono automatyczne migracje przy starcie. | W praktyce baza pozostała pusta i wymagany był instalator /install. |
| Capabilities | Wspomniano rozszerzone uprawnienia bez listy. | Brak jednoznacznej deklaracji bezpieczeństwa. |
| Testy funkcjonalne | Podano cele, bez kroków, danych i oczekiwanych rezultatów. | Wymagały zaprojektowania procedury akceptacyjnej. |
3. Plan rekonstrukcji
- Wyodrębnić wymagania infrastrukturalne, funkcjonalne i testowe z jedynego dokumentu źródłowego.
- Rozstrzygnąć konflikty nazw, wygenerować sekrety i zmapować pięć obszarów trwałości.
- Zbudować
.env,docker-compose.ymli strukturę roboczą; zwalidować Compose. - Uruchomić bazę z healthcheckiem, następnie aplikację zależną od zdrowej bazy.
- Przeprowadzić inicjalizację aplikacji, utworzyć administratora i zweryfikować dane startowe.
- Wykonać testy infrastruktury, scenariusze ST01-ST04 oraz wymagane kontrole modułów.
- Przeanalizować logi po restarcie i sporządzić raport odchyleń oraz kompletności.
4. Wykonane działania
Artefakty
| Plik / zasób | Przeznaczenie |
|---|---|
.env | Poświadczenia bazy i sesji, URL oraz lokalne dane administratora. |
docker-compose.yml | Dwie usługi, healthchecki, sieć, port, capabilities i pięć wolumenów. |
.gitignore | Ochrona .env oraz pomijanie artefaktów testowych. |
Reconstruction_Report.html | Niniejszy raport wykonawczy i dowody akceptacji. |
Konfiguracja uruchomieniowa
Application: leantime/leantime:latest (runtime: Leantime 3.9.5)
Database: mysql:8.4 (runtime: MySQL 8.4.10)
Network: leantime-net / bridge / 2 containers
Endpoint: http://localhost:8080
Volumes: leantime_db_data, leantime_userfiles,
leantime_public_userfiles, leantime_plugins, leantime_logs
W bazie utworzono 37 tabel z prefiksem domenowym zgodnym z opisem, m.in. zp_user, zp_projects, zp_tickets, zp_roles. Konto administratora ma rolę właściciela i dostęp do zarządzania użytkownikami.
5. Napotkane problemy
| Problem | Diagnoza | Rozwiązanie |
|---|---|---|
| Brak lokalnych obrazów | Obrazy wskazane w raporcie nie istniały w cache. | Pobrano dokładnie wskazane tagi. |
| Brak automatycznych migracji | Po starcie baza miała 0 tabel, a aplikacja zwracała 303 /install. | Przeprowadzono instalator oraz pięcioetapową aktywację administratora. |
| Błędy schedulerów przed instalacją | Kolejki nie miały tabel docelowych. | Po inicjalizacji zadania emails, httprequests i default kończyły się DONE. |
| Brak punktów montowania | Raport wymieniał wyłącznie logiczne nazwy. | Zweryfikowano katalogi obrazu i przypisano odpowiadające im mount points. |
| Brak hasła administratora | ST01 nie miał kompletnych danych wejściowych. | Ustalono lokalne hasło zgodne z regułami aplikacji i zapisano je w .env. |
Ostrzeżenia MySQL dotyczące certyfikatu self-signed, katalogu PID i brakujących danych stref czasowych pochodzą ze standardowego startu obrazu i nie zakłóciły testów. Powtarzane komunikaty PHP-FPM o dyrektywach user/group są informacyjne; proces działa jako użytkownik nierootowy.
6. Podjęte decyzje projektowe
- Usługa Compose otrzymała nazwę
mysql_leantime, zgodną zLEAN_DB_HOST; nazwa kontenera pozostałaleantime_db, co zachowuje oba warianty z raportu. - Użyto nazwanych wolumenów z jawnymi, stabilnymi nazwami i punktami:
/var/lib/mysql,/var/www/html/userfiles,/var/www/html/public/userfiles,/var/www/html/app/Plugins,/var/www/html/storage/logs. - Wygenerowano losowe sekrety bazy i sesji; nie powielono przykładowego hasła bazy z dokumentu.
- MySQL uruchomiono z
utf8mb4iutf8mb4_unicode_ci, zgodnie z opisem technicznym. - Aplikacja startuje dopiero po pozytywnym healthchecku bazy. Obie usługi mają politykę
unless-stopped. - Capabilities ograniczono do operacji plikowych i zmiany UID/GID wymienionych funkcjonalnie przez raport:
CHOWN,DAC_OVERRIDE,SETGID,SETUID. - Nie dodano SMTP, LDAP, proxy TLS ani usług niewymienionych w źródle.
7. Wyniki testów
Scenariusze źródłowe
| ID | Wykonanie | Wynik | Dowód |
|---|---|---|---|
| ST01 | Logowanie w nowej sesji. | PASS | 303 do /dashboard/home, następnie dashboard 200; cookie leantime_session z SameSite=Lax. |
| ST02 | Utworzenie zadania i zmiana statusu na Kanbanie. | PASS | Zadanie ID 10 „Reconstruction ST02 task”; status zmieniony z 3/New na 4/In Progress; widoczne na Kanbanie. |
| ST03 | Restart MySQL i aplikacji. | PASS | Po restarcie: 1 użytkownik, 1 projekt, zadanie ID 10/status 4, dashboard 200. |
| ST04 | Zapis pliku w userfiles i restart. | PASS | reconstruction-volume-test.txt zachował treść po restarcie aplikacji. |
Kontrole rozszerzone
| Obszar | Wynik | Obserwacja |
|---|---|---|
| Kontenery i healthchecki | PASS | leantime i leantime_db: healthy. |
| Komunikacja komponentów | PASS | DNS mysql_leantime rozwiązany; mysqli::ping() = OK. |
| Dostęp z hosta | PASS | localhost:8080 zwraca oczekiwane 302 do logowania. |
| Dashboard | PASS | Sesja uwierzytelniona: 200, widoczne Dashboard i My Project. |
| Projekty | PASS | Lista i dashboard projektu: 200; projekt My Project obecny. |
| Zadania / Kanban | PASS | Lista, formularz, zapis i tablica: 200; operacja statusu utrwalona. |
| Kalendarz | PASS | /calendar/showMyCalendar: 200, komponent kalendarza wyrenderowany. |
| Role użytkowników | PASS | Administrator widzi User Management; dostępne: Read Only, Commenter, Editor, Company Manager, Administrator, Owner. |
| Logi po inicjalizacji | PASS | Procesy PHP-FPM, Nginx i scheduler RUNNING; kolejki kończą się DONE. |
Nie wykonywano pełnych macierzy negatywnych dla każdego typu roli ani CRUD zdarzenia kalendarza, ponieważ raport nie dostarcza danych testowych ani oczekiwanych reguł szczegółowych. Zweryfikowano dostępność modułów, słownik ról i uprawnienia konta administracyjnego.
8. Porównanie z wymaganiami dokumentacji
| Wymaganie | Realizacja | Status |
|---|---|---|
| Dwie usługi: aplikacja + MySQL 8.4 | Odtworzono wskazane obrazy i role. | Zgodne |
Port 8080:8080 | Aplikacja dostępna z hosta. | Zgodne |
| Pięć trwałych wolumenów | Utworzono i zweryfikowano wszystkie pięć. | Zgodne |
Sieć leantime-net | Bridge, dwa podłączone kontenery. | Zgodne |
Administrator [email protected] | Aktywny właściciel, logowanie poprawne. | Zgodne |
| Projekt „My Project” | Projekt ID 1 utworzony przez inicjalizację. | Zgodne |
| Automatyczne migracje przy starcie | Nie wystąpiły; wymagany instalator. | Odchylenie źródła |
| Role biznesowe | Funkcje istnieją, lecz nazwy runtime są bardziej szczegółowe. | Różnica nazewnictwa |
| Brak SMTP/LDAP | Integracji nie konfigurowano. | Zgodne |
9. Ocena kompletności dokumentacji
Ocena: częściowo wystarczająca (około 65%). Raport trafnie opisuje architekturę logiczną, obrazy, port, ogólne wolumeny i funkcje. Pozwala doświadczonemu operatorowi rozpocząć rekonstrukcję, ale nie gwarantuje identycznego wyniku bez rozpoznania zachowania wskazanego obrazu.
Do pełnej odtwarzalności powinny zostać dodane: kompletny Compose, dokładna wersja lub digest aplikacji, wszystkie zmienne środowiskowe, mount points, jawna lista capabilities, procedura pierwszej instalacji, sposób utworzenia hasła administratora, precyzyjna macierz ról oraz wykonywalne przypadki testowe z oczekiwanymi wynikami.
Szczególnie istotne jest zastąpienie latest niezmiennym identyfikatorem obrazu. W trakcie tej realizacji pobrany obraz miał digest sha256:7d0cd20bf6e7b2a3ec79e425807cd796728c7afe2f745166119f85967aee4593 i raportował Leantime 3.9.5; przyszły tag latest może zachowywać się inaczej.
10. Wnioski
Cel operacyjny został osiągnięty: środowisko jest uruchomione, spójne z udokumentowaną architekturą i przeszło wymagane scenariusze. Trwałość danych, komunikacja sieciowa i podstawowe ścieżki biznesowe zostały potwierdzone praktycznie.
Największym ryzykiem nie jest bieżące działanie, lecz powtarzalność przyszłej instalacji. Źródłowy raport należy traktować jako opis reverse engineering, nie jako gotową specyfikację wdrożeniową. Utworzone artefakty wypełniają tę lukę dla obecnego środowiska, a niniejszy raport rejestruje wszystkie decyzje, odstępstwa i dowody testowe.