HeagBoKaT 852e0f5f5b fix: rate limiter was blocking all /api/cats reads after 10 requests
uploadLimiter now only applies to POST /api/cats (uploads), not GET
reads — previously users were getting 429 after ~10 page navigations.
Also remove duplicate file input in ProfilePage and cancel stale rAF
on route transition cleanup.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-26 09:45:35 +03:00
2026-05-29 10:23:25 +03:00
2026-05-29 10:23:25 +03:00
2026-05-29 10:23:25 +03:00

Котограм

Сайт для публикации фотографий котов. 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.
Обязательно смените пароль через интерфейс или напрямую в БД.

Description
No description provided
Readme 938 KiB
Languages
TypeScript 91.8%
CSS 6.8%
Shell 0.9%
HTML 0.5%