This commit is contained in:
root
2021-10-03 14:45:56 +03:00
commit b060ba0580
29 changed files with 1586 additions and 0 deletions

View File

@@ -0,0 +1,12 @@
API_SERVER=https://traefik-api.domain.ru/api/v1/certman/getcerts
TOKEN=
DOMAIN=
DEBUG=false
CERT_NAME=cert.pem
KEY_NAME=key.pem
PATH_TO_COPY=/etc/letsencrypt
SERVICE_RESTART=nginx

View File

@@ -0,0 +1,3 @@
.env
*.pem
*.bak

View File

@@ -0,0 +1,73 @@
#!/bin/bash
echo "[ START ] on $(date +'%d-%m-%Y_%H-%M')"
function checkMD() {
local new=$1
local old=$2
[[ ! -f ${old} ]] && return 1
$(diff $old $new > /dev/null)
return $?
}
[[ ! -f .env ]] && {
cp .env.example .env
apt update && apt install jq curl -y
[[ ! $? -eq 0 ]] && exit 1
echo "Init complete, please check env in .env and rerun script again"
echo "==="
cat .env
echo "==="
exit 0
}
source .env
CP=0
case ${DEBUG} in
true) DEBUG_CURL="-v";;
false) DEBUG_CURL="-s";;
*) DEBUG_CURL="-s";;
esac
[[ ! -z $1 ]] && DOMAIN=$1
[[ ! -d ${PATH_TO_COPY} ]] && {
echo "Dir for cert nof found, created"
mkdir $PATH_TO_COPY || exit 1
}
CERT=$(curl ${DEBUG_CURL} $API_SERVER -X POST -H "Authorization: Bearer $TOKEN" --form "domain=$DOMAIN" | jq -r '.data.chain')
[[ ! $? -eq 0 ]] && exit 1
echo -e $CERT > $CERT_NAME
KEY=$(curl ${DEBUG_CURL} $API_SERVER -X POST -H "Authorization: Bearer $TOKEN" --form "domain=$DOMAIN" | jq -r '.data.key')
[[ ! $? -eq 0 ]] && exit 1
echo -e $KEY > $KEY_NAME
CERTS=( $CERT_NAME $KEY_NAME )
for FILE in ${CERTS[*]}; do
if ! checkMD $FILE $PATH_TO_COPY/$FILE; then
cp $PATH_TO_COPY/$FILE $PATH_TO_COPY/$FILE.bak
cp $FILE $PATH_TO_COPY/$FILE
[[ $? -eq 0 ]] && ((CP=CP+1))
echo "$FILE updated"
else
echo "update $FILE not needed"
fi
done
[[ ! $CP == 0 ]] && {
systemctl restart $SERVICE_RESTART
[[ ! $? -eq 0 ]] && echo "service not restarted, restart manually"
}
echo "delete tempary files"
rm $CERT_NAME $KEY_NAME
echo "[ END ] on $(date +'%d-%m-%Y_%H-%M')"
echo ""

View File

@@ -0,0 +1,30 @@
# Traefik-client
- Вытягивает с [traefik-api](../traefik/readme.MD) сертификаты и перезапускает нужный сервис
1. Можно запустить с указанием домена, это переназначит поведение, указанное в `.env`
**Пример**:
```
./getcert.sh domain.ru
```
2. Первый запуск создаст `.env` и заполнит его дефолтными параметрами, после чего скрипт завершит работу и попросит дозаполнить переменные.
**Нужно указать:**
```
API_SERVER=https://traefik-api.domain.ru/api/v1/certman/getcerts - полный путь к АПИ и методу
TOKEN= - токен
DOMAIN= - домен, сертификаты которого надо захватить
DEBUG=false - определяет уровень логирования curl
CERT_NAME=cert.pem - определяет имя файла создаваемого в нужной точке на сервере
KEY_NAME=key.pem - определяет имя файла создаваемого в нужной точке на сервере
PATH_TO_COPY=/etc/letsencrypt - определяет точку, куда нужно сложить сертификаты, без / на конце
SERVICE_RESTART=nginx - определяет какой сервис нужно рестартануть после подмены ключей
```
## Примечания
- Ключи не заменяются, если они идентичны.
- Сервис не перезапустится, если ключи не изменялись с моменты последнего импорта.