Выкладка на сервер
На своём компьютере приложение работает через node ace serve: TypeScript компилируется на лету, а Vite раздаёт исходники. На сервере так не делают — там запускают заранее собранный JavaScript. Сборка превращает проект в папку build/, которую можно запустить обычным Node.js.
Сборка
node ace buildКоманда компилирует TypeScript в JavaScript, собирает стили и скрипты через Vite и копирует в build/ всё нужное для работы:
build/
├── app/ config/ start/ скомпилированный код
├── bin/server.js точка входа
├── public/assets/ собранные CSS и JS
├── resources/views/ шаблоны Edge
├── package.json
└── package-lock.jsonПапку node_modules и файл .env сборка не копирует.
Запуск на сервере
Скопируйте папку build/ на сервер и выполните в ней:
cd build
npm ci --omit=dev
node bin/server.jsnpm ci --omit=dev ставит только рабочие зависимости, без инструментов разработки. После третьей команды сервер слушает порт из переменной PORT.
Переменные окружения
На сервере создайте .env рядом с bin/server.js или задайте переменные средствами хостинга:
NODE_ENV=production
PORT=3333
HOST=0.0.0.0
APP_KEY=другой-длинный-случайный-ключ
LOG_LEVEL=info
SESSION_DRIVER=cookie
DB_HOST=127.0.0.1
DB_USER=blog
DB_PASSWORD=secret
DB_DATABASE=blogHOST=0.0.0.0 открывает сервер для внешних подключений, а не только для localhost. APP_KEY на сервере должен быть свой и постоянный: если его поменять, все пользователи выйдут из аккаунтов.
Миграции
Перед первым запуском и после каждого обновления примените миграции:
node ace migration:run --forceФлаг --force нужен потому, что в режиме production Ace по умолчанию отказывается менять базу — это защита от случайного запуска.
Процесс должен жить постоянно
Если закрыть терминал, node bin/server.js остановится. Чтобы сервер работал всегда и перезапускался после сбоев, используют менеджер процессов, например PM2:
npm install -g pm2
pm2 start bin/server.js --name blogПеред Node.js обычно ставят Nginx: он принимает запросы на портах 80 и 443, отвечает за HTTPS и передаёт их приложению на порт 3333.
Порядок обновления
- На своём компьютере:
node ace build. - Скопировать
build/на сервер. - На сервере:
npm ci --omit=dev. node ace migration:run --force.pm2 restart blog.
Частая ошибка
Загруженные файлы и база SQLite лежат внутри папки, которую заменяют при обновлении, — и после выкладки обложки статей пропадают. Храните storage/ и файл базы вне папки сборки (укажите полный путь в настройках) или используйте PostgreSQL и облачное хранилище Drive.