Instrukcja dla Twojego AI
Wklej ten plik do ChatGPT, Claude'a albo agenta z dostępem SSH jako pierwszą wiadomość. Asystent dowie się, jak działa hosting Isbre, i poprowadzi Cię przez WordPressa, aplikację Node.js lub Python, przeniesienie strony i konfigurację poczty. Albo zrobi to za Ciebie.
Jak tego użyć
- Skopiuj treść przyciskiem poniżej albo pobierz /llms.txt.
- Wklej ją asystentowi jako pierwszą wiadomość i dopiero potem napisz, co chcesz zrobić.
- Agentowi, który ma pracować przez SSH, podaj sam klucz albo hasło. W pliku ich nie ma i nie będzie.
Wersja z danymi Twojej usługi
Ta strona to wersja ogólna. W panelu każda usługa ma własną: z loginem i portem SFTP, listą domen z wersją PHP i katalogiem, bazami danych (bez haseł), adresami skrzynek i parą serwerów nazw Twojego konta. Znajdziesz ją w usłudze, w grupie „Pomoc”.
isbre-dla-ai.md
ten sam plik jako /llms.txt# Isbre: instrukcja dla Twojego AI
> Wklej ten plik jako pierwszą wiadomość do asystenta AI (ChatGPT, Claude, agent z dostępem SSH). Opisuje hosting Isbre (https://isbre.pl): co jest w usłudze, jak się do niej dostać, gdzie co się ustawia i jak krok po kroku postawić WordPressa, aplikację Node.js lub Python albo skonfigurować pocztę. Asystent ma prowadzić klienta, a przy dostępie SSH wykonywać polecenia w jego imieniu, w granicach z sekcji „Czego AI nie robi”. Wszystko, co tu jest, klient widzi też w panelu (https://panel.isbre.pl) i w pomocy (https://isbre.pl/pomoc).
>
> To wersja ogólna. Wersję z danymi konkretnej usługi (login, port, domeny, bazy, skrzynki, para serwerów nazw) klient pobiera w panelu: usługa, grupa Pomoc, „Instrukcja dla Twojego AI”.
## 1. Czym jest usługa
- Każda usługa to własny serwer klienta (kontener z Debianem), bez uprawnień administratora (roota). Klient ma w nim jedno konto systemowe: `<login>`.
- Strony WWW serwuje Apache z PHP-FPM. Wersję PHP wybiera się osobno dla każdej domeny w panelu: do wyboru 5.6, 7.0, 7.1, 7.2, 7.3, 7.4, 8.0, 8.1, 8.2, 8.3, 8.4, 8.5; nowa strona dostaje 8.3. `.htaccess` działa w pełni, razem z `php_value` i `php_flag`.
- Aplikacje Node.js i Python (Django, Flask, FastAPI) uruchamia się z panelu jako stałe procesy, wpięte pod domenę albo jej podścieżkę. Środowiska w obrazie serwera: Node.js 20, 22, 24 (domyślnie 22) i Python 3.13.
- Bazy danych: MariaDB albo PostgreSQL, zakładane w panelu, na wspólnym serwerze baz. Do bazy łączy się aplikacja klienta; z powłoki nie ma klienta `mariadb` ani `psql` (narzędziem do bazy jest phpMyAdmin lub Adminer otwierany z panelu).
- Poczta działa na osobnym serwerze pocztowym platformy (mail.isbre.pl), skrzynki i aliasy zakłada się w panelu.
- DNS: każde konto ma własną parę serwerów nazw `k<12 znaków>.ns1.isbre.pl` i `k<12 znaków>.ns2.isbre.pl`. Domena wskazana u rejestratora na tę parę jest przyjmowana automatycznie, bez kolejki do obsługi.
- Pakiety (liczby z cennika https://isbre.pl/cennik):
| Pakiet | Dysk | Miejsce na bazy | Poczta | Strony | Bazy | Skrzynki | Cron | Powłoka SSH | memory_limit | max_execution_time | Czas żądania |
|---|---|---|---|---|---|---|---|---|---|---|---|
| Start (S) | 10 GB | 2 GB | 10 GB | 2 | 5 | 10 | 3 | nie | 256M | 60 s | 300 s |
| Standard (M) | 25 GB | 5 GB | 25 GB | 10 | 25 | 50 | 10 | tak | 512M | 120 s | 300 s |
| Pro (L) | 50 GB | 10 GB | 50 GB | 25 | 50 | 150 | 25 | tak | 768M | 180 s | 360 s |
| Max (XL) | 80 GB | 16 GB | 80 GB | bez limitu | bez limitu | 500 | 50 | tak | 1024M | 300 s | 600 s |
Limity PHP z pakietu (`memory_limit`, `max_execution_time`, `upload_max_filesize`, `post_max_size`) są wartościami domyślnymi: klient może je podnieść w `.htaccess`. Twardy jest tylko czas jednego żądania (kolumna „Czas żądania”): po nim żądanie jest przerywane niezależnie od `max_execution_time`.
## 2. Dostęp: panel, SFTP, SSH
- Panel: https://panel.isbre.pl. Logowanie adresem e-mail i hasłem (opcjonalnie drugi składnik). W panelu klient wybiera usługę; wszystkie ekrany poniżej (Strony, Aplikacje Node i Python, Bazy danych, Poczta, Pliki (SFTP), Zadania cykliczne (cron), Domeny i DNS, Kopie zapasowe, Logi, Historia) są w menu tej usługi.
- SFTP: host `<adres techniczny usługi>`, port `<port z ekranu Pliki (SFTP)>`, użytkownik `<login>`, hasło ustawione w panelu na ekranie „Pliki (SFTP)”. Zwykłego FTP nie ma; FileZilla i WinSCP obsługują SFTP. Hasła nie da się odczytać ponownie, da się je tylko ustawić na nowo (ten sam ekran).
- SSH (powłoka): w pakiecie Start jest wyłącznie SFTP. W pakietach Standard, Pro i Max powłokę włącza się przełącznikiem na ekranie „Pliki (SFTP)” (domyślnie jest wyłączona). Po włączeniu: `ssh -p <port z ekranu Pliki (SFTP)> <login>@<adres techniczny usługi>`. Nadal bez roota, bez `sudo`, bez instalowania pakietów systemowych.
- Klucz SSH: klient może wgrać własny klucz publiczny do `~/.ssh/authorized_keys` (katalog `.ssh` z prawami 700, plik 600). Logowanie kluczem działa i przez SFTP, i przez SSH.
- Ścieżki:
- katalog domowy: `/home/<login>`,
- strona domeny: `/home/<login>/domains/<domena>/public_html` (to jest katalog główny witryny, `DocumentRoot`),
- pliki tymczasowe i sesje PHP domeny: `/home/<login>/domains/<domena>/tmp`,
- aplikacje Node/Python: `/home/<login>/apps/<nazwa>`.
- Po SFTP klient widzi tylko swój katalog domowy, więc te same ścieżki wyglądają tak: `/<login>/domains/<domena>/public_html`.
- Narzędzia w powłoce (są w obrazie serwera, nie trzeba ich instalować): `php` (w konsoli domyślnie 8.3; inną wersję wywołuje się jawnie, np. `php8.1`), `composer`, `wp` (WP-CLI), `node`, `npm`, `npx`, `python3`, `pip` przez `python3 -m venv`, `git`, `rsync`, `curl`, `wget`, `zip`, `unzip`, `tar`, `nano`, `vim`, `mc`, `sqlite3`, `jq`, `dig`.
- Czego w powłoce nie ma albo co nie działa: `sudo` i `apt` nie działają (brak uprawnień roota), nie ma `mysql`/`mariadb`, `psql` ani Dockera. Dziennik błędów PHP leży w koncie klienta: `/home/<login>/logs/php<wersja>-error.log` (jeden plik na wersję PHP, np. `php8.3-error.log`; czytelny z powłoki i przez SFTP). Logów dostępu i błędów Apache nie czyta się z plików (są niedostępne dla konta klienta), tylko z panelu na ekranie „Logi” (podgląd na żywo i pobranie pliku).
- Polecenie `df` pokazuje więcej zajętego miejsca, niż zajmują pliki klienta, bo liczy też wspólną warstwę systemu; do limitu pakietu liczą się tylko pliki klienta. Realne zużycie jest na pulpicie usługi w panelu, w karcie „Miejsce”.
## 3. Domeny
- Domena należy do konta klienta, a do usługi jest przypisywana. Ekran: menu konta „Domeny” (kafelek). W usłudze (Strony, Poczta) widać tylko domeny do niej przypisane.
- Nowa domena zewnętrzna, kolejność: najpierw dodać ją w panelu („Dodaj stronę” w usłudze albo „Podepnij domenę” w kafelku Domeny), potem u rejestratora wpisać parę serwerów nazw konta (widoczną w panelu przy dodawaniu domeny). Do czasu przepięcia domena stoi na liście jako zgłoszenie „Oczekuje na zmianę serwerów nazw”; platforma sprawdza delegację co 10 minut (jest też przycisk „Sprawdź teraz”), a gdy ją zobaczy, uruchamia domenę i wysyła mail. Zgłoszenie bez przepięcia wygasa po 30 dniach.
- DNS ma zostać u dotychczasowego dostawcy: druga droga to jednorazowy rekord TXT `_isbre-verify.<domena>` o wartości `isbre-verify=<żeton z panelu>` (żeton pokazuje ekran dodawania domeny). Potem u tego dostawcy trzeba samemu ustawić rekordy: A domeny i `www` na adres IP serwera (ten sam, na który wskazuje adres techniczny usługi: `dig +short <adres techniczny usługi>`), a dla poczty MX, SPF, DKIM i DMARC. Komplet wartości do przepisania jest na ekranie DNS tej domeny w panelu (Domeny, domena, DNS).
- Subdomena już potwierdzonej domeny nie wymaga żadnego dowodu: dodaje się ją od razu.
- Domena kupiona u Isbre: zamawia się ją w kafelku Domeny albo przy zakupie pakietu; jest przypisana i skierowana automatycznie.
- DNS prowadzony przez Isbre (domena wskazuje parę NS konta): rekordy edytuje się w panelu na ekranie DNS domeny. Rekordy platformy (A strony, MX, SPF, DKIM, DMARC, autokonfiguracja poczty) stoją tam z automatu.
- Tryb przeprowadzki: gdy strefę DNS prowadzimy my, przełącznik na ekranie DNS domeny skraca czas życia rekordów A na czas przełączania serwera, a po oknie przywraca poprzednią wartość. Gdy strefa jest u innego dostawcy, TTL ustawia się tam i tryb przeprowadzki nie ma czego skracać.
- Adres techniczny usługi (`srv<numer>.<domena hostingowa>`, widoczny na pulpicie usługi) jest pełnoprawną stroną z własnym certyfikatem: nadaje się do testów przed przepięciem domeny, nie zajmuje limitu stron i nie jest domeną klienta (nie ma go w kafelku Domeny).
## 4. Strony (PHP)
- Ekran „Strony” w usłudze: „Dodaj stronę” z nazwą domeny i wersją PHP. Powstaje katalog `domains/<domena>/public_html` i konfiguracja serwera. Wersję PHP zmienia się w każdej chwili z listy przy stronie.
- Certyfikat SSL (Let's Encrypt) wystawia się automatycznie, gdy domena wskazuje na serwer; do tego czasu przeglądarka może pokazać ostrzeżenie o certyfikacie. Stan i powód oczekiwania są przy stronie na ekranie „Strony”; jest tam też ponowienie.
- `php_value` i `php_flag` w `.htaccess` działają jak przy mod_php; `php_admin_value` daje błąd 500. Można też użyć `.user.ini` w katalogu strony. Ścieżek dziennika błędów, sesji, katalogu tymczasowego i `open_basedir` klient nie zmienia.
- Blokada botów AI: przełącznik przy każdej stronie („Blokuj boty AI na <domena>”), domyślnie włączony. Blokuje roboty firm AI (GPTBot, ClaudeBot, PerplexityBot i podobne), nie wyszukiwarki Google i Bing. Wyłącza się go, gdy klient chce, żeby jego treść trafiała do asystentów AI.
- ionCube Loader jest włączony w każdej wersji PHP poza 8.0 (dla 8.0 producent nie wydał loadera).
- Logi dostępu i błędów Apache: ekran „Logi” (na żywo, z filtrem, do pobrania). Dziennik błędów PHP jest też plikiem w koncie: `/home/<login>/logs/php<wersja>-error.log` (np. `tail -n 50 ~/logs/php8.3-error.log` przez SSH).
## 5. Aplikacje Node.js i Python
Aplikację uruchamia panel, nie klient z powłoki. Ekran „Aplikacje Node i Python”, „Dodaj aplikację”, pola: nazwa (małe litery, cyfry, myślnik; to nazwa katalogu w `~/apps` i nazwa procesu), środowisko (Node.js / Python), wersja (lista z tego serwera), dla Pythona framework (bez frameworka (WSGI) / Django / Flask / FastAPI-ASGI), domena (albo „bez domeny”, wtedy proces działa tylko wewnętrznie) i ścieżka (`/` = cała domena, albo np. `/api`).
- Pliki klient wgrywa PRZED dodaniem aplikacji, do `~/apps/<nazwa>` (SFTP albo `git clone` przez SSH).
- Node.js: w katalogu musi być `server.js`, a aplikacja ma nasłuchiwać na porcie ze zmiennej `process.env.PORT` (port przydziela panel). Nie ma pola „komenda”: uruchamiane jest zawsze `node server.js` wybraną wersją Node.
- Python: w katalogu musi być gotowe `venv` z zainstalowanym serwerem: `gunicorn` (WSGI: Django, Flask, bez frameworka) albo `uvicorn` (FastAPI i inne ASGI). Bez frameworka i Flask: obiekt `app` w `app.py`. FastAPI: obiekt `app` (ASGI) w `app.py`. Django: projekt nazwany tak samo jak aplikacja (`django-admin startproject <nazwa> .`) i `STATIC_ROOT` w `settings.py`; pliki statyczne zbiera panel przy dodawaniu i serwuje je spod `/static/`.
- Po dodaniu: panel pokazuje stan procesu (działa / startuje / nie działa), port, logi (przycisk „Logi” przy aplikacji) i ma przyciski „Edytuj”, „Logi”, „Restartuj” i „Usuń”. Po zmianie kodu klient klika „Restartuj”. Zmiana wersji Node/Pythona: „Edytuj” przy aplikacji.
- Jeśli dodanie się nie uda (proces nie utrzymał się kilka sekund), panel pokazuje końcówkę logu z powodem. Najczęściej: brak `server.js`, brak `venv`, nasłuch na złym porcie.
- Domena może być albo stroną PHP, albo aplikacją pod `/`; dwie aplikacje na jednej domenie muszą stać na rozłącznych ścieżkach.
- Aplikacja dostaje ten sam certyfikat SSL co strony PHP. Procesy w tle spoza panelu (pm2, `nohup`, screen) nie są wspierane: po restarcie serwera nie wstaną.
## 6. Bazy danych
- Ekran „Bazy danych”, „Utwórz bazę”: silnik (MariaDB / PostgreSQL) i nazwa. Pełna nazwa i użytkownik dostają przedrostek usługi (np. `c<numer>_sklep`). Hasło panel pokazuje RAZ, przy tworzeniu; nowe hasło ustawia się przyciskiem przy bazie.
- Dane do połączenia (host, port, baza, użytkownik) są na ekranie „Bazy danych” przy każdej bazie: MariaDB <host z ekranu Bazy> port 3306, PostgreSQL <host z ekranu Bazy> port 5432. Aplikacja łączy się po tym hoście, nie po `localhost`.
- Narzędzie do bazy: przycisk „Otwórz phpMyAdmin” (MariaDB) albo „Otwórz Adminer” (PostgreSQL) przy bazie w panelu; logowanie następuje automatycznie. Z powłoki nie ma `mysql`, `mysqldump` ani `psql`, więc nie działają też polecenia, które ich wymagają: `wp db import`, `wp db export`, `wp db query` (zmierzone: „env: 'mysqldump': No such file or directory”). Zrzut SQL importuje się przez phpMyAdmin/Adminer (zakładka Import) albo narzędziem aplikacji, które łączy się przez PHP/Python (`wp search-replace`, `manage.py loaddata` działają).
- Zrzut bazy do pobrania: ekran „Kopie zapasowe”, „Pobierz kopię bazy”.
- Miejsce na bazy ma własny limit z pakietu (kolumna „Miejsce na bazy” w tabeli pakietów), liczony łącznie dla wszystkich baz MariaDB i PostgreSQL konta; dysk serwera i poczta mają własne limity (trzy pule, jak w karcie „Miejsce” na pulpicie usługi, gdzie widać zużycie). Panel pokazuje też sumę zajętości tych trzech pul wobec rozmiaru pakietu (wiersz „Razem”). Przekroczenie limitu miejsca na bazy (powyżej 110%) albo tej sumy (powyżej 110% rozmiaru pakietu) wstrzymuje zapis do baz danych do czasu zwolnienia miejsca; odczyt działa dalej, strony i poczta też. Niczego innego przekroczenie sumy nie wyłącza.
## 7. Poczta
- Ekran „Poczta”: „Nowa skrzynka” (nazwa i domena; tylko domena przypisana do tej usługi), „Nowy alias” (adres aliasu i lista adresów, na które przekazuje; alias nie ma skrzynki ani hasła). Hasło skrzynki panel pokazuje raz; zmiana hasła przyciskiem przy skrzynce albo w webmailu.
- Program pocztowy: nazwa użytkownika = pełny adres e-mail, serwer poczty przychodzącej i wychodzącej `mail.isbre.pl`:
- IMAP: port 993, SSL/TLS,
- POP3: port 995, SSL/TLS,
- SMTP: port 465, SSL/TLS (albo 587 ze STARTTLS).
- Webmail: https://poczta.isbre.pl. Tam też: filtry, autoresponder (wiadomość o nieobecności), zmiana hasła.
- Autokonfiguracja: Thunderbird, Outlook i telefony znajdują ustawienia same po podaniu adresu i hasła, jeśli DNS domeny prowadzi Isbre (rekordy `autoconfig` i `_autodiscover` są w strefie).
- SPF, DKIM i DMARC dla domeny ze strefą u Isbre są ustawione automatycznie. Gdy DNS jest u innego dostawcy, te rekordy trzeba tam przepisać z ekranu DNS domeny w panelu.
- Wiadomości rozpoznane jako spam trafiają do folderu Junk (w webmailu widocznego jako „Spam”). PHP `mail()` z witryny działa (wychodzi przez przekaźnik platformy).
## 8. Kopie zapasowe
- Kopie robi platforma automatycznie: migawki serwera kilka razy dziennie i nocne archiwum. Klient niczego nie włącza.
- Ekran „Kopie zapasowe”: lista punktów przywracania, „Przywróć pliki” (ścieżka względem katalogu domowego, np. `domains/sklep.pl/public_html`) w jednym z dwóch trybów: „obok” (domyślny; przywrócone pliki trafiają do `_restored/<data>/` w katalogu domowym, bieżące dane zostają nietknięte) albo „nadpisz w miejscu” (wymaga osobnego potwierdzenia; poprzednia wersja jest przenoszona do `_restored/przed-<data>/`), „Przywróć bazę danych” (z nocnego archiwum, jako NOWA baza obok; bieżąca baza zostaje nietknięta), „Pobierz kopię bazy” (zrzut SQL). Historia przywracań jest na tym samym ekranie.
- Jak głęboko sięgają kopie i co obejmują: https://isbre.pl/pomoc (pytanie „Jak działa backup?”). Kopia platformy nie zastępuje własnego archiwum klienta.
## 9. Zadania cykliczne (cron)
- Ekran „Zadania cykliczne (cron)”, „Nowe zadanie”: harmonogram w 5 polach (`*/15 * * * *`, albo `@daily`, `@hourly`) i komenda w jednej linii. Komenda wykonuje się na serwerze usługi jako użytkownik klienta, np. `cd /home/<login>/domains/sklep.pl/public_html && php wp-cron.php` albo `php8.2 /home/<login>/domains/sklep.pl/public_html/artisan schedule:run`.
- Liczba zadań jest limitem pakietu. Panel zarządza tylko zadaniami dodanymi w panelu; wpisów zrobionych przez `crontab -e` w powłoce nie widzi i ich nie rusza.
## 10. Scenariusze krok po kroku
Przed każdym scenariuszem: asystent pyta klienta o nazwę domeny, wersję PHP, nazwę bazy i hasła; niczego nie zgaduje. Przy dostępie SSH zaczyna od `hostname; whoami; ls ~/domains` i porównuje z danymi z panelu.
### 10.1 WordPress przez WP-CLI
Założenia: strona dodana w panelu (ekran „Strony”, domena `<domena>`, PHP 8.3 albo nowsze), baza MariaDB utworzona w panelu (ekran „Bazy danych”; nazwa, użytkownik, host i port z ekranu, hasło z chwili utworzenia), dostęp przez SSH włączony.
```sh
cd /home/<login>/domains/<domena>/public_html
wp core download --locale=pl_PL
wp config create --dbname=<baza> --dbuser=<użytkownik> --dbpass='<hasło>' --dbhost=<host z ekranu Bazy>:3306 --dbprefix=wp_
wp core install --url=https://<domena> --title="Nazwa strony" --admin_user=<login administratora> --admin_password='<hasło administratora>' --admin_email=<adres e-mail> --skip-email
wp plugin install wordpress-seo --activate
```
- Bez SSH (pakiet Start): klient wgrywa rozpakowany WordPress przez SFTP do `public_html` i przechodzi instalator w przeglądarce, wpisując dane bazy z panelu (host z portem: `<host z ekranu Bazy>:3306`).
- Zanim domena wskaże na serwer, stronę testuje się na adresie technicznym usługi (WordPress przyjmuje `--url` z domeną docelową; do testu można tymczasowo podać adres techniczny i zmienić go potem przez `wp option update home` i `wp option update siteurl`).
- Import istniejącej strony: pliki przez SFTP/rsync do `public_html`, zrzut SQL przez phpMyAdmin (przycisk przy bazie w panelu, zakładka Import; `wp db import` nie zadziała, bo w powłoce nie ma programu `mysql`), zmiana danych bazy w `wp-config.php` (`wp config set DB_HOST '<host z ekranu Bazy>:3306'` i analogicznie `DB_NAME`, `DB_USER`, `DB_PASSWORD`), potem `wp search-replace 'https://<stara domena>' 'https://<domena>'` (to polecenie działa, bo idzie przez PHP).
- Cron WordPressa: w `wp-config.php` `define('DISABLE_WP_CRON', true);` i zadanie w panelu: `*/5 * * * *` z komendą `cd /home/<login>/domains/<domena>/public_html && wp cron event run --due-now --quiet`.
- Limity PHP (np. `upload_max_filesize`): `php_value upload_max_filesize 128M` w `.htaccess` w `public_html`.
### 10.2 Przeniesienie strony i poczty z innego hostingu
Kolejność: kopia u dotychczasowego dostawcy, test u Isbre na adresie technicznym, poczta, tryb przeprowadzki (tylko gdy strefę DNS prowadzimy my), DNS na końcu.
1. Kopia: pobrać pliki strony (FTP/SFTP starego hostingu) i zrzut bazy; zapisać je lokalnie. Bez tej kopii nie robić nic dalej.
2. W panelu: „Dodaj stronę” z docelową domeną (zgłoszenie zostanie w stanie oczekiwania, dopóki DNS wskazuje stary hosting) i „Utwórz bazę”.
3. Wgrać pliki do `domains/<domena>/public_html`, zaimportować bazę (WP-CLI, phpMyAdmin albo narzędzie aplikacji), poprawić dane bazy w konfiguracji aplikacji.
4. Test przed przepięciem: na własnym komputerze dopisać domenę do pliku `hosts` z adresem IP serwera (`dig +short <adres techniczny usługi>`) i otworzyć stronę; alternatywnie sprawdzić ją pod adresem technicznym.
5. Poczta: założyć skrzynki w panelu z tymi samymi adresami, co u starego dostawcy; wiadomości przenosi klient własnym programem pocztowym (dwa konta IMAP, przeciąganie folderów) albo zamawia przeniesienie u Isbre (zaznaczane przy zakupie: https://isbre.pl/migracja).
6. Przepięcie DNS: u rejestratora wskazać parę serwerów nazw konta (domena w panelu przejdzie ze zgłoszenia w działającą stronę) ALBO, gdy DNS zostaje u dostawcy, zmienić tam rekordy A i MX. Certyfikat SSL wystawi się po tym, jak domena zacznie wskazywać na serwer.
7. Stary hosting wyłączyć dopiero po sprawdzeniu strony, HTTPS i poczty, po kilku dniach.
Migracja wykonywana przez Isbre (w cenie pakietu, jedna strona) ma własny opis: https://isbre.pl/migracja.
### 10.3 Aplikacja Node.js
```sh
mkdir -p ~/apps/api && cd ~/apps/api
git clone <adres repozytorium> . # albo pliki przez SFTP do ~/apps/api
npm ci --omit=dev # albo npm install
```
`server.js` w katalogu aplikacji (nazwa pliku jest obowiązkowa):
```js
const http = require('http');
const port = process.env.PORT;
http.createServer((req, res) => res.end('ok')).listen(port, '127.0.0.1');
```
Potem w panelu: „Aplikacje Node i Python”, „Dodaj aplikację”: nazwa `api`, Node.js, wersja, domena i ścieżka (np. `api.sklep.pl` i `/`). Domena musi być wcześniej dodana w usłudze (jako strona albo domena podpięta). Po zmianie kodu: `git pull` (albo wgranie plików), `npm ci`, przycisk „Restartuj” w panelu. Logi aplikacji: ekran „Aplikacje Node i Python”, przycisk „Logi” przy aplikacji. Framework, który buduje pliki (Next.js, Nuxt, Astro w trybie serwera), buduje się przez SSH (`npm run build`), a `server.js` uruchamia zbudowany serwer.
### 10.4 Django albo FastAPI
```sh
mkdir -p ~/apps/sklep && cd ~/apps/sklep
python3 -m venv venv
venv/bin/pip install --upgrade pip
# Django:
venv/bin/pip install gunicorn django psycopg2-binary
venv/bin/django-admin startproject sklep .
# FastAPI:
venv/bin/pip install uvicorn fastapi
```
Django, w `sklep/settings.py`: `ALLOWED_HOSTS = ['sklep.pl', 'www.sklep.pl']`, `STATIC_ROOT = BASE_DIR / 'static'`, `DATABASES` na PostgreSQL z ekranu „Bazy danych” (host <host z ekranu Bazy>, port 5432, nazwa, użytkownik, hasło). Potem `venv/bin/python manage.py migrate` i `venv/bin/python manage.py createsuperuser` przez SSH. W panelu: „Dodaj aplikację”, Python, framework Django, nazwa `sklep` (taka sama jak nazwa projektu), domena. Pliki statyczne zbiera panel przy dodawaniu (`collectstatic`); po zmianach w statykach: `venv/bin/python manage.py collectstatic --noinput` i „Restartuj”.
FastAPI, `app.py`:
```py
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def root():
return {"ok": True}
```
W panelu framework „FastAPI / ASGI”. Aplikacja pod podścieżką (np. `/api`) dostaje od platformy `--root-path`, więc dokumentacja `/api/docs` działa bez zmian w kodzie.
### 10.5 Program pocztowy
1. Skrzynka założona w panelu (ekran „Poczta”), hasło zapisane przy tworzeniu.
2. W programie: konto IMAP, nazwa użytkownika = pełny adres, serwer przychodzący `mail.isbre.pl` port 993 SSL/TLS, serwer wychodzący `mail.isbre.pl` port 465 SSL/TLS, uwierzytelnianie hasłem, to samo hasło co do odbioru.
3. Telefon: zwykle wystarczy adres i hasło (autokonfiguracja), jeśli DNS domeny prowadzi Isbre.
4. Sprawdzić wysyłkę do siebie i odbiór. Gdy wiadomości do zewnętrznych odbiorców lądują w spamie, sprawdzić SPF/DKIM/DMARC domeny (automatyczne przy strefie u Isbre; przy DNS u innego dostawcy przepisać rekordy z panelu).
## 11. Czego AI nie robi
- Nie zmienia DNS, serwerów nazw ani rekordów u rejestratora bez wyraźnego potwierdzenia klienta w tym samym kroku; opisuje, co zamierza zmienić i co się stanie ze stroną i pocztą.
- Nie kasuje `public_html`, katalogów aplikacji ani baz bez wcześniejszej kopii (pliki: `tar`/`rsync` poza katalog roboczy albo kopia w panelu; baza: „Pobierz kopię bazy” w panelu albo eksport z phpMyAdmin/Adminera).
- Nie edytuje plików systemowych serwera (poza katalogiem domowym), nie próbuje `sudo`, `apt`, `systemctl`, nie zmienia konfiguracji Apache i PHP poza `.htaccess` i `.user.ini`.
- Nie omija panelu tam, gdzie panel jest jedynym wejściem: bazy, skrzynki i aliasy, domeny, zadania cykliczne, aplikacje (uruchamianie, restart, usuwanie), certyfikaty, hasło SFTP. Procesy w tle uruchamiane ręcznie z powłoki nie przeżyją restartu serwera.
- Przy błędzie czyta komunikat do końca i zatrzymuje się; nie powtarza polecenia „na ślepo”, nie obchodzi błędu uprawnień.
- Nie wysyła haseł, kluczy ani tokenów nigdzie poza serwerem klienta; nie wpisuje ich do plików w `public_html`; nie zapisuje ich w historii poleceń, gdy da się tego uniknąć.
- Nie zmienia pakietu, nie zamawia domen ani dodatków i nie płaci; to robi klient w panelu.
- Nie wyłącza blokady botów AI ani nie zmienia ustawień poczty (aliasów, przekierowań) bez pytania.
## 12. Pomoc
- Poradniki i odpowiedzi: https://isbre.pl/pomoc (ceny, domeny, faktury, backup, `php_value`, ionCube) i https://isbre.pl/onboarding (pierwsze kroki po zakupie).
- Biuro obsługi: bok@isbre.pl. Odpowiadamy mailem; w wiadomości podaj domenę i wklejony komunikat błędu. Reklamacje rozpatrujemy w terminie z regulaminu (https://isbre.pl/regulamin, §11).
- Płatny dodatek „Obsługa hostingu”: czynności administracyjne przy usłudze wykonuje Isbre na zlecenie klienta (opis w panelu, grupa Pomoc).