# Środowisko produkcyjne - SSR

# NVM

Na serwerze niezbędny jest Node.js, dlatego dobrym rozwiązaniem jest użycie NVM (opens new window) (Node Version Manager), który oferuje obsługę wielu wersji Node'a w jednym środowisku.

# Instalacja

  • Instalacja lub aktualizacja odbywa się za pomocą skryptu instalacyjnego. Wartość v0.39.7 zastąp aktualną wersją skryptu.
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash

lub

wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
  • Po instalacji należy wczytać zawartość profilu użytkownika np.
source ~/.bash_profile

Lub można zresetować połączenie i ponownie się zalogować do ssh.

  • Żeby sprawdzić czy instalacja przebiegła pomyślnie można wykonać komendę:
nvm -v

# Node.js

  • Sprawdzenie dostępnych wersji Node'a:
nvm ls-remote
  • Wybieramy interesująca nas wersję (najlepiej LTS) oraz instalujemy poleceniem:
nvm install 18

# PM2

PM2 (opens new window) to menedżer procesów dla projektów Node.js, który pomaga w zarządzaniu aplikacjami oraz utrzymuje je online 24/7.

  • instalacja globalnie dla użytkownika poprzez npm
npm install pm2@latest -g
  • utworzenie pliku konfiguracyjnego w katalogu projektu (ecosystem.config.js)
module.exports = {
  apps : [{
    name   : "ProjectName",
    script : "npm start",
    env: {
      PORT: "3000"
    }
  }]
}
  • jeżeli na serwerze znajduje się wiele projektów tego typu należy pamiętać o tym, że trzeba dostosować port dla procesu npm start tak aby się nie powtarzał

  • uruchomienie serwera (uruchamiamy polecenie w katalogu projektu)

pm2 start ecosystem.config.js
  • zapisanie listy procesów do automatycznego uruchamiania
pm2 save
pm2 startup

# Apache

# .htaccess

DirectoryIndex disabled
RewriteEngine On
RewriteRule ^$ http://localhost:NR_PORTU/ [P,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ http://localhost:NR_PORTU/$1 [P,L]

# Virtual Host

ProxyPreserveHost On
ProxyPass / http://localhost:NR_PORTU/
ProxyPassReverse / http://localhost:NR_PORTU/