-
Release 0.20.0 Stable
released this
2026-05-17 08:41:32 +00:00 | 28 commits to main since this releaseShop
v0.20.0 — интернет-магазин на Node.js и PostgreSQL 17.
Два способа установки: Docker Compose | без Docker (Ubuntu)
Подробности релиза: CHANGELOG.md · docs/RELEASE-0.20.md
Wiki (установка): https://git.evilfox.cc/test/shop10/wiki
Возможности
- Каталог товаров с категориями и поиском
- Корзина и оформление заказа
- Регистрация, вход, сброс пароля по email
- Личный кабинет: профиль, бронирования
- Роли клиент / администратор, админ-панель
- Согласие на cookies
Требования
- Node.js 18+ и PostgreSQL 17 — или Docker / Docker Compose
Docker Compose (рекомендуется для теста)
Полный стек: PostgreSQL 17 + приложение Node.js.
cp .env.docker.example .env # Отредактируйте SESSION_SECRET в .env docker compose up -d --build docker compose ps curl -s http://127.0.0.1:3000/healthСайт: http://localhost:3000
Команда Описание docker compose up -d --buildСборка и запуск docker compose logs -f appЛоги приложения docker compose downОстановка docker compose down -vОстановка + удаление БД Caddy в Docker (HTTPS, опционально)
# В .env: TRUST_PROXY=1 # Отредактируйте caddy/Caddyfile.docker.example (домен) docker compose --profile proxy up -d --buildПорты: 80, 443 (Caddy) →
app:3000.Только PostgreSQL (разработка на хосте)
docker compose -f docker-compose.dev.yml up -d cp .env.example .env # DATABASE_URL=postgresql://shop:shop@127.0.0.1:5432/shop npm install && npm run devФайлы
Файл Назначение DockerfileОбраз приложения docker-compose.ymlapp + postgres (+ caddy с профилем proxy)docker-compose.dev.ymlтолько postgres для npm run dev.env.docker.exampleпеременные для compose
PostgreSQL 17 (без Docker)
Ubuntu (сервер)
apt update apt install -y postgresql-17 postgresql-client-17 systemctl enable postgresql systemctl start postgresqlЕсли пакета
postgresql-17нет в репозитории Ubuntu, подключите 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Пользователь и база
shop:cd /opt/shop bash scripts/setup-postgres-ubuntu.shСхема:
postgres/init/01_schema.sql(применяется при старте приложения).Сессии — таблица
sessionв PostgreSQL (создаётся автоматически).
Быстрый развёртывание на Ubuntu
# 1. Система + Node.js 20 apt update apt install -y git curl curl -fsSL https://deb.nodesource.com/setup_20.x | bash - apt install -y nodejs # 2. PostgreSQL 17 apt install -y postgresql-17 postgresql-client-17 # 3. Код cd /opt git clone <URL_РЕПОЗИТОРИЯ> shop cd shop # 4. БД bash scripts/setup-postgres-ubuntu.sh # 5. Окружение cp .env.example .env sed -i "s/change-me-to-a-long-random-string/$(openssl rand -hex 32)/" .env # Проверьте DATABASE_URL в .env # 6. Приложение npm install --omit=dev npm startПроверка:
curl -s http://127.0.0.1:3000/health # {"ok":true,"service":"shop","database":"postgresql"}Переменные
.envPORT=3000 HOST=127.0.0.1 NODE_ENV=production TRUST_PROXY=1 SESSION_SECRET=длинный-секрет DATABASE_URL=postgresql://shop:shop@127.0.0.1:5432/shopПеременная Описание DATABASE_URLСтрока подключения PostgreSQL PGHOST,PGPORT,PGUSER,PGPASSWORD,PGDATABASEАльтернатива DATABASE_URLHOST127.0.0.1в production (доступ через Caddy)
Запуск как служба (systemd)
cp /opt/shop/deploy/shop.service /etc/systemd/system/shop.service cd /opt/shop cp .env.example .env # при первой установке # Заполните SESSION_SECRET и DATABASE_URL npm install --omit=dev # Не делайте chown -R www-data на весь /opt/shop (ломает git pull) systemctl daemon-reload systemctl enable shop systemctl start shop journalctl -u shop -fEnvironmentFile=/opt/shop/.envдолжен содержатьDATABASE_URL.
Проверка после установки
systemctl restart shop sleep 1 curl -s http://127.0.0.1:3000/health ss -tlnp | grep 3000 journalctl -u shop -n 5 --no-pager # Магазин: http://127.0.0.1:3000 (PostgreSQL)
Обновление на сервере (git pull)
cd /opt/shop git config --global --add safe.directory /opt/shop bash scripts/server-update.shСкрипт:
git pull→npm install→ проверка PostgreSQL →restart shop→curl /health→reload caddy.Вручную:
cd /opt/shop git pull npm install --omit=dev systemctl restart shop curl -s http://127.0.0.1:3000/health systemctl reload caddy
Переход с SQLite на PostgreSQL 17
Если сервер уже работал на старой версии (файлы
data/*.db):# 1. PostgreSQL apt install -y postgresql-17 postgresql-client-17 systemctl start postgresql # 2. Код cd /opt/shop git config --global --add safe.directory /opt/shop git pull # 3. База shop bash scripts/setup-postgres-ubuntu.sh # 4. .env — обязательно DATABASE_URL cp -n .env.example .env nano .env # DATABASE_URL=postgresql://shop:shop@127.0.0.1:5432/shop # HOST=127.0.0.1 # NODE_ENV=production # TRUST_PROXY=1 # 5. Зависимости и перезапуск npm install --omit=dev systemctl restart shop # 6. Проверка curl -s http://127.0.0.1:3000/health systemctl reload caddyКаталог
data/больше не используется. Демо-товары появятся при пустой таблицеproducts. Аккаунты и заказы из SQLite не переносятся — нужна повторная регистрация или ручной импорт.Проверка PostgreSQL:
psql "postgresql://shop:shop@127.0.0.1:5432/shop" -c '\dt'
Caddy — SSL и reverse proxy
Перед Caddy:
curl http://127.0.0.1:3000/health→ OK.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 caddy validate --config /etc/caddy/Caddyfile systemctl enable caddy systemctl reload caddyПример
Caddyfile:{ email admin@example.com } shop.example.com { encode gzip zstd reverse_proxy 127.0.0.1:3000 }Порты 80/443 открыть; 5432 и 3000 наружу не публиковать.
Ошибка
ECONNREFUSED 127.0.0.1:5432Приложение обновилось на PostgreSQL, а сервер БД не запущен.
Быстрое исправление (одной командой):
cd /opt/shop git pull bash scripts/fix-db-connection.shВручную:
apt install -y postgresql-17 postgresql-client-17 systemctl enable --now postgresql pg_isready -h 127.0.0.1 -p 5432 cd /opt/shop bash scripts/setup-postgres-ubuntu.sh nano .env # DATABASE_URL=postgresql://shop:shop@127.0.0.1:5432/shop cp deploy/shop.service /etc/systemd/system/shop.service systemctl daemon-reload systemctl restart shop curl -s http://127.0.0.1:3000/healthHTTP 502
bash /opt/shop/scripts/diagnose-502.sh journalctl -u shop -n 50 --no-pagerПричина Решение ECONNREFUSED 127.0.0.1:5432PostgreSQL не запущен или не установлен — см. ниже PostgreSQL не запущен systemctl enable --now postgresqlНеверный DATABASE_URLпроверить .env,psqlNode не слушает 3000 journalctl -u shop -fCaddy без backend сначала curl /health, потомreload caddy
Локальная разработка
docker compose -f docker-compose.dev.yml up -d cp .env.example .env npm install npm run devСкрипты npm
Команда Описание npm startЗапуск сервера npm run devС автоперезагрузкой npm run seedДемо-товары (если каталог пуст) Структура
Dockerfile docker-compose.yml docker-compose.dev.yml postgres/init/01_schema.sql caddy/Caddyfile.example caddy/Caddyfile.docker.example deploy/shop.service scripts/ setup-postgres-ubuntu.sh fix-db-connection.sh diagnose-502.sh server-update.sh src/Релиз 0.20.0
git clone <URL_РЕПОЗИТОРИЯ> shop cd shop git checkout v0.20.0Способ Команда Docker docker compose up -d --buildБез Docker bash scripts/setup-postgres-ubuntu.sh→systemctl start shopРепозиторий
git clone <URL_РЕПОЗИТОРИЯ> shop cd shopDownloads