# Установка без Docker (Ubuntu) Production: Node.js 20, PostgreSQL 17, systemd, опционально Caddy. **Полное руководство по ошибкам и обновлениям:** [Server-Operations](Server-Operations). Задайте каталог клона: ```bash export SHOP_ROOT=/opt/shop ``` --- ## 1. Требования - Ubuntu 22.04 или 24.04 - Порты 22, 80, 443 (для Caddy) - Порт 3000 только localhost ## 2. Системные пакеты ### Node.js 20 ```bash curl -fsSL https://deb.nodesource.com/setup_20.x | bash - apt install -y nodejs git curl ``` ### PostgreSQL 17 Не используйте `apt install postgresql-17` без PGDG: ```bash sudo bash "$SHOP_ROOT/scripts/install-postgresql-ubuntu.sh" ``` ## 3. Клонирование ```bash export GIT_REPO_URL='' git clone "$GIT_REPO_URL" "$SHOP_ROOT" cd "$SHOP_ROOT" ``` Или: `sudo SHOP_GIT_URL="$GIT_REPO_URL" bash scripts/quick-deploy-ubuntu.sh` ## 4. База данных ```bash cd "$SHOP_ROOT" bash scripts/setup-postgres-ubuntu.sh ``` ## 5. `.env` ```bash cp .env.example .env nano .env ``` `SESSION_SECRET`, `DATABASE_URL`, `SITE_URL` (ваш публичный URL без привязки к конкретному домену в коде). ## 6. Зависимости ```bash npm install --omit=dev ``` ## 7. systemd ```bash sudo bash scripts/install-shop-service.sh ``` `WorkingDirectory` в unit = `$SHOP_ROOT`. Не делайте `chown -R www-data` на весь репозиторий. ## 8. Caddy После `curl http://127.0.0.1:3000/health` → OK: ```bash cp "$SHOP_ROOT/caddy/Caddyfile.example" /etc/caddy/Caddyfile # укажите ваш домен в Caddyfile systemctl reload caddy ``` ## 9. Обновление ```bash bash "$SHOP_ROOT/scripts/server-update.sh" ``` ## 10. Архитектура ``` Интернет → Caddy :443 → 127.0.0.1:3000 (Node.js) ↓ PostgreSQL 127.0.0.1:5432 ``` ## 11. Резервное копирование ```bash sudo -u postgres pg_dump shop > shop_backup_$(date +%F).sql ```