Jak aplikace u nás běží
- Jako služba systemd pod vlastním uživatelem, s pamětí podle tarifu (1 GB RAM). Když spadne, systém ji sám znovu spustí.
- Před ní stojí nginx jako reverse proxy. Řeší HTTPS s certifikátem Let's Encrypt a předává požadavky na port aplikace na
127.0.0.1. - Výstup aplikace (stdout a stderr) jde do logu, při potížích do něj nahlédneme spolu s vámi.
Co má aplikace splňovat
- Port bere z proměnné
PORTa poslouchá na127.0.0.1, ne na0.0.0.0. - V
package.jsonmá skriptstart, případně ibuild. - Má zamčené závislosti:
package-lock.json,pnpm-lock.yamlnebobun.lock. - Konfiguraci čte z proměnných prostředí. Tajné hodnoty nepatří do repozitáře, uložíme je přímo na server.
- Ideálně má adresu pro kontrolu zdraví, třeba
/health, která vrátí 200.
// Node.js (Express, Fastify i čisté http fungují stejně)
const port = Number(process.env.PORT ?? 3000);
server.listen(port, '127.0.0.1');
// Bun
Bun.serve({ port: Number(process.env.PORT ?? 3000), hostname: '127.0.0.1', fetch: app.fetch });
Jak probíhá nasazení
Typické nastavení vypadá takto, detaily přizpůsobíme vašemu projektu:
- Push do hlavní větve spustí pipeline v GitHub Actions nebo GitLab CI.
- Pipeline nainstaluje závislosti, spustí testy a sestaví aplikaci. Když testy neprojdou, nic se nenasadí.
- Sestavená verze se přes SSH, s klíčem určeným jen pro nasazení, nahraje na server vedle té současné.
- Služba se přepne na novou verzi a ověří se, že odpovídá. Předchozí verze zůstává na serveru, takže návrat zpět je otázka chvíle.
Co od vás potřebujeme
- Přístup k repozitáři na GitHubu nebo GitLabu, abychom mohli nastavit pipeline.
- Seznam proměnných prostředí a jejich hodnoty, předané bezpečnou cestou.
- Verzi Node.js nebo Bunu, kterou aplikace potřebuje.
- Doménu, na které má aplikace běžet (viz Jak nasměrovat doménu).
Databázi MySQL k aplikaci založíme na požádání, v klientském panelu je na to požadavek Nová databáze. Když aplikace potřebuje víc výkonu nebo vlastní služby, hodí se spravované VPS.