diff --git a/docker/frontend/Dockerfile b/docker/frontend/Dockerfile index 4b2f088..52cf4cc 100644 --- a/docker/frontend/Dockerfile +++ b/docker/frontend/Dockerfile @@ -12,9 +12,23 @@ RUN npm run build FROM nginx:alpine +# Установка certbot +RUN apk add --no-cache certbot certbot-nginx + COPY --from=build /app/dist /usr/share/nginx/html COPY docker/frontend/nginx.conf /etc/nginx/conf.d/default.conf -EXPOSE 80 +# Создаем директории для сертификатов и certbot +RUN mkdir -p /etc/letsencrypt +RUN mkdir -p /var/www/certbot -CMD ["nginx", "-g", "daemon off;"] \ No newline at end of file +# Копируем скрипты +COPY docker/frontend/ssl-renew.sh /etc/periodic/daily/ssl-renew +COPY docker/frontend/init-ssl.sh /docker-entrypoint.d/init-ssl.sh +RUN chmod +x /etc/periodic/daily/ssl-renew +RUN chmod +x /docker-entrypoint.d/init-ssl.sh + +EXPOSE 80 443 + +# Запускаем crond и nginx +CMD ["sh", "-c", "crond && /docker-entrypoint.d/init-ssl.sh"] \ No newline at end of file diff --git a/docker/frontend/init-ssl.sh b/docker/frontend/init-ssl.sh new file mode 100644 index 0000000..06ae3b9 --- /dev/null +++ b/docker/frontend/init-ssl.sh @@ -0,0 +1,23 @@ +#!/bin/sh + +# Остановка nginx +nginx -s stop || true + +# Получение сертификата +certbot certonly --standalone \ + --email crocoman7887@gmail.com \ + --agree-tos \ + --no-eff-email \ + --staging \ + -d itformhelp.ru + +# После успешного получения сертификата в staging, получаем боевой сертификат +certbot certonly --standalone \ + --email crocoman7887@gmail.com \ + --agree-tos \ + --no-eff-email \ + --force-renewal \ + -d itformhelp.ru + +# Запуск nginx +nginx -g "daemon off;" \ No newline at end of file diff --git a/docker/frontend/nginx.conf b/docker/frontend/nginx.conf index b095d39..fbd5f78 100644 --- a/docker/frontend/nginx.conf +++ b/docker/frontend/nginx.conf @@ -1,6 +1,32 @@ server { listen 80; - server_name localhost; + server_name itformhelp.ru; + + # Редирект с HTTP на HTTPS + location / { + return 301 https://$host$request_uri; + } + + # Для валидации Let's Encrypt + location /.well-known/acme-challenge/ { + root /var/www/certbot; + } +} + +server { + listen 443 ssl; + server_name itformhelp.ru; + + # SSL сертификаты + ssl_certificate /etc/letsencrypt/live/itformhelp.ru/fullchain.pem; + ssl_certificate_key /etc/letsencrypt/live/itformhelp.ru/privkey.pem; + + # Оптимизация SSL + ssl_session_cache shared:SSL:10m; + ssl_session_timeout 10m; + ssl_protocols TLSv1.2 TLSv1.3; + ssl_prefer_server_ciphers off; + ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384; root /usr/share/nginx/html; index index.html; @@ -47,8 +73,6 @@ server { } error_page 404 /index.html; - - # Redirect server error pages to the static page /50x.html error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; diff --git a/docker/frontend/ssl-renew.sh b/docker/frontend/ssl-renew.sh new file mode 100644 index 0000000..99ce6e9 --- /dev/null +++ b/docker/frontend/ssl-renew.sh @@ -0,0 +1,7 @@ +#!/bin/sh + +# Обновляем сертификат +certbot renew --quiet + +# Перезагружаем nginx для применения обновленного сертификата +nginx -s reload \ No newline at end of file diff --git a/frontend/src/views/RequestsView.vue b/frontend/src/views/RequestsView.vue index 44b5eb7..4d7b03c 100644 --- a/frontend/src/views/RequestsView.vue +++ b/frontend/src/views/RequestsView.vue @@ -4,6 +4,18 @@

Создание заявки

+
+ + +
+