在AWS EC2服务器上托管Angular App ExpressJS终端节点

时间:2019-01-01 16:57:10

标签: angularjs node.js amazon-web-services express web-deployment

首先,我想告诉读者我在NodeJS,Angular和Express方面还很新。

我已经部分完成了一个项目,需要在其中使用服务器端逻辑(ExpressJS)在AngularJS中创建网站。

但是在开发时,我意识到托管或部署MEAN堆栈并不像LAMP堆栈那么简单。 因此,我要求解决以下问题,

我想托管一个用Angular开发的网站,其端点在ExpressJS中,而数据库在MySQL中。

我试图找到解决方案。但是他们没有一个在我面前描绘出清晰的画面。 不幸的是,由于预算限制,我拥有的服务器是免费的,并且它很简单Ubuntu 18.04 System。 这是我尝试理解的link,但出于天蓝色。

one更有帮助,但再次引发了许多问题。

由于我是这项技术的新手,如果有人能帮助我在同一台服务器上一起完成Angular和Express的部署过程,我将不胜感激。

2 个答案:

答案 0 :(得分:3)

我会选择Docker。一个运行节点映像的容器,另一个运行mysql映像的容器。节点容器将运行您的angular and express应用程序。同样,使用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命令会将当前目录(。)的源代码复制到容器内的app目录。 WORKDIR将设置在容器内执行命令的上下文,以便您可以在package.json所在的位置运行npm install。 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 build):

docker build -t image_name .

要在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'));

答案 1 :(得分:0)

您可以在EC2实例上git clone您的应用,然后安装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