Изменения документа Let's Encrypt серты на удалённую ноду
Редактировал(а) Anton Krivchenkov 29.05.2026 13:05
От версии 1.1
отредактировано Anton Krivchenkov
на 27.05.2026 19:05
на 27.05.2026 19:05
Изменить комментарий:
К данной версии нет комментариев
К версии 2.1
отредактировано Anton Krivchenkov
на 27.05.2026 19:05
на 27.05.2026 19:05
Изменить комментарий:
К данной версии нет комментариев
Сводка
-
Свойства страницы (1 изменено, 0 добавлено, 0 удалено)
Подробности
- Свойства страницы
-
- Содержимое
-
... ... @@ -64,29 +64,27 @@ 64 64 65 65 Создайте файл скрипта, например `/home/anton/sync-certs.sh`: 66 66 67 -```bash 68 -#!/bin/bash 69 -set -e # Прерывать выполнение при любой ошибке 67 + #!/bin/bash 68 + set -e # Прерывать выполнение при любой ошибке 69 + 70 + # Настройки 71 + # ВНИМАНИЕ: Слэши (/) в конце путей для rsync имеют значение! 72 + SRC="/home/anton/swag_crowdsec/swag/keys/letsencrypt/live/nextcl.dev0ps.online/" 73 + DEST_USER="anton" 74 + DEST_IP="192.168.1.121" 75 + DEST_DIR="/etc/letsencrypt/live/nextcl.dev0ps.online/" 76 + SSH_KEY="/home/anton/.ssh/id_ed25519" 77 + 78 + echo "[$(date)] Запуск синхронизации сертификатов..." 79 + 80 + # Копируем с разыменованием симлинков (-L) и удалением лишнего (--delete) 81 + rsync -avLz --delete --rsync-path="sudo rsync" -e "ssh -i $SSH_KEY" "$SRC" "${DEST_USER}@${DEST_IP}:${DEST_DIR}" 82 + 83 + # Перезапускаем контейнеры на ноде, чтобы они подхватили новые файлы 84 + ssh -i "$SSH_KEY" ${DEST_USER}@${DEST_IP} "cd /opt/remnawave && sudo docker compose restart remnawave-nginx naiveproxy hysteria2" 85 + 86 + echo "[$(date)] Синхронизация завершена успешно." 70 70 71 -# Настройки 72 -# ВНИМАНИЕ: Слэши (/) в конце путей для rsync имеют значение! 73 -SRC="/home/anton/swag_crowdsec/swag/keys/letsencrypt/live/nextcl.dev0ps.online/" 74 -DEST_USER="anton" 75 -DEST_IP="192.168.1.121" 76 -DEST_DIR="/etc/letsencrypt/live/nextcl.dev0ps.online/" 77 -SSH_KEY="/home/anton/.ssh/id_ed25519" 78 - 79 -echo "[$(date)] Запуск синхронизации сертификатов..." 80 - 81 -# Копируем с разыменованием симлинков (-L) и удалением лишнего (--delete) 82 -rsync -avLz --delete --rsync-path="sudo rsync" -e "ssh -i $SSH_KEY" "$SRC" "${DEST_USER}@${DEST_IP}:${DEST_DIR}" 83 - 84 -# Перезапускаем контейнеры на ноде, чтобы они подхватили новые файлы 85 -ssh -i "$SSH_KEY" ${DEST_USER}@${DEST_IP} "cd /opt/remnawave && sudo docker compose restart remnawave-nginx naiveproxy hysteria2" 86 - 87 -echo "[$(date)] Синхронизация завершена успешно." 88 -``` 89 - 90 90 Сделайте скрипт исполняемым: 91 91 92 92 ```bash ... ... @@ -124,9 +124,12 @@ 124 124 Вы должны увидеть скопированные файлы: `cert.pem`, `privkey.pem`, `fullchain.pem`, `chain.pem`. 125 125 126 126 > **Почему `sudo ls`, а не `sudo cd` + `cat`?** 127 -> - `sudo cd` **не работает** — `cd` это встроенная команда оболочки (shell builtin), а не отдельная программа, которую `sudo` может выполнить с повышенными правами. 128 -> - `cat` предназначен для чтения **файлов**, при попытке применить его к **папке** будет ошибка. Для просмотра содержимого директории используйте `ls`. 129 129 126 +* `sudo cd` **не работает** — `cd` это встроенная команда оболочки (shell builtin), а не отдельная программа, которую `sudo` может выполнить с повышенными правами. 127 +* `cat` предназначен для чтения **файлов**, при попытке применить его к **папке** будет ошибка. Для просмотра содержимого директории используйте `ls`. 128 + 129 + 130 + 130 130 --- 131 131 132 132 ## Автоматизация через cron (опционально) ... ... @@ -149,14 +149,14 @@ 149 149 150 150 ## Описание ключей rsync 151 151 152 -| Ключ | Назначение | 153 -|------|-----------| 154 -| `-a` | Архивный режим (сохраняет права, владельца, timestamps) | 155 -| `-v` | Подробный вывод | 156 -| `-L` | **Разыменовывает симлинки** — копирует сами файлы сертификатов, а не ссылки. Критично для Let's Encrypt! | 157 -| `-z` | Сжатие данных при передаче | 158 -| `--delete` | Удаляет файлы на целевой машине, которых больше нет в источнике (полезно при перевыпуске или смене форматов) | 159 -| `--rsync-path="sudo rsync"` | Выполняет rsync от имени root на удалённой машине (нужно для записи в `/etc/letsencrypt/`) | 153 +| Ключ | Назначение | 154 +| --------------------------- | ------------------------------------------------------------------------------------------------------------ | 155 +| `-a` | Архивный режим (сохраняет права, владельца, timestamps) | 156 +| `-v` | Подробный вывод | 157 +| `-L` | **Разыменовывает симлинки** — копирует сами файлы сертификатов, а не ссылки. Критично для Let's Encrypt! | 158 +| `-z` | Сжатие данных при передаче | 159 +| `--delete` | Удаляет файлы на целевой машине, которых больше нет в источнике (полезно при перевыпуске или смене форматов) | 160 +| `--rsync-path="sudo rsync"` | Выполняет rsync от имени root на удалённой машине (нужно для записи в `/etc/letsencrypt/`) | 160 160 161 161 --- 162 162 ... ... @@ -164,21 +164,18 @@ 164 164 165 165 ### Ошибка «No such file or directory» при rsync 166 166 167 -- Целевая папка на виртуалке ещё не создана. Подключитесь к удалённой машине и выполните: 168 - ```bash 169 - sudo mkdir -p /etc/letsencrypt/live/nextcl.dev0ps.online/ 170 - ``` 171 -- Затем повторите запуск скрипта. 168 +* Целевая папка на виртуалке ещё не создана. Подключитесь к удалённой машине и выполните:`sudo mkdir -p /etc/letsencrypt/live/nextcl.dev0ps.online/` 169 +* Затем повторите запуск скрипта. 172 172 173 173 ### Ошибка «permission denied» при rsync 174 174 175 - -Проверьте, что строка в `sudoers` на удалённой машине корректна и путь к `rsync` совпадает (`which rsync`).176 - -Убедитесь, что целевая директория существует.173 +* Проверьте, что строка в `sudoers` на удалённой машине корректна и путь к `rsync` совпадает (`which rsync`). 174 +* Убедитесь, что целевая директория существует. 177 177 178 178 ### Ошибка «permission denied» при docker compose restart 179 179 180 - -Проверьте, что `/usr/bin/docker` — правильный путь (`which docker` на удалённой машине).181 - -Убедитесь, что строка в `sudoers` разрешает выполнение `docker`.178 +* Проверьте, что `/usr/bin/docker` — правильный путь (`which docker` на удалённой машине). 179 +* Убедитесь, что строка в `sudoers` разрешает выполнение `docker`. 182 182 183 183 ### Контейнеры не подхватывают сертификаты 184 184 ... ... @@ -194,6 +194,5 @@ 194 194 195 195 ### SSH-подключение зависает / требует пароль 196 196 197 -- Проверьте доступность хоста: `ping 192.168.1.121` 198 -- Убедитесь, что SSH-ключ добавлен именно пользователю `anton` на удалённой машине, а не `root`. 199 - 195 +* Проверьте доступность хоста: `ping 192.168.1.121` 196 +* Убедитесь, что SSH-ключ добавлен именно пользователю `anton` на удалённой машине, а не `root`.