init
This commit is contained in:
12
traefik-repo/traefik-api-client/.env.example
Normal file
12
traefik-repo/traefik-api-client/.env.example
Normal 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
|
||||
3
traefik-repo/traefik-api-client/.gitignore
vendored
Normal file
3
traefik-repo/traefik-api-client/.gitignore
vendored
Normal file
@@ -0,0 +1,3 @@
|
||||
.env
|
||||
*.pem
|
||||
*.bak
|
||||
73
traefik-repo/traefik-api-client/getcert.sh
Normal file
73
traefik-repo/traefik-api-client/getcert.sh
Normal 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 ""
|
||||
30
traefik-repo/traefik-api-client/readme.MD
Normal file
30
traefik-repo/traefik-api-client/readme.MD
Normal 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 - определяет какой сервис нужно рестартануть после подмены ключей
|
||||
```
|
||||
|
||||
## Примечания
|
||||
- Ключи не заменяются, если они идентичны.
|
||||
- Сервис не перезапустится, если ключи не изменялись с моменты последнего импорта.
|
||||
Reference in New Issue
Block a user