angularが初めてで、アプリケーションをDockerコンテナのNginx
サーバーに配置したいと思います。
そのために、次の手順を実行しました。
Sudo npm install -g @angular/cli
ng new angular4-on-nginx-with-docker
npm start
を介してアプリケーションを提供するangularアプリケーションは、
npm start
Docker化されたアプリケーションの開発を考えているので、コマンドnpm start
を避けたいと思います。それを行うには、次のとおりです。
Dockerfile
nginxのファイルFROM debian:jessie
MAINTAINER NGINX Docker Maintainers "[email protected]"
ENV NGINX_VERSION 1.11.9-1~jessie
RUN apt-key adv --keyserver hkp://pgp.mit.edu:80 --recv-keys 573BFD6B3D8FBC641079A6ABABF5BD827BD9BF62 \
&& echo "deb http://nginx.org/packages/mainline/debian/ jessie nginx" >> /etc/apt/sources.list \
&& apt-get update \
&& apt-get install --no-install-recommends --no-install-suggests -y \
ca-certificates \
nginx=${NGINX_VERSION} \
&& rm -rf /var/lib/apt/lists/*
# forward request and error logs to docker log collector
RUN ln -sf /dev/stdout /var/log/nginx/access.log \
&& ln -sf /dev/stderr /var/log/nginx/error.log
EXPOSE 80 443
CMD ["nginx", "-g", "daemon off;"]
server {
server_name angular4.dev;
root /var/www/frontend/src;
try_files $uri $uri/ index.html;
error_log /var/log/nginx/angular4_error.log;
access_log /var/log/nginx/angular4_access.log;
}
docker-compose.yml
version: '2'
services:
nginx:
build: nginx
ports:
- 88:80
volumes:
- ./nginx/frontend:/var/www/frontend
- ./nginx/default.conf:/etc/nginx/conf.d/default.conf
- ./nginx/logs/nginx/:/var/log/nginx
docker-compose up -d --build
docker inspect angular4onnginxwithdocker_nginx_1 | grep IPA
#"SecondaryIPAddresses": null,
#"IPAddress": "",
# "IPAMConfig": null,
# "IPAddress": "172.18.0.2",
172.18.0.2 でブラウザを開きます
Npmパッケージにはアクセスできないと思います...何が正確に間違っているのかわかりません。しかし、私が言えることは、ページが空であり、コンソールにエラーメッセージがないことです。
以下は、nginx
を使用したときに取得されるコードです。
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Angular4 on nginx with docker</title>
<base href="/">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="icon" type="image/x-icon" href="favicon.ico">
</head>
<body>
<app-root></app-root>
</body>
</html>
これは、コマンドnpm start
を使用して取得したページのコード
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Angular4 on nginx with docker</title>
<base href="/">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="icon" type="image/x-icon" href="favicon.ico">
</head>
<body>
<app-root></app-root>
<script type="text/javascript" src="inline.bundle.js"></script><script type="text/javascript" src="polyfills.bundle.js"></script><script type="text/javascript" src="styles.bundle.js"></script><script type="text/javascript" src="vendor.bundle.js"></script><script type="text/javascript" src="main.bundle.js"></script></body>
</html>
だから、何が間違っているのですか?
その例のリポジトリは github で利用可能です
間違っていることの1つは、cliを使用してプロダクションビルドを実行し、これらのファイルの出力を公開するのではなく、ソースファイルを公開しようとしていることです。 ng start
はlocal開発に使用されます。結果に満足したら、ng build --prod
を使用してアプリケーションを構築し、あなたの/dist
フォルダーは、ドッカーに配置する必要があります。
すべてをドッカーに入れたい場合は、ng build --prod
新しいプロジェクトを作成した後、nginx
のルートを/var/www/frontend/dist;
。ただし、これにより、ドッカーの起動時間が非常に長くなります。プロジェクトのサイズに応じて明らかに
angular 2/4/5 app + Nginx(i.e。Dockerなし))の本番セットアップにまだ苦労している場合、完全なソリューションは次のとおりです。
angular Hostのアプリ:http://example.com
およびPORT:8080
注-ホストとPORTは、ケースによって異なる場合があります。
<base href="/">
あなたのindex.htmlヘッドタグ。
まず、マシンのangular repo(i.e./home/user/helloWorld)パスに移動します。
次に、次のコマンドを使用して、運用サーバー用に/ distをビルドします。
ng build --prod --base-href http://example.com:808
ここで、/ dist(つまり/ home/user/helloWorld/dist)フォルダーをマシンのangular repoから本番サーバーをホストするリモートマシンにコピーします。
リモートサーバーにログインし、次のnginxサーバー構成を追加します。
server {
listen 8080;
server_name http://example.com;
root /path/to/your/dist/location;
# eg. root /home/admin/helloWorld/dist
index index.html index.htm;
location / {
try_files $uri $uri/ /index.html;
# This will allow you to refresh page in your angular app. Which will not give error 404.
}
}
次に、nginxを再起動します。
それでおしまい !!これで、angular app - http://example.com:808 にアクセスできます
役に立てば幸いです。