# Wdrożenie na hosting OVH

Konfiguracja Capistrano jest wzorowana na projekcie tropo, który stoi na tym
samym klastrze. Samo wdrożenie uruchamiasz ręcznie — nic tu nie robi tego za
Ciebie.

## Czego brakuje, zanim pierwsze wdrożenie w ogóle ruszy

Trzy rzeczy trzeba załatwić raz. Bez nich Capistrano przerwie na pierwszym kroku.

### 1. Zdalne repozytorium

Ten projekt nie ma dziś żadnego zdalnego repozytorium, a Capistrano klonuje kod
na serwerze z adresu git — nie wysyła plików z Twojego dysku. Załóż repozytorium
i wypchnij gałąź:

```
git remote add origin git@github.com:kubagladki/fpl.git
git push -u origin master:main
```

Adres w `config/deploy.rb` zakłada `kubagladki/fpl` i gałąź `main`. Jeśli
nazwiesz inaczej, popraw `repo_url` i `branch`.

Serwer OVH musi mieć dostęp do tego repozytorium. Najprościej przez
przekazywanie klucza (`ssh-add` lokalnie), bo Capistrano domyślnie z tego
korzysta — tak samo działa tropo.

Repozytorium jest prywatne, więc serwer potrzebuje własnego klucza. Wygeneruj
go na serwerze i dodaj jako **Deploy key** w ustawieniach repozytorium, bez
prawa zapisu:

```
ssh-keygen -t ed25519 -C "gladits-fpl@ovh" -N "" -f ~/.ssh/id_ed25519_fpl
printf 'Host github.com\n  IdentityFile ~/.ssh/id_ed25519_fpl\n  IdentitiesOnly yes\n' >> ~/.ssh/config
chmod 600 ~/.ssh/config
ssh -T git@github.com
```

Przekazywanie klucza z laptopa (`ssh-add`) tu nie pomoże — lokalny `id_rsa`
jest zabezpieczony hasłem i wymagałby odblokowania przy każdym wdrożeniu.

### 2. Composer na serwerze

Composer leży w katalogu domowym: `/homez.1951/gladits/composer.phar`. Jest
wspólny dla wszystkich użytkowników tego hostingu, więc stoi tam już od
projektu tropo. Gdyby go zabrakło:

```
curl -sS https://getcomposer.org/installer | php -- --install-dir=/homez.1951/gladits --filename=composer.phar
```

### 3. Plik `.env.local` na serwerze

Trzyma hasło do bazy i oba kody dostępu, więc nigdy nie trafia do repozytorium.
Utwórz go raz w katalogu współdzielonym — Capistrano dowiąże go do każdego
wydania:

```
mkdir -p /homez.1951/gladits/fpl/shared
cat > /homez.1951/gladits/fpl/shared/.env.local <<'EOF'
APP_ENV=prod
APP_DEBUG=0
APP_SECRET=<wygeneruj: openssl rand -hex 16>
DATABASE_URL="mysql://uzytkownik:haslo@serwer-bazy:3306/nazwa?serverVersion=5.7&charset=utf8mb4"
APP_ACCESS_CODE_EDITOR=<kod dla kolegow>
APP_ACCESS_CODE_ADMIN=<kod wlasciciela>
EOF
chmod 600 /homez.1951/gladits/fpl/shared/.env.local
```

Dane bazy weź z panelu OVH. Sprawdź tam też wersję MySQL i dopasuj
`serverVersion` — lokalnie stoi 5.7.

## Wdrożenie

```
bundle install
bundle exec cap production deploy
```

Po wydaniu Capistrano sam uruchamia migracje i przygotowuje pamięć podręczną.
Aplikacja nie ma budowania frontendu, więc nie ma tu kroku z zasobami.

## Konfiguracja domeny

Aplikacja stoi pod `fpl.glad-it.pl`.

**Katalog domeny musi wskazywać na `public/` wewnątrz bieżącego wydania.** W
panelu OVH katalog główny podaje się względem katalogu domowego, więc wpisz:

```
fpl/current/public
```

Przepisywanie adresów zapewnia `public/.htaccess` w repozytorium. Bez niego
działa wyłącznie strona główna, a każdy inny adres zwraca 404.

Ustawienie go na katalog projektu wystawiłoby na świat kod źródłowy, plik
`.env.local` z hasłem do bazy i oba kody dostępu.

**Włącz HTTPS.** Kody dostępu lecą w formularzu tekstem jawnym — w sieci
lokalnej to bez znaczenia, w internecie oznacza, że każdy po drodze może je
przechwycić i dodawać mecze w Twoim imieniu. OVH daje darmowy certyfikat.

## Odświeżanie danych w trakcie kolejki

**Hosting współdzielony OVH blokuje ruch wychodzący z linii poleceń.** Komenda
`app:fpl:sync` uruchomiona przez SSH albo przez zadanie cykliczne OVH nie
dosięgnie API i zakończy się błędem połączenia. Z poziomu Apache ruch
wychodzący działa normalnie, więc aplikacja przez przeglądarkę odświeża dane
bez przeszkód. Tej blokady nie da się zdjąć — to ograniczenie platformy.

Widok meczu odświeża dane sam, gdy ktoś na niego wejdzie, ale najwyżej raz na
pięć minut. Żeby mieć świeże wyniki bez zaglądania na stronę, ustaw zewnętrzny
cron (np. cron-job.org) pingujący stały adres bieżącej kolejki:

```
https://fpl.glad-it.pl/teraz
```

Ten adres sam przekierowuje na mecz kolejki oznaczonej przez FPL jako bieżąca,
więc nie trzeba go podmieniać co tydzień.

Co pięć minut, codziennie w oknie 13:00–23:59. Poza tym oknem mecze się nie
odbywają. Snapshotów oznaczonych jako ostateczne synchronizacja nie rusza,
więc cykliczne wywoływanie nie nadpisze historii sezonu.

## Pierwsze uruchomienie na czystej bazie

Po pierwszym wdrożeniu baza ma sam schemat. Żeby aplikacja miała z czym
pracować:

```
php bin/console app:fpl:sync --env=prod --force        # kolejki, kluby, zawodnicy
php bin/console app:fpl:import-teams 12466 12480 --env=prod   # katalog druzyn
```

Potem przez przeglądarkę: `/settings` — Twoja stała czwórka, `/fixture/new` —
mecz kolejki. Obie strony są za kodem właściciela.
