Обновить README.md

Шаг 1 и шаг 3 не были описаны, по необходимости можно дополнить.
This commit is contained in:
Snezhana 2026-04-03 22:59:52 +03:00
parent 95abd2c1b9
commit 5e8fa8fc6e

View File

@ -1,2 +1,71 @@
# Matrix_server_sertificate_renew
<details>
<summary>Зачем нужен SSL-сертификат?</summary>
SSL-сертификат - это виртуальный документ, который содержит данные об организации, её владельце и подтверждает их существование. Позволяет узнать сервер и подтвердить безопасность сайта.
Использование сертификата безопасности для сайта гарантирует:
Подлинность ресурса, к которому обращается пользователь. Это повышает у посетителей уровень доверия.
Целостность передаваемой информации. При транспортировке от сервера к браузеру данные не изменятся и не потеряются.
Конфиденциальность. 256-разрядное шифрование исключает доступ злоумышленников к информации.
</details>
Для создания сертификата Let's Encrypt требуется запустить docker-образ certbot/certbot для выполнения проверки и получения сертификата. Перед этим необходимо настроить Nginx для проверки домена.
## Шаг 1. Настройка конфигурации Nginx
## Шаг 2. Получение сертификата с помощью Certbot
```bash
docker run -it --rm \
-v "/opt/letsencrypt:/etc/letsencrypt" \
-v "/opt/matrix/nginx_data/well-known:/var/www/certbot" \
certbot/certbot certonly --webroot \
--webroot-path=/var/www/certbot \
--email example@example.com \
--agree-tos \
--no-eff-email \
-d <address>
```
<details>
<summary>Что здесь происходит:</summary>
-v "/opt/letsencrypt:/etc/letsencrypt": Монтирует папку на сервере, где будут сохранены сертификаты.
-v "/opt/matrix/nginx_data/well-known:/var/www/certbot": Монтирует папку, в которую Certbot поместит временный файл для проверки. Обратите внимание, что путь внутри контейнера (/var/www/certbot) должен соответствовать тому, который был указан в конфигурации Nginx (в данном случае root /var/www/certbot).
certonly --webroot: Указывает Certbot получить сертификат, используя webroot метод.
</details>
После успешного выполнения появится сообщение, что сертификат сохранен. Его файлы будут лежать в папке /opt/letsencrypt/live/address
## Шаг 3. Настройка HTTPS в Nginx
## Шаг 4. Настройка автоматического обновления
Сертификаты Let's Encrypt действуют 90 дней, но можно настроить автоматическое продление.
Самый простой способ - добавить задачу в <abbr title="Планировщик задач в Unix-подобных ОС">crontab</abbr>.
### Открытие для редактирования:
```bash
crontab -e
```
### Редактирование планировщика задач:
```bash
0 2 * * * docker run --rm -v "/opt/letsencrypt:/etc/letsencrypt" -v "/opt/matrix/nginx_data/well-known:/var/www/certbot" certbot/certbot renew --webroot --webroot-path=/var/www/certbot --quiet && docker exec nginx nginx -s reload
```
<details>
<summary>Описание команды</summary>
Первые 5 параметров указывают время. 0 минут, 2 часа, каждый день, каждый месяц, каждый год. Т.е. команда будет запускаться автоматически каждый день в 2 часа ночи.
docker run - создание и запуск нового контейнера docker
--rm - автоматическое удаление контейнера после завершения
-v - монтирование томов (связывание папки на сервере с папками внутри контейнера Certbot)
Путь на хосте - /opt/letsencrypt; путь в контейнере - /etc/letsencrypt. Там хранятся сертификаты и ключи.
Путь на хосте - /opt/matrix/nginx_data/well-known; путь в контейнере - /var/www/certbot. Там хранятся временные файлы для проверки домена.
Таким образом, сертификаты сохраняются на хост-машине и не теряются после удаления контейнера. Nginx может читать сертификаты из /opt/letsencrypt/live... . Certbot кладет /var/www/certbot/.well-known/acme-challenge/, а на хосте они оказываются в /opt/matrix/nginx_data/well-known/.well-known/acme-challenge/, откуда Nginx их отдаёт Let's Encrypt.
Параметры certbot renew:
renew - проверка и обновление сертификатов, если их срок действия истекает
--webroot - использование веб-верификации (через файлы в папке)
--webroot-path... - указание папки, где Certbot будет создавать временные файлы для проверки
--quiet - тихий режим (без вывода всех логов, сообщения появятся только в случае ошибки).
&& docker exec nginx nginx -s reload - тут работает логическая связка "команда1 && команда2". Команда2 выполняется только если команда1 завершилась успешно. В этом случае мы перезагружаем Nginx.
</details>