如何使用docker容器部署angular2 app,
目前我正在使用Node js with express来提供我的应用内容,
index.js
// set server port. SERVER_PORT varibale will come from Dockerfile
var port = process.env.SERVER_PORT;
if (!port) {
port = 3000;
}
// set internal communication url
global.internalURL = "http://localhost:" + port;
var path = require('path');
var express = require('express');
var app = express();
var bodyParser = require("body-parser");
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({
extended: true
}));
app.use(function(req, res, next) {
// Website you wish to allow to connect
res.setHeader('Access-Control-Allow-Origin', '*');
// Request methods you wish to allow
res.setHeader('Access-Control-Allow-Methods', 'GET, POST, PUT, OPTIONS, PATCH, DELETE');
// Request headers you wish to allow
res.setHeader('Access-Control-Allow-Headers', 'X-Requested-With,content-type,access_token');
// Set to true if you need the website to include cookies in the requests sent
// to the API (e.g. in case you use sessions)
res.setHeader('Access-Control-Allow-Credentials', true);
next();
});
var router = express.Router(express);
app.use("/testapp", router);
router.use(express.static(path.join(__dirname, 'dist')));
// Catch all other routes and return the index file
router.get('*', (req, res) => {
res.sendFile(path.join(__dirname, 'dist/index.html'));
});
var server = app.listen(port, function() {
console.log("server on " + port);
});
我的基本网址
<base href="/testapp/">
我的Docker文件
FROM node
COPY ./package-deploy.json /package.json
COPY ./index.js /index.js
RUN npm install pm2 -g
COPY ./dist /dist
RUN npm install --only=production
ENV SERVER_PORT 80
EXPOSE 80
CMD pm2-docker index.js
建筑
ng build
docker build -t testapp:v1。
这种方法非常有效。但我想知道,有没有更好的方法来运行带有HTML5模式的Angular 2应用程序?
答案 0 :(得分:1)
一旦您知道如何:
,在docker图像中构建一个角度应用程序非常简单.htaccess
dist
文件httpd
复制到Dockerfile
图片。使用此方法将从代码中删除快速逻辑,这意味着您必须管理更少的代码并专注于应用程序本身。
示例FROM httpd:2.4
COPY ./dist /usr/local/apache2/htdocs
COPY ./.htaccess /usr/local/apache2/htdocs
:
.htaccess
您需要在应用程序的根目录下的 <IfModule mod_rewrite.c>
Options Indexes FollowSymLinks
RewriteEngine On
RewriteBase /
RewriteRule ^index\.html$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.html [L]
</IfModule>
文件:
/var/www/downloads/
如果需要,请随时查找有关该项目的更多详细信息。
修改强>
我链接到您的Dockerfile是在CI流程中构建的,其中应用程序构建已经完成。当然,您必须在构建映像之前构建应用程序。
我这样做是因为这样,原始的打字稿代码和css不会在网上提供,所以它们无法从网站本身访问。