2016-01-19 2 views
2

У меня есть репо с угловыми и nodejs. я выступал в Дженкинс:Как подключить мой NodeJS с моим угловым (в Nginx)

# install globally 
npm install -g bower 
npm install -g gulp 

# install 
bower install 
npm install 

# build dist folder 
gulp build 

Теперь у меня в корне:

Dockerfile.nginx Dockerfile.nodejs README.md bower.json dist gulp.config.js gulpfile.js node_modules package.json server.js src 

Я копирую папку Dist внутри моего Nginx контейнера. Поэтому у меня есть угловой. (С dockerfile)

FROM nginx 
# copy folder 
COPY dist /usr/share/nginx/html/dist 

Я копирование: gulp.config.js gulpfile.js node_modules server.js моему nodejscontainer. (Также с dockerfile)

FROM node 

# Create app directory 
RUN mkdir -p /usr/src/www 
WORKDIR /usr/src/www 

# copy 
COPY node_modules /usr/src/www/ 
COPY gulpfile.js /usr/src/www/ 
COPY gulp.config.js /usr/src/www/ 
COPY server.js /usr/src/www/ 

EXPOSE 8080 
CMD [ "node", "server.js" ] 

Я запустить 2 контейнера, но Nginx не общается с nodejs

EDIT1: Начало контейнеры:

docker run -d -p 8888:8888 --name "nodejs" localhost:5000/test/nodejs:1 

docker run -d -p 80:80 --name "nginx" localhost:5000/test/nginx:1 

EDIT2: Мой nginx.conf выглядит так:

http { 

     upstream node-app { 
       least_conn; 
       server nodejs:8888 weight=10 max_fails=3 fail_timeout=30s; 
     } 

     server { 
       listen 80; 
       location /dist { 
       alias /usr/share/nginx/html/dist/; 
       } 

       location ~* /api { 
       #location/{ 
       proxy_pass http://node-app; 
       proxy_http_version 1.1; 
       proxy_set_header Upgrade $http_upgrade; 
       proxy_set_header Connection 'upgrade'; 
       proxy_set_header Host $host; 
       proxy_cache_bypass $http_upgrade; 
       } 
     } 
} 

Мой server.js выглядит следующим образом:

app.get('/api/hello', requestProxy({ 
    url: xxx + "/hello" 
})); 
+0

Вы можете поделиться, как запустить эти 2 контейнера? – Thomasleveil

ответ

2

Вы должны выставить порт Node.js контейнера, к которому Nginx (угловой) контейнер будет подключаться. См. Раздел документации докеры Connect using network port mapping.

Обновление: Я думаю, вам нужно сконфигурировать файл конфигурации nginx в контейнере узлов. This question имеет образец файла nginx, связанный с вашим прецедентом (хотя и не связан с контейнерами).

Редактировать: Чтобы сопоставить приложение узла с nginx, сначала необходимо связать контейнер узла с контейнером nginx.

docker run -d -p 80:80 --name "nginx" --link nodejs:nodejs localhost:5000/test/nginx:1 

При связывании контейнера узла с контейнером Nginx, адрес узла, контейнер будет сохранен в/и т.д./хостах. Таким образом, контейнер nginx может получить доступ к адресу узла.

Таким образом, в файле конфигурации Nginx, то nodejs будет доступен в качестве контейнера адрес nodejs':

http { 

     upstream node-app { 
       server nodejs:8888 weight=10 max_fails=3 fail_timeout=30s; 
     } 

     server { 
       listen 80; 

       location/{ 
       proxy_pass http://node-app; 
       proxy_http_version 1.1; 
       proxy_set_header Upgrade $http_upgrade; 
       proxy_set_header Connection 'upgrade'; 
       proxy_set_header Host $host; 
       proxy_cache_bypass $http_upgrade; 
       } 
     } 
} 
+0

@manish Вам всегда нужно настроить nginx.conf, чтобы позволить nodejs и nginx работать вместе? – lvthillo

+0

@Anonymous Я обновил ответ, чтобы ответить на ваш вопрос .. – manish

+0

PS: Я также являюсь новичком в докере и nginx, поэтому некоторая информация может быть неправильной .. Также я нашел следующее, чтобы быть очень полезным: http://anandmanisankar.com/posts/docker-container-nginx-node-redis-example/ – manish

1

Одним из решений является link обоих контейнеров, как описано в @manish's answer.

Но помните, что это legacy способ соединения контейнеров вместе.


С этого момента, вы можете использовать new docker network feature для создать виртуальную сеть и соединить оба контейнера к этой сети:

docker network create mynetwork 
docker run -d --net=mynetwork -p 8888:8888 --name "nodejs" localhost:5000/test/nodejs:1 
docker run -d --net=mynetwork -p 80:80 --name "nginx" localhost:5000/test/nginx:1 

С такой установкой, ваш конфигурационный файл Nginx должен использовать

server nodejs:8888 weight=10 max_fails=3 fail_timeout=30s; 

как вы теперь обращаетесь к другому контейнеру по их названию.

+0

Я попробую. Но я уверен, что мне нужно связать свои контейнеры, чтобы это не было сделано автоматически? (потому что я видел, как он работал в моем vm) (теперь я нахожусь на ec2 амазонки). –

+0

Я выполнил ваши шаги, и когда я перейду к URL: 80/api, я вижу то же самое, что и url: 8888/api. Так что это работает. Но я не могу видеть свой угловой код в url/dist/index.html # (он дал 404) my nginx.config имеет: location ~ */api {(потому что есть мой api, я делаю это неправильно? –

+0

Я изменил/api на /. Теперь я получаю Can not GET/dist/... на каждой странице –

Смежные вопросы