Как развернуть стек MERN на хостинге? - PullRequest
0 голосов
/ 24 февраля 2019

Я новичок в веб-разработке, и у меня есть хостинг, на котором я хочу развернуть свой проектactjs / node.Чтобы развернуть его ранее, я просто загружал папку сборки, созданную с помощью npm run build.С тех пор я добавил соединение с базой данных mongodb, используя стек MERN.

Проект был изначально создан с использованием create-реагировать-приложение, затем я настроил свой внутренний узел / mongodb, следуя этому руководству: https://appdividend.com/2018/11/11/react-crud-example-mern-stack-tutorial/. Весь код моего сервера содержится в папке проекта впапка api.

Я могу запустить проект на локальном хосте, запустив npm start, nodemon server.js (из папки api) и подключившись к mongodb в терминале.Когда я пытаюсь запустить его из службы хостинга так же, как и раньше, он говорит, что не может подключиться к базе данных, что, как я полагаю, связано с тем, что на моей машине не установлено соединение.

В настоящее время все вызовы API используют сообщение axios к http://localhost:4000/,, которое, как я предполагаю, также не будет работать на сервере.Я искал в Интернете информацию о развертывании стека MERN, но все, что я нашел, обсуждают его с точки зрения хостинга на AWS EC2, что я не буду делать.

Как я смогу развернуть свой хостинг?Есть ли какие-либо ссылки или места, где мне следует искать эту информацию?

Редактировать: Я подключился к базе данных, используя MongoAtlas, поэтому использую адрес SRV.Я думаю, что проблема заключается в постах axios, использующих адрес localhost, так как приложение на сервере работает, только если на моем локальном компьютере работает nodemon.Какой адрес я должен использовать вместо этого?

Ответы [ 3 ]

0 голосов
/ 24 февраля 2019

Ну да, вам придется развернуть свой сервис на хостинге (уже установлен).Есть несколько решений, которые вы можете посмотреть, есть Digital Ocean Посмотрите на эти несколько ссылок

как настроить приложение nodejs для prod

как установить mongodb на ubuntu

Также есть Heroku.для этого есть полное руководство по этому вопросу

подготовка и развертывание стека mern .

Как я уже говорил, существует множество других решений, кроме этих.Надеюсь, это поможет

0 голосов
/ 24 февраля 2019

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

utils / axiosConfig.js (Мне нравится использовать имя app, чтобы оно оставалось встроенным в express, но вы можете назвать его как угодно)

import axios from 'axios';

const env = process.env.NODE_ENV; // current environment

export const app = axios.create({
  baseURL:
    env === 'production'
      ? 'http://example.com/api/' // production
      : 'http://localhost:5000/api/', // development
});

Затем вы можете использовать эту конфигурацию везде, где вы делаете вызов API:

import { app } from '../utils/axiosConfig.js';

app.get("example");
app.post("example");
...etc

Теперь он может отправлять запросы на http://localhost:5000/api/example или http://example.com/api/example.

. В вашем client package.json вы можете указать среду:

 "scripts": {
    "start": "NODE_ENV=development webpack-dev-server",
    "build": "NODE_ENV=production webpack",
    "stage": "NODE_ENV=staging webpack",
    "test": "NODE_ENV=testing jest --watchAll --coverage",
  },
0 голосов
/ 24 февраля 2019

В настоящее время все вызовы API используют сообщение axios к http://localhost:4000/,, которое, как я предполагаю, также не будет работать на сервере.

Вы правы, чтоне будет работать.Это потому, что если пользователи получат ваше приложение React , все вызовы API будут перенаправлены на их localhost.Который не поддерживает ваш API

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

Возможно, потому что URL MongoDB, вероятно, все еще имеет значение, подобное 'mongodb://localhost:27017/myapp.Здесь есть 2 основных варианта.

  1. Использование «службы хостинга баз данных» подобно MongoDB Atlas , затем вам потребуетсяизмените URL вашей базы данных, чтобы он указывал на тот, который предоставляется службой
  2. Разместите базу данных на вашем сервере , которая будет работать с localhost URL

Я искал в Интернете информацию о развертывании стека MERN, но все, что я нашел, обсуждают его с точки зрения хостинга на AWS EC2, что я не буду делать.

  • Любой сервер, на котором у вас есть контроль и гибкость , будет работать в этом сценарии.Вы можете разместить все свои вещи (сервер, интерфейс и базу данных) на нем, если хотите. EC2 может сделать все это , но это не единственный вариант.Вы также можете проверить аналогичные продукты от Microsoft и Google и т. Д. *
  • Еще один способ - развернуть каждый артефакт отдельно , который является более масштабируемым, но также имеет свою сложность.Если вы идете таким образом, вы можете рассмотреть Docker контейнеры и Kubernetes , которые полезны для организации распределенных систем

Edit

Поскольку вы используете MongoDB Atlas, убедитесь, что вы занесли в белый список IP-адрес вашего сервера

...