diff --git a/Makefile b/Makefile index 71e6968..26df3f2 100644 --- a/Makefile +++ b/Makefile @@ -1,9 +1,12 @@ build: @docker compose build -run: +run: stop @docker compose up -d --remove-orphans +stop: + @docker compose down + clean: @docker builder prune diff --git a/certbot/Dockerfile b/certbot/Dockerfile index b4e8041..686e78f 100644 --- a/certbot/Dockerfile +++ b/certbot/Dockerfile @@ -1,16 +1,13 @@ -# certbot/Dockerfile -FROM certbot/certbot:latest +FROM certbot/certbot -# Опционально: можно установить дополнительные пакеты, если нужно -# RUN apk add --no-cache some-package +# Создаем директории для конфигов +RUN mkdir -p /etc/letsencrypt/config -# Копируем env файл (альтернатива - передавать через docker-compose) -# COPY .env /tmp/.env +# Копируем конфигурационные файлы +COPY config/certbot.ini /etc/letsencrypt/config/ +COPY scripts/init-certbot.sh /opt/ -# Копируем скрипт инициализации (если используется) -# COPY certbot-init.sh /opt/ -# RUN chmod +x /opt/certbot-init.sh +# Устанавливаем права +RUN chmod +x /opt/init-certbot.sh -# Указываем точку входа (можно и через command в compose) -ENTRYPOINT ["sh", "-c"] -CMD ["certbot certonly --standalone --http-01-port ${CERTBOT_PORT} --noninteractive --agree-tos --email ${EMAIL} -d ${DOMAINS} --keep-until-expiring"] +ENTRYPOINT ["/opt/init-certbot.sh"] diff --git a/certbot/config/certbot.ini b/certbot/config/certbot.ini new file mode 100644 index 0000000..75e0a90 --- /dev/null +++ b/certbot/config/certbot.ini @@ -0,0 +1,21 @@ +# Используем staging сервер для тестов +staging = False # Staging True for develops + +# Ваш email +email = valitovgaziz@yandex.ru + +# Принимаем условия подписки +agree-tos = True + +# Неинтерактивный режим +non-interactive = True + +# Домены +domains = yalarba.ru + +# Путь для webroot-аутентификации +webroot-path = /var/www/certbot + +# Предпочитаемые настройки +key-type = ecdsa +elliptic-curve = secp384r1 diff --git a/certbot/scripts/init-certbot.sh b/certbot/scripts/init-certbot.sh new file mode 100644 index 0000000..e7b5733 --- /dev/null +++ b/certbot/scripts/init-certbot.sh @@ -0,0 +1,17 @@ +#!/bin/sh + +# Проверяем наличие сертификатов +if [ ! -d "/etc/letsencrypt/live/${DOMAINS}" ]; then + echo "Получаем новые сертификаты..." + certbot certonly --webroot \ + --config /etc/letsencrypt/config/certbot.ini \ + -w /var/www/certbot \ + -d ${DOMAINS} +fi + +# Бесконечный цикл для обновления сертификатов +while :; do + echo "Проверяем необходимость обновления..." + certbot renew + sleep 12h +done diff --git a/docker-compose.yaml b/docker-compose.yaml index bf69d68..ba4ff36 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -44,7 +44,6 @@ services: volumes: - goose:/migrations command: goose up - restart: unless-stopped spa: container_name: spa @@ -65,9 +64,9 @@ services: - "80:80" - "443:443" volumes: - - ./nginx/configs/nginx.conf.template:/etc/nginx/templates/nginx.conf.template - - certbot-etc:/etc/letsencrypt - - ./spa/app:/var/www/yalarba.ru/html + - certbot_data:/etc/letsencrypt + - certbot_www:/var/www/certbot + - ./spa/app:/usr/share/nginx/html networks: - web-network depends_on: @@ -79,18 +78,22 @@ services: dockerfile: Dockerfile container_name: certbot volumes: - - certbot-etc:/etc/letsencrypt - - certbot-var:/var/lib/letsencrypt + - certbot_data:/etc/letsencrypt + - certbot_www:/var/www/certbot env_file: - .env + environment: + - EMAIL=valitovgaziz@yandex.ru + - DOMAINS=yalarba.ru + - STAGING=0 restart: unless-stopped volumes: api: postgres-db: goose: - certbot-etc: - certbot-var: + certbot_data: + certbot_www: networks: web-network: diff --git a/nginx/Dockerfile b/nginx/Dockerfile index e3fb97c..a9aec61 100644 --- a/nginx/Dockerfile +++ b/nginx/Dockerfile @@ -1,3 +1,18 @@ -FROM nginx:latest +FROM nginx:alpine -RUN mkdir -p /var/www/yalarba.ru/html +# Установка зависимостей +RUN apk add --no-cache bash + +# Копируем обе конфигурации +COPY nginx-http.conf /etc/nginx/nginx-http.conf +COPY nginx-ssl.conf /etc/nginx/nginx-ssl.conf + +# Создаем симлинк по умолчанию на HTTP конфиг +RUN ln -sf /etc/nginx/nginx-http.conf /etc/nginx/conf.d/default.conf + +# Скрипт для проверки сертификатов и переключения конфига +COPY switch-config.sh /docker-entrypoint.d/40-switch-config.sh +RUN chmod +x /docker-entrypoint.d/40-switch-config.sh + +# Создаем необходимые директории +RUN mkdir -p /var/www/certbot diff --git a/nginx/configs/nginx.conf b/nginx/configs/nginx.conf deleted file mode 100644 index 4087409..0000000 --- a/nginx/configs/nginx.conf +++ /dev/null @@ -1,65 +0,0 @@ -# HTTP — редирект на HTTPS -server { - listen 80; - listen [::]:80; - server_name yalarb.ru www.yalarb.ru; - - # Перенаправление всех HTTP-запросов на HTTPS - return 301 https://$server_name$request_uri; -} - -# HTTPS — основной сервер -server { - listen 443 ssl; - listen [::]:443 ssl; - server_name yalarba.ru www.yalarba.ru; - - # Пути к SSL-сертификату (например, от Let's Encrypt) - ssl_certificate /etc/letsencrypt/live/yalarba.ru/fullchain.pem; - ssl_certificate_key /etc/letsencrypt/live/yalarba.ru/privkey.pem; - - # Настройки SSL - ssl_protocols TLSv1.2 TLSv1.3; - ssl_prefer_server_ciphers on; - ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384'; - ssl_session_timeout 1d; - ssl_session_cache shared:SSL:50m; - ssl_stapling on; - ssl_stapling_verify on; - - # Корневая директория сайта - root /var/www/yalarba.ru/html; - index index.html index.htm index.nginx-debian.html; - - # Дополнительные заголовки безопасности - add_header X-Frame-Options "SAMEORIGIN"; - add_header X-Content-Type-Options "nosniff"; - add_header X-XSS-Protection "1; mode=block"; - add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always; - - # Обработка статических файлов - location / { - try_files $uri $uri/ =404; - } - - # Запрет доступа к скрытым файлам (например, .htaccess) - location ~ /\. { - deny all; - access_log off; - log_not_found off; - } - - # Настройки для PHP (если используется) - # location ~ \.php$ { - # include snippets/fastcgi-php.conf; - # fastcgi_pass unix:/var/run/php/php8.1-fpm.sock; - # } -} - -# HTTP for certbot ssl certificate alterante port -server { - listen 333; # альтернативный порт для Certbot - location ~ /.well-known { - allow all; - } -} diff --git a/nginx/configs/nginx.conf.template b/nginx/configs/nginx.conf.template deleted file mode 100644 index 1da69c3..0000000 --- a/nginx/configs/nginx.conf.template +++ /dev/null @@ -1,65 +0,0 @@ -# HTTP — редирект на HTTPS -server { - listen 80; - listen [::]:80; - server_name yalarb.ru www.yalarb.ru; - - # Перенаправление всех HTTP-запросов на HTTPS - return 301 https://$server_name$request_uri; -} - -# HTTPS — основной сервер -server { - listen 443 ssl; - listen [::]:443 ssl; - server_name yalarba.ru www.yalarba.ru; - - # Пути к SSL-сертификату (например, от Let's Encrypt) - ssl_certificate /etc/letsencrypt/live/yalarba.ru/fullchain.pem; - ssl_certificate_key /etc/letsencrypt/live/yalarba.ru/privkey.pem; - - # Настройки SSL - ssl_protocols TLSv1.2 TLSv1.3; - ssl_prefer_server_ciphers on; - ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384'; - ssl_session_timeout 1d; - ssl_session_cache shared:SSL:50m; - ssl_stapling on; - ssl_stapling_verify on; - - # Корневая директория сайта - root /var/www/yalarba.ru/html; - index index.html index.htm index.nginx-debian.html; - - # Дополнительные заголовки безопасности - add_header X-Frame-Options "SAMEORIGIN"; - add_header X-Content-Type-Options "nosniff"; - add_header X-XSS-Protection "1; mode=block"; - add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always; - - # Обработка статических файлов - location / { - try_files $uri $uri/ =404; - } - - # Запрет доступа к скрытым файлам (например, .htaccess) - location ~ /\. { - deny all; - access_log off; - log_not_found off; - } - - # Настройки для PHP (если используется) - # location ~ \.php$ { - # include snippets/fastcgi-php.conf; - # fastcgi_pass unix:/var/run/php/php8.1-fpm.sock; - # } -} - -# HTTP for certbot ssl certificate alterante port -server { - listen ${CERTBOT_PORT}; # альтернативный порт для Certbot - location ~ /.well-known { - allow all; - } -} diff --git a/nginx/nginx-http.conf b/nginx/nginx-http.conf new file mode 100644 index 0000000..81acdf8 --- /dev/null +++ b/nginx/nginx-http.conf @@ -0,0 +1,13 @@ +server { + listen 80; + server_name yalarba.ru; + + location / { + root /usr/share/nginx/html; + index index.html; + } + + location /.well-known/acme-challenge/ { + root /var/www/certbot; + } +} diff --git a/nginx/nginx-ssl.conf b/nginx/nginx-ssl.conf new file mode 100644 index 0000000..3221405 --- /dev/null +++ b/nginx/nginx-ssl.conf @@ -0,0 +1,25 @@ +server { + listen 80; + server_name yalarba.ru; + + location /.well-known/acme-challenge/ { + root /var/www/certbot; + } + + location / { + return 301 https://$host$request_uri; + } +} + +server { + listen 443 ssl; + server_name yalarba.ru; + + ssl_certificate /etc/letsencrypt/live/yalarba.ru/fullchain.pem; + ssl_certificate_key /etc/letsencrypt/live/yalarba.ru/privkey.pem; + + location / { + root /usr/share/nginx/html; + index index.html; + } +} diff --git a/nginx/spa_app/index.html b/nginx/spa_app/index.html deleted file mode 100644 index 72c40ec..0000000 --- a/nginx/spa_app/index.html +++ /dev/null @@ -1,134 +0,0 @@ - - -
- - -Инновационный агрегатор мест отдыха с ИИ-планировщиком маршрутов
-ЯлАрба — это супер-приложение для путешественников, объединяющее в себе:
-Наша миссия — сделать планирование путешествий простым, персонализированным и доступным.
-Валитов Газиз
-Full-stack разработчик с опытом в travel-tech проектах. Специализация: Python/Django, React, системы рекомендаций на основе ИИ.
-Контакты: gaziz.valitov@yalarba.travel