Как настроить nginx для запуска приложения angular4
я новичок в angular, и я хотел бы поставить приложение на Nginx
сервер в контейнере docker.
1. Запуск углового приложения через @angular / cli
для этого я сделал следующее:
1.1. Установка @angular / cli и создание приложения angular4
sudo npm install -g @angular/cli
ng new angular4-on-nginx-with-docker
1.2. Обслуживание приложения через npm start
угловое приложение работает правильно через
npm start
теперь я хочу избежать команды npm start
потому что я думаю о разработке докеризованного приложения. Чтобы сделать это, ниже:
2. Запуск углового приложения на nginx
2.1. Dockerfile
файл для nginx
FROM debian:jessie
MAINTAINER NGINX Docker Maintainers "docker-maint@nginx.com"
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;"]
2.2. Конфигурация nginx ниже:
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;
}
2.3. The 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
2.4. создание образа docker и запуск контейнер
docker-compose up -d --build
2.5. Идентификация IP-адреса контейнера
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
2 ответов
одна вещь, которая неправильно, что вы пытаетесь опубликовать исходные файлы, вместо того, чтобы делать сборку производства с помощью cli и публиковать выходные данные этих файлов. ng start
используется местные развитие. Когда вы довольны своим результатом, вы можете использовать ng build --prod
для построения приложения, и все, что находится в /dist
папка должна быть помещена в docker.
если вы хотите иметь все в своем докере, вы должны ng build --prod
после создания новый проект, а затем укажите корень вашего nginx
до /var/www/frontend/dist;
. Это значительно увеличит время загрузки вашего docker. Очевидно, в зависимости от размера вашего проекта
если кто-то все еще борется с производственной настройкой angular 2/4/5 app + Nginx (т. е. без Докера), то вот полное решение:
Предположим, вы хотите развернуть свое угловое приложение на хосте:http://example.com
и порт: 8080
Примечание-хост и порт могут отличаться в вашем случае.
убедитесь, что у вас есть <base href="/">
в индексации.тег html head.
во-первых, перейдите в свой угловой РЕПО (т. е. /home/user/helloWorld) путь на вашем машина.
-
затем создайте / dist для вашего производственного сервера, используя следующую команду:
ng build --prod --base-href http://example.com:8080
теперь скопируйте /dist (т. е./home/user/helloWorld / dist) папку из углового РЕПО вашей машины на удаленную машину, где вы хотите разместить свой производственный сервер.
-
теперь войдите на свой удаленный сервер и добавьте следующий сервер 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.
вот именно !! Теперь вы можете открыть ваш угловой приложения http://example.com:8080
надеюсь, это будет полезно.