v1.4.0
Co nowego: - Wsparcie Active Directory dla LDAP (obok LLDAP/OpenLDAP), przełącznik typu katalogu w Admin > Integracje. - Wyszukiwarka klientów dla operatora (Operator > Klienci). - Stronicowanie kolejki operatora (50/stronę) i dashboardu klienta (20/stronę). - Globalna wyszukiwarka zgłoszeń (Ctrl+K/Cmd+K) z operatorami w stylu Gmaila (od:, temat:, treść:, numer:), plus przycisk "Szukaj" w panelu bocznym. - Ostatnio przeglądane zgłoszenia w panelu bocznym operatora. - Przeprojektowany pasek nawigacji: suwak Klient/Operator/Administrator zamiast rozwijanego menu, bogatsze menu profilu (nazwa/e-mail/role), dynamiczne tytuły kart przeglądarki na każdej podstronie. - Narzędzie do jednorazowego importu historii zgłoszeń z Heska 3.x (scripts/hesk-import/). - Poprawka: paginacja pokazywała surowe klucze tłumaczeń zamiast tekstu (brakujący lang/pl/pagination.php). Zaktualizowana dokumentacja: README, CLAUDE.md, install.md, ARCHITECTURE.md, CHANGELOG.md, wiki/*. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
79
install.md
79
install.md
@@ -24,7 +24,7 @@ osobne pliki, w dwóch różnych miejscach.
|
||||
- Docker + wtyczka `docker compose`.
|
||||
- Zewnętrzna sieć Docker `traefik_public`, jeśli używasz Traefika tak jak w
|
||||
`compose.yaml` (`docker network create traefik_public`, jeśli jeszcze nie
|
||||
istnieje). Bez Traefika trzeba samodzielnie zmapować porty serwisu `servicedesk`
|
||||
istnieje). Bez Traefika trzeba samodzielnie zmapować porty serwisu `app`
|
||||
na hosta (`ports: ["8080:80"]`) i obsłużyć TLS inaczej (patrz sekcja 2 niżej, w
|
||||
razie potrzeby reverse-proxy przed kontenerem).
|
||||
|
||||
@@ -90,8 +90,8 @@ QUEUE_CONNECTION=database
|
||||
`APP_KEY` wygenerujesz komendą artisan (krok 1.4) — zostaw puste w pliku.
|
||||
|
||||
`LDAP_*` i `MAIL_*` w `src/.env` są tylko **wartościami startowymi/awaryjnymi**.
|
||||
Docelowo LDAP i SMTP konfiguruje się wygodniej z poziomu **Admin > Konfiguracja**
|
||||
w samej aplikacji (patrz ramka ostrzegawcza w kroku 1.6) — ale jeśli chcesz mieć
|
||||
Docelowo LDAP konfiguruje się wygodniej z poziomu **Admin > Integracje**, a SMTP
|
||||
z **Admin > Poczta** (patrz ramka ostrzegawcza w kroku 1.6) — ale jeśli chcesz mieć
|
||||
sensowny fallback zanim ktokolwiek się zaloguje do panelu admina, warto je od razu
|
||||
uzupełnić:
|
||||
|
||||
@@ -184,7 +184,7 @@ w restartach z błędem `Undefined constant "...SIGINT"`; dodaj `pcntl posix` do
|
||||
listy w `docker-php-ext-install` i poczekaj na przebudowanie obrazu przez CI.
|
||||
|
||||
Traefik musi kierować ścieżkę websocketu (`/app*`) do `reverb`, a resztę do
|
||||
`servicedesk` — na tej samej domenie, więc bez dodatkowego wpisu DNS/certyfikatu:
|
||||
`app` — na tej samej domenie, więc bez dodatkowego wpisu DNS/certyfikatu:
|
||||
|
||||
```yaml
|
||||
reverb:
|
||||
@@ -240,10 +240,10 @@ te wartości są wypiekane w zbudowany bundle JS, nie czytane w runtime.
|
||||
### 1.4. Instalacja aplikacji wewnątrz kontenera
|
||||
|
||||
```bash
|
||||
docker compose exec servicedesk composer install --no-dev --optimize-autoloader
|
||||
docker compose exec servicedesk php artisan key:generate
|
||||
docker compose exec servicedesk php artisan migrate --seed
|
||||
docker compose exec servicedesk php artisan storage:link
|
||||
docker compose exec app composer install --no-dev --optimize-autoloader
|
||||
docker compose exec app php artisan key:generate
|
||||
docker compose exec app php artisan migrate --seed
|
||||
docker compose exec app php artisan storage:link
|
||||
```
|
||||
|
||||
`migrate --seed` (bez `--fresh`) na pustej bazie utworzy wszystkie tabele i
|
||||
@@ -254,7 +254,7 @@ po pierwszym zalogowaniu (Admin > Użytkownicy).
|
||||
|
||||
### 1.5. Zbudowanie zasobów front-endowych (CSS/Tailwind)
|
||||
|
||||
Ani host, ani kontener `servicedesk` nie mają zainstalowanego Node.js — buduj
|
||||
Ani host, ani kontener `app` nie mają zainstalowanego Node.js — buduj
|
||||
przez jednorazowy kontener `node:22` zamiast dorzucać Node do obrazu aplikacji:
|
||||
|
||||
```bash
|
||||
@@ -273,16 +273,35 @@ patrz Admin > Poczta) i `ai:run-ticket-automation` (opcjonalna automatyczna
|
||||
kategoryzacja/podsumowania AI zgłoszeń — patrz Admin > Integracje) co 5 minut,
|
||||
ale **obraz Dockera nie ma wbudowanego cron/supervisora** — bez dodatkowego
|
||||
kroku żadne z tych zadań nigdy się nie uruchomi (poczta IMAP nadal da się
|
||||
sprawdzić ręcznie przyciskiem „Pobierz teraz”, ale bez crona nic nie dzieje się
|
||||
sprawdzić ręcznie przyciskiem „Pobierz teraz”, ale bez tego nic nie dzieje się
|
||||
samo). Wszystkie cztery interwały są też konfigurowalne z poziomu **Admin >
|
||||
Konfiguracja** (bez potrzeby edycji kodu czy restartu — nowa wartość obowiązuje
|
||||
od najbliższego tyknięcia harmonogramu). Najprościej dodać wpis crona **na
|
||||
hoście**:
|
||||
od najbliższego tyknięcia harmonogramu).
|
||||
|
||||
```cron
|
||||
* * * * * cd /ścieżka/do/repo && docker compose exec -T servicedesk php artisan schedule:run >> /dev/null 2>&1
|
||||
`compose.yaml` rozwiązuje to czwartą usługą, `cron` — tego samego obrazu
|
||||
`servicedesk`, tylko z innym poleceniem:
|
||||
|
||||
```yaml
|
||||
cron:
|
||||
image: gitea.kzbikowski.pl/kzbkowski/servicedesk:${IMAGE_TAG:-latest}
|
||||
command: php artisan schedule:work
|
||||
volumes:
|
||||
- ./src:/var/www/html
|
||||
restart: unless-stopped
|
||||
depends_on:
|
||||
mariadb:
|
||||
condition: service_healthy
|
||||
networks:
|
||||
- internal
|
||||
```
|
||||
|
||||
`schedule:work` to własna, pierwszoplanowa pętla harmonogramu Laravela —
|
||||
odpowiednik odpalania `schedule:run` co minutę, ale bez potrzeby zewnętrznego
|
||||
triggera. Ten kontener nie musi być widoczny w Traefiku (nie obsługuje ruchu
|
||||
HTTP), stąd tylko sieć `internal`. Sprawdź, że działa: `docker compose ps cron`
|
||||
oraz `docker compose logs -f cron` (loguje każde odpalenie zaplanowanego
|
||||
zadania).
|
||||
|
||||
Powiadomienia e-mail wysyłają się synchronicznie (nie trafiają do kolejki), więc
|
||||
`php artisan queue:work` nie jest obowiązkowy — `QUEUE_CONNECTION=database` w
|
||||
`.env` wystarcza jako bezpieczny domyślny driver, gdyby coś w przyszłości zaczęło
|
||||
@@ -291,8 +310,9 @@ kolejkować zadania.
|
||||
### ⚠️ Ważne: LDAP/SMTP z panelu Admina nadpisują `.env` w locie
|
||||
|
||||
`AppServiceProvider` na starcie żądania sprawdza tabelę `settings` — jeśli w
|
||||
Admin > Konfiguracja pole **host LDAP** albo **SMTP włączony + host** jest
|
||||
ustawione, **te wartości wygrywają z `.env`**, bez potrzeby restartu czy redeployu.
|
||||
Admin > Integracje pole **host LDAP** albo w Admin > Poczta **SMTP włączony +
|
||||
host** jest ustawione, **te wartości wygrywają z `.env`**, bez potrzeby
|
||||
restartu czy redeployu.
|
||||
|
||||
Po świeżym `migrate --seed` te pola zawierają **przykładowe placeholdery**
|
||||
(`ldap.example.com`, `smtp.example.com`, `changeme-*-password`) — to znaczy, że
|
||||
@@ -301,10 +321,13 @@ adresami**, nawet jeśli w `.env` wpisałeś prawdziwe dane! Zanim oddasz system
|
||||
użytku:
|
||||
|
||||
1. Zaloguj się lokalnym kontem `admin@example.com` / `admin`.
|
||||
2. Wejdź w **Admin > Konfiguracja** i wpisz prawdziwe dane LDAP/SMTP (albo wyczyść
|
||||
pole hosta LDAP, żeby wrócić do wartości z `.env`).
|
||||
3. Użyj przycisków **„Testuj połączenie”** przy obu sekcjach, zanim zaczniesz
|
||||
polegać na logowaniu przez katalog.
|
||||
2. Wejdź w **Admin > Integracje** i wpisz prawdziwe dane LDAP (wybierz też
|
||||
właściwy **Typ katalogu** — LLDAP/OpenLDAP albo Active Directory — jeśli
|
||||
katalog to nie LLDAP; albo wyczyść pole hosta LDAP, żeby wrócić do
|
||||
wartości z `.env`), a w **Admin > Poczta** dane SMTP.
|
||||
3. Użyj przycisku **„Testuj połączenie”** w Integracje i **„Wyślij testową
|
||||
wiadomość”** w Poczta, zanim zaczniesz polegać na logowaniu przez katalog
|
||||
albo na powiadomieniach e-mail.
|
||||
|
||||
### Integracje opcjonalne (BookStack, AI)
|
||||
|
||||
@@ -328,6 +351,14 @@ automatyczną kategoryzację/podsumowania AI zgłoszeń (Admin > Integracje >
|
||||
„Automatyzacja AI dla zgłoszeń”, wymaga też wpisu crona z kroku 1.6/2.6
|
||||
powyżej — to ten sam harmonogram co SLA/automatyzacje/IMAP).
|
||||
|
||||
### Import historycznych zgłoszeń z Heska (opcjonalnie)
|
||||
|
||||
Jeśli migrujesz z helpdesku Hesk 3.x, `scripts/hesk-import/` zawiera
|
||||
jednorazowe (nie ciągłe) narzędzie migracyjne — importuje zgłoszenia wraz z
|
||||
pełną historią odpowiedzi/notatek, ograniczone do jednej domeny e-mail, w
|
||||
trybie dry-run domyślnie. Nie dotyka bazy Heska poza odczytem. Zobacz
|
||||
`scripts/hesk-import/README.md` po pełną instrukcję.
|
||||
|
||||
---
|
||||
|
||||
## 2. Wdrożenie bezpośrednio na serwerze (Apache/Nginx, bez Dockera)
|
||||
@@ -383,7 +414,7 @@ QUEUE_CONNECTION=database
|
||||
```
|
||||
|
||||
Uzupełnij też `LDAP_*`/`MAIL_*` jak w sekcji 1.2 (to samo ostrzeżenie o
|
||||
Admin > Konfiguracja nadpisującym te wartości w locie dotyczy tu identycznie).
|
||||
Admin > Integracje/Poczta nadpisującym te wartości w locie dotyczy tu identycznie).
|
||||
|
||||
```bash
|
||||
php artisan key:generate
|
||||
@@ -524,9 +555,9 @@ jednej ścieżki, analogicznie do reguły Traefika w 1.3b).
|
||||
### 2.7. Pierwsze logowanie i dalsza konfiguracja
|
||||
|
||||
Identycznie jak w kroku 1.6 — zaloguj się `admin@example.com` / `admin`, zmień
|
||||
hasło, uzupełnij prawdziwe LDAP/SMTP w Admin > Konfiguracja (placeholdery z seeda
|
||||
inaczej realnie próbują łączyć się z fałszywymi adresami), przetestuj oba
|
||||
połączenia przyciskiem „Testuj połączenie”.
|
||||
hasło, uzupełnij prawdziwe LDAP w Admin > Integracje i SMTP w Admin > Poczta
|
||||
(placeholdery z seeda inaczej realnie próbują łączyć się z fałszywymi
|
||||
adresami), przetestuj oba połączenia.
|
||||
|
||||
### 2.8. Aktualizacje (bez przestoju)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user