Сайт на NextJS, работающий на Amazon Lightsail, был недоступен через несколько дней. Как мне предотвратить это в будущем?

Вопрос или проблема

На прошлой неделе я создал личный сайт для ярмарки вакансий и потратил много времени, пытаясь сделать его видимым. Мне удалось сделать так, чтобы он был доступен достаточно долго, чтобы показать его всем на ярмарке вакансий, но через шесть дней я писал ссылку на него и, когда попытался протестировать ссылку, получил ошибку 503, что означает, что в течение этого шестидневного периода (я не уверен, когда именно) сервер приложения NextJS вышел из строя, но веб-сервер продолжал работать, и у меня нет представления, почему это произошло.

Вот ситуация (Имейте в виду, это мой первый опыт запуска сайта, так что я, наверное, делаю миллион ошибок):

У меня есть сайт, который я создал с помощью NextJS, потому что хотел использовать React, и именно это рекомендовал документация React.

Я размещаю сайт на экземпляре Amazon Lightsail с шаблоном Node.js (или как это там называлось). Я понимаю, что AWS Amplify специально разработан для NextJS, но Lightsail был дешевле, и я думал, что он лучше подойдет для моих целей, так как – по крайней мере на данный момент – сайт состоит всего из четырех страниц, которые были бы статичными, если бы не React.

Экземпляр Lightsail использует Apache в качестве веб-сервера, и я уже сделал так, чтобы он подавал контент с сервера приложения NPM/NextJS, так что это не проблема (я предполагаю).

Процесс(ы), запущенные командой npm run start, чтобы запустить сервер приложения, не являются программами автозапуска (я думал, что это упростит отладку, поскольку я могу контролировать, когда сервер запускается), и они запускаются с использованием пользователя по умолчанию (пользователь “bitnami”, который был у экземпляра Lightsail), если это имеет значение.

Чтобы сервер работал достаточно долго для ярмарки вакансий, я выполнил эти команды (nohup по какой-то причине не работал у меня, но я не помню, почему):

cd <папка, где находится проект сайта>
npm run start
^z
bg
disown -h

После того, как я узнал, что сайт упал, я написал этот скрипт, чтобы определить, не упал ли он, а затем перезапустить его, если это так, и настроил его на выполнение в качестве cron-задания каждый день в полночь. (Это было временным решением, пока я не найду и не исправлю настоящую проблему.)

#! /bin/bash

if ps -e | grep "npm"
then
    exit
else
    cd <папка, где находится проект сайта>
    npm start & disown
fi

exit

Я был бы признателен, если бы кто-то мог сказать мне, что я делаю не так и что мне следует делать, или, по крайней мере, в чем может быть проблема. Я постараюсь ответить на любые ваши вопросы и предоставить любую информацию, которая вам еще нужна, если смогу разобраться. Заранее спасибо всем.

Ответ или решение

Остановка сайта на Next.js в Amazon Lightsail: причины и решения для стабильной работы

Создание и размещение веб-сайта — это всегда интересный, но порой и сложный процесс, особенно для новичков. Ваша проблема с остановкой Next.js приложения спустя несколько дней — это распространённая ситуация, с которой сталкиваются многие разработчики. Давайте рассмотрим возможные причины этой проблемы и предложим решения, чтобы ваш сайт работал без перебоев.

1. Понимание проблемы

Ошибка 503 (Service Unavailable) указывает на то, что сервер не может обработать запрос, часто из-за перегрузки или проблем с ресурсами. В вашем случае это может быть связано с тем, что сервер Next.js не запускается должным образом, что может происходить по различным причинам, включая сбои в среде выполнения Node.js.

2. Решение проблемы

Чтобы избежать повторения этой ситуации, рекомендуется реализовать несколько более надежных методов для запуска вашего приложения. Вот ключевые шаги:

a. Используйте процессный менеджер

Запуск приложения с помощью команды npm run start напрямую из терминала не является надежным способом, так как процесс может завершиться или быть случайно остановлен. Примените один из популярных процессных менеджеров, таких как PM2. Он следит за вашим приложением и перезапускает его в случае аварийного завершения.

Первостепенный шаг:

npm install -g pm2

После установки PM2 вы можете запустить ваше приложение следующим образом:

cd <папка с проектом>
pm2 start npm --name "nextjs-app" -- run start

Затем сохраните текущее состояние процессов, чтобы они автоматически запускались при сбое экземпляра:

pm2 save
pm2 startup

b. Настройка служб (Система systemd)

Можно рассмотреть создание службы systemd, чтобы управлять вашим приложением. Для этого создайте файл службы:

sudo nano /etc/systemd/system/nextjs-app.service

Заполните его следующим образом:

[Unit]
Description=Next.js Application

[Service]
ExecStart=/usr/bin/npm start
WorkingDirectory=<папка с проектом>
Restart=always
User=bitnami
Environment=PATH=/usr/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
Environment=NODE_ENV=production

[Install]
WantedBy=multi-user.target

После сохранения файла выполните команды для перезапуска системных служб:

sudo systemctl start nextjs-app
sudo systemctl enable nextjs-app

c. Мониторинг и оповещения

Помимо всего вышеперечисленного, рекомендуется настроить мониторинг вашего сервера. Существует множество инструментов, таких как UptimeRobot или Prometheus, которые помогут отслеживать состояние вашего приложения. Настройте оповещения о сбоях, чтобы быстро реагировать на проблемы.

3. Оптимизация вашего подхода к хостингу

Хоть Amazon Lightsail подходит для небольших проектов, возможно, вам стоит рассмотреть более специализированные решения для хостинга приложений на Next.js. Например, AWS Amplify или Vercel предоставляют более простые и надежные способы развертывания приложений Next.js. Они обеспечивают автоматизированное масштабирование, развертывание и другие функции, которые могут значительно упростить вашу жизнь.

4. Заключение

Ваше желание модернизировать и улучшить свои навыки в веб-разработке достойно похвалы. Следуя представленным рекомендациям, вы сможете обеспечить надежность своего сайта и избежать неприятных ситуаций в будущем. Правильное использование процессных менеджеров, систем контроля состояния и возможная миграция на более специализированные платформы — все это поможет вам в создании успешного веб-приложения. Удачи в ваших начинаниях!

Оцените материал
Добавить комментарий

Капча загружается...