Visi raksti
Next.js deployment on Apache2 server with Linux terminal
  • Next.js
  • Apache
  • Deployment
  • SSL
  • Node.js

Next.js izvietošana ar Apache2

Visaptveroša rokasgrāmata Next.js lietotnes izvietošanai serverī ar Apache2 – gan standarta Node.js, gan statiskās eksportēšanas varianti ar SSL.

2 min lasīšana

Izmanto šo rokasgrāmatu, lai izvietotu savu Next.js lietotni uz paša servera ar Apache2. Tiek aplūkoti divi izvietošanas veidi: standarta Node.js izvietošana ar pilnu SSR atbalstu un statiskā eksportēšana vienkāršākiem uzstādījumiem.

Standarta izvietošana ar Node.js

Izvietojiet lietotni ar pilnu serverpuses renderēšanu, API maršrutiem un starpprogrammatūru.

1. Next.js lietotnes būvēšana

Būvē lokāli pirms failu pārsūtīšanas uz serveri:

# Dodies uz projekta mapi
cd your-next-app

# Instalē atkarības, ja vēl nav izdarīts
npm install

# Būvē lietotni
npm run build

# Tiek izveidota .next mape ar salikto lietotni

2. Failu pārsūtīšana uz serveri

Izmanto SCP, SFTP vai citu failu pārsūtīšanas metodi:

# Piemērs ar SCP (izpildi no lokālā datora)
scp -r .next package.json package-lock.json public next.config.js lietotajvards@servera-ip:/cels/uz/lietotni

3. Atkarību instalēšana serverī

Pieslēdzies serverim ar SSH un instalē ražošanas atkarības:

cd /cels/uz/lietotni
npm install --production

4. Apache iestatīšana ar apgriezto starpniekserveri

Aktivizē nepieciešamos Apache moduļus:

sudo a2enmod proxy
sudo a2enmod proxy_http
sudo a2enmod proxy_wstunnel  # WebSocket atbalstam
sudo a2enmod rewrite

Izveido virtuālā resursdatora konfigurācijas failu:

sudo nano /etc/apache2/sites-available/nextjs.conf

Pievieno šo konfigurāciju (pielāgo domēna nosaukumus):

<VirtualHost *:80>
    ServerName yourdomain.com
    ServerAdmin webmaster@yourdomain.com

    # Pārsūta visus pieprasījumus uz Next.js serveri
    ProxyPreserveHost On
    ProxyPass / http://localhost:3000/
    ProxyPassReverse / http://localhost:3000/

    # WebSocket atbalsts
    RewriteEngine On
    RewriteCond %{HTTP:Upgrade} =websocket [NC]
    RewriteRule /(.*) ws://localhost:3000/$1 [P,L]

    ErrorLog ${APACHE_LOG_DIR}/nextjs_error.log
    CustomLog ${APACHE_LOG_DIR}/nextjs_access.log combined
</VirtualHost>

Aktivizē vietni un restartē Apache:

sudo a2ensite nextjs.conf
sudo systemctl restart apache2

5. Next.js servera palaišana ar PM2

PM2 uztur Node.js procesu aktīvu un restartē to pēc servera pārstartēšanas:

# Instalē PM2 globāli
sudo npm install -g pm2

# Palaid Next.js lietotni
cd /cels/uz/lietotni
pm2 start npm --name "next-app" -- start

# Saglabā konfigurāciju pārstartēšanas gadījumam
pm2 startup
pm2 save

6. SSL iestatīšana ar Certbot

Iegūsti un instalē bezmaksas Let’s Encrypt sertifikātu:

sudo apt install certbot python3-certbot-apache
sudo certbot --apache -d yourdomain.com

Certbot automātiski atjauninās Apache konfigurāciju, novirzot HTTP uz HTTPS.


Statiskās eksportēšanas izvietošana

Izmanto šo metodi, ja nav nepieciešams SSR, API maršruti vai starpprogrammatūra – Apache tieši apkalpo statiskos HTML failus.

1. Lietotnes konfigurēšana statiskajai eksportēšanai

Pievieno output iestatījumu failā next.config.js:

/** @type {import('next').NextConfig} */
const nextConfig = {
  output: 'export',
}

module.exports = nextConfig

2. Lietotnes būvēšana

npm run build

Tiek izveidota out mape tikai ar statiskiem failiem.

3. Apache konfigurēšana statisko failu apkalpošanai

Izveido virtuālo resursdatoru:

<VirtualHost *:80>
    ServerName yourdomain.com
    ServerAdmin webmaster@yourdomain.com

    DocumentRoot /cels/uz/lietotni/out

    <Directory "/cels/uz/lietotni/out">
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/nextjs_error.log
    CustomLog ${APACHE_LOG_DIR}/nextjs_access.log combined
</VirtualHost>

4. Vietnes aktivizēšana un Apache restartēšana

sudo a2ensite nextjs.conf
sudo systemctl restart apache2

5. SSL iestatīšana

sudo apt install certbot python3-certbot-apache
sudo certbot --apache -d yourdomain.com

Svarīgas piezīmes

  • Serverī jābūt instalētam Node.js. Minimālā versija atkarīga no izmantotās Next.js versijas — aktuālās prasības skatīt oficiālajā Next.js dokumentācijā (tikai standarta izvietošanai).
  • Statiskā eksportēšana neatbalsta SSR, API maršrutus, servera darbības vai starpprogrammatūru.
  • Vides mainīgos iestatī .env.production failā serverī – neiekļauj šo failu versiju kontrolē.
  • Ražošanā vienmēr izmanto HTTPS un ieviesi atbilstošas kešatmiņas stratēģijas.

Bieži uzdotie jautājumi

Vai Apache serverī jābūt instalētam Node.js?

Jā, standarta izvietošanai. Statiskās eksportēšanas gadījumā Apache apkalpo iepriekš izveidotos HTML failus un Node.js izpildlaikā nav nepieciešams.

Vai Next.js API maršruti darbojas ar statisko eksportēšanu?

Nē. API maršruti, servera darbības un starpprogrammatūra prasa Node.js izpildlaiku un nav saderīga ar statisko eksportēšanu. Izmanto standarta izvietošanu, ja lietotne paļaujas uz šīm funkcijām.

Kā pārvaldīt vides mainīgos ražošanā?

Izveido .env.production failu serverī ar attiecīgajiem mainīgajiem. Statiskās eksportēšanas gadījumā klienta pusē izmantotajiem mainīgajiem jābūt ar NEXT_PUBLIC_ prefiksu un pieejamiem būvēšanas laikā, jo tie tiek iegulti JavaScript paketobjektos.