Всем привет! Решил сделать небольшую инструкцию как запустить проект 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)


  1. catlover
    20.10.2023 07:26
    +3

    Если оно крутится на локалхосте, это еще не причина запускать это от рута, можно сделать отдельно юзера для этого


    1. spoot1986 Автор
      20.10.2023 07:26

      Согласен!


  1. zodiak
    20.10.2023 07:26
    +3

    Во-первых неплохо бы пробрасывать статику силами nginx без участия ноды

    Во-вторых делать свою службу для каждого проекта выглядит выстрелом из пушки по воробьям

    В-третьих при такой схеме нода все равно будет однопоточной и под нагрузкой быстро сдуется

    По 2 и 3 пунктам рекомендую посмотреть на pm2 и его методы реализации параллельности.


    1. spoot1986 Автор
      20.10.2023 07:26
      -1

      Хорошие и конструктивные замечания) Спасибо)) Как раз то что мне нужно было!!!


  1. savostin
    20.10.2023 07:26

    Ожидал увидеть ну, хотя бы Docker (compose)... Но видно это больно сложно ;)


    1. spoot1986 Автор
      20.10.2023 07:26
      -2

      А Вы напишите свою статью и мы все посмотрим. Или ссылку на уже существующую скинте. Было бы не плохо)


  1. gBACTAKAHA
    20.10.2023 07:26
    +1

    Чем вариант через pm2 плох?


    1. spoot1986 Автор
      20.10.2023 07:26

      Я попробу. Спасибо.


  1. rubinstein
    20.10.2023 07:26

    Зачем вообще нужен nginx, если у вас есть node.js?


    1. spoot1986 Автор
      20.10.2023 07:26
      -1

      Вопрос хороший. Мне просто захотелось проверить можно ли с nginx все запустить. Как видите получилось. Может кому то пригодится.