Raport techniczny / rekonstrukcja kontrolowana

Rekonstrukcja środowiska Leantime

Odtworzenie, inicjalizacja i walidacja środowiska kontenerowego wyłącznie na podstawie raportu inżynierii odwrotnej.

Data realizacji20 czerwca 2026
StatusUruchomione i zweryfikowane
Źródło wymagańLeantime_Reverse_Engineering_Report.html

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.

2/2usługi healthy
5/5wolumenów
37tabel aplikacji
4/4scenariusze ST
Środowisko pozostawiono uruchomione. Dane administracyjne znajdują się w lokalnym pliku .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żytkownik admin i wymaganie UTF8MB4.
  • Pięć logicznych obszarów trwałości: db_data, userfiles, public_userfiles, plugins, logs.
  • Nazwa sieci leantime-net, URL aplikacji i podstawowe zmienne LEAN_DB_*.
  • Oczekiwany administrator, projekt domyślny, model domenowy i scenariusze ST01-ST04.

Niekompletności i niejednoznaczności

ObszarStan dokumentacjiWpływ
Wersja aplikacjiTag latest, brak wersji lub digestu.Rekonstrukcja nie jest deterministyczna w czasie.
Nazwa hosta bazyTabela używa leantime_db, przykład ENV używa mysql_leantime.Ryzyko błędnego DNS.
WolumenyPodano nazwy, nie podano punktów montowania.Compose nie może być odtworzony literalnie.
SekretyBrak hasła root, wartości sesji i hasła administratora aplikacji.Brak kompletnego startu i ST01.
InicjalizacjaStwierdzono automatyczne migracje przy starcie.W praktyce baza pozostała pusta i wymagany był instalator /install.
CapabilitiesWspomniano rozszerzone uprawnienia bez listy.Brak jednoznacznej deklaracji bezpieczeństwa.
Testy funkcjonalnePodano cele, bez kroków, danych i oczekiwanych rezultatów.Wymagały zaprojektowania procedury akceptacyjnej.
Twierdzenie źródła o „100% kompletności” nie zostało potwierdzone. Dokument wystarczył jako opis architektury, lecz nie jako samowystarczalna, deterministyczna instrukcja unattended deployment.

3. Plan rekonstrukcji

  1. Wyodrębnić wymagania infrastrukturalne, funkcjonalne i testowe z jedynego dokumentu źródłowego.
  2. Rozstrzygnąć konflikty nazw, wygenerować sekrety i zmapować pięć obszarów trwałości.
  3. Zbudować .env, docker-compose.yml i strukturę roboczą; zwalidować Compose.
  4. Uruchomić bazę z healthcheckiem, następnie aplikację zależną od zdrowej bazy.
  5. Przeprowadzić inicjalizację aplikacji, utworzyć administratora i zweryfikować dane startowe.
  6. Wykonać testy infrastruktury, scenariusze ST01-ST04 oraz wymagane kontrole modułów.
  7. Przeanalizować logi po restarcie i sporządzić raport odchyleń oraz kompletności.

4. Wykonane działania

Artefakty

Plik / zasóbPrzeznaczenie
.envPoświadczenia bazy i sesji, URL oraz lokalne dane administratora.
docker-compose.ymlDwie usługi, healthchecki, sieć, port, capabilities i pięć wolumenów.
.gitignoreOchrona .env oraz pomijanie artefaktów testowych.
Reconstruction_Report.htmlNiniejszy 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

ProblemDiagnozaRozwiązanie
Brak lokalnych obrazówObrazy wskazane w raporcie nie istniały w cache.Pobrano dokładnie wskazane tagi.
Brak automatycznych migracjiPo 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 montowaniaRaport wymieniał wyłącznie logiczne nazwy.Zweryfikowano katalogi obrazu i przypisano odpowiadające im mount points.
Brak hasła administratoraST01 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ą z LEAN_DB_HOST; nazwa kontenera pozostała leantime_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 utf8mb4 i utf8mb4_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

IDWykonanieWynikDowód
ST01Logowanie w nowej sesji.PASS303 do /dashboard/home, następnie dashboard 200; cookie leantime_session z SameSite=Lax.
ST02Utworzenie zadania i zmiana statusu na Kanbanie.PASSZadanie ID 10 „Reconstruction ST02 task”; status zmieniony z 3/New na 4/In Progress; widoczne na Kanbanie.
ST03Restart MySQL i aplikacji.PASSPo restarcie: 1 użytkownik, 1 projekt, zadanie ID 10/status 4, dashboard 200.
ST04Zapis pliku w userfiles i restart.PASSreconstruction-volume-test.txt zachował treść po restarcie aplikacji.

Kontrole rozszerzone

ObszarWynikObserwacja
Kontenery i healthcheckiPASSleantime i leantime_db: healthy.
Komunikacja komponentówPASSDNS mysql_leantime rozwiązany; mysqli::ping() = OK.
Dostęp z hostaPASSlocalhost:8080 zwraca oczekiwane 302 do logowania.
DashboardPASSSesja uwierzytelniona: 200, widoczne Dashboard i My Project.
ProjektyPASSLista i dashboard projektu: 200; projekt My Project obecny.
Zadania / KanbanPASSLista, formularz, zapis i tablica: 200; operacja statusu utrwalona.
KalendarzPASS/calendar/showMyCalendar: 200, komponent kalendarza wyrenderowany.
Role użytkownikówPASSAdministrator widzi User Management; dostępne: Read Only, Commenter, Editor, Company Manager, Administrator, Owner.
Logi po inicjalizacjiPASSProcesy 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

WymaganieRealizacjaStatus
Dwie usługi: aplikacja + MySQL 8.4Odtworzono wskazane obrazy i role.Zgodne
Port 8080:8080Aplikacja dostępna z hosta.Zgodne
Pięć trwałych wolumenówUtworzono i zweryfikowano wszystkie pięć.Zgodne
Sieć leantime-netBridge, 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 starcieNie wystąpiły; wymagany instalator.Odchylenie źródła
Role biznesoweFunkcje istnieją, lecz nazwy runtime są bardziej szczegółowe.Różnica nazewnictwa
Brak SMTP/LDAPIntegracji 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.