nginx and certbot into containers is start and renew certs by auto

This commit is contained in:
2025-05-31 19:54:35 +03:00
parent 81fd806691
commit 89d6d62f12
15 changed files with 433 additions and 345 deletions
+4 -1
View File
@@ -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
+9 -12
View File
@@ -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"]
+21
View File
@@ -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
+17
View File
@@ -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
+11 -8
View File
@@ -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:
+17 -2
View File
@@ -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
-65
View File
@@ -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;
}
}
-65
View File
@@ -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;
}
}
+13
View File
@@ -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;
}
}
+25
View File
@@ -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;
}
}
-134
View File
@@ -1,134 +0,0 @@
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>ЯлАрба - Туристический агрегатор</title>
<style>
body {
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
line-height: 1.6;
color: #333;
max-width: 800px;
margin: 0 auto;
padding: 20px;
background-color: #f5f7fa;
}
header {
background-color: #1e88e5;
color: white;
padding: 20px;
border-radius: 8px;
margin-bottom: 30px;
text-align: center;
}
h1 {
margin: 0;
font-size: 2.2em;
}
h2 {
color: #1e88e5;
border-bottom: 2px solid #1e88e5;
padding-bottom: 5px;
margin-top: 30px;
}
.developer {
background-color: #e3f2fd;
padding: 15px;
border-radius: 8px;
margin: 20px 0;
}
.roadmap {
background-color: white;
padding: 20px;
border-radius: 8px;
box-shadow: 0 2px 10px rgba(0,0,0,0.1);
}
.phase {
margin-bottom: 20px;
padding-bottom: 20px;
border-bottom: 1px dashed #ccc;
}
.phase:last-child {
border-bottom: none;
}
footer {
text-align: center;
margin-top: 40px;
color: #666;
font-size: 0.9em;
}
</style>
</head>
<body>
<header>
<h1>ЯлАрба</h1>
<p>Инновационный агрегатор мест отдыха с ИИ-планировщиком маршрутов</p>
</header>
<section>
<h2>О проекте</h2>
<p>ЯлАрба — это супер-приложение для путешественников, объединяющее в себе:</p>
<ul>
<li>Агрегатор мест отдыха (отели, экскурсии, рестораны)</li>
<li>Маркетплейс туров и локальных сувениров</li>
<li>ИИ-планировщик маршрутов с учетом здоровья пользователя</li>
<li>Систему бронирования и покупки билетов</li>
</ul>
<p>Наша миссия — сделать планирование путешествий простым, персонализированным и доступным.</p>
</section>
<div class="developer">
<h2>Разработчик</h2>
<p><strong>Валитов Газиз</strong></p>
<p>Full-stack разработчик с опытом в travel-tech проектах. Специализация: Python/Django, React, системы рекомендаций на основе ИИ.</p>
</div>
<section class="roadmap">
<h2>План разработки</h2>
<div class="phase">
<h3>Этап 1: MVP (0-6 месяцев)</h3>
<ul>
<li>База мест отдыха (1000+ позиций)</li>
<li>Интеграция с API бронирования (Booking.com, Ostrovok)</li>
<li>Прототип ИИ-рекомендаций</li>
<li>Мобильная версия (PWA)</li>
</ul>
</div>
<div class="phase">
<h3>Этап 2: Монетизация (6-12 месяцев)</h3>
<ul>
<li>Система комиссий (10-15% с бронирований)</li>
<li>Платные подписки (PRO-аккаунт)</li>
<li>Партнерская программа для гидов</li>
</ul>
</div>
<div class="phase">
<h3>Этап 3: Масштабирование (12-24 месяца)</h3>
<ul>
<li>Выход на рынки СНГ (Казахстан, Узбекистан)</li>
<li>Полноценный ИИ-ассистент с рекомендациями по здоровью</li>
<li>Интеграция с сервисами аренды авто</li>
</ul>
</div>
</section>
<section>
<h2>Технологический стек</h2>
<ul>
<li><strong>Frontend:</strong> React.js, TypeScript, PWA</li>
<li><strong>Backend:</strong> Python/Django, PostgreSQL</li>
<li><strong>AI:</strong> NLP-модели для обработки запросов, рекомендательные системы</li>
<li><strong>DevOps:</strong> Docker, Kubernetes, Yandex Cloud</li>
</ul>
</section>
<footer>
<p>© 2024 ЯлАрба. Все права защищены.</p>
<p>Контакты: gaziz.valitov@yalarba.travel</p>
</footer>
</body>
</html>
+13
View File
@@ -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
+1 -1
View File
@@ -131,4 +131,4 @@
<p>Контакты: gaziz.valitov@yalarba.travel</p>
</footer>
</body>
</html>
</html>
+302
View File
@@ -0,0 +1,302 @@
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Валитов Газиз - Full Stack Developer</title>
<style>
:root {
--primary: #2c3e50;
--secondary: #3498db;
--light: #ecf0f1;
--dark: #2c3e50;
--success: #2ecc71;
}
body {
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
line-height: 1.6;
color: #333;
max-width: 1200px;
margin: 0 auto;
padding: 0 20px;
background-color: #f9f9f9;
}
header {
background-color: var(--primary);
color: white;
padding: 2rem 0;
margin-bottom: 2rem;
border-radius: 0 0 10px 10px;
}
.header-content {
display: flex;
justify-content: space-between;
align-items: center;
flex-wrap: wrap;
}
h1, h2, h3 {
color: var(--primary);
}
h1 {
margin: 0;
font-size: 2.5rem;
}
h2 {
border-bottom: 2px solid var(--secondary);
padding-bottom: 0.5rem;
margin-top: 2rem;
}
.contact-info {
background-color: var(--light);
padding: 1.5rem;
border-radius: 8px;
margin-bottom: 2rem;
}
.contact-info p {
margin: 0.5rem 0;
}
.job, .education {
background-color: white;
padding: 1.5rem;
margin-bottom: 1.5rem;
border-radius: 8px;
box-shadow: 0 2px 5px rgba(0,0,0,0.1);
}
.job-header, .edu-header {
display: flex;
justify-content: space-between;
flex-wrap: wrap;
margin-bottom: 1rem;
}
.skills-container {
display: flex;
flex-wrap: wrap;
gap: 1rem;
margin-bottom: 2rem;
}
.skill-category {
flex: 1;
min-width: 250px;
background-color: white;
padding: 1.5rem;
border-radius: 8px;
box-shadow: 0 2px 5px rgba(0,0,0,0.1);
}
.skill-category h3 {
margin-top: 0;
}
ul {
padding-left: 1.2rem;
}
li {
margin-bottom: 0.5rem;
}
.tag {
display: inline-block;
background-color: var(--secondary);
color: white;
padding: 0.3rem 0.8rem;
border-radius: 20px;
font-size: 0.9rem;
margin-right: 0.5rem;
margin-bottom: 0.5rem;
}
a {
color: var(--secondary);
text-decoration: none;
}
a:hover {
text-decoration: underline;
}
footer {
text-align: center;
padding: 2rem 0;
margin-top: 2rem;
color: #777;
border-top: 1px solid #ddd;
}
@media (max-width: 768px) {
.header-content {
flex-direction: column;
text-align: center;
}
.contact-info {
text-align: center;
}
}
</style>
</head>
<body>
<header>
<div class="header-content">
<div>
<h1>Валитов Газиз Камилевич</h1>
<p>Full Stack Developer / Системный администратор</p>
</div>
<div>
<p>Дата рождения: 27 октября 1985</p>
<p>Место жительства: Уфа</p>
</div>
</div>
</header>
<div class="contact-info">
<h2>Контактная информация</h2>
<p><strong>Телефон:</strong> +7 (962) 543-93-43</p>
<p><strong>Email:</strong> <a href="mailto:valitovgaziz@gmail.com">valitovgaziz@gmail.com</a></p>
<p><strong>Telegram:</strong> @valitovgaziz</p>
<p><strong>GitHub:</strong> <a href="https://github.com/valitovgaziz" target="_blank">github.com/valitovgaziz</a></p>
<p><strong>Ожидаемая зарплата:</strong> 130 000 ₽</p>
<p><strong>Занятость:</strong> Полная занятость (удаленная работа)</p>
</div>
<section>
<h2>Опыт работы</h2>
<div class="job">
<div class="job-header">
<h3>Проектная работа (Full Stack Developer)</h3>
<p><strong>Октябрь 2017 — настоящее время (7 лет)</strong></p>
</div>
<ul>
<li><strong>2022-2024:</strong> Full Stack разработка агрегатора на Golang, Postgres и JavaScript с личным кабинетом, авторизацией, аутентификацией. <a href="https://github.com/valitovgaziz/yahrb_REST_API_2.0.git" target="_blank">Проект на GitHub</a></li>
<li><strong>2021-2022:</strong> Разработка туристического агрегатора (Full Stack). Проектирование БД PostgresQL, создание фреймов для фронта. Стек: Java, JavaScript.</li>
<li><strong>2019-2021:</strong> Разработка маркетплейса в составе команды. Создание сервисного слоя и обращений к БД через Hibernate на Java. <a href="https://bitbucket.org/Guhar4k/marketplace/src/master/src/" target="_blank">Проект на Bitbucket</a></li>
<li><strong>2017-2018:</strong> Фронтенд разработка сайтов и сервисов. Стек: JavaScript, HTML, CSS.</li>
<li><strong>2012-2015:</strong> Ремонт ТГК, администрирование ОС (установка и настройка), настройка ЛВС (прокладка, настройка роутеров).</li>
</ul>
</div>
</section>
<section>
<h2>Образование</h2>
<div class="education">
<div class="edu-header">
<h3>Автономная некоммерческая организация высшего образования «Университет Иннополис»</h3>
<p><strong>2021</strong></p>
</div>
<p>Java enterprise, Java enterprise developer (Сертификат о переквалификации)</p>
</div>
<div class="education">
<div class="edu-header">
<h3>УКСИВТ</h3>
<p><strong>2020</strong></p>
</div>
<p>Техник по информационным системам</p>
</div>
<div class="education">
<div class="edu-header">
<h3>Уфимский государственный авиационный технический университет</h3>
<p><strong>2004</strong></p>
</div>
<p>Автоматизация технологических систем, Сварочное производство (2 курса)</p>
</div>
</section>
<section>
<h2>Повышение квалификации</h2>
<div class="education">
<div class="edu-header">
<h3>Skillbox</h3>
<p><strong>2024</strong></p>
</div>
<p>Управление проектами, Эффективный руководитель (комплект курсов)</p>
</div>
<div class="education">
<div class="edu-header">
<h3>JetBrains Academy</h3>
<p><strong>2022</strong></p>
</div>
<p>Java Full Stack Developer</p>
</div>
<div class="education">
<div class="edu-header">
<h3>Нетология-групп</h3>
<p><strong>2020</strong></p>
</div>
<p>Управление по Agile: Scrum, Kanban, Lean</p>
</div>
<div class="education">
<div class="edu-header">
<h3>Frog-school</h3>
<p><strong>2019</strong></p>
</div>
<p>English intermediate, CodeCamp Frontend developer</p>
</div>
</section>
<section>
<h2>Навыки</h2>
<div class="skills-container">
<div class="skill-category">
<h3>Технические навыки</h3>
<span class="tag">Java</span>
<span class="tag">JavaScript</span>
<span class="tag">Golang</span>
<span class="tag">HTML/CSS</span>
<span class="tag">PostgreSQL</span>
<span class="tag">Hibernate</span>
<span class="tag">Linux</span>
<span class="tag">TCP/IP</span>
<span class="tag">Настройка ЛВС</span>
<span class="tag">Алгоритмы и структуры данных</span>
</div>
<div class="skill-category">
<h3>Языки</h3>
<p><strong>Башкирский:</strong> Родной</p>
<p><strong>Русский:</strong> C1 (Продвинутый)</p>
<p><strong>Английский:</strong> B2 (Средне-продвинутый)</p>
</div>
<div class="skill-category">
<h3>Прочие навыки</h3>
<span class="tag">Работа в команде</span>
<span class="tag">Управление проектами</span>
<span class="tag">Agile (Scrum, Kanban)</span>
<span class="tag">Full Stack разработка</span>
<span class="tag">Системное администрирование</span>
</div>
</div>
</section>
<section>
<h2>Обо мне</h2>
<div class="job">
<p>Без вредных привычек. Опытный Full Stack разработчик с дополнительными навыками в системном администрировании и управлении проектами. Способен работать как в команде, так и самостоятельно над сложными проектами.</p>
</div>
</section>
<footer>
<p>&copy; 2024 Валитов Газиз. Все права защищены.</p>
</footer>
</body>
</html>
-57
View File
@@ -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;
# }
}