Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Оглавление

Выкладка на сервер

На своём компьютере приложение работает через 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.js

npm 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=blog

HOST=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.

Порядок обновления

  1. На своём компьютере: node ace build.
  2. Скопировать build/ на сервер.
  3. На сервере: npm ci --omit=dev.
  4. node ace migration:run --force.
  5. pm2 restart blog.

Частая ошибка

Загруженные файлы и база SQLite лежат внутри папки, которую заменяют при обновлении, — и после выкладки обложки статей пропадают. Храните storage/ и файл базы вне папки сборки (укажите полный путь в настройках) или используйте PostgreSQL и облачное хранилище Drive.

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.