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>
This commit is contained in:
2026-06-25 23:29:06 +03:00
parent 68c17b16fe
commit e0247bc288
9 changed files with 231 additions and 16 deletions

71
README.md Normal file
View File

@@ -0,0 +1,71 @@
# Котограм
Сайт для публикации фотографий котов. React + Vite (фронт), Express + TypeScript (бэк), SQLite.
## Первый запуск на сервере
```bash
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`)
```env
PORT=3040
JWT_SECRET=заменитеа_случайную_строку_32_символа
ALLOWED_ORIGIN=http://cats.heagbokat-server.ru
```
Сгенерировать JWT_SECRET:
```bash
node -e "console.log(require('crypto').randomBytes(32).toString('hex'))"
```
## Деплой обновлений
```bash
cd /var/www/cats
chmod +x deploy.sh # только первый раз
./deploy.sh
```
Скрипт делает: `git pull` → сборка фронта → перезапуск PM2.
## Управление PM2
```bash
sudo pm2 ps # статус процессов
sudo pm2 logs cats # логи сервера
sudo pm2 restart cats # перезапустить
sudo pm2 stop cats # остановить
```
## Данные (не трогать!)
- `server/data.db` — база данных (пользователи, лайки, коты)
- `server/uploads/` — загруженные изображения
Оба пути в `.gitignore``git pull` их не перезапишет.
## Первый администратор
При первом запуске автоматически создаётся пользователь `admin / admin123`.
**Обязательно смените пароль** через интерфейс или напрямую в БД.