Как я могу разместить свой собственный сервер Parse на Heroku, используя MongoDB?

(Для ясности: я задаю этот вопрос, чтобы дать ответ, который я нашел, чтобы помочь другим, которые так же пострадали от закрытия Parse)

Parse.com недавно объявили, что закрывают магазин в январе 2017 года, но, к счастью, они сделали свою Программное обеспечение Parse Server с открытым исходным кодом, поэтому мы все можем размещать собственные экземпляры сервера Parse.

Я изучил различные варианты размещения Parse Server и решил разместить свой сервер на Heroku.

Мне нравился Parse, потому что им было очень легко пользоваться, а у меня нет реального опыта в настройке серверной части. Я пытался следовать нескольким онлайн-руководствам, но обнаружил, что все они немного сложны для понимания из-за расплывчатых шагов или шагов, которые ведут вас в кроличью нору на другом сайте, устанавливая кучу инструментов, и все это становится немного запутанным.

Как я могу разместить Parse Server на героку, настроить его для приема междоменных запросов от моего приложения, создать базу данных MongoDB и перенести все мои данные из Parse в новую базу данных?


person Wesley Smith    schedule 14.02.2016    source источник
comment
Почему минус? Я знаю, что это немного широко, но вы видели мой комментарий внизу?   -  person Wesley Smith    schedule 14.02.2016
comment
зачем кому-то голосовать против этого... это единственный действительно полезный учебник   -  person sterling archer    schedule 13.03.2016
comment
Неважно, что говорят другие. Вы знаете, что вы сделали .... из «Шпионского моста» ..... Для протокола, ответ действительно помог мне, и этот широкий вопрос с отрицательным мнением указал мне правильное направление ...   -  person Marka A    schedule 24.03.2016
comment
Это именно то, что я искал! Спасибо. Не уверен, что это было закрыто как слишком широкое? Я потратил дни на эту проблему   -  person Lango    schedule 04.04.2016
comment
Это именно то, что я искал, спасибо!   -  person Peter H. Boling    schedule 14.03.2017


Ответы (1)


Самостоятельный хостинг Parse Server на Heroku


Настройте Heroku, MongoDB и Parse

  1. Посетите https://signup.heroku.com/ и зарегистрируйте учетную запись.
  2. Подтвердите свою электронную почту и войдите в Heroku
  3. Перейдите к Развертывание сервера Parse на Heroku
  4. Нажмите «Развернуть в Heroku».

введите здесь описание изображения


  1. Дайте вашему серверу синтаксического анализа имя
  2. Пока пропустите APP_ID и MASTER_KEY приложения, мы установим их позже.
  3. Нажмите Развернуть бесплатно

введите описание изображения  здесь


  1. Если появится окно ниже, введите данные своей кредитной карты, чтобы подтвердить свою учетную запись. Не волнуйтесь, с вас не будет взиматься плата, если вы не обновите свой аккаунт позже. Это просто мера безопасности, которую Heroku использует для предотвращения злоупотреблений.

введите здесь описание изображения


  1. Heroku создаст ваше приложение. В фоновом режиме он также создаст для вас репозиторий .git и клонирует содержимое официального сервера синтаксического анализа. -example git repo, создайте базу данных MongoDB и настройте приложение Heroku для использования этой базы данных.
  2. Когда приложение будет создано, вы попадете на его панель инструментов Heroku или вы можете попасть туда, войдя в систему, щелкнув «Личные приложения», а затем щелкнув имя вашего сервера синтаксического анализа.
  3. На панели инструментов вашего приложения нажмите «Настройки», затем нажмите «Показать переменные конфигурации».

введите здесь описание изображения


  1. Введите APP_ID и MASTER_KEY вашего приложения. Если у вас сейчас есть приложение на Parse.com, вы можете использовать те же ключи, что и оно. Вы можете узнать по адресу https://www.parse.com/apps/<APP_NAME>/edit#keys, где <APP_NAME> — это название вашего приложения. Если вы создаете новое приложение, вы можете генерировать случайные ключи здесь. Вы можете добавить новые ключи для любых SDK, которые вы планируете использовать, здесь я добавляю один для SDK javascript.

введите здесь описание изображения


  1. Запишите значение для MONGOLAB_URI, оно понадобится вам позже, если вы хотите перенести существующие данные Parse в новую базу данных.
  2. Прокрутите вниз и запишите URL-адрес Git и домен Heroku для своего приложения, они понадобятся вам позже.

введите описание изображения  здесь


  1. Установите Heroku Toolbelt, который представляет собой инструмент интерфейса командной строки для управления вашими приложениями Heroku.

  2. Откройте окно терминала и введите $ heroku login, введите адрес электронной почты и пароль Heroku.

  3. Введите $ heroku git:clone -a <MY_APP_NAME> (где <MY_APP_NAME> — это имя вашего приложения heroku), чтобы сделать локальную копию репозитория кода вашего сервера, вы также можете использовать URL-адрес git, который мы видели ранее. Когда вы клонируете репозиторий, вы увидите предупреждающее сообщение: Похоже, вы клонировали пустой репозиторий. Папка приложения будет создана, но она будет содержать только стандартные файлы git и не будет сервера синтаксического анализа. Чтобы исправить это. Перейдите в официальный git-репозиторий parse-server-example, загрузите zip-файл репозитория. Извлеките папку, перетащите все файлы и папки из папки parse-server-example-master в папку вашего приложения.

  4. Вернувшись в терминал, введите $ cd <MY_APP_NAME>, чтобы перейти в репозиторий.

Включите CORS (чтобы вы могли использовать API из других доменов)

  1. На жестком диске найдите и откройте локальную копию репозитория, который мы только что создали.
  2. В папке откройте package.json и добавьте "cors": "*" к dependencies вот так:

.

  "dependencies": {
    "express": "~4.2.x",
    "kerberos": "~0.0.x",
    "parse": "~1.6.12",
    "parse-server": "~2.0",    // <= don't forget this comma
    "cors": "*"                // add this line
  }

ПРИМЕЧАНИЕ

Обязательно удалите приведенные выше комментарии в вашем фактическом коде, так как это не будет действительным JSON.

  1. Откройте index.js и внесите следующие изменения:

.

var express = require('express');  // find this line in the file
var cors = require('cors') // add this line below it

//....


//var databaseUri = process.env.DATABASE_URI || process.env.MONGOLAB_URI // old name, you may need to change this for new deployments
var databaseUri = process.env.DATABASE_URI || process.env.MONGODB_URI  // changed to MONGODB_URI in Heroku!

//....

var app = express();  // find this line in the file
app.use(cors()); // add this line below it

//Add declarations for any keys you plan to use as shown below
var api = new ParseServer({
  databaseURI: databaseUri || 'mongodb://localhost:27017/dev',
  cloud: process.env.CLOUD_CODE_MAIN || __dirname + '/cloud/main.js',
  appId: process.env.APP_ID || 'myAppId',
  masterKey: process.env.MASTER_KEY || '',
  serverURL: process.env.SERVER_URL || 'http://localhost:1337',
  javascriptKey: process.env.JAVASCRIPT_KEY || '',  //** add this line no need to set values, they will be overwritten by heroku config vars
  restAPIKey: process.env.REST_API_KEY || '', //** add this line
  dotNetKey: process.env.DOT_NET_KEY || '', //** add this line
  clientKey: process.env.CLIENT_KEY || '', //** add this line
});
  1. Вернитесь в окно терминала, убедитесь, что вы все еще находитесь в папке репозитория, который мы клонировали, и введите ниже, чтобы отправить изменения в Heroku:

.

$ git add .
$ git commit -am "make it better"
$ git push heroku master

Протестируйте свой новый сервер Parse

  1. Перейдите на эту страницу jsFiddle.
  2. Измените <MY_APP_ID>,<MY_JS_KEY>,<MY_HEROKU_APP_NAME> в скрипке на соответствующие значения для вашего приложения, затем нажмите «Выполнить».

.

Parse.initialize('<MY_APP_ID>', '<MY_JS_KEY>');
Parse.serverURL = 'https://<MY_HEROKU_APP_NAME>.herokuapp.com/Parse'
  1. Вы должны получить приведенное ниже предупреждение о том, что ваш новый сервер Parse работает правильно.

введите здесь описание изображения

ПРИМЕЧАНИЕ:

Если вы используете инструмент jsfiddle с несколькими экземплярами сервера синтаксического анализа, вы можете получить сообщение об ошибке недопустимый токен сеанса. Если это произойдет, откройте консоль разработчика и удалите все ключи синтаксического анализа из локального хранилища, после этого все должно работать:

введите здесь описание изображения


Перенесите существующие данные из Parse

Вы должны сделать это хотя бы один раз с тестовым приложением, прежде чем переносить рабочее приложение. Кроме того, похоже, что устаревшие files из вашего старого приложения еще не могут быть перенесены, см. эту проблему GitHub< /а>

  1. Перед миграцией, если в вашей новой MongoDB есть данные, миграция завершится ошибкой. Если вы только что протестировали сервер и создали объект, перейдите к https://dashboard.heroku.com/apps/<MY_HEROKU_APP_NAME>/resources, нажмите MongoLab рядом с его значком, затем на следующей странице нажмите Удалить все коллекции.
  2. Перейдите к https://dashboard.parse.com/apps/<APP_NAME>/settings/general, где <APP_NAME> – это имя вашего приложения parse.
  3. Прокрутите страницу вниз и нажмите «Перенести».
  4. В модальном окне в серой области (это не очень похоже на ввод...) введите MONGOLAB_URI, которое мы отметили ранее.
  5. Щелкните Начать миграцию.

введите здесь описание изображения


  1. Когда миграция будет завершена, нажмите «Завершить», затем во всплывающем окне нажмите «ОК», когда миграция будет завершена, все ваши данные будут в вашей новой базе данных MongoDB.

введите здесь описание изображения


  1. На данный момент ваша панель инструментов Parse будет продолжать отображать ваши данные, которые теперь находятся в новой БД. Чтобы все проверить, вернитесь к тестовому jsFiddle, который мы использовали ранее, и снова запустите его. Теперь перейдите на панель инструментов Parse, и вы должны увидеть только что добавленный класс и строку. Обратите внимание: когда я использовал новую панель инструментов Parse, я мог видеть количество строк, но вся область строк была пустой. Я вернулся к старой приборной панели Parse и все прекрасно видел.
person Wesley Smith    schedule 14.02.2016
comment
Также убедитесь, что конструктор ParseServer должен выглядеть следующим образом: var api = new ParseServer({ databaseURI: databaseUri || 'mongodb://localhost:27017/dev', cloud: process.env.CLOUD_CODE_MAIN || __dirname + '/cloud/ main.js", appId: process.env.APP_ID || 'myAppId', restAPIKey: process.env.REST_API_KEY || '', javascriptKey: process.env.JAVASCRIPT_KEY || '', masterKey: process.env.MASTER_KEY | | '' //Добавьте сюда свой мастер-ключ. Держите его в секрете! }); - person alextc; 19.02.2016
comment
Я знал это. Эти параметры должны быть установлены с помощью переменных конфигурации на Heroku. В index.js также должны быть те атрибуты в конструкторе Parse, которые отсутствовали. - person alextc; 01.03.2016
comment
@alextc Мои извинения, я только что пошел настраивать другой сервер и понял, что вы имели в виду. Переменные конфигурации Heroku будут перезаписывать значения, установленные в конструкторе, но вам все равно придется кодировать конструктор для прослушивания других, поскольку Parse исключил их из примера по умолчанию. Хороший улов, обновлено! - person Wesley Smith; 02.03.2016
comment
Я точно следовал этому, но на шаге 25 получил Bummer, Failed to create new object, with error code: XMLHttpRequest failed: "Unable to connect to the Parse API". Есть идеи? Я думаю, что я скопировал все ключи идеально. - person Muz; 03.03.2016
comment
@Muz На шаге 12 вы добавили ключ к героку, верно? И вы используете тот же самый в тесте? - person Wesley Smith; 03.03.2016
comment
@Muz, а ты уверен, что изменил эти строки в скрипке по мере необходимости? Parse.initialize('<MY_APP_ID>', '<MY_JS_KEY>'); Parse.serverURL = 'https://<MY_HEROKU_APP_NAME>.herokuapp.com/Parse'? - person Wesley Smith; 03.03.2016
comment
@Muz, протестируй что-нибудь для меня, в index.js измени вызов на new ParseServer(), чтобы он выглядел так var api = new ParseServer({ databaseURI: databaseUri || 'mongodb://localhost:27017/dev', cloud: process.env.CLOUD_CODE_MAIN || __dirname + '/cloud/main.js', appId: process.env.APP_ID || 'myAppId', masterKey: process.env.MASTER_KEY || '', });, и снова обнови героку, тогда это работает? Это может сказать нам, где проблема - person Wesley Smith; 03.03.2016
comment
Нет, все так же. Я не знаком с Heroku и, возможно, делаю что-то не так, так как Config Vars, похоже, не отражает здесь никаких изменений. - person Muz; 03.03.2016
comment
Давайте продолжим это обсуждение в чате. - person Wesley Smith; 03.03.2016
comment
Кто-нибудь сталкивался с тем, что вы, кажется, клонируете пустой репо на шаге 17 ... Выполнили все шаги и деполировали сервер в героку ... но репо кажется пустым? нигде не вижу настройку cors - person Marka A; 24.03.2016
comment
@MarkaA Вы уверены, что заменили <MY_APP_NAME> правильным именем для своего приложения? Вы создали несколько приложений и, возможно, используете не то? вы также можете использовать URL-адрес git из шага 14 вместо имени приложения. - person Wesley Smith; 24.03.2016
comment
@DelightedD0D, я почти уверен, что знал. Тоже два раза пробовал. С разными APPNAMES. Развернулся нормально... Но оба пустые? - person Marka A; 24.03.2016
comment
@MarkaA, вы можете попробовать команду, используя URL-адрес git вместо имени? - person Wesley Smith; 24.03.2016
comment
Хорошо @DelightedD0D... Я не могу заставить его работать на heroku cli с помощью этой команды: ›heroku git:clone -a git.heroku.com/egrocerlist2.git, возвращающий запрошенную конечную точку API, не найден... Поэтому я запустил графический SourceTree и клонировал указанное репо, и я подтверждаю, что оно действительно пусто. ... без index.js ... просто пустое репо? ...... Я не знаю, помогает ли это, но моя вкладка «Ресурсы» говорит (Осталось спать 17 часов 59 минут) .. я на бесплатных динамиках - person Marka A; 24.03.2016
comment
Вкладка «Ресурсы» говорит (осталось 17 часов 59 минут сна) просто показывает, что ваши динамометры в настоящее время не используются (нет активных обращений к серверу), что ожидается на данный момент. Бесплатные динамометры могут работать не более 18 часов в день. время простоя между запросами не учитывается в этой сумме. Итак, база данных Mongo создается, и вы можете видеть переменные конфигурации системы, но репо пусто? Это правильно? - person Wesley Smith; 24.03.2016
comment
Давайте продолжим обсуждение в чате. - person Marka A; 24.03.2016
comment
Спасибо @DelightedD0D за вашу помощь. Позвольте мне добавить это для других, получающих жалобы на версию npm в своих журналах: вам нужно явно объявить свою версию npm в файле package.json, а именно: engine: { node: ›= 4.3, npm: ›= 3.6 } - person Marka A; 26.03.2016
comment
Не забудьте нажать RUN в скрипке после того, как вы обновите свои вещи! - person Spoeken; 05.04.2016
comment
@Spokeken Спасибо за это. Я сделал все правильно, но он все еще не запускался. Черт, я забыл нажать Run on Fiddle. Спасибо друг. - person Suyash Dixit; 27.12.2016
comment
@SuyashDixit добавил сообщение на скрипку в качестве напоминания нажать «Выполнить» :) - person Wesley Smith; 27.12.2016