Files
cats/README.md
heagbokat e0247bc288 Fix case-insensitive auth and harden for production
- Fix login/register to treat usernames case-insensitively (HeagBoKaT == heagbokat) using LOWER() in SQL with JS .toLowerCase() for Unicode safety
- Add helmet for HTTP security headers and express-rate-limit on auth endpoints (20 req / 15 min) to prevent brute-force
- Lock CORS to ALLOWED_ORIGIN env var; warn if JWT_SECRET is the default dev key
- Serve built client/dist from Express so a single PM2 process handles everything
- Add deploy.sh, README.md with full first-run and auto-restart instructions, and server/.env.example

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-25 23:29:06 +03:00

2.3 KiB
Raw Blame History

Котограм

Сайт для публикации фотографий котов. React + Vite (фронт), Express + TypeScript (бэк), SQLite.

Первый запуск на сервере

cd /var/www/cats

# 1. Установить зависимости и собрать фронт
npm install --prefix server
npm install --prefix client
npm run build

# 2. Создать файл переменных окружения
cp server/.env.example server/.env
# Отредактировать server/.env: задать JWT_SECRET и ALLOWED_ORIGIN
nano server/.env

# 3. Запустить через PM2
sudo pm2 start npm --name cats -- start

# 4. Зарегистрировать автостарт (один раз на машине)
sudo pm2 startup
# Скопировать и выполнить команду, которую выведет pm2 startup
sudo pm2 save

Переменные окружения (server/.env)

PORT=3040
JWT_SECRET=заменитеа_случайную_строку_32_символа
ALLOWED_ORIGIN=http://cats.heagbokat-server.ru

Сгенерировать JWT_SECRET:

node -e "console.log(require('crypto').randomBytes(32).toString('hex'))"

Деплой обновлений

cd /var/www/cats
chmod +x deploy.sh  # только первый раз
./deploy.sh

Скрипт делает: git pull → сборка фронта → перезапуск PM2.

Управление PM2

sudo pm2 ps              # статус процессов
sudo pm2 logs cats       # логи сервера
sudo pm2 restart cats    # перезапустить
sudo pm2 stop cats       # остановить

Данные (не трогать!)

  • server/data.db — база данных (пользователи, лайки, коты)
  • server/uploads/ — загруженные изображения

Оба пути в .gitignoregit pull их не перезапишет.

Первый администратор

При первом запуске автоматически создаётся пользователь admin / admin123.
Обязательно смените пароль через интерфейс или напрямую в БД.