Разворачивание nextjs на vps c nodejs, двумя сайтами и SSL.
Скачиваем
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.3/install.sh | bash
После установки я запускал
source ~/.nvm/nvm.sh
Ещё пишут про
source ~/.bashrc
Затем выбираете из списка нужную версию или ставите LTS
nvm list-remote
nvm install --lts
nvm use ВАША_НОВАЯ_ВЕРСИЯ
В процессе установки nodejs вылезала ошибка (из-за того что сразу через nvm не начал ставить)
npm -v o/p : Error: bash: /usr/local/bin/npm: No such file or directory
Запустил which npm, затем npm -v отработал корректно и можно было продолжать
npm install pm2 -g
pm2 startup ubuntu
выполнить команду которая появится
pm2 save
Если не установлен Nginx
sudo apt-get update
sudo apt-get install nginx
sudo nano /etc/nginx/sites-available/default
server {
listen 80;
server_name example.com www.example.com;
root /var/www/html;
index index.html index.htm;
location / {
proxy_pass http://127.0.0.1:3000;
proxy_read_timeout 60;
proxy_connect_timeout 60;
proxy_redirect off;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
Перезапускаем nginx
sudo service nginx restart
sudo apt-get install snapd
sudo snap install core; sudo snap refresh core
sudo apt-get remove certbot
sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot
sudo certbot --nginx
sudo certbot renew --dry-run
Проверяем что настроилось
sudo nano /etc/nginx/sites-available/default
Перезагружаем nginx и pm2
sudo systemctl reload nginx
pm2 reload all
Cоздаем папку с проектом, устанавливаем приложение. Заставляем его работать на порту, отличном от 3000.
Для next это команда старта с ключом -p
npx next start -p 4000
и в package.json добавить:
"start": "next start -p 4000"
Я устанавливал Strapi CMS, в корне есть .env файл, там можно изменить константу PORT.
Затем
npm run build
Войти в папку второго сайта
pm2 start npm --name "project_name" -- start
Ещё столкнулся с проблемой редиректа с www на без www. Справился с такой конфигурацией. Оказывается нужно не в 1 сервере писать, а создать 3 варианта.
server {
server_name example.com www.example.com;
listen 80;
return 301 https://example.com$request_uri;
}
server {
server_name www.example.com;
listen 443 ssl;
return 301 https://example.com$request_uri;
}
server {
server_name example.com;
listen 443 ssl;
... настройки обычного сервера ...
}
После каждого пула:
npm run build
pm2 reload all