Как обслуживать приложение React с Django на Elasti c Beanstalk? - PullRequest
1 голос
/ 17 апреля 2020

Раньше у меня было приложение на Heroku, и там у меня было 2 билда. Один для NodeJS и один для Python. Heroku запустил npm run build, а затем Django подал файлы из папки build.

Я использую Code Pipeline на AWS для развертывания новой версии моего приложения каждый раз, когда появляется новая версия sh в моем репозитории GitHub.

Поскольку я не мог понять, как запустить npm run build в среде python в EB, у меня был обходной путь. Я запустил npm run build и поместил его в свой репозиторий (удалил папку build из .gitignore), а затем Django обслужил файлы на EB.

Однако это не лучшее решение, и я был Интересно, знает ли кто-нибудь, как запустить npm run build так, как Heroku может сделать это с помощью NodeJS buildpack для приложения python на EB.

Ответы [ 2 ]

0 голосов
/ 26 апреля 2020

Итак, я нашел одно решение, которое сработало для меня.

Поскольку я хочу создать сборочную версию своего приложения на сервере так, как Heroku делает это с помощью NodeJS buildpack, мне пришлось создать команда, которая устанавливает узел следующим образом:

container_commands:
  01_install_node:
    command: "curl -sL https://rpm.nodesource.com/setup_12.x | sudo bash - && sudo yum install nodejs"
    ignoreErrors: false

И затем, чтобы создать версию сборки приложения реакции на Python среде EB, я добавил следующую команду:

container_commands:
  02_react:
    command: "npm install && npm run build"
    ignoreErrors: false

Конечно, после создания версии сборки вы должны собрать stati c файлы, так вот как мой рабочий файл конфигурации выглядел в конце:

option_settings:
  aws:elasticbeanstalk:container:python:
    WSGIPath: <project_name>/wsgi.py

  aws:elasticbeanstalk:application:environment:
    DJANGO_SETTINGS_MODULE: <project_name>.settings

  aws:elasticbeanstalk:container:python:staticfiles:
    /static/: staticfiles/

container_commands:
  01_install_node:
    command: "curl -sL https://rpm.nodesource.com/setup_12.x | sudo bash - && sudo yum install nodejs"
    ignoreErrors: false

  02_react:
    command: "npm install && npm run build"
    ignoreErrors: false

  03_collectstatic:
    command: "django-admin.py collectstatic --noinput"

Надеюсь, это поможет любому, кто сталкивается с то же самое 101

0 голосов
/ 17 апреля 2020

Я не знаю точно Python, но, думаю, вы можете приспособиться к вашему случаю.

Elasti c Beanstalk для Node.js использования платформы по умолчанию app.js, затем server.js, а затем npm start (в таком порядке) для запуска приложения.

Вы можете изменить это поведение с помощью файлов конфигурации . Ниже приведены шаги для выполнения sh с Node.js:

  1. Создайте следующий файл .ebextensions/<your-config-file-name>.config со следующим содержимым:
    option_settings:
      aws:elasticbeanstalk:container:nodejs:
        NodeCommand: "npm run eb:prod"
    
  2. Отредактируйте package.json, чтобы создать команда eb:prod. Например:
    "scripts": {
      "start": "razzle start",
      "build": "razzle build",
      "test": "razzle test --env=jsdom",
      "start:prod": "NODE_ENV=production node build/server.js",
      "eb:prod": "npm run build && npm run start:prod"
    }
    
  3. Возможно, вы столкнулись с ошибками отказа в разрешении во время сборки. Чтобы решить эту проблему, вы можете создать файл .npmrc со следующим содержимым:
    # Force npm to run node-gyp also as root
    unsafe-perm=true
    

Если вам нужны подробности, я написал об этом в блоге: Я развернул серверную часть Реагируйте приложение с AWS Elasti c Beanstalk. Вот что я узнал.

...