Nextjs wdrożenie na serwer

1. Zainstaluj Node.js i npm

Apache2 nie obsługuje natywnie Node.js, więc musisz zainstalować środowisko uruchomieniowe dla Next.js:

  • Zaktualizuj pakiety:
sudo apt update
  • Zainstaluj Node.js (zalecam wersję LTS, np. 20.x w marcu 2025):
    curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
    sudo apt install -y nodejs
  • Sprawdź wersje:
    node -v
     npm -v

2. Skopiuj projekt Next.js na serwer

  • Użyj Git lub SCP, aby przesłać pliki projektu na serwer. Na przykład:
  • Użyj Git lub SCP, aby przesłać pliki projektu na serwer. Na przykład:
    git clone <twoje-repo> /var/www/next-app
    cd /var/www/next-app
  • Zainstaluj zależności:
    npm install

3. Zbuduj aplikację

  • W katalogu projektu wykonaj:
    npm run build

    To wygeneruje zoptymalizowane pliki w folderze .next.

4. Uruchom aplikację Next.js

  • Standardowo Next.js działa na porcie 3000. Uruchom ją:
npm run start

ednak aby działała w tle, użyj menedżera procesów, np. PM2:

  1. Zainstaluj PM2:
    npm install -g pm2
  2. Uruchom aplikację:
    pm2 start npm --name "next-app" -- run start -- -p 3000

Zapisz konfigurację i ustaw automatyczny start po restarcie serwera:

pm2 save
pm2 startup
    1. (Wykonaj instrukcje wyświetlone po pm2 startup).

5. Skonfiguruj Apache2 jako reverse proxy

Apache2 będzie przekazywał ruch z portu 80 (lub 443, jeśli używasz HTTPS) do Next.js na porcie 3000:

  1. Włącz moduły proxy w Apache2:
    sudo a2enmod proxy proxy_http
  2. Stwórz lub edytuj plik konfiguracyjny witryny, np. /etc/apache2/sites-available/next-app.conf:
<VirtualHost *:80>
ServerName twojadomena.com

ProxyPreserveHost On
ProxyPass / https://localhost:3000/
ProxyPassReverse / https://localhost:3000/

ErrorLog ${APACHE_LOG_DIR}/next-app-error.log
CustomLog ${APACHE_LOG_DIR}/next-app-access.log combined
</VirtualHost>

3. Aktywuj konfigurację:

sudo a2ensite next-app.conf
sudo systemctl restart apache2

4. Sprawdź, czy Apache2 działa poprawnie:

sudo systemctl status apache2

6. (Opcjonalne) Dodaj HTTPS z Let’s Encrypt

Jeśli chcesz zabezpieczyć ruch:

  1. Zainstaluj Certbot:
sudo apt install certbot python3-certbot-apache

2. Wygeneruj certyfikat:

sudo certbot --apache -d twojadomena.com
  1. Certbot automatycznie zaktualizuje konfigurację Apache2, aby używać HTTPS.

7. Sprawdź działanie

  • Otwórz przeglądarkę i wpisz https://twojadomena.com (lub https://, jeśli skonfigurowałeś SSL).
  • Jeśli wszystko działa, Twoja aplikacja Next.js powinna być dostępna.

Uwagi

  • Port 3000: Upewnij się, że port 3000 nie jest blokowany przez zaporę sieciową (np. ufw):
sudo ufw allow 3000

Jednak jeśli używasz Apache2 jako proxy, wystarczy otworzyć port 80 (i 443 dla HTTPS):

sudo ufw allow 80
sudo ufw allow 443
  • Konflikty z Apache2: Jeśli Apache2 obsługuje inne strony, upewnij się, że konfiguracja ServerName jest unikalna i nie koliduje z innymi witrynami.

To wszystko! Twoja aplikacja Next.js powinna teraz działać na serwerze VPS z Debianem i Apache2. Jeśli napotkasz problemy, daj znać, a pomogę je rozwiązać.