Clone
1
Install-Native
test edited this page 2026-05-17 07:07:17 +00:00
This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

Установка без Docker (Ubuntu)

Production-развёртывание на Ubuntu 22.04 / 24.04: Node.js 20, PostgreSQL 17, systemd, опционально Caddy.

1. Требования

  • Сервер Ubuntu 22.04 или 24.04 (root или sudo)
  • Минимум 1 GB RAM, 10 GB диск
  • Открыты порты 22, 80, 443 (если используете Caddy)
  • Порт 3000 наружу не открывать — только localhost

2. Установка системных пакетов

apt update
apt install -y git curl ca-certificates

Node.js 20 LTS

curl -fsSL https://deb.nodesource.com/setup_20.x | bash -
apt install -y nodejs
node -v   # v20.x

PostgreSQL 17

apt install -y postgresql-17 postgresql-client-17
systemctl enable postgresql
systemctl start postgresql
pg_isready -h 127.0.0.1 -p 5432

Если пакет postgresql-17 не найден — репозиторий PGDG:

apt install -y curl ca-certificates
install -d /usr/share/postgresql-common/pgdg
curl -o /usr/share/postgresql-common/pgdg/apt.postgresql.org.asc --fail \
  https://www.postgresql.org/media/keys/ACCC4CF8.asc
sh -c 'echo "deb [signed-by=/usr/share/postgresql-common/pgdg/apt.postgresql.org.asc] https://apt.postgresql.org/pub/repos/apt $(. /etc/os-release && echo ${VERSION_CODENAME}-pgdg) main" > /etc/apt/sources.list.d/pgdg.list'
apt update
apt install -y postgresql-17 postgresql-client-17

3. Клонирование проекта

cd /opt
git clone https://git.evilfox.cc/test/shop10.git shop
cd shop
git checkout v0.10.0

4. База данных PostgreSQL

cd /opt/shop
bash scripts/setup-postgres-ubuntu.sh

Скрипт:

  • запускает PostgreSQL;
  • создаёт пользователя и БД shop (по умолчанию пароль shopсмените в production);
  • выводит строку DATABASE_URL.

Проверка:

psql "postgresql://shop:shop@127.0.0.1:5432/shop" -c "SELECT 1"

5. Файл окружения .env

cp .env.example .env
nano .env

Обязательные параметры:

PORT=3000
HOST=127.0.0.1
NODE_ENV=production
TRUST_PROXY=1
SESSION_SECRET=сгенерируйте_длинную_строку
DATABASE_URL=postgresql://shop:ВАШ_ПАРОЛЬ@127.0.0.1:5432/shop

Секрет сессии:

openssl rand -hex 32

HOST=127.0.0.1 — приложение доступно только локально; снаружи — через Caddy.

6. Установка зависимостей Node.js

cd /opt/shop
npm install --omit=dev

При первом запуске приложение создаст таблицы и демо-товары (если каталог пуст).

7. Служба systemd

cp /opt/shop/deploy/shop.service /etc/systemd/system/shop.service
systemctl daemon-reload
systemctl enable shop
systemctl start shop
systemctl status shop

Unit ждёт PostgreSQL (ExecStartPre + pg_isready) и запускает Node от пользователя www-data.

Важно: не выполняйте chown -R www-data /opt/shop — это ломает git pull. Права на запись нужны только для каталога data/ (если используется); с PostgreSQL каталог data/ не обязателен.

Логи:

journalctl -u shop -f

8. Проверка backend

curl -s http://127.0.0.1:3000/health
ss -tlnp | grep 3000

В логах должно быть: Магазин: http://127.0.0.1:3000 (PostgreSQL)

9. Caddy — HTTPS и reverse proxy

Установка Caddy:

apt install -y debian-keyring debian-archive-keyring apt-transport-https
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' \
  | gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' \
  | tee /etc/apt/sources.list.d/caddy-stable.list
apt update && apt install -y caddy

Конфигурация:

cp /opt/shop/caddy/Caddyfile.example /etc/caddy/Caddyfile
nano /etc/caddy/Caddyfile

Пример (замените домен и email):

{
	email admin@example.com
}

shop.example.com {
	encode gzip zstd
	reverse_proxy 127.0.0.1:3000
}
caddy validate --config /etc/caddy/Caddyfile
systemctl enable caddy
systemctl reload caddy

Файрвол:

ufw allow 22/tcp
ufw allow 80/tcp
ufw allow 443/tcp
ufw enable

Зависимость Caddy от shop (опционально):

mkdir -p /etc/systemd/system/caddy.service.d
cp /opt/shop/deploy/caddy-after-shop.conf /etc/systemd/system/caddy.service.d/shop.conf
systemctl daemon-reload

10. Обновление

cd /opt/shop
git config --global --add safe.directory /opt/shop
bash scripts/server-update.sh

Или вручную:

git pull
npm install --omit=dev
systemctl restart shop
curl -s http://127.0.0.1:3000/health
systemctl reload caddy

11. Переход с SQLite (старая версия)

  1. Установите PostgreSQL (шаги 24)
  2. Добавьте DATABASE_URL в .env
  3. git pullnpm installsystemctl restart shop
  4. Демо-товары появятся автоматически; пользователей нужно зарегистрировать заново

Быстрое исправление подключения к БД:

bash /opt/shop/scripts/fix-db-connection.sh

12. Архитектура

Интернет → Caddy :443 → 127.0.0.1:3000 (Node.js shop)
                              ↓
                    PostgreSQL 127.0.0.1:5432

13. Резервное копирование БД

sudo -u postgres pg_dump shop > shop_backup_$(date +%F).sql

Восстановление:

sudo -u postgres psql shop < shop_backup_2026-05-17.sql