Разместите Angular App, конечную точку ExpressJS на сервере AWS EC2 - PullRequest
0 голосов
/ 01 января 2019

Прежде всего, я бы сообщил читателям, что я довольно новичок в NodeJS, Angular и Express.

Я частично завершил проект, в котором мне необходимо создать веб-сайт в AngularJS с сервером.побочная логика (ExpressJS).

Но при разработке я понял, что хостинг или развертывание стека MEAN не так просты, как у стека LAMP.Поэтому я прошу решение следующей проблемы:

Я хочу разместить сайт, разработанный на Angular, с конечной точкой в ​​ExpressJS и базой данных в MySQL.

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

Эта одна была более полезной, но опять же подняла много вопросов.

Поскольку я новичок в этой технологии, я был бы признателен, если бы кто-нибудь помог мне пройти процесс развертывания Angular и Express вместе на одном сервере.

Ответы [ 2 ]

0 голосов
/ 02 января 2019

Вы можете выполнить клонирование своего приложения на экземпляре EC2, а затем установить systemd service , вот пример файла службы:

[Unit]
Description=My App
After=syslog.target network.target

[Service]
Environment=NODE_ENV=production
ExecStart=/usr/bin/node /home/appuser/repo-app/index.js
WorkingDirectory=/home/appuser/repo-app/
Restart=always
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=myapp
User=appuser
Group=appuser

[Install]
WantedBy=multi-user.target

Вы также можете использовать haproxy перед вашей конечной точкой экспресса.

0 голосов
/ 02 января 2019

Я бы пошел с Докером.Один контейнер с изображением узла, а другой - с изображением mysql.Контейнер узла запустит ваше угловое и экспресс-приложение.Также с Docker у вас не будет никакой разницы между вашей средой разработки и производственной средой.

У вас установлен Docker?Какую операционную систему вы используете?

Загрузка образа узла из Docker Hub:

docker pull node

Затем я бы создал Dockerfile, чтобы сгенерировать изображение из образа узла при копировании на него всего вашего исходного кода.

FROM node:latest
LABEL author="Your Name" 
ENV NODE_ENV=production PORT=3000
COPY . /app
WORKDIR  /app
RUN npm install 
EXPOSE $PORT
ENTRYPOINT ["npm", "start"]

Команда COPY скопирует исходный код вашего текущего каталога (.) В каталог приложения внутри контейнера.WORKDIR установит контекст, в котором ваши команды будут выполняться внутри контейнера, чтобы вы могли запустить npm install там, где находится package.json.RUN загрузит все зависимости приложения внутри контейнера.ENTRYPOINT выполнит файл, который запустит ваше приложение, как указано в вашем файле package.json, как показано ниже:

"name": "app",
"version": "1.0.0",
"scripts": {
   "test": "echo \"Error: no test specified\" && exit 1",
   "start": "node index.js"
},
"license": "ISC",
"dependencies": { ... }

.dockerignore (так что вы не копируете свои модули узлов, Dockerfile и т. Д. Внутри вашего контейнера):

node_modules
npm-debug.log
Dockerfile*
docker-compose*
.dockerignore
.git
.gitignore
README.md
LICENSE
.vscode

Чтобы создать образ на основе вышеупомянутого Dockerfile (вам нужно поместить Dockerfile и запустить сборку Docker в той же папке контейнера вашего приложения):

docker build -t image_name .

Toзапустите ваше изображение в Docker-контейнере:

docker run -d -p 3000:3000 image_name

Запустив такой контейнер, вы можете открыть свое приложение в браузере с помощью DOCKER_HOST_IP: PORT, и оно запустит ваше приложение.

Предполагая, что вызапускаем ваше приложение в PORT 3000, мы сопоставляем внешний порт 3000 с внутренним портом 3000 внутри контейнера, в котором запущено ваше приложение.

EXPRESS

Для экспресс-обслуживания ваших файлов,вам нужно установить express.static:

// serve client side code.
app.use('/', express.static('app_folder'));
...