docs/quick-start.md

# Szybki start: minimalne wdrożenie Welley

Najkrótsza droga do działającej instancji Welley na jednym hoście z Linuksem, w dowolnej chmurze lub na własnym sprzęcie. Ten przewodnik używa tylko flag, których CLI naprawdę wymaga. Wszystko inne zostaje przy wartościach domyślnych.

Co dostajesz: platformę, potok RAG, Nginx, Redis i **wbudowany** kontener PostgreSQL, z certyfikatem Let's Encrypt wystawianym podczas instalacji. Bez zarządzanej bazy danych, bez CDN, bez telemetrii i integracji ze Slackiem. Jeśli ich potrzebujesz, zajrzyj do przewodników dla AWS EC2 i DigitalOcean.

## 1\. Wymagania wstępne

**Host z Linuksem**

-   Ubuntu 24.04 LTS (lub podobna aktualna dystrybucja).
-   2 vCPU, 4 GB RAM, 60 GB dysku na początek.
-   Publiczny adres IPv4, który się nie zmienia.
-   Przychodzący ruch TCP na portach **80** i **443** otwarty dla internetu, a port **22** otwarty dla ciebie. Port 80 jest potrzebny podczas instalacji do weryfikacji certyfikatu, a potem do cotygodniowego odnawiania.
-   Użytkownik bez uprawnień roota z `sudo`: przewodnik wykonuje wszystko jako ten użytkownik, w dalszej części oznaczony jako `<user>`.

**DNS**

Dwa rekordy, oba wskazujące na publiczny adres IP hosta:

| Rekord | Przeznaczenie |
| --- | --- |
| `<domain>` | sama strona |
| `storage.<domain>` | przesłane i statyczne pliki, ponieważ ta konfiguracja nie ma CDN |

Utwórz je przed rozpoczęciem: CLI sprawdza, czy obie nazwy wskazują na ten host, i zatrzymuje się, jeśli tak nie jest.

**Rekordy DNS dla poczty**

Domena twojego adresu `--smtp-from` potrzebuje rekordów uwierzytelniania poczty. Bez nich Gmail, Outlook i inni więksi dostawcy często odrzucają wiadomości do odbiorców, którzy nigdy wcześniej nic od ciebie nie dostali. Dotyczy to każdego zaproszenia i potwierdzenia rejestracji, a wiadomość nie trafia nawet do spamu, choć twój dostawca SMTP zgłasza ją jako wysłaną.

| Rekord | Typ | Wartość |
| --- | --- | --- |
| `<mail-domain>` | TXT | SPF, na przykład `v=spf1 include:<provider> ~all`. Dokładną wartość weź od swojego dostawcy SMTP |
| `_dmarc.<mail-domain>` | TXT | DMARC, na przykład `v=DMARC1; p=none; rua=mailto:dmarc@<mail-domain>` |
| `<selector>._domainkey.<mail-domain>` | TXT lub CNAME | DKIM, generowany przez dostawcę SMTP, gdy weryfikujesz domenę |

Domena może mieć tylko jeden rekord SPF. Jeśli już jakiś ma, dodaj do niego swojego dostawcę zamiast tworzyć drugi rekord. `create` ostrzega, gdy brakuje SPF lub DMARC, ale się nie zatrzymuje. Nie może sprawdzić DKIM, ponieważ nazwa selektora zależy od dostawcy.

Nie pomijaj DKIM. Wielu dostawców, między innymi Amazon SES, domyślnie wysyła z własną domeną jako nadawcą koperty. SPF sprawdza wtedy domenę dostawcy, a nie twoją, więc nie liczy się do DMARC i tylko DKIM może sprawić, że DMARC przejdzie. Sprawdź status DKIM w konsoli swojego dostawcy. W Amazon SES znajdziesz go w _Verified identities_, przy pozycji `<mail-domain>`, w sekcji _DKIM_, i musi mieć wartość _Successful_. SES Easy DKIM publikuje trzy rekordy CNAME o nazwach `<token>._domainkey.<mail-domain>`.

**Dane dostępowe SMTP**

Host, użytkownik, hasło i adres nadawcy, od dowolnego dostawcy. Platforma potrzebuje ich do potwierdzania adresu e-mail i odzyskiwania hasła, a CLI odmawia instalacji bez nich. Domyślnie zakładane jest wysyłanie przez STARTTLS na porcie 587.

**Adres e-mail administratora** do pierwszego logowania i odzyskiwania hasła.

## 2\. Zainstaluj Dockera

Postępuj zgodnie z oficjalną instrukcją dla swojej dystrybucji: [Install Docker Engine](https://docs.docker.com/engine/install/). Potem pozwól swojemu użytkownikowi komunikować się z demonem:

```
sudo usermod -aG docker <user>
```

Wyloguj się i zaloguj ponownie, a potem sprawdź, czy obie części są na miejscu:

```
docker ps
docker compose version
```

## 3\. Pobierz CLI

Wybierz wartość `platform`, która pasuje do twojego hosta:

**linux/amd64**

```

curl -fL "https://appstore.allroads.social/v1/social.wellesley.wlycli/latest?channel=stable&platform=linux/amd64" -o wlycli
chmod +x wlycli
./wlycli -v
  
```
  **linux/arm64**

```

curl -fL "https://appstore.allroads.social/v1/social.wellesley.wlycli/latest?channel=stable&platform=linux/arm64" -o wlycli
chmod +x wlycli
./wlycli -v
  
```
  **darwin/arm64**

```

curl -fL "https://appstore.allroads.social/v1/social.wellesley.wlycli/latest?channel=stable&platform=darwin/arm64" -o wlycli
chmod +x wlycli
./wlycli -v
  
```
  **darwin/amd64**

```

curl -fL "https://appstore.allroads.social/v1/social.wellesley.wlycli/latest?channel=stable&platform=darwin/amd64" -o wlycli
chmod +x wlycli
./wlycli -v
  
```
  

## 4\. Wdróż

```
./wlycli deploy create \
-d example.com \
-e admin@example.com \
--smtp-host smtp.example.com \
--smtp-user "$MAIL_USER" \
--smtp-password "$MAIL_PASSWORD" \
--smtp-from noreply@example.com
```

Te sześć flag to cały wymagany zestaw. Polecenie sprawdza DNS, zapisuje pliki wdrożenia, wystawia certyfikat przez Certbota i uruchamia kontenery. Spodziewaj się, że potrwa to kilka minut.

Wartości domyślne, które tu akceptujesz:

| Ustawienie | Wartość domyślna |
| --- | --- |
| Katalog instalacji | `~/.welley/<project>`, gdzie `<project>` to domena z każdym znakiem niealfanumerycznym zastąpionym przez `_` (czyli `example.com` zmienia się w `example_com`) |
| Baza danych | wbudowany kontener PostgreSQL, dane w katalogu instalacji |
| Certyfikaty | Let's Encrypt przez Certbota, odnawiane automatycznie raz w tygodniu |
| Przesłane i statyczne pliki | serwowane z `https://storage.<domain>` |
| Aktualizacje | kanał `stable`, sprawdzane codziennie i instalowane bez przestoju, gdy to możliwe |

## 5\. Pierwsze logowanie

Wygenerowane hasło administratora jest wypisywane w logu platformy:

```
docker logs example_com-platform-blue-1 | grep "Auto-init complete"
```

Otwórz `https://<domain>`, zaloguj się adresem e-mail administratora podanym w `-e` i od razu zmień hasło. Dopóki tego nie zrobisz, traktuj log jako tajny.

## 6\. Sprawdź wynik

```
docker ps
```

Na liście powinien być po jednym kontenerze dla `nginx`, `platform-blue`, `rag-pipeline-blue`, `postgres`, `redis`, `autoheal` i `snoopy`, każdy o nazwie `<project>-<service>-1`.

## Jeśli coś poszło nie tak

`create` nie uruchomi się drugi raz, dopóki istnieje katalog projektu lub jego kontenery. Jeśli pliki są w porządku, a tylko część kontenerów się nie uruchomiła, utwórz je ponownie, nic nie tracąc:

```
./wlycli deploy restart -d example.com
```

Jeśli samo wdrożenie trzeba zrobić od nowa, usuń je i zacznij od początku. Pamiętaj, że to usuwa wbudowaną bazę danych razem ze wszystkim innym:

```
./wlycli deploy delete -d example.com --yes-please-delete-all-the-data
```

## Inne dokumenty

-   [**Welley CLI** docs/index.md](https://welley.com/pl/administrators/docs/cli/)
-   [**Wdrożenie serwera** skills/deploy-server/SKILL.md](https://welley.com/pl/administrators/docs/deploy-server-skill/)
-   [**openai.yaml** skills/deploy-server/agents/openai.yaml](https://welley.com/pl/administrators/docs/deploy-server-openai-yaml/)
-   [**Dokumentacja DigitalOcean** skills/deploy-server/references/digitalocean.md](https://welley.com/pl/administrators/docs/deploy-server-digitalocean/)
