Подтвердить что ты не робот

Как установить приложение MEAN.js(Node.js) в производственную среду

Стек MEAN.JS предлагает задачу "grunt build" для подготовки приложения к Production. К сожалению, информация о последующих шагах отсутствует. На самом деле неясно, как развернуть приложение для производства и как его запустить.

Вопрос № 1 Что нужно настроить в проекте в дополнение к изменениям в config/env/production.js? Например. как работать с пользовательскими шрифтами?

Вопрос № 2 ОК. Код развернут в Production (через Git, rsync и т.д.). Достаточно ли запустить его как

 $NODE_ENV=production node server.js& 
4b9b3361

Ответ 1

Я рекомендую выполнить следующие шаги для развертывания в рабочей среде:

  • Дважды проверьте конфигурационный файл /config/env/production.js и включите все активы, которые вы добавили вручную, в /config/env/all.js. Это хороший подход к использованию мини-версий для производства.

  • (Необязательно) Если у вас есть пользовательские шрифты в приложении, я рекомендую обновить файл gruntfile.js и добавить задачу, которая скопирует шрифты в папку /public/dist/. Я сделал следующие изменения:

    copy: {
        main:{
            expand: true,
            flatten: true,
            src: ['public/modules/core/fonts/*'],
            dest: 'public/dist/',
            filter: 'isFile'
        }
    },
    
    ...
    // Build task(s).
    grunt.registerTask('build', ['lint', 'loadConfig', 'ngmin', 'uglify', 'cssmin', 'copy']);
    

    Задача копирования требует установки модуля grunt-copy

  • Теперь пришло время сделать отдельные файлы application.js, application.min.js и application.min.css для производства (см. папку /public/dist). Запуск в папке приложения

    $grunt build
    
  • Скопировать файлы на рабочий сервер. Я предпочитаю использовать развертывание GIT push. Он отправляет серверу только дополнительные изменения. Если вы используете GIT для push-развертывания, ему необходимо добавить все файлы из папки `/public/dist/'в репозиторий.

  • Поскольку вы используете express.js в своем проекте, достаточно использовать команду

    $NODE_ENV=production node server.js&
    

    Я знаю, что некоторые разработчики используют forever (модуль для node.js), но я предпочитаю использовать UPSTART (демон на основе событий), который по умолчанию используется в Ubuntu как системная служба. Я создаю файл конфигурации в папке /etc/init, например. /etc/init/my-app.conf. После этого я могу начать, остановить, перезагрузить приложение в качестве сервиса. Например. сервис my-app start | stop | restart

    UPSTART будет отслеживать и перезапускать службу в случае сбоя (см. команду respawn в конфигурации UPSTART). Подробный ответ можно найти, как сделать конфигурационный файл UPSTART: upstart script для node.js

  • (Необязательно, но рекомендуется) Установите nginx перед Node.js. С другой стороны, рекомендуется использовать веб-приложение под непривилегированным пользователем из-за соображений безопасности, с другой стороны, если вы хотите использовать порт 80 (это порт по умолчанию для протокола http) для вашего веб-приложения (например, http://my-app-domain.com/ вместо http://my-app-domain.com:3000/) такая конфигурация может быть сложной. Из-за этого я использую Nginx (порт 80) перед моим веб-приложением, которое фактически работает на порту, доступном для непривилегированного пользователя (например, 3000).

    6а. Вместо Nginx вы можете использовать Varnish