Как вручную развернуть Angular 18 SSR на Nginx

Вопрос или проблема

Я создал проект home-aap с использованием Angular 18 и включенным SSR. Теперь Angular 18 поддерживает встроенный SSR, поэтому после выполнения ng build были созданы следующие папки:

/var/www/dist/home-app/browser

/var/www/dist/home-app/server

Ниже приведена конфигурация home-config для Nginx:

server {
    listen 80;
    server_name localhost; # Измените на ваш домен

    # Обслуживание статических файлов прямо из сборки браузера
    location / {
        root /var/www/dist/home-app/browser; # Настройте на ваш фактический путь
        try_files $uri $uri/ /index.html; # Резервный вариант на index.html для SPA
    }

    # Обслуживание динамического контента SSR для конкретных маршрутов
    location /ssr {
        proxy_pass http://localhost:4000; # Node сервер
        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;
    }
}

Это успешно связано в папке sites-enabled:

Также, server.mjs работает на localhost:4000:

Так что, если я посещаю localhost, Nginx выдает 403:

Но если я посещаю http://localhost:4000/, приложение загружается успешно:

Но почему оно не загружается на localhost.
Я проверил официальную страницу Angular, но там не так много информации о ручном развертывании на сервере или VPS.
https://angular.dev/tools/cli/deployment

Будет действительно полезно, если кто-нибудь подскажет, как правильно развернуть Angular 18 с активированным SSR на Nginx на сервере/VPS вручную.

Заранее спасибо.

Ответ или решение

Как вручную развернуть Angular 18 с SSR на Nginx

Введение

Разработка приложения на Angular 18 с включенной серверной стороной рендеринга (SSR) может предоставить пользователям улучшенный опыт за счет более быстрой загрузки страниц и лучшей индексации поисковыми системами. Однако успешное развертывание на сервере, например, с использованием Nginx, может вызвать некоторые сложности, особенно для начинающих. В этом руководстве мы подробно рассмотрим, как настроить ваше Angular приложение с SSR на Nginx, учитывая ваш текущий опыт.

Шаг 1: Проверка структуры проекта

После выполнения команды ng build у вас должны быть созданы две папки в директории /var/www/dist/home-app:

  • browser — для статических файлов приложения.
  • server — для серверного кода (включая файл server.mjs).

Убедитесь, что структура каталогов выглядит следующим образом:

/var/www/dist/home-app/
    ├── browser/
    └── server/

Шаг 2: Настройка Nginx

Ваша текущая конфигурация Nginx, созданная в файле home-config, выглядит почти правильно, но имеет некоторые проблемы:

server {
    listen 80;
    server_name localhost;  # Измените на ваш домен

    # Обработка статических файлов приложения
    location / {
        root /var/www/dist/home-app/browser;  # Путь к статическим файлам
        try_files $uri $uri/ /index.html;  # Фолбек на index.html для SPA
    }

    # Обработка динамического контента SSR
    location /ssr {
        proxy_pass http://localhost:4000;  # Проксирование на Node сервер
        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;
    }
}

Важные моменты:

  1. Путь к статическим файлам: Убедитесь, что права доступа на папку /var/www/dist/home-app/browser такие, чтобы Nginx мог их читать. Если возникают ошибки 403, это часто связано с недостаточными правами на чтение директории.

    sudo chown -R www-data:www-data /var/www/dist/home-app
    sudo chmod -R 755 /var/www/dist/home-app
  2. Проверка конфигурации Nginx: После изменения конфигурационного файла проверьте конфигурацию на наличие ошибок:

    sudo nginx -t

    Если ошибок нет, перезапустите Nginx:

    sudo systemctl restart nginx

Шаг 3: Запуск серверной части

Убедитесь, что ваш серверный код (например, server.mjs) запущен на порту 4000. Вы можете использовать node server/server.mjs для запуска, но рекомендуется использовать менеджеры процессов такие как pm2, чтобы поддерживать приложение в работоспособном состоянии:

npm install -g pm2
pm2 start server/server.mjs --name "home-app-server"

Шаг 4: Доступ к приложению

Теперь, когда Nginx и серверная часть вашего приложения настроены, вы должны иметь возможность получить доступ к вашему приложению. Попробуйте:

  • Перейдите по адресу http://localhost для доступа к статическим файлам.
  • Перейдите по адресу http://localhost/ssr для динамического контента от SSR.

Если после этих шагов приложение все еще не загружается, проверьте логи Nginx и сервера на наличие ошибок:

sudo tail -f /var/log/nginx/error.log
pm2 logs home-app-server

Заключение

Развертывание Angular 18 с SSR на Nginx требует тщательной настройки конфигурации сервера и прав доступа к файловой системе. Надеюсь, данное руководство поможет вам успешно развернуть ваше приложение. Если у вас возникли дополнительные вопросы или проблемы, обратитесь к документации Angular или сообществу.

Оцените материал
Добавить комментарий

Капча загружается...