Всем привет! Решил сделать небольшую инструкцию как запустить проект Next JS на сервере. Я использовал Ubuntu 22.04 и Nginx.
1. Инсталим nginx
sudo apt-get update
sudo apt-get install nginx
редактируем nginx/sites-available/default
server {
server_name domen.ru;
location / {
include proxy_params;
proxy_pass http://127.0.0.1:3000;
}
listen 80;
}
2. Инсталим Node JS
sudo apt install curl
curl https://raw.githubusercontent.com/creationix/nvm/master/install.sh | bash
source ~/.profile
install 18.4.0
3. Инсталим и настраиваем GIT
apt install git
git init
git remote add origin https://наш_гит.ru/репа.git
git config --global credential.helper store
git fetch
git pull origin master
4. Авто старт
Создаем службу /etc/systemd/system/next.service
[Unit]
Description=Next JS
After=network.target
[Service]
User=root
ExecStart=/var/www/наш_проект/start.sh
Restart=always
[Install]
WantedBy=multi-user.target
В каталоге с проектом создаем файлик start.sh
#!/bin/bash
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion
cd /var/www/наш_проект/
/root/.nvm/versions/node/v18.4.0/bin/npm run start
5. Автодеплой
Создаем deploy.sh, его можно запускать через webhook того же gitea.
#!/bin/sh
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion
cd /var/www/наш_проект/
set -e
echo "Deploying application ..."
sudo systemctl stop next
echo "Get from git"
git pull origin master
echo "Building "
/root/.nvm/versions/node/v18.4.0/bin/npm install
/root/.nvm/versions/node/v18.4.0/bin/npm run build
sudo systemctl start next
echo "Application deployed!"
Комментарии (10)
zodiak
20.10.2023 07:26+3Во-первых неплохо бы пробрасывать статику силами nginx без участия ноды
Во-вторых делать свою службу для каждого проекта выглядит выстрелом из пушки по воробьям
В-третьих при такой схеме нода все равно будет однопоточной и под нагрузкой быстро сдуется
По 2 и 3 пунктам рекомендую посмотреть на pm2 и его методы реализации параллельности.
spoot1986 Автор
20.10.2023 07:26-1Хорошие и конструктивные замечания) Спасибо)) Как раз то что мне нужно было!!!
rubinstein
20.10.2023 07:26Зачем вообще нужен nginx, если у вас есть node.js?
spoot1986 Автор
20.10.2023 07:26-1Вопрос хороший. Мне просто захотелось проверить можно ли с nginx все запустить. Как видите получилось. Может кому то пригодится.
catlover
Если оно крутится на локалхосте, это еще не причина запускать это от рута, можно сделать отдельно юзера для этого
spoot1986 Автор
Согласен!