Производственный SSL с NGINX + ANGULAR + Docker - PullRequest
0 голосов
/ 21 июня 2019

как всегда спасибо за советы и рекомендации.

У меня есть угловое приложение, которое я хочу развернуть с помощью Nginx. Я использую certbot для создания сертификатов, и это прекрасно работает. Это означает, что я могу получить доступ к своему домену. Но домен выдает ошибку, так как не находит все рабочие файлы. Вот мой угловой докер-файл:

#stage 1
FROM node:10.16.0 as node
WORKDIR /app
COPY . /app/
RUN npm install
ARG configuration=production
RUN npm run build -- --prod --configuration=$configuration

#stage 2
FROM nginx:alpine
COPY --from=node /app/dist/angular-SPA /usr/share/nginx/html
COPY ./nginx-config.conf /etc/nginx/conf.d/default.conf
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]

Это мой nginx-config.conf:

server {
  listen 80;
  location / {
    root /usr/share/nginx/html;
    index index.html index.htm;
    try_files $uri $uri/ /index.html =404;
  }
}

и у меня есть папка с docker-compose.yml и nginx.conf. Я не уверен, хорошая ли это практика или нет. Но вот как разработчик до меня это сделал.

В папке nginx это docker-compose.yml

web:
  image: nginx
  volumes:
   - ./:/usr/share/nginx/html
   - ./nginx.conf:/etc/nginx/conf.d/nginx.conf 
   - /etc/letsencrypt:/root/letsencrypt
  ports:
   - "80:80"
   - "443:443"
  command: /bin/bash -c "nginx -g 'daemon off;'"

и это конфиг nginx для nginx.

server {
    listen              80;
    server_name example.com;
    location ^~ /.well-known/acme-challenge/ {
        allow all;
        #default_type "text/plain";
    }
    location / {
        return 301 https://example.com;
    }
}
server {
    listen              443 ssl;
    server_name         example.com;
    ssl_certificate     /root/letsencrypt/live/example.com-0001/fullchain.pem;
    ssl_certificate_key /root/letsencrypt/live/example-0001/privkey.pem;
    location ^~ /.well-known/acme-challenge/ {
        allow all;
        default_type "text/plain";
    }
    location = / {
        proxy_pass        http://PRIVATE_IP_OF_AWS_INSTANCE:9090/index.html;
    }
}

PRIVATE_IP_OF_AWS_INSTANCE - это частный ip моего экземпляра AWS EC2. Мой угловой контейнер работает на порту 9090: 80.

Это ошибка, которую я получаю, когда пытаюсь получить доступ к example.com:

.

example.com /: 15 GET https://example.com/runtime-es2015.858f8dd898b75fe86926.js net :: ERR_ABORTED 404 (не найдено) example.com/:12 GET https://example.com/styles.45c31720860b353d5204.css net :: ERR_ABORTED 404 (не найдено) example.com/:15 GET https://example.com/polyfills-es2015.5728f680576ca47e99fe.js net :: ERR_ABORTED 404 (не найдено) favicon.ico: 1 GET https://example.com/favicon.ico 404 (не найдено)

Пожалуйста, помогите, любые советы или советы приветствуются.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...