From 89d6d62f12b972e442fd05c97261ae94c2f3cc94 Mon Sep 17 00:00:00 2001 From: valitovgaziz Date: Sat, 31 May 2025 19:54:35 +0300 Subject: [PATCH] nginx and certbot into containers is start and renew certs by auto --- Makefile | 5 +- certbot/Dockerfile | 21 +-- certbot/config/certbot.ini | 21 +++ certbot/scripts/init-certbot.sh | 17 ++ docker-compose.yaml | 19 +- nginx/Dockerfile | 19 +- nginx/configs/nginx.conf | 65 ------- nginx/configs/nginx.conf.template | 65 ------- nginx/nginx-http.conf | 13 ++ nginx/nginx-ssl.conf | 25 +++ nginx/spa_app/index.html | 134 ------------- nginx/switch-config.sh | 13 ++ spa/app/index.html | 2 +- spa/app/valitovgaziz/index.html | 302 ++++++++++++++++++++++++++++++ spa/nginx/nginx.conf | 57 ------ 15 files changed, 433 insertions(+), 345 deletions(-) create mode 100644 certbot/config/certbot.ini create mode 100644 certbot/scripts/init-certbot.sh delete mode 100644 nginx/configs/nginx.conf delete mode 100644 nginx/configs/nginx.conf.template create mode 100644 nginx/nginx-http.conf create mode 100644 nginx/nginx-ssl.conf delete mode 100644 nginx/spa_app/index.html create mode 100644 nginx/switch-config.sh create mode 100644 spa/app/valitovgaziz/index.html delete mode 100644 spa/nginx/nginx.conf 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, системы рекомендаций на основе ИИ.

-
- -
-

План разработки

- -
-

Этап 1: MVP (0-6 месяцев)

-
    -
  • База мест отдыха (1000+ позиций)
  • -
  • Интеграция с API бронирования (Booking.com, Ostrovok)
  • -
  • Прототип ИИ-рекомендаций
  • -
  • Мобильная версия (PWA)
  • -
-
- -
-

Этап 2: Монетизация (6-12 месяцев)

-
    -
  • Система комиссий (10-15% с бронирований)
  • -
  • Платные подписки (PRO-аккаунт)
  • -
  • Партнерская программа для гидов
  • -
-
- -
-

Этап 3: Масштабирование (12-24 месяца)

-
    -
  • Выход на рынки СНГ (Казахстан, Узбекистан)
  • -
  • Полноценный ИИ-ассистент с рекомендациями по здоровью
  • -
  • Интеграция с сервисами аренды авто
  • -
-
-
- -
-

Технологический стек

- -
- - - - \ No newline at end of file diff --git a/nginx/switch-config.sh b/nginx/switch-config.sh new file mode 100644 index 0000000..c9d1017 --- /dev/null +++ b/nginx/switch-config.sh @@ -0,0 +1,13 @@ +#!/bin/bash + +# Проверяем наличие сертификатов +if [ -f "/etc/letsencrypt/live/yalarba.ru/fullchain.pem" ]; then + echo "SSL certificates found, switching to HTTPS configuration" + ln -sf /etc/nginx/nginx-ssl.conf /etc/nginx/conf.d/default.conf +else + echo "SSL certificates not found, using HTTP only configuration" + ln -sf /etc/nginx/nginx-http.conf /etc/nginx/conf.d/default.conf +fi + +# Проверяем конфигурацию nginx +nginx -t diff --git a/spa/app/index.html b/spa/app/index.html index 72c40ec..fc7522d 100644 --- a/spa/app/index.html +++ b/spa/app/index.html @@ -131,4 +131,4 @@

Контакты: gaziz.valitov@yalarba.travel

- \ No newline at end of file + diff --git a/spa/app/valitovgaziz/index.html b/spa/app/valitovgaziz/index.html new file mode 100644 index 0000000..ee7e817 --- /dev/null +++ b/spa/app/valitovgaziz/index.html @@ -0,0 +1,302 @@ + + + + + + Валитов Газиз - Full Stack Developer + + + +
+
+
+

Валитов Газиз Камилевич

+

Full Stack Developer / Системный администратор

+
+
+

Дата рождения: 27 октября 1985

+

Место жительства: Уфа

+
+
+
+ +
+

Контактная информация

+

Телефон: +7 (962) 543-93-43

+

Email: valitovgaziz@gmail.com

+

Telegram: @valitovgaziz

+

GitHub: github.com/valitovgaziz

+

Ожидаемая зарплата: 130 000 ₽

+

Занятость: Полная занятость (удаленная работа)

+
+ +
+

Опыт работы

+ +
+
+

Проектная работа (Full Stack Developer)

+

Октябрь 2017 — настоящее время (7 лет)

+
+
    +
  • 2022-2024: Full Stack разработка агрегатора на Golang, Postgres и JavaScript с личным кабинетом, авторизацией, аутентификацией. Проект на GitHub
  • +
  • 2021-2022: Разработка туристического агрегатора (Full Stack). Проектирование БД PostgresQL, создание фреймов для фронта. Стек: Java, JavaScript.
  • +
  • 2019-2021: Разработка маркетплейса в составе команды. Создание сервисного слоя и обращений к БД через Hibernate на Java. Проект на Bitbucket
  • +
  • 2017-2018: Фронтенд разработка сайтов и сервисов. Стек: JavaScript, HTML, CSS.
  • +
  • 2012-2015: Ремонт ТГК, администрирование ОС (установка и настройка), настройка ЛВС (прокладка, настройка роутеров).
  • +
+
+
+ +
+

Образование

+ +
+
+

Автономная некоммерческая организация высшего образования «Университет Иннополис»

+

2021

+
+

Java enterprise, Java enterprise developer (Сертификат о переквалификации)

+
+ +
+
+

УКСИВТ

+

2020

+
+

Техник по информационным системам

+
+ +
+
+

Уфимский государственный авиационный технический университет

+

2004

+
+

Автоматизация технологических систем, Сварочное производство (2 курса)

+
+
+ +
+

Повышение квалификации

+ +
+
+

Skillbox

+

2024

+
+

Управление проектами, Эффективный руководитель (комплект курсов)

+
+ +
+
+

JetBrains Academy

+

2022

+
+

Java Full Stack Developer

+
+ +
+
+

Нетология-групп

+

2020

+
+

Управление по Agile: Scrum, Kanban, Lean

+
+ +
+
+

Frog-school

+

2019

+
+

English intermediate, CodeCamp Frontend developer

+
+
+ +
+

Навыки

+
+
+

Технические навыки

+ Java + JavaScript + Golang + HTML/CSS + PostgreSQL + Hibernate + Linux + TCP/IP + Настройка ЛВС + Алгоритмы и структуры данных +
+ +
+

Языки

+

Башкирский: Родной

+

Русский: C1 (Продвинутый)

+

Английский: B2 (Средне-продвинутый)

+
+ +
+

Прочие навыки

+ Работа в команде + Управление проектами + Agile (Scrum, Kanban) + Full Stack разработка + Системное администрирование +
+
+
+ +
+

Обо мне

+
+

Без вредных привычек. Опытный Full Stack разработчик с дополнительными навыками в системном администрировании и управлении проектами. Способен работать как в команде, так и самостоятельно над сложными проектами.

+
+
+ + + + diff --git a/spa/nginx/nginx.conf b/spa/nginx/nginx.conf deleted file mode 100644 index 0af598a..0000000 --- a/spa/nginx/nginx.conf +++ /dev/null @@ -1,57 +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 http2; - listen [::]:443 ssl http2; - 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; - # } -}