Введение

Последним шагом в жизненном цикле разработки является развертывание. В этой статье мы поговорим обо всем, что вам нужно для развертывания вашего проекта на Heroku. Хотя эта статья конкретно посвящена ReactT и Sequelize, многие шаги одинаковы при использовании ReactJ и других ORM.

Что вам нужно для начала

Во-первых, если вы еще этого не сделали, убедитесь, что ваш проект настроен с помощью git. Это включает в себя наличие файла .gitignore с node_modules внутри. После этого убедитесь, что вы используете прокси-сервер для всех ваших запросов на выборку и что в папке вашего клиента ваш package.json запускает сервер реагирования на указанном порту. Скрипт должен выглядеть так:

"scripts": {
    "start": "PORT=4000 react-scripts start",
    "build": "react-scripts build",
    "test": "react-scripts test",
    "eject": "react-scripts eject"
  },

Далее вам нужно создать учетную запись Heroku. После создания учетной записи вам необходимо связать свою учетную запись локально. Это можно сделать так:

npm install -g heroku

heroku login -i

На этом этапе вам будет предложено ввести адрес электронной почты и пароль. Если вы используете двухфакторную аутентификацию, вам нужно будет ввести свой адрес электронной почты и ввести ключ API в качестве пароля. Ваш API-ключ Heroku можно найти по адресу https://dashboard.heroku.com/account. Прокрутите вниз до API-ключа и скопируйте его. После успешного входа в систему вы можете создать свой проект Heroku.

heroku create -a example-app

Наконец, создайте базу данных PostgreSQL. По состоянию на ноябрь 2022 года бесплатных вариантов для PostgreSQL больше нет. Вы можете создать базу данных, введя:

heroku addons:create heroku-postgresql:mini   

Теперь все готово для подключения вашего проекта к Heroku.

Подключение вашего проекта

Чтобы вы могли развернуть свой проект, Heroku должен иметь файл package.json в корне вашего проекта. В этом руководстве мы переместим весь код из папки вашего сервера в корневую папку и удалим пустую папку сервера. После того, как вы переместили код в корневую папку, вам нужно открыть файл package.json. Это должно выглядеть примерно так:

{
  "name": "examples",
  "version": "1.0.0",
  "description": "example project",
  "main": "server",
  "engines": {
    "node": "16.18.0",
    "npm": "8.19.2"
  },
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
  },
  "repository": {
    "type": "git",
    "url": "git+https://github.com/example/example.git"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "bugs": {
    "url": "https://github.com/example/example/issues"
  },
  "homepage": "https://github.com/example/POS#readme",
  "dependencies": {
    "bcrypt": "^5.1.0",
    "cors": "^2.8.5",
    "dotenv": "^16.0.3",
    "express": "^4.18.2",
    "jsonwebtoken": "^9.0.0",
    "nodemon": "^2.0.20",
    "pg": "^8.8.0",
    "pg-hstore": "^2.3.4",
    "sequelize": "^6.28.0",
    "sequelize-cli": "^6.6.0"
  }
}

Есть несколько вещей, которые нужно проверить, прежде чем продолжить. Во-первых, убедитесь, что установлены обаSequelize и Sequelize-cli. Возможно, вы установили CLI Sequelize глобально, поэтому убедитесь, что он присутствует в вашем package.json. На этом этапе вы также захотите зайти в свой package.json в папке клиента и убедиться, что у вас есть все ваши зависимости,

 "dependencies": {
    "typescript": "4.0.x",
    "@testing-library/jest-dom": "^5.16.5",
    "@testing-library/react": "^13.4.0",
    "@testing-library/user-event": "^13.5.0",
    "@types/jest": "^27.5.2",
    "@types/node": "^16.18.11",
    "@types/react": "^18.0.26",
    "@types/react-dom": "^18.0.10",
    "bootstrap": "^5.2.3",
    "js-cookie": "^3.0.1",
    "react": "^18.2.0",
    "react-bootstrap": "^2.7.0",
    "react-dom": "^18.2.0",
    "react-icons": "^4.7.1",
    "react-router-dom": "^6.7.0",
    "react-scripts": "5.0.1",
    "typescript": "^4.9.4",
    "web-vitals": "^2.1.4"
  },

После проверки вашего package.json откройте папку конфигурации, а затем config.json. Здесь вы собираетесь изменить производственный объект. Скопируйте и вставьте следующий код:

"production": {
    "use_env_variable": "DATABASE_URL",
    "dialect": "postgres",
    "dialectOptions": {
       "ssl": {
         "require": true,
         "rejectUnauthorized": false
       }
     }
   }

Это позволит вашей базе данных подключиться к Heroku. Далее обслуживаются статические файлы из внешнего интерфейса. cd в папку вашего клиента и выполните команду npm run build Это скомпилирует код реакции в статический файл, который можно будет обслуживать с сервера. Теперь перейдите к файлу вашего сервера. В данном случае он называется server.js, но вы можете увидеть его как index.js. Вам нужно будет установить dotenv, если вы еще этого не сделали, с помощью npm i dotenv Затем потребуйте его в верхней части файла вашего сервера следующим образом: require('dotenv/config) После того, как вы установили dotenv, также добавьте «путь» к вашему файлу, это можно сделать следующим образом: const path = require('path') Его не нужно устанавливать, потому что он автоматически поставляется с javascript. Убедитесь, что ваш порт является переменной. Определите его как const PORT = proccess.env.PORT || 3000 И также измените его при запуске сервера.

app.listen(PORT, async() => {
console.log('server is up')
await sequelize.authenticate()
console.log('database connected')
})

Затем убедитесь, что если ваша среда настроена на рабочую среду, вы обслуживаете статический файл.

if (process.env.NODE_ENV === 'production'){
    app.use(express.static(path.join(__dirname, "client/build")))
}

Теперь, когда весь ваш код готов для Heroku, последний шаг — настроить скрипты. Вам понадобится два; первый запустит сервер, а второй создаст вашу сборку реакции. Откройте файл package.json и перейдите к сценариям. Добавьте следующие скрипты

"start": "node server.js",
"heroku-postbuild": "cd client && npm install && npm run build"

Эти сценарии запускают сервер и открывают каталог клиента, устанавливают все зависимости и создают окончательную сборку реакции.

Развертывание

Для развертывания вам нужно будет добавить все изменения в git, используя:

git add .
git commiit -m 'example message'
git push heroku

Последним шагом является миграция вашей базы данных.

heroku run sequelize db:migrate --env production --app point-of-sale

Теперь наслаждайтесь развернутым проектом.