Профессиональный сайт команды разработчиков для аутсорсинга.
- Node.js 22.x
- Yarn
- Docker и Docker Compose, если нужен запуск в контейнере
Установите Node.js LTS. На Windows откройте PowerShell и выполните:
winget install --id OpenJS.NodeJS.LTS -eПосле установки закройте и заново откройте PowerShell, затем проверьте версию:
node -v
npm -vЕсли используется nvm, можно поставить Node.js так:
nvm install 22
nvm use 22Перейдите в папку проекта и установите зависимости:
yarn installЗапустите приложение в режиме разработки:
yarn devVite откроет приложение на http://localhost:3000.
Если браузер не открылся автоматически, перейдите по адресу вручную:
http://localhost:3000
API-запросы к /api/* проксируются на http://localhost:3001, поэтому для админки и динамического контента нужно отдельно запустить сервер.
Создайте файл окружения в корне проекта:
cp server/.env.example .envМинимально полезные переменные:
PORT=3001
NODE_ENV=development
SQLITE_PATH=server/data/content.sqlite
API_KEY=your-secret-api-key-hereЗапустите API-сервер из корня проекта:
node server/index.jsПосле этого в отдельном терминале запустите Vite:
yarn devПриложение будет доступно на http://localhost:3000, API — на http://localhost:3001. Проверка API:
curl http://localhost:3001/api/healthАдминка использует Basic Auth. Если ADMIN_USER и ADMIN_PASSWORD не заданы в .env, применяются значения по умолчанию из сервера: adminKor / adminKor.
Соберите приложение:
yarn buildКоманда создает dist/, генерирует статические страницы блога и индекс контента.
Для проверки статической сборки через Vite Preview:
yarn previewPreview будет доступен на http://localhost:4173 и тоже проксирует /api/* на http://localhost:3001.
Для проверки сборки вместе с Express API:
NODE_ENV=production PORT=3001 CONTENT_DIST_ROOT=dist node server/index.jsВ этом режиме сервер отдает собранный сайт из dist/ и API на одном порту: http://localhost:3001.
Соберите и запустите production-контейнер:
docker compose up --build kordevteamПриложение будет доступно на http://localhost:8080. Контейнер запускает Express-сервер, который отдает dist/, API и админские runtime-операции. SQLite и загруженные изображения сохраняются в Docker volumes:
kordevteam_sqlitekordevteam_blog_uploads
Остановить контейнер:
docker compose downЕсли нужно запустить образ из registry, используйте профиль:
docker compose --profile registry up kordevteam-registryОн будет доступен на http://localhost:8081.
| Переменная | Назначение |
|---|---|
PORT |
Порт Express API, по умолчанию 3001, в Docker 80 |
NODE_ENV |
Окружение: development, production, test |
SQLITE_PATH |
Путь к SQLite-файлу с runtime-контентом |
CONTENT_DIST_ROOT |
Путь к dist/, если сервер должен отдавать собранный сайт |
API_KEY |
Bearer-токен для защищенных API операций с постами |
ADMIN_USER / ADMIN_PASSWORD |
Логин и пароль админки |
UPLOAD_MAX_BYTES |
Максимальный размер загружаемого файла |
S3_BUCKET, S3_REGION, S3_PUBLIC_BASE_URL |
Опциональная настройка загрузок в S3 |
# Сборка статичных файлов
yarn build
# Сборка с генерацией статических страниц блога
yarn build:blog
# Файлы будут созданы в папке dist/# Запуск локального сервера для просмотра сборки
yarn preview
# или
yarn serve# Генерация HTML страниц для каждой статьи блога
yarn generate:blog
# Это создаст отдельные HTML файлы:
# - dist/blog/react-native-best-practices.html
# - dist/blog/nodejs-microservices.html
# - dist/blog/wordpress-optimization.html
# - dist/blog/laravel-api-development.html- Подключите репозиторий к Netlify
- Настройки сборки:
- Build command:
yarn build - Publish directory:
dist
- Build command:
- Файл
_redirectsуже настроен для SPA
- Подключите репозиторий к Vercel
- Настройки сборки:
- Build command:
yarn build - Output directory:
dist
- Build command:
- Vercel автоматически настроит SPA роутинг
- Загрузите содержимое папки
dist/на сервер - Для Apache используйте файл
.htaccessиз папкиpublic/ - Для Nginx настройте fallback на
index.html
- Включите GitHub Pages в настройках репозитория
- Выберите папку
distкак источник - Обновите
baseвvite.config.mtsна/repository-name/
В vite.config.mts измените параметр base:
export default defineConfig({
base: "/your-subdirectory/", // для подпапки
base: "https://your-domain.com/", // для абсолютного URL
// ...
});Настройки в vite.config.mts:
target: "es2015"- совместимость с браузерамиminify: "terser"- минификация кодаmanualChunks- разделение кода на чанкиchunkSizeWarningLimit: 1000- лимит размера чанков
dist/ # Собранные статичные файлы
├── index.html # Главная страница
├── assets/ # Статические ресурсы
│ ├── js/ # JavaScript файлы
│ ├── css/ # CSS файлы
│ └── images/ # Изображения
└── favicon.ico # Иконка сайта
# Сборка с source maps
yarn build --sourcemap
# Сборка для конкретной среды
yarn build --mode production- Размер сборки: ~400KB (gzipped: ~125KB)
- Время загрузки: < 2 секунд
- Lighthouse Score: 90+ по всем метрикам
- Поддержка браузеров: ES2015+
- React 18 - UI библиотека
- Vite - сборщик и dev сервер
- TypeScript - типизация
- Tailwind CSS - стилизация
- React Router - роутинг
- Radix UI - компоненты
MIT License