Compare commits
55 Commits
c55e984918
...
master
Author | SHA1 | Date | |
---|---|---|---|
d506f000a3 | |||
8906974a83 | |||
c12cafc277 | |||
f268f5f5f4 | |||
d8bc48ec3a | |||
3940c3801d | |||
00f9e3ee5f | |||
1bacfd307c | |||
8f6913565c | |||
62b34e4ac0 | |||
70c32de959 | |||
3eedd4293b | |||
a2f737eb46 | |||
82a3440d5a | |||
a3e86ac6ac | |||
556471d321 | |||
9d666afab5 | |||
5eb4ccb58e | |||
84849b71b1 | |||
316206140a | |||
7cc7df6ac1 | |||
0d1c13d125 | |||
cb9a449882 | |||
678388afaa | |||
016b47774b | |||
6db4d1a5a8 | |||
f54de7a26c | |||
75678ca093 | |||
554d7a5ddc | |||
62e75a42f2 | |||
4a6b575ce0 | |||
8d83a2716b | |||
4807624dbc | |||
b5aa7e9945 | |||
8d0caad3c7 | |||
87b007d4b9 | |||
7852e82e74 | |||
9b92276fc1 | |||
e39ce5518c | |||
ea6e48886d | |||
4187f4b772 | |||
b00916ceba | |||
f95b959bf2 | |||
609b5c1d62 | |||
a6a20e0dea | |||
821335e1ca | |||
e31c75d8b1 | |||
c041bac532 | |||
8eb33813d6 | |||
faf2e2bc8e | |||
adc0528c81 | |||
1259857474 | |||
db684d4ebd | |||
df657bb035 | |||
5d8634c8df |
24
bin/certbot-dns-alwaysdata.sh
Normal file
24
bin/certbot-dns-alwaysdata.sh
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
#/bin/bash
|
||||||
|
|
||||||
|
# certbot certonly --manual --preferred-challenges=dns --manual-auth-hook certbot-dns-alwaysdata.sh --manual-cleanup-hook certbot-dns-alwaysdata.sh -d "*.kaz.bzh" -d "kaz.bzh"
|
||||||
|
|
||||||
|
ALWAYSDATA_TOKEN="TOKEN"
|
||||||
|
ALWAYSDATA_ACCOUNT="ACCOUNT"
|
||||||
|
ALWAYSDATA_API="https://api.alwaysdata.com/v1/"
|
||||||
|
|
||||||
|
DOMAIN_ID=$(curl -s -X GET --basic --user "${ALWAYSDATA_TOKEN} account=${ALWAYSDATA_ACCOUNT}:" ${ALWAYSDATA_API}/domain/?name=${CERTBOT_DOMAIN} | jq '.[0].id')
|
||||||
|
|
||||||
|
add_record(){
|
||||||
|
RECORD_ID=$(curl -s -X POST -d "{\"domain\":\"${DOMAIN_ID}\", \"type\":\"TXT\", \"name\":\"_acme-challenge\", \"value\":\"${CERTBOT_VALIDATION}\"}" --basic --user "${ALWAYSDATA_TOKEN} account=${ALWAYSDATA_ACCOUNT}:" "${ALWAYSDATA_API}/record/")
|
||||||
|
}
|
||||||
|
|
||||||
|
del_record(){
|
||||||
|
RECORD_ID=$(curl -s -X GET --basic --user "${ALWAYSDATA_TOKEN} account=${ALWAYSDATA_ACCOUNT}:" "${ALWAYSDATA_API}/record/?name=_acme-challenge&type=TXT&domain=${DOMAIN_ID}" | jq ".[0].id")
|
||||||
|
curl -s -X DELETE --basic --user "${ALWAYSDATA_TOKEN} account=${ALWAYSDATA_ACCOUNT}:" "${ALWAYSDATA_API}/record/${RECORD_ID}/"
|
||||||
|
}
|
||||||
|
|
||||||
|
if [ -z ${CERTBOT_AUTH_OUTPUT} ]; then
|
||||||
|
add_record
|
||||||
|
else
|
||||||
|
del_record
|
||||||
|
fi
|
@ -8,6 +8,9 @@
|
|||||||
# Did : 13 fevrier 2025 modif des save en postgres et mysql
|
# Did : 13 fevrier 2025 modif des save en postgres et mysql
|
||||||
# Did : ajout des sauvegardes de mobilizon et mattermost en postgres
|
# Did : ajout des sauvegardes de mobilizon et mattermost en postgres
|
||||||
|
|
||||||
|
# 20/04/2025
|
||||||
|
# Did : Ajout des sauvegardes de peertube dans les services generaux
|
||||||
|
|
||||||
|
|
||||||
# En cas d'absence de postfix, il faut lancer :
|
# En cas d'absence de postfix, il faut lancer :
|
||||||
# docker network create postfix_mailNet
|
# docker network create postfix_mailNet
|
||||||
@ -16,8 +19,7 @@
|
|||||||
# sauvegarde la base de données d'un compose
|
# sauvegarde la base de données d'un compose
|
||||||
# met à jours les paramètres de configuration du mandataire (proxy)
|
# met à jours les paramètres de configuration du mandataire (proxy)
|
||||||
|
|
||||||
#KAZ_ROOT=$(cd "$(dirname $0)/.."; pwd)
|
KAZ_ROOT=$(cd "$(dirname $0)/.."; pwd)
|
||||||
KAZ_ROOT=/kaz
|
|
||||||
. "${KAZ_ROOT}/bin/.commonFunctions.sh"
|
. "${KAZ_ROOT}/bin/.commonFunctions.sh"
|
||||||
setKazVars
|
setKazVars
|
||||||
|
|
||||||
@ -221,6 +223,10 @@ saveComposes () {
|
|||||||
echo "save mobilizon"
|
echo "save mobilizon"
|
||||||
saveDB ${mobilizonDBName} "${mobilizon_POSTGRES_USER}" "${mobilizon_POSTGRES_PASSWORD}" "${mobilizon_POSTGRES_DB}" mobilizon postgres
|
saveDB ${mobilizonDBName} "${mobilizon_POSTGRES_USER}" "${mobilizon_POSTGRES_PASSWORD}" "${mobilizon_POSTGRES_DB}" mobilizon postgres
|
||||||
;;
|
;;
|
||||||
|
peertube)
|
||||||
|
echo "save peertube"
|
||||||
|
saveDB ${peertubeDBName} "${peertube_POSTGRES_USER}" "${peertube_POSTGRES_PASSWORD}" "${PEERTUBE_DB_HOSTNAME}" peertube postgres
|
||||||
|
;;
|
||||||
mastodon)
|
mastodon)
|
||||||
echo "save mastodon"
|
echo "save mastodon"
|
||||||
saveDB ${mastodonDBName} "${mastodon_POSTGRES_USER}" "${mastodon_POSTGRES_PASSWORD}" "${mastodon_POSTGRES_DB}" mastodon postgres
|
saveDB ${mastodonDBName} "${mastodon_POSTGRES_USER}" "${mastodon_POSTGRES_PASSWORD}" "${mastodon_POSTGRES_DB}" mastodon postgres
|
||||||
|
@ -41,8 +41,6 @@ cd "${KAZ_ROOT}"
|
|||||||
|
|
||||||
# DOCK_DIR="${KAZ_COMP_DIR}" # ???
|
# DOCK_DIR="${KAZ_COMP_DIR}" # ???
|
||||||
|
|
||||||
SETUP_MAIL="docker exec -ti mailServ setup"
|
|
||||||
|
|
||||||
# on détermine le script appelant, le fichier log et le fichier source, tous issus de la même racine
|
# on détermine le script appelant, le fichier log et le fichier source, tous issus de la même racine
|
||||||
PRG=$(basename $0)
|
PRG=$(basename $0)
|
||||||
RACINE=${PRG%.sh}
|
RACINE=${PRG%.sh}
|
||||||
@ -210,15 +208,6 @@ done
|
|||||||
echo "numero,nom,quota_disque,action_auto" > "${TEMP_PAHEKO}"
|
echo "numero,nom,quota_disque,action_auto" > "${TEMP_PAHEKO}"
|
||||||
echo "curl \"https://${paheko_API_USER}:${paheko_API_PASSWORD}@kaz-paheko.kaz.bzh/api/user/import\" -T \"${TEMP_PAHEKO}\"" >> "${CMD_PAHEKO}"
|
echo "curl \"https://${paheko_API_USER}:${paheko_API_PASSWORD}@kaz-paheko.kaz.bzh/api/user/import\" -T \"${TEMP_PAHEKO}\"" >> "${CMD_PAHEKO}"
|
||||||
|
|
||||||
#echo "récupération des login postfix... "
|
|
||||||
## on stocke les emails et les alias KAZ déjà créés
|
|
||||||
#(
|
|
||||||
# ${SETUP_MAIL} email list
|
|
||||||
# ${SETUP_MAIL} alias list
|
|
||||||
#) | cut -d ' ' -f 2 | grep @ | sort > "${TFILE_EMAIL}"
|
|
||||||
# did on supprime le ^M en fin de fichier pour pas faire planter les grep
|
|
||||||
#dos2unix "${TFILE_EMAIL}"
|
|
||||||
|
|
||||||
echo "on récupère tous les emails (secours/alias/kaz) sur le ldap"
|
echo "on récupère tous les emails (secours/alias/kaz) sur le ldap"
|
||||||
FILE_LDIF=/home/sauve/ldap.ldif
|
FILE_LDIF=/home/sauve/ldap.ldif
|
||||||
/kaz/bin/ldap/ldap_sauve.sh
|
/kaz/bin/ldap/ldap_sauve.sh
|
||||||
@ -226,13 +215,13 @@ gunzip ${FILE_LDIF}.gz -f
|
|||||||
grep -aEiorh '([[:alnum:]]+([._-][[:alnum:]]+)*@[[:alnum:]]+([._-][[:alnum:]]+)*\.[[:alpha:]]{2,6})' ${FILE_LDIF} | sort -u > ${TFILE_EMAIL}
|
grep -aEiorh '([[:alnum:]]+([._-][[:alnum:]]+)*@[[:alnum:]]+([._-][[:alnum:]]+)*\.[[:alpha:]]{2,6})' ${FILE_LDIF} | sort -u > ${TFILE_EMAIL}
|
||||||
|
|
||||||
echo "récupération des login mattermost... "
|
echo "récupération des login mattermost... "
|
||||||
docker exec -ti mattermostServ bin/mmctl user list --all | grep ":.*(" | cut -d ':' -f 2 | cut -d ' ' -f 2 | sort > "${TFILE_MM}"
|
docker exec -i mattermostServ bin/mmctl user list --all | grep ":.*(" | cut -d ':' -f 2 | cut -d ' ' -f 2 | sort > "${TFILE_MM}"
|
||||||
|
|
||||||
dos2unix "${TFILE_MM}"
|
dos2unix "${TFILE_MM}"
|
||||||
echo "done"
|
echo "done"
|
||||||
|
|
||||||
# se connecter à l'agora pour ensuite pouvoir passer toutes les commandes mmctl
|
# se connecter à l'agora pour ensuite pouvoir passer toutes les commandes mmctl
|
||||||
echo "docker exec -ti mattermostServ bin/mmctl auth login ${httpProto}://${URL_AGORA} --name local-server --username ${mattermost_user} --password ${mattermost_pass}" | tee -a "${CMD_INIT}"
|
echo "docker exec -i mattermostServ bin/mmctl auth login ${httpProto}://${URL_AGORA} --name local-server --username ${mattermost_user} --password ${mattermost_pass}" | tee -a "${CMD_INIT}"
|
||||||
|
|
||||||
# vérif des emails
|
# vérif des emails
|
||||||
regex="^(([A-Za-z0-9]+((\.|\-|\_|\+)?[A-Za-z0-9]?)*[A-Za-z0-9]+)|[A-Za-z0-9]+)@(([A-Za-z0-9]+)+((\.|\-|\_)?([A-Za-z0-9]+)+)*)+\.([A-Za-z]{2,})+$"
|
regex="^(([A-Za-z0-9]+((\.|\-|\_|\+)?[A-Za-z0-9]?)*[A-Za-z0-9]+)|[A-Za-z0-9]+)@(([A-Za-z0-9]+)+((\.|\-|\_)?([A-Za-z0-9]+)+)*)+\.([A-Za-z]{2,})+$"
|
||||||
@ -379,8 +368,6 @@ while read ligne; do
|
|||||||
else
|
else
|
||||||
SEND_MSG_CREATE=true
|
SEND_MSG_CREATE=true
|
||||||
echo "${EMAIL_SOUHAITE} n'existe pas" | tee -a "${LOG}"
|
echo "${EMAIL_SOUHAITE} n'existe pas" | tee -a "${LOG}"
|
||||||
echo "${SETUP_MAIL} email add ${EMAIL_SOUHAITE} ${PASSWORD}" | tee -a "${CMD_LOGIN}"
|
|
||||||
echo "${SETUP_MAIL} quota set ${EMAIL_SOUHAITE} ${QUOTA}G" | tee -a "${CMD_LOGIN}"
|
|
||||||
# LDAP, à tester
|
# LDAP, à tester
|
||||||
user=$(echo ${EMAIL_SOUHAITE} | awk -F '@' '{print $1}')
|
user=$(echo ${EMAIL_SOUHAITE} | awk -F '@' '{print $1}')
|
||||||
domain=$(echo ${EMAIL_SOUHAITE} | awk -F '@' '{print $2}')
|
domain=$(echo ${EMAIL_SOUHAITE} | awk -F '@' '{print $2}')
|
||||||
@ -597,11 +584,11 @@ userPassword: {CRYPT}${pass}\n\n' | ldapmodify -c -H ldap://${LDAP_IP} -D \"cn=$
|
|||||||
echo "${IDENT_KAZ} existe déjà sur mattermost" | tee -a "${LOG}"
|
echo "${IDENT_KAZ} existe déjà sur mattermost" | tee -a "${LOG}"
|
||||||
else
|
else
|
||||||
# on créé le compte mattermost
|
# on créé le compte mattermost
|
||||||
echo "docker exec -ti mattermostServ bin/mmctl user create --email ${EMAIL_SOUHAITE} --username ${IDENT_KAZ} --password ${PASSWORD}" | tee -a "${CMD_LOGIN}"
|
echo "docker exec -i mattermostServ bin/mmctl user create --email ${EMAIL_SOUHAITE} --username ${IDENT_KAZ} --password ${PASSWORD}" | tee -a "${CMD_LOGIN}"
|
||||||
# et enfin on ajoute toujours le user à l'équipe KAZ et aux 2 channels publiques
|
# et enfin on ajoute toujours le user à l'équipe KAZ et aux 2 channels publiques
|
||||||
echo "docker exec -ti mattermostServ bin/mmctl team users add kaz ${EMAIL_SOUHAITE}" | tee -a "${CMD_LOGIN}"
|
echo "docker exec -i mattermostServ bin/mmctl team users add kaz ${EMAIL_SOUHAITE}" | tee -a "${CMD_LOGIN}"
|
||||||
echo "docker exec -ti mattermostServ bin/mmctl channel users add kaz:une-question--un-soucis ${EMAIL_SOUHAITE}" | tee -a "${CMD_LOGIN}"
|
echo "docker exec -i mattermostServ bin/mmctl channel users add kaz:une-question--un-soucis ${EMAIL_SOUHAITE}" | tee -a "${CMD_LOGIN}"
|
||||||
echo "docker exec -ti mattermostServ bin/mmctl channel users add kaz:cafe-du-commerce--ouvert-2424h ${EMAIL_SOUHAITE}" | tee -a "${CMD_LOGIN}"
|
echo "docker exec -i mattermostServ bin/mmctl channel users add kaz:cafe-du-commerce--ouvert-2424h ${EMAIL_SOUHAITE}" | tee -a "${CMD_LOGIN}"
|
||||||
NB_SERVICES_BASE=$((NB_SERVICES_BASE+1))
|
NB_SERVICES_BASE=$((NB_SERVICES_BASE+1))
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@ -609,10 +596,10 @@ userPassword: {CRYPT}${pass}\n\n' | ldapmodify -c -H ldap://${LDAP_IP} -D \"cn=$
|
|||||||
# l'équipe existe t-elle déjà ?
|
# l'équipe existe t-elle déjà ?
|
||||||
nb=$(docker exec mattermostServ bin/mmctl team list | grep -w "${EQUIPE_AGORA}" | wc -l)
|
nb=$(docker exec mattermostServ bin/mmctl team list | grep -w "${EQUIPE_AGORA}" | wc -l)
|
||||||
if [ "${nb}" == "0" ];then # non, on la créé en mettant le user en admin de l'équipe
|
if [ "${nb}" == "0" ];then # non, on la créé en mettant le user en admin de l'équipe
|
||||||
echo "docker exec -ti mattermostServ bin/mmctl team create --name ${EQUIPE_AGORA} --display_name ${EQUIPE_AGORA} --email ${EMAIL_SOUHAITE}" --private | tee -a "${CMD_INIT}"
|
echo "docker exec -i mattermostServ bin/mmctl team create --name ${EQUIPE_AGORA} --display_name ${EQUIPE_AGORA} --email ${EMAIL_SOUHAITE}" --private | tee -a "${CMD_INIT}"
|
||||||
fi
|
fi
|
||||||
# puis ajouter le user à l'équipe
|
# puis ajouter le user à l'équipe
|
||||||
echo "docker exec -ti mattermostServ bin/mmctl team users add ${EQUIPE_AGORA} ${EMAIL_SOUHAITE}" | tee -a "${CMD_INIT}"
|
echo "docker exec -i mattermostServ bin/mmctl team users add ${EQUIPE_AGORA} ${EMAIL_SOUHAITE}" | tee -a "${CMD_INIT}"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ -n "${CREATE_ORGA_SERVICES}" ]; then
|
if [ -n "${CREATE_ORGA_SERVICES}" ]; then
|
||||||
@ -629,16 +616,16 @@ userPassword: {CRYPT}${pass}\n\n' | ldapmodify -c -H ldap://${LDAP_IP} -D \"cn=$
|
|||||||
# TODO : utiliser liste sur dev également
|
# TODO : utiliser liste sur dev également
|
||||||
|
|
||||||
# on inscrit le user sur sympa, à la liste infos@${domain_sympa}
|
# on inscrit le user sur sympa, à la liste infos@${domain_sympa}
|
||||||
# docker exec -ti sympaServ /usr/lib/sympa/bin/sympa_soap_client.pl --soap_url=https://listes.kaz.sns/sympasoap --trusted_application=SOAP_USER --trusted_application_password=SOAP_PASSWORD --proxy_vars="USER_EMAIL=contact1@kaz.sns" --service=which
|
# docker exec -i sympaServ /usr/lib/sympa/bin/sympa_soap_client.pl --soap_url=https://listes.kaz.sns/sympasoap --trusted_application=SOAP_USER --trusted_application_password=SOAP_PASSWORD --proxy_vars="USER_EMAIL=contact1@kaz.sns" --service=which
|
||||||
if [[ "${mode}" = "dev" ]]; then
|
if [[ "${mode}" = "dev" ]]; then
|
||||||
echo "# DEV, on teste l'inscription à sympa"| tee -a "${CMD_SYMPA}"
|
echo "# DEV, on teste l'inscription à sympa"| tee -a "${CMD_SYMPA}"
|
||||||
LISTMASTER=$(echo ${sympa_LISTMASTERS} | cut -d',' -f1)
|
LISTMASTER=$(echo ${sympa_LISTMASTERS} | cut -d',' -f1)
|
||||||
echo "docker exec -ti sympaServ /usr/lib/sympa/bin/sympa_soap_client.pl --soap_url=${httpProto}://${URL_LISTE}/sympasoap --trusted_application=${sympa_SOAP_USER} --trusted_application_password=${sympa_SOAP_PASSWORD} --proxy_vars=\"USER_EMAIL=${LISTMASTER}\" --service=add --service_parameters=\"${NL_LIST},${EMAIL_SOUHAITE}\"" | tee -a "${CMD_SYMPA}"
|
echo "docker exec -i sympaServ /usr/lib/sympa/bin/sympa_soap_client.pl --soap_url=${httpProto}://${URL_LISTE}/sympasoap --trusted_application=${sympa_SOAP_USER} --trusted_application_password=${sympa_SOAP_PASSWORD} --proxy_vars=\"USER_EMAIL=${LISTMASTER}\" --service=add --service_parameters=\"${NL_LIST},${EMAIL_SOUHAITE}\"" | tee -a "${CMD_SYMPA}"
|
||||||
else
|
else
|
||||||
echo "# PROD, on inscrit à sympa"| tee -a "${CMD_SYMPA}"
|
echo "# PROD, on inscrit à sympa"| tee -a "${CMD_SYMPA}"
|
||||||
LISTMASTER=$(echo ${sympa_LISTMASTERS} | cut -d',' -f1)
|
LISTMASTER=$(echo ${sympa_LISTMASTERS} | cut -d',' -f1)
|
||||||
echo "docker exec -ti sympaServ /usr/lib/sympa/bin/sympa_soap_client.pl --soap_url=${httpProto}://${URL_LISTE}/sympasoap --trusted_application=${sympa_SOAP_USER} --trusted_application_password=${sympa_SOAP_PASSWORD} --proxy_vars=\"USER_EMAIL=${LISTMASTER}\" --service=add --service_parameters=\"${NL_LIST},${EMAIL_SOUHAITE}\"" | tee -a "${CMD_SYMPA}"
|
echo "docker exec -i sympaServ /usr/lib/sympa/bin/sympa_soap_client.pl --soap_url=${httpProto}://${URL_LISTE}/sympasoap --trusted_application=${sympa_SOAP_USER} --trusted_application_password=${sympa_SOAP_PASSWORD} --proxy_vars=\"USER_EMAIL=${LISTMASTER}\" --service=add --service_parameters=\"${NL_LIST},${EMAIL_SOUHAITE}\"" | tee -a "${CMD_SYMPA}"
|
||||||
echo "docker exec -ti sympaServ /usr/lib/sympa/bin/sympa_soap_client.pl --soap_url=${httpProto}://${URL_LISTE}/sympasoap --trusted_application=${sympa_SOAP_USER} --trusted_application_password=${sympa_SOAP_PASSWORD} --proxy_vars=\"USER_EMAIL=${LISTMASTER}\" --service=add --service_parameters=\"${NL_LIST},${EMAIL_SECOURS}\"" | tee -a "${CMD_SYMPA}"
|
echo "docker exec -i sympaServ /usr/lib/sympa/bin/sympa_soap_client.pl --soap_url=${httpProto}://${URL_LISTE}/sympasoap --trusted_application=${sympa_SOAP_USER} --trusted_application_password=${sympa_SOAP_PASSWORD} --proxy_vars=\"USER_EMAIL=${LISTMASTER}\" --service=add --service_parameters=\"${NL_LIST},${EMAIL_SECOURS}\"" | tee -a "${CMD_SYMPA}"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ "${service[ADMIN_ORGA]}" == "O" ]; then
|
if [ "${service[ADMIN_ORGA]}" == "O" ]; then
|
||||||
@ -760,7 +747,7 @@ ${MAIL_KAZ}
|
|||||||
EOF" | tee -a "${CMD_MSG}"
|
EOF" | tee -a "${CMD_MSG}"
|
||||||
|
|
||||||
echo " # on envoie la confirmation d'inscription sur l'agora " | tee -a "${CMD_MSG}"
|
echo " # on envoie la confirmation d'inscription sur l'agora " | tee -a "${CMD_MSG}"
|
||||||
echo "docker exec -ti mattermostServ bin/mmctl post create kaz:Creation-Comptes --message \"${MAIL_KAZ}\"" | tee -a "${CMD_MSG}"
|
echo "docker exec -i mattermostServ bin/mmctl post create kaz:Creation-Comptes --message \"${MAIL_KAZ}\"" | tee -a "${CMD_MSG}"
|
||||||
|
|
||||||
# fin des inscriptions
|
# fin des inscriptions
|
||||||
done <<< "${ALL_LINES}"
|
done <<< "${ALL_LINES}"
|
||||||
|
176
bin/dynDNS.sh
Executable file
176
bin/dynDNS.sh
Executable file
@ -0,0 +1,176 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# nohup /kaz/bin/dynDNS.sh &
|
||||||
|
|
||||||
|
KAZ_ROOT=$(cd "$(dirname $0)"/..; pwd)
|
||||||
|
. "${KAZ_ROOT}/bin/.commonFunctions.sh"
|
||||||
|
setKazVars
|
||||||
|
. "${DOCKERS_ENV}"
|
||||||
|
# no more export in .env
|
||||||
|
export $(set | grep "domain=")
|
||||||
|
|
||||||
|
cd "${KAZ_ROOT}"
|
||||||
|
export PRG="$0"
|
||||||
|
|
||||||
|
export MYHOST="${site}"
|
||||||
|
|
||||||
|
MYIP_URL="https://kaz.bzh/myip.php"
|
||||||
|
DNS_IP=""
|
||||||
|
|
||||||
|
DELAI_WAIT=10 # DNS occupé
|
||||||
|
DELAI_GET=5 # min entre 2 requêtes
|
||||||
|
DELAI_CHANGE=3600 # propagation 1h
|
||||||
|
DELAI_NO_CHANGE=300 # pas de changement 5 min
|
||||||
|
|
||||||
|
BOLD='\e[1m'
|
||||||
|
RED='\e[0;31m'
|
||||||
|
GREEN='\e[0;32m'
|
||||||
|
YELLOW='\e[0;33m'
|
||||||
|
BLUE='\e[0;34m'
|
||||||
|
MAGENTA='\e[0;35m'
|
||||||
|
CYAN='\e[0;36m'
|
||||||
|
NC='\e[0m' # No Color
|
||||||
|
NL='
|
||||||
|
'
|
||||||
|
|
||||||
|
export VERBOSE=""
|
||||||
|
export SIMU=""
|
||||||
|
|
||||||
|
usage(){
|
||||||
|
echo "Usage: ${PRG} list [sub-domain...]"
|
||||||
|
echo " -h help"
|
||||||
|
echo " -v verbose"
|
||||||
|
echo " -n simulation"
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
#. "${KAZ_KEY_DIR}/env-gandi"
|
||||||
|
. "${KAZ_KEY_DIR}/env-alwaysdata"
|
||||||
|
|
||||||
|
if [[ -z "${ALWAYSDATA_TOKEN}" ]] ; then
|
||||||
|
echo "no ALWAYSDATA_TOKEN set in ${KAZ_KEY_DIR}/env-alwaysdata"
|
||||||
|
usage
|
||||||
|
fi
|
||||||
|
|
||||||
|
DOMAIN_ID=$(curl -s -X GET --basic --user "${ALWAYSDATA_TOKEN} account=${ALWAYSDATA_ACCOUNT}:" ${ALWAYSDATA_API}/domain/?name=${domain} | jq '.[0].id')
|
||||||
|
|
||||||
|
if [[ -z "${DOMAIN_ID}" ]] ; then
|
||||||
|
echo "no DOMAIN_ID give by alwaysdata"
|
||||||
|
usage
|
||||||
|
fi
|
||||||
|
|
||||||
|
# if [[ -z "${GANDI_KEY}" ]] ; then
|
||||||
|
# echo
|
||||||
|
# echo "no GANDI_KEY set in ${KAZ_KEY_DIR}/env-gandi"
|
||||||
|
# usage
|
||||||
|
# exit
|
||||||
|
# fi
|
||||||
|
|
||||||
|
for ARG in $@
|
||||||
|
do
|
||||||
|
case "${ARG}" in
|
||||||
|
'-h' | '-help' )
|
||||||
|
usage
|
||||||
|
;;
|
||||||
|
'-v' )
|
||||||
|
shift
|
||||||
|
export VERBOSE=":"
|
||||||
|
;;
|
||||||
|
'-n' )
|
||||||
|
shift
|
||||||
|
export SIMU="echo"
|
||||||
|
;;
|
||||||
|
* )
|
||||||
|
usage
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
log () {
|
||||||
|
echo -e "${BLUE}$(date +%d-%m-%Y-%H-%M-%S)${NC} : $*"
|
||||||
|
}
|
||||||
|
|
||||||
|
simu () {
|
||||||
|
echo -e "${YELLOW}$(date +%d-%m-%Y-%H-%M-%S)${NC} : $*"
|
||||||
|
}
|
||||||
|
|
||||||
|
cmdWait () {
|
||||||
|
#ex gandi
|
||||||
|
#curl -H "authorization: Apikey ${GANDI_KEY}" --connect-timeout 2 -s -D - -o /dev/null "${GANDI_API}" 2>/dev/null
|
||||||
|
curl -s -X GET --basic --user "${ALWAYSDATA_TOKEN} account=${ALWAYSDATA_ACCOUNT}:" --connect-timeout 2 -D - -o /dev/null "${ALWAYSDATA_API}/record/?domain=${DOMAIN_ID}&type=CNAME&name=${TARGET}" 2>/dev/null
|
||||||
|
}
|
||||||
|
|
||||||
|
waitNet () {
|
||||||
|
### wait when error code 503
|
||||||
|
if [[ $(cmdWait | head -n1) != *200* ]]; then
|
||||||
|
log "DNS not available. Please wait..."
|
||||||
|
while [[ $(cmdWait | head -n1) != *200* ]]; do
|
||||||
|
[[ -z "${VERBOSE}" ]] || simu curl -s -X GET --basic --user "${ALWAYSDATA_TOKEN} account=${ALWAYSDATA_ACCOUNT}:" --connect-timeout 2 -D - -o /dev/null "${ALWAYSDATA_API}/record/?domain=${DOMAIN_ID}&type=CNAME&name=${TARGET}"
|
||||||
|
sleep "${DELAI_WAIT}"
|
||||||
|
done
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
getDNS () {
|
||||||
|
# curl -s -X GET "${GANDI_API}/records" -H "authorization: Apikey ${GANDI_KEY}"|
|
||||||
|
# sed "s/,{/\n/g"|
|
||||||
|
# sed 's/.*rrset_name":"\([^"]*\)".*rrset_values":\["\([^"]*\)".*/\1:\2/g'|
|
||||||
|
# grep -e "^${MYHOST}:"|
|
||||||
|
# sed "s/^${MYHOST}://g" |
|
||||||
|
# tr -d '\n\t\r '
|
||||||
|
${SIMU} curl -s -X GET --basic --user "${ALWAYSDATA_TOKEN} account=${ALWAYSDATA_ACCOUNT}:" "${ALWAYSDATA_API}/record/?domain=${DOMAIN_ID}&type=A&name=${MYHOST}" | jq '.[] | "\(.value)"' | tr -d '"'
|
||||||
|
}
|
||||||
|
|
||||||
|
saveDns () {
|
||||||
|
mkdir -p /root/dns
|
||||||
|
${SIMU} curl -s -X GET --basic --user "${ALWAYSDATA_TOKEN} account=${ALWAYSDATA_ACCOUNT}:" "${ALWAYSDATA_API}/record/?domain=${DOMAIN_ID}" -o /root/dns/dns_save_$(date +'%Y%m%d%H%M%S')
|
||||||
|
}
|
||||||
|
|
||||||
|
setDNS () {
|
||||||
|
saveDns
|
||||||
|
# curl -s -X POST "${GANDI_API}/records" -H "authorization: Apikey ${GANDI_KEY}" -H 'content-type: application/json' -d '{"rrset_type":"A", "rrset_name":"'${MYHOST}'", "rrset_values":["'${IP}'"]}'
|
||||||
|
${SIMU} curl -s -X POST -d "{\"domain\":\"${DOMAIN_ID}\", \"type\":\"A\", \"name\":\"${MYHOST}\", \"value\":\"${IP}\"}" --basic --user "${ALWAYSDATA_TOKEN} account=${ALWAYSDATA_ACCOUNT}:" "${ALWAYSDATA_API}/record/"
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
while :; do
|
||||||
|
sleep "${DELAI_GET}"
|
||||||
|
IP=$(curl -s "${MYIP_URL}" | grep -Eo '([0-9]{1,3}\.){3}[0-9]{1,3}' | tr -d '\n\t\r ')
|
||||||
|
if ! [[ ${IP} =~ ^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
|
||||||
|
log "BAB IP ${IP}" ; continue
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -z "${DNS_IP}" ]; then
|
||||||
|
# Variable pas encore initialisée
|
||||||
|
waitNet
|
||||||
|
DNS_IP=$(getDNS)
|
||||||
|
|
||||||
|
if [ -z "${DNS_IP}" ]; then
|
||||||
|
# C'est la première fois que le site est en prod
|
||||||
|
log "set ${MYHOST} : ${IP}"
|
||||||
|
setDNS
|
||||||
|
DNS_IP=$(getDNS)
|
||||||
|
log "DNS set ${MYHOST}:${IP} (=${DNS_IP})"
|
||||||
|
sleep "${DELAI_CHANGE}"
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "${DNS_IP}" != "${IP}" ]; then
|
||||||
|
log "${MYHOST} : ${DNS_IP} must change to ${IP}"
|
||||||
|
# Changement d'adresse
|
||||||
|
waitNet
|
||||||
|
#curl -s -X DELETE "${GANDI_API}/records/${MYHOST}" -H "authorization: Apikey ${GANDI_KEY}"
|
||||||
|
RECORD_ID=$(curl -s -X GET --basic --user "${ALWAYSDATA_TOKEN} account=${ALWAYSDATA_ACCOUNT}:" "${ALWAYSDATA_API}/record/?name=${MYHOST}&type=A&domain=${DOMAIN_ID}" | jq ".[] | select(.name==\"${MYHOST}\").id")
|
||||||
|
${SIMU} curl -s -X DELETE --basic --user "${ALWAYSDATA_TOKEN} account=${ALWAYSDATA_ACCOUNT}:" "${ALWAYSDATA_API}/record/${RECORD_ID}/"
|
||||||
|
setDNS
|
||||||
|
DNS_IP=$(getDNS)
|
||||||
|
log "DNS reset ${MYHOST}:${IP} (=${DNS_IP})"
|
||||||
|
sleep "${DELAI_CHANGE}"
|
||||||
|
else
|
||||||
|
log "OK ${MYHOST}:${DNS_IP} / ${IP}"
|
||||||
|
sleep ${DELAI_NO_CHANGE}
|
||||||
|
fi
|
||||||
|
done
|
@ -1,6 +1,7 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
KAZ_ROOT=$(cd "$(dirname $0)"/..; pwd)
|
KAZ_ROOT=$(cd "$(dirname $0)"/..; pwd)
|
||||||
|
|
||||||
. $KAZ_ROOT/bin/.commonFunctions.sh
|
. $KAZ_ROOT/bin/.commonFunctions.sh
|
||||||
setKazVars
|
setKazVars
|
||||||
|
|
||||||
@ -76,6 +77,10 @@ Int_paheko_Action() {
|
|||||||
do
|
do
|
||||||
eval $VAL_GAR=$(jq .$VAL_GAR ${TFILE_INT_PAHEKO_IDFILE})
|
eval $VAL_GAR=$(jq .$VAL_GAR ${TFILE_INT_PAHEKO_IDFILE})
|
||||||
done
|
done
|
||||||
|
################################
|
||||||
|
# test du mail valide en $domain
|
||||||
|
echo ${email} | grep -i "${domain}" || { echo "le mail ${email} n'est pas en ${domain}"; exit ;}
|
||||||
|
################################
|
||||||
#comme tout va bien on continue
|
#comme tout va bien on continue
|
||||||
#on compte le nom de champs dans la zone nom pour gérer les noms et prénoms composés
|
#on compte le nom de champs dans la zone nom pour gérer les noms et prénoms composés
|
||||||
# si il y a 3 champs, on associe les 2 premieres valeurs avec un - et on laisse le 3ème identique
|
# si il y a 3 champs, on associe les 2 premieres valeurs avec un - et on laisse le 3ème identique
|
||||||
@ -158,11 +163,11 @@ Int_paheko_Action() {
|
|||||||
echo "$nom_ok;$prenom_ok;$email;$email_secours;$nom_orga;$admin_orga;$cloud;$paheko;$wordpress;$agora;$docuwiki;$nc_base;$groupe_nc_base;$equipe_agora;$quota_disque">>${FILE_CREATEUSER}
|
echo "$nom_ok;$prenom_ok;$email;$email_secours;$nom_orga;$admin_orga;$cloud;$paheko;$wordpress;$agora;$docuwiki;$nc_base;$groupe_nc_base;$equipe_agora;$quota_disque">>${FILE_CREATEUSER}
|
||||||
done
|
done
|
||||||
else
|
else
|
||||||
echo "Rien à créer"
|
[ "$OPTION" = "silence" ] || echo "Rien à créer"
|
||||||
exit 2
|
exit 2
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
#Int_paheko_Action "A créer" "silence"
|
# Main
|
||||||
Int_paheko_Action "A créer"
|
Int_paheko_Action "A créer" "silence"
|
||||||
exit 0
|
exit 0
|
||||||
|
|
||||||
|
@ -16,7 +16,7 @@ availableOrga=($(getList "${KAZ_CONF_DIR}/container-orga.list"))
|
|||||||
AVAILABLE_ORGAS=${availableOrga[*]//-orga/}
|
AVAILABLE_ORGAS=${availableOrga[*]//-orga/}
|
||||||
|
|
||||||
# CLOUD
|
# CLOUD
|
||||||
APPLIS_PAR_DEFAUT="tasks calendar contacts bookmarks mail richdocuments external drawio snappymail ransomware_protection" #rainloop richdocumentscode
|
APPLIS_PAR_DEFAUT="tasks calendar contacts bookmarks mail richdocuments external drawio ransomware_protection" #rainloop richdocumentscode
|
||||||
QUIET="1"
|
QUIET="1"
|
||||||
ONNAS=
|
ONNAS=
|
||||||
|
|
||||||
|
41
bin/nettoyer_acme_json_certifs.sh
Executable file
41
bin/nettoyer_acme_json_certifs.sh
Executable file
@ -0,0 +1,41 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
#date: 23/04/2025
|
||||||
|
#ki: fab
|
||||||
|
#koi: supprimer de acme.json les certificats LE devenus inutiles
|
||||||
|
|
||||||
|
KAZ_ROOT=$(cd "$(dirname $0)"/..; pwd)
|
||||||
|
. "${KAZ_ROOT}/bin/.commonFunctions.sh"
|
||||||
|
setKazVars
|
||||||
|
. "${DOCKERS_ENV}"
|
||||||
|
|
||||||
|
FILE_ACME_ORI="/var/lib/docker/volumes/traefik_letsencrypt/_data/acme.json"
|
||||||
|
FILE_ACME="/tmp/acme.json"
|
||||||
|
FILE_URL=$(mktemp)
|
||||||
|
FILE_ACME_TMP=$(mktemp)
|
||||||
|
|
||||||
|
#l'ip du serveur:
|
||||||
|
#marche po pour les machines hébergée chez T.C... :( on récupère l'IP dans config/dockers.env
|
||||||
|
#MAIN_IP=$(curl ifconfig.me)
|
||||||
|
|
||||||
|
#DANGER: IP depuis config/dockers.env ne fonctionne pas pour les domaines hors *.kaz.bzh (ex:radiokalon.fr)
|
||||||
|
|
||||||
|
#sauvegarde
|
||||||
|
cp $FILE_ACME_ORI $FILE_ACME
|
||||||
|
cp $FILE_ACME "$FILE_ACME"_$(date +%Y%m%d_%H%M%S)
|
||||||
|
|
||||||
|
#je cherche toutes les url
|
||||||
|
jq -r '.letsencrypt.Certificates[].domain.main' $FILE_ACME > $FILE_URL
|
||||||
|
|
||||||
|
while read -r url; do
|
||||||
|
#echo "Traitement de : $url"
|
||||||
|
nb=$(dig $url | grep $MAIN_IP | wc -l)
|
||||||
|
if [ "$nb" -eq 0 ]; then
|
||||||
|
#absent, on vire de acme.json
|
||||||
|
echo "on supprime "$url
|
||||||
|
jq --arg url "$url" 'del(.letsencrypt.Certificates[] | select(.domain.main == $url))' $FILE_ACME > $FILE_ACME_TMP
|
||||||
|
mv -f $FILE_ACME_TMP $FILE_ACME
|
||||||
|
fi
|
||||||
|
done < "$FILE_URL"
|
||||||
|
|
||||||
|
echo "si satisfait, remettre "$FILE_ACME" dans "$FILE_ACME_ORI
|
@ -1,7 +1,6 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
# --------------------------------------------------------------------------------------
|
# --------------------------------------------------------------------------------------
|
||||||
# Didier
|
# Didier
|
||||||
#
|
|
||||||
# Script de sauvegarde avec BorgBackup
|
# Script de sauvegarde avec BorgBackup
|
||||||
# la commande de creation du dépot est : borg init --encryption=repokey /mnt/backup-nas1/BorgRepo
|
# la commande de creation du dépot est : borg init --encryption=repokey /mnt/backup-nas1/BorgRepo
|
||||||
# la conf de borg est dans /root/.config/borg
|
# la conf de borg est dans /root/.config/borg
|
||||||
|
@ -30,12 +30,12 @@ while read line ; do
|
|||||||
sed "s%\(.*\)--clean_val--\(.*\)%\1${JIRAFEAU_DIR}\2%" <<< ${line}
|
sed "s%\(.*\)--clean_val--\(.*\)%\1${JIRAFEAU_DIR}\2%" <<< ${line}
|
||||||
continue
|
continue
|
||||||
;;
|
;;
|
||||||
*DATABASE*)
|
*DATABASE*|*DB_NAME*)
|
||||||
dbName="$(sed "s/\([^_]*\)_.*/\1/" <<< ${line})_$(apg -n 1 -m 2 -M NCL | cut -c 1-2)"
|
dbName="$(sed "s/\([^_]*\)_.*/\1/" <<< ${line})_$(apg -n 1 -m 2 -M NCL | cut -c 1-2)"
|
||||||
sed "s/\(.*\)--clean_val--\(.*\)/\1${dbName}\2/" <<< ${line}
|
sed "s/\(.*\)--clean_val--\(.*\)/\1${dbName}\2/" <<< ${line}
|
||||||
continue
|
continue
|
||||||
;;
|
;;
|
||||||
*ROOT_PASSWORD*|*PASSWORD*)
|
*ROOT_PASSWORD*|*PASSWORD*|*SECRET*)
|
||||||
pass="$(apg -n 1 -m 16 -M NCL)"
|
pass="$(apg -n 1 -m 16 -M NCL)"
|
||||||
sed "s/\(.*\)--clean_val--\(.*\)/\1${pass}\2/" <<< ${line}
|
sed "s/\(.*\)--clean_val--\(.*\)/\1${pass}\2/" <<< ${line}
|
||||||
continue
|
continue
|
||||||
|
@ -92,6 +92,7 @@ updateEnvDB "vigilo" "${KAZ_KEY_DIR}/env-${vigiloDBName}" "${vigiloDBName}"
|
|||||||
updateEnvDB "wp" "${KAZ_KEY_DIR}/env-${wordpressDBName}" "${wordpressDBName}"
|
updateEnvDB "wp" "${KAZ_KEY_DIR}/env-${wordpressDBName}" "${wordpressDBName}"
|
||||||
updateEnvDB "vaultwarden" "${KAZ_KEY_DIR}/env-${vaultwardenDBName}" "${vaultwardenDBName}"
|
updateEnvDB "vaultwarden" "${KAZ_KEY_DIR}/env-${vaultwardenDBName}" "${vaultwardenDBName}"
|
||||||
updateEnvDB "castopod" "${KAZ_KEY_DIR}/env-${castopodDBName}" "${castopodDBName}"
|
updateEnvDB "castopod" "${KAZ_KEY_DIR}/env-${castopodDBName}" "${castopodDBName}"
|
||||||
|
updateEnvDB "mastodon" "${KAZ_KEY_DIR}/env-${mastodonDBName}" "${mastodonDBName}"
|
||||||
|
|
||||||
updateEnv "apikaz" "${KAZ_KEY_DIR}/env-${apikazServName}"
|
updateEnv "apikaz" "${KAZ_KEY_DIR}/env-${apikazServName}"
|
||||||
updateEnv "ethercalc" "${KAZ_KEY_DIR}/env-${ethercalcServName}"
|
updateEnv "ethercalc" "${KAZ_KEY_DIR}/env-${ethercalcServName}"
|
||||||
@ -114,6 +115,9 @@ updateEnv "mobilizon" "${KAZ_KEY_DIR}/env-${mobilizonDBName}"
|
|||||||
updateEnv "vaultwarden" "${KAZ_KEY_DIR}/env-${vaultwardenServName}"
|
updateEnv "vaultwarden" "${KAZ_KEY_DIR}/env-${vaultwardenServName}"
|
||||||
updateEnv "castopod" "${KAZ_KEY_DIR}/env-${castopodServName}"
|
updateEnv "castopod" "${KAZ_KEY_DIR}/env-${castopodServName}"
|
||||||
updateEnv "ldap" "${KAZ_KEY_DIR}/env-${ldapUIName}"
|
updateEnv "ldap" "${KAZ_KEY_DIR}/env-${ldapUIName}"
|
||||||
|
updateEnv "peertube" "${KAZ_KEY_DIR}/env-${peertubeServName}"
|
||||||
|
updateEnv "peertube" "${KAZ_KEY_DIR}/env-${peertubeDBName}" "${peertubeDBName}"
|
||||||
|
updateEnv "mastodon" "${KAZ_KEY_DIR}/env-${mastodonServName}"
|
||||||
|
|
||||||
|
|
||||||
framadateUpdate
|
framadateUpdate
|
||||||
|
@ -93,6 +93,7 @@ vaultwardenHost=koffre
|
|||||||
traefikHost=dashboard
|
traefikHost=dashboard
|
||||||
imapsyncHost=imapsync
|
imapsyncHost=imapsync
|
||||||
castopodHost=pod
|
castopodHost=pod
|
||||||
|
mastodonHost=masto
|
||||||
apikazHost=apikaz
|
apikazHost=apikaz
|
||||||
snappymailHost=snappymail
|
snappymailHost=snappymail
|
||||||
|
|
||||||
@ -147,6 +148,8 @@ ldapUIName=ldapUI
|
|||||||
imapsyncServName=imapsyncServ
|
imapsyncServName=imapsyncServ
|
||||||
castopodDBName=castopodDB
|
castopodDBName=castopodDB
|
||||||
castopodServName=castopodServ
|
castopodServName=castopodServ
|
||||||
|
mastodonServName=mastodonServ
|
||||||
|
mastodonDBName=mastodonDB
|
||||||
apikazServName=apikazServ
|
apikazServName=apikazServ
|
||||||
|
|
||||||
########################################
|
########################################
|
||||||
|
@ -13,6 +13,8 @@ services:
|
|||||||
- orgaDB:/var/lib/mysql
|
- orgaDB:/var/lib/mysql
|
||||||
- /etc/localtime:/etc/localtime:ro
|
- /etc/localtime:/etc/localtime:ro
|
||||||
- /etc/timezone:/etc/timezone:ro
|
- /etc/timezone:/etc/timezone:ro
|
||||||
|
environment:
|
||||||
|
- MARIADB_AUTO_UPGRADE=1
|
||||||
env_file:
|
env_file:
|
||||||
- ../../secret/env-${nextcloudDBName}
|
- ../../secret/env-${nextcloudDBName}
|
||||||
# - ../../secret/env-${mattermostDBName}
|
# - ../../secret/env-${mattermostDBName}
|
||||||
|
1
dockers/cadvisor/.env
Symbolic link
1
dockers/cadvisor/.env
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../../config/dockers.env
|
42
dockers/cadvisor/docker-compose.yml
Normal file
42
dockers/cadvisor/docker-compose.yml
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
services:
|
||||||
|
|
||||||
|
cadvisor:
|
||||||
|
image: gcr.io/cadvisor/cadvisor:v0.52.0
|
||||||
|
container_name: cadvisor
|
||||||
|
command:
|
||||||
|
- "--store_container_labels=false"
|
||||||
|
- "--whitelisted_container_labels=com.docker.compose.project"
|
||||||
|
- "--housekeeping_interval=60s"
|
||||||
|
- "--docker_only=true"
|
||||||
|
- "--disable_metrics=percpu,sched,tcp,udp,disk,diskIO,hugetlb,referenced_memory,cpu_topology,resctrl"
|
||||||
|
networks:
|
||||||
|
- traefikNet
|
||||||
|
|
||||||
|
labels:
|
||||||
|
- "traefik.enable=true"
|
||||||
|
- "traefik.http.routers.cadvisor-secure.entrypoints=websecure"
|
||||||
|
- "traefik.http.routers.cadvisor-secure.rule=Host(`cadvisor-${site}.${domain}`)"
|
||||||
|
#- "traefik.http.routers.grafana-secure.tls=true"
|
||||||
|
- "traefik.http.routers.cadvisor-secure.service=cadvisor"
|
||||||
|
- "traefik.http.routers.cadvisor-secure.middlewares=test-adminipallowlist@file"
|
||||||
|
- "traefik.http.services.cadvisor.loadbalancer.server.port=8080"
|
||||||
|
- "traefik.docker.network=traefikNet"
|
||||||
|
|
||||||
|
# ports:
|
||||||
|
# - 8098:8080
|
||||||
|
volumes:
|
||||||
|
- /:/rootfs:ro
|
||||||
|
- /var/run:/var/run:ro
|
||||||
|
- /sys:/sys:ro
|
||||||
|
- /var/lib/docker/:/var/lib/docker:ro
|
||||||
|
- /dev/disk/:/dev/disk:ro
|
||||||
|
devices:
|
||||||
|
- /dev/kmsg
|
||||||
|
privileged: true
|
||||||
|
restart: unless-stopped
|
||||||
|
|
||||||
|
networks:
|
||||||
|
traefikNet:
|
||||||
|
external: true
|
||||||
|
name: traefikNet
|
||||||
|
|
@ -27,11 +27,13 @@ services:
|
|||||||
- "traefik.docker.network=giteaNet"
|
- "traefik.docker.network=giteaNet"
|
||||||
|
|
||||||
db:
|
db:
|
||||||
image: mariadb:10.5
|
image: mariadb
|
||||||
container_name: ${gitDBName}
|
container_name: ${gitDBName}
|
||||||
restart: ${restartPolicy}
|
restart: ${restartPolicy}
|
||||||
env_file:
|
env_file:
|
||||||
- ../../secret/env-${gitDBName}
|
- ../../secret/env-${gitDBName}
|
||||||
|
environment:
|
||||||
|
- MARIADB_AUTO_UPGRADE=1
|
||||||
volumes:
|
volumes:
|
||||||
- gitDB:/var/lib/mysql
|
- gitDB:/var/lib/mysql
|
||||||
- /etc/timezone:/etc/timezone:ro
|
- /etc/timezone:/etc/timezone:ro
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
services:
|
services:
|
||||||
|
|
||||||
prometheus:
|
prometheus:
|
||||||
image: prom/prometheus:v2.15.2
|
image: prom/prometheus:v3.3.0
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
container_name: ${prometheusServName}
|
container_name: ${prometheusServName}
|
||||||
volumes:
|
volumes:
|
||||||
@ -10,27 +10,27 @@ services:
|
|||||||
- /etc/timezone:/etc/timezone:ro
|
- /etc/timezone:/etc/timezone:ro
|
||||||
- /etc/localtime:/etc/localtime:ro
|
- /etc/localtime:/etc/localtime:ro
|
||||||
command:
|
command:
|
||||||
- "--web.route-prefix=/"
|
# - "--web.route-prefix=/"
|
||||||
- "--web.external-url=https://${site}.${domain}/prometheus"
|
# - "--web.external-url=https://prometheus.${domain}"
|
||||||
- "--config.file=/etc/prometheus/prometheus.yml"
|
- "--config.file=/etc/prometheus/prometheus.yml"
|
||||||
- "--storage.tsdb.path=/prometheus"
|
- "--storage.tsdb.path=/prometheus"
|
||||||
- "--web.console.libraries=/usr/share/prometheus/console_libraries"
|
- "--web.console.libraries=/usr/share/prometheus/console_libraries"
|
||||||
- "--web.console.templates=/usr/share/prometheus/consoles"
|
- "--web.console.templates=/usr/share/prometheus/consoles"
|
||||||
networks:
|
networks:
|
||||||
- traefikNet
|
- traefikNet
|
||||||
labels:
|
# labels:
|
||||||
- "traefik.enable=true"
|
# - "traefik.enable=true"
|
||||||
- "traefik.http.routers.prometheus-secure.entrypoints=websecure"
|
# - "traefik.http.routers.prometheus-secure.entrypoints=websecure"
|
||||||
- "traefik.http.middlewares.prometheus-stripprefix.stripprefix.prefixes=/prometheus"
|
# - "traefik.http.middlewares.prometheus-stripprefix.stripprefix.prefixes=/prometheus"
|
||||||
- "traefik.http.routers.prometheus-secure.rule=Host(`${site}.${domain}`) && PathPrefix(`/prometheus`)"
|
# - "traefik.http.routers.prometheus-secure.rule=Host(`prometheus.${domain}`)"
|
||||||
# - "traefik.http.routers.prometheus-secure.tls=true"
|
# # - "traefik.http.routers.prometheus-secure.tls=true"
|
||||||
- "traefik.http.routers.prometheus-secure.middlewares=prometheus-stripprefix,test-adminiallowlist@file,traefik-auth"
|
# - "traefik.http.routers.prometheus-secure.middlewares=prometheus-stripprefix,test-adminiallowlist@file,traefik-auth"
|
||||||
- "traefik.http.routers.prometheus-secure.service=prometheus"
|
# - "traefik.http.routers.prometheus-secure.service=prometheus"
|
||||||
- "traefik.http.services.prometheus.loadbalancer.server.port=9090"
|
# - "traefik.http.services.prometheus.loadbalancer.server.port=9090"
|
||||||
- "traefik.docker.network=traefikNet"
|
# - "traefik.docker.network=traefikNet"
|
||||||
|
|
||||||
grafana:
|
grafana:
|
||||||
image: grafana/grafana:6.6.1
|
image: grafana/grafana:11.6.0
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
container_name: ${grafanaServName}
|
container_name: ${grafanaServName}
|
||||||
volumes:
|
volumes:
|
||||||
@ -48,7 +48,7 @@ services:
|
|||||||
- "traefik.enable=true"
|
- "traefik.enable=true"
|
||||||
- "traefik.http.routers.grafana-secure.entrypoints=websecure"
|
- "traefik.http.routers.grafana-secure.entrypoints=websecure"
|
||||||
- "traefik.http.middlewares.grafana-stripprefix.stripprefix.prefixes=/grafana"
|
- "traefik.http.middlewares.grafana-stripprefix.stripprefix.prefixes=/grafana"
|
||||||
- "traefik.http.routers.grafana-secure.rule=Host(`${site}.${domain}`) && PathPrefix(`/grafana`)"
|
- "traefik.http.routers.grafana-secure.rule=Host(`grafana.${domain}`)"
|
||||||
#- "traefik.http.routers.grafana-secure.tls=true"
|
#- "traefik.http.routers.grafana-secure.tls=true"
|
||||||
- "traefik.http.routers.grafana-secure.service=grafana"
|
- "traefik.http.routers.grafana-secure.service=grafana"
|
||||||
- "traefik.http.routers.grafana-secure.middlewares=grafana-stripprefix,test-adminipallowlist@file,traefik-auth"
|
- "traefik.http.routers.grafana-secure.middlewares=grafana-stripprefix,test-adminipallowlist@file,traefik-auth"
|
||||||
|
23545
dockers/grafana/grafana/provisioning/dashboards/Node_Exporter_Full.json
Normal file
23545
dockers/grafana/grafana/provisioning/dashboards/Node_Exporter_Full.json
Normal file
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,874 @@
|
|||||||
|
{
|
||||||
|
"__inputs": [
|
||||||
|
{
|
||||||
|
"name": "DS_PROMETHEUS",
|
||||||
|
"label": "Prometheus",
|
||||||
|
"description": "",
|
||||||
|
"type": "datasource",
|
||||||
|
"pluginId": "prometheus",
|
||||||
|
"pluginName": "Prometheus"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"__elements": {},
|
||||||
|
"__requires": [
|
||||||
|
{
|
||||||
|
"type": "grafana",
|
||||||
|
"id": "grafana",
|
||||||
|
"name": "Grafana",
|
||||||
|
"version": "11.6.0"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "datasource",
|
||||||
|
"id": "prometheus",
|
||||||
|
"name": "Prometheus",
|
||||||
|
"version": "1.0.0"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "panel",
|
||||||
|
"id": "stat",
|
||||||
|
"name": "Stat",
|
||||||
|
"version": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "panel",
|
||||||
|
"id": "timeseries",
|
||||||
|
"name": "Time series",
|
||||||
|
"version": ""
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"annotations": {
|
||||||
|
"list": [
|
||||||
|
{
|
||||||
|
"builtIn": 1,
|
||||||
|
"datasource": {
|
||||||
|
"type": "grafana",
|
||||||
|
"uid": "-- Grafana --"
|
||||||
|
},
|
||||||
|
"enable": true,
|
||||||
|
"hide": true,
|
||||||
|
"iconColor": "rgba(0, 211, 255, 1)",
|
||||||
|
"name": "Annotations & Alerts",
|
||||||
|
"type": "dashboard"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"description": "Docker monitoring with Prometheus and cAdvisor",
|
||||||
|
"editable": true,
|
||||||
|
"fiscalYearStartMonth": 0,
|
||||||
|
"graphTooltip": 1,
|
||||||
|
"id": null,
|
||||||
|
"links": [
|
||||||
|
{
|
||||||
|
"asDropdown": false,
|
||||||
|
"icon": "external link",
|
||||||
|
"includeVars": false,
|
||||||
|
"keepTime": false,
|
||||||
|
"tags": [],
|
||||||
|
"targetBlank": true,
|
||||||
|
"title": "Portainer",
|
||||||
|
"tooltip": "",
|
||||||
|
"type": "link",
|
||||||
|
"url": "https://portainer.kaz.bzh/"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"panels": [
|
||||||
|
{
|
||||||
|
"collapsed": false,
|
||||||
|
"gridPos": {
|
||||||
|
"h": 1,
|
||||||
|
"w": 24,
|
||||||
|
"x": 0,
|
||||||
|
"y": 0
|
||||||
|
},
|
||||||
|
"id": 8,
|
||||||
|
"panels": [],
|
||||||
|
"repeat": "host",
|
||||||
|
"title": "$host",
|
||||||
|
"type": "row"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"datasource": {
|
||||||
|
"type": "prometheus",
|
||||||
|
"uid": "${DS_PROMETHEUS}"
|
||||||
|
},
|
||||||
|
"fieldConfig": {
|
||||||
|
"defaults": {
|
||||||
|
"mappings": [
|
||||||
|
{
|
||||||
|
"options": {
|
||||||
|
"match": "null",
|
||||||
|
"result": {
|
||||||
|
"text": "N/A"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "special"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"thresholds": {
|
||||||
|
"mode": "absolute",
|
||||||
|
"steps": [
|
||||||
|
{
|
||||||
|
"color": "green"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"color": "red",
|
||||||
|
"value": 80
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"unit": "none"
|
||||||
|
},
|
||||||
|
"overrides": []
|
||||||
|
},
|
||||||
|
"gridPos": {
|
||||||
|
"h": 3,
|
||||||
|
"w": 8,
|
||||||
|
"x": 0,
|
||||||
|
"y": 1
|
||||||
|
},
|
||||||
|
"id": 7,
|
||||||
|
"maxDataPoints": 100,
|
||||||
|
"options": {
|
||||||
|
"colorMode": "none",
|
||||||
|
"graphMode": "none",
|
||||||
|
"justifyMode": "auto",
|
||||||
|
"orientation": "horizontal",
|
||||||
|
"percentChangeColorMode": "standard",
|
||||||
|
"reduceOptions": {
|
||||||
|
"calcs": [
|
||||||
|
"mean"
|
||||||
|
],
|
||||||
|
"fields": "",
|
||||||
|
"values": false
|
||||||
|
},
|
||||||
|
"showPercentChange": false,
|
||||||
|
"textMode": "auto",
|
||||||
|
"wideLayout": true
|
||||||
|
},
|
||||||
|
"pluginVersion": "11.6.0",
|
||||||
|
"targets": [
|
||||||
|
{
|
||||||
|
"datasource": {
|
||||||
|
"type": "prometheus",
|
||||||
|
"uid": "${DS_PROMETHEUS}"
|
||||||
|
},
|
||||||
|
"editorMode": "code",
|
||||||
|
"expr": "count(container_last_seen{image!=\"\", host=\"$host\"})",
|
||||||
|
"intervalFactor": 2,
|
||||||
|
"legendFormat": "",
|
||||||
|
"metric": "container_last_seen",
|
||||||
|
"range": true,
|
||||||
|
"refId": "A",
|
||||||
|
"step": 240
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"title": "Running containers",
|
||||||
|
"transparent": true,
|
||||||
|
"type": "stat"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"datasource": {
|
||||||
|
"type": "prometheus",
|
||||||
|
"uid": "${DS_PROMETHEUS}"
|
||||||
|
},
|
||||||
|
"fieldConfig": {
|
||||||
|
"defaults": {
|
||||||
|
"mappings": [
|
||||||
|
{
|
||||||
|
"options": {
|
||||||
|
"match": "null",
|
||||||
|
"result": {
|
||||||
|
"text": "N/A"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "special"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"thresholds": {
|
||||||
|
"mode": "absolute",
|
||||||
|
"steps": [
|
||||||
|
{
|
||||||
|
"color": "green"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"color": "red",
|
||||||
|
"value": 80
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"unit": "mbytes"
|
||||||
|
},
|
||||||
|
"overrides": []
|
||||||
|
},
|
||||||
|
"gridPos": {
|
||||||
|
"h": 3,
|
||||||
|
"w": 8,
|
||||||
|
"x": 8,
|
||||||
|
"y": 1
|
||||||
|
},
|
||||||
|
"id": 5,
|
||||||
|
"maxDataPoints": 100,
|
||||||
|
"options": {
|
||||||
|
"colorMode": "none",
|
||||||
|
"graphMode": "none",
|
||||||
|
"justifyMode": "auto",
|
||||||
|
"orientation": "horizontal",
|
||||||
|
"percentChangeColorMode": "standard",
|
||||||
|
"reduceOptions": {
|
||||||
|
"calcs": [
|
||||||
|
"lastNotNull"
|
||||||
|
],
|
||||||
|
"fields": "",
|
||||||
|
"values": false
|
||||||
|
},
|
||||||
|
"showPercentChange": false,
|
||||||
|
"textMode": "auto",
|
||||||
|
"wideLayout": true
|
||||||
|
},
|
||||||
|
"pluginVersion": "11.6.0",
|
||||||
|
"targets": [
|
||||||
|
{
|
||||||
|
"datasource": {
|
||||||
|
"type": "prometheus",
|
||||||
|
"uid": "${DS_PROMETHEUS}"
|
||||||
|
},
|
||||||
|
"editorMode": "code",
|
||||||
|
"expr": "sum(container_memory_usage_bytes{image!=\"\", host=\"$host\"})/1024/1024",
|
||||||
|
"intervalFactor": 2,
|
||||||
|
"legendFormat": "",
|
||||||
|
"metric": "container_memory_usage_bytes",
|
||||||
|
"range": true,
|
||||||
|
"refId": "A",
|
||||||
|
"step": 240
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"title": "Total Memory Usage",
|
||||||
|
"transparent": true,
|
||||||
|
"type": "stat"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"datasource": {
|
||||||
|
"type": "prometheus",
|
||||||
|
"uid": "${DS_PROMETHEUS}"
|
||||||
|
},
|
||||||
|
"fieldConfig": {
|
||||||
|
"defaults": {
|
||||||
|
"mappings": [
|
||||||
|
{
|
||||||
|
"options": {
|
||||||
|
"match": "null",
|
||||||
|
"result": {
|
||||||
|
"text": "N/A"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "special"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"max": 100,
|
||||||
|
"min": 0,
|
||||||
|
"thresholds": {
|
||||||
|
"mode": "absolute",
|
||||||
|
"steps": [
|
||||||
|
{
|
||||||
|
"color": "green"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"color": "red",
|
||||||
|
"value": 80
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"unit": "percent"
|
||||||
|
},
|
||||||
|
"overrides": []
|
||||||
|
},
|
||||||
|
"gridPos": {
|
||||||
|
"h": 3,
|
||||||
|
"w": 8,
|
||||||
|
"x": 16,
|
||||||
|
"y": 1
|
||||||
|
},
|
||||||
|
"id": 6,
|
||||||
|
"maxDataPoints": 100,
|
||||||
|
"options": {
|
||||||
|
"colorMode": "none",
|
||||||
|
"graphMode": "none",
|
||||||
|
"justifyMode": "auto",
|
||||||
|
"orientation": "horizontal",
|
||||||
|
"percentChangeColorMode": "standard",
|
||||||
|
"reduceOptions": {
|
||||||
|
"calcs": [
|
||||||
|
"lastNotNull"
|
||||||
|
],
|
||||||
|
"fields": "",
|
||||||
|
"values": false
|
||||||
|
},
|
||||||
|
"showPercentChange": false,
|
||||||
|
"textMode": "auto",
|
||||||
|
"wideLayout": true
|
||||||
|
},
|
||||||
|
"pluginVersion": "11.6.0",
|
||||||
|
"targets": [
|
||||||
|
{
|
||||||
|
"datasource": {
|
||||||
|
"type": "prometheus",
|
||||||
|
"uid": "${DS_PROMETHEUS}"
|
||||||
|
},
|
||||||
|
"editorMode": "code",
|
||||||
|
"expr": "sum(rate(container_cpu_user_seconds_total{image!=\"\", host=\"$host\"}[5m]) * 100)",
|
||||||
|
"intervalFactor": 2,
|
||||||
|
"legendFormat": "",
|
||||||
|
"metric": "container_memory_usage_bytes",
|
||||||
|
"range": true,
|
||||||
|
"refId": "A",
|
||||||
|
"step": 240
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"title": "Total CPU Usage",
|
||||||
|
"transparent": true,
|
||||||
|
"type": "stat"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"datasource": {
|
||||||
|
"type": "prometheus",
|
||||||
|
"uid": "${DS_PROMETHEUS}"
|
||||||
|
},
|
||||||
|
"fieldConfig": {
|
||||||
|
"defaults": {
|
||||||
|
"color": {
|
||||||
|
"mode": "palette-classic"
|
||||||
|
},
|
||||||
|
"custom": {
|
||||||
|
"axisBorderShow": false,
|
||||||
|
"axisCenteredZero": false,
|
||||||
|
"axisColorMode": "text",
|
||||||
|
"axisLabel": "",
|
||||||
|
"axisPlacement": "auto",
|
||||||
|
"barAlignment": 0,
|
||||||
|
"barWidthFactor": 0.6,
|
||||||
|
"drawStyle": "line",
|
||||||
|
"fillOpacity": 10,
|
||||||
|
"gradientMode": "none",
|
||||||
|
"hideFrom": {
|
||||||
|
"legend": false,
|
||||||
|
"tooltip": false,
|
||||||
|
"viz": false
|
||||||
|
},
|
||||||
|
"insertNulls": false,
|
||||||
|
"lineInterpolation": "linear",
|
||||||
|
"lineWidth": 2,
|
||||||
|
"pointSize": 5,
|
||||||
|
"scaleDistribution": {
|
||||||
|
"type": "linear"
|
||||||
|
},
|
||||||
|
"showPoints": "never",
|
||||||
|
"spanNulls": true,
|
||||||
|
"stacking": {
|
||||||
|
"group": "A",
|
||||||
|
"mode": "none"
|
||||||
|
},
|
||||||
|
"thresholdsStyle": {
|
||||||
|
"mode": "off"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"links": [
|
||||||
|
{
|
||||||
|
"oneClick": false,
|
||||||
|
"targetBlank": true,
|
||||||
|
"title": "Portainer host",
|
||||||
|
"url": "https://portainer.kaz.bzh/#!/${__field.labels.portainer_id}/docker/containers"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"targetBlank": true,
|
||||||
|
"title": "Portainer container",
|
||||||
|
"url": "https://portainer.kaz.bzh/#!/${__field.labels.portainer_id}/docker/containers/${__field.labels.id.21}${__field.labels.id.22}${__field.labels.id.23}${__field.labels.id.24}${__field.labels.id.25}${__field.labels.id.26}${__field.labels.id.27}${__field.labels.id.28}${__field.labels.id.29}${__field.labels.id.30}${__field.labels.id.31}${__field.labels.id.32}"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"mappings": [],
|
||||||
|
"thresholds": {
|
||||||
|
"mode": "absolute",
|
||||||
|
"steps": [
|
||||||
|
{
|
||||||
|
"color": "green"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"color": "red",
|
||||||
|
"value": 80
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"unit": "percent"
|
||||||
|
},
|
||||||
|
"overrides": [
|
||||||
|
{
|
||||||
|
"__systemRef": "hideSeriesFrom",
|
||||||
|
"matcher": {
|
||||||
|
"id": "byNames",
|
||||||
|
"options": {
|
||||||
|
"mode": "exclude",
|
||||||
|
"names": [
|
||||||
|
"lagalette-orga/lagalette-wpServ"
|
||||||
|
],
|
||||||
|
"prefix": "All except:",
|
||||||
|
"readOnly": true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"properties": [
|
||||||
|
{
|
||||||
|
"id": "custom.hideFrom",
|
||||||
|
"value": {
|
||||||
|
"legend": false,
|
||||||
|
"tooltip": false,
|
||||||
|
"viz": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"gridPos": {
|
||||||
|
"h": 7,
|
||||||
|
"w": 24,
|
||||||
|
"x": 0,
|
||||||
|
"y": 4
|
||||||
|
},
|
||||||
|
"id": 2,
|
||||||
|
"options": {
|
||||||
|
"legend": {
|
||||||
|
"calcs": [
|
||||||
|
"mean",
|
||||||
|
"lastNotNull"
|
||||||
|
],
|
||||||
|
"displayMode": "table",
|
||||||
|
"placement": "right",
|
||||||
|
"showLegend": true,
|
||||||
|
"sortBy": "Mean",
|
||||||
|
"sortDesc": true
|
||||||
|
},
|
||||||
|
"tooltip": {
|
||||||
|
"hideZeros": false,
|
||||||
|
"mode": "multi",
|
||||||
|
"sort": "desc"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"pluginVersion": "11.6.0",
|
||||||
|
"targets": [
|
||||||
|
{
|
||||||
|
"datasource": {
|
||||||
|
"type": "prometheus",
|
||||||
|
"uid": "${DS_PROMETHEUS}"
|
||||||
|
},
|
||||||
|
"editorMode": "code",
|
||||||
|
"expr": "rate(container_cpu_user_seconds_total{image!=\"\", host=\"$host\"}[5m]) * 100",
|
||||||
|
"intervalFactor": 2,
|
||||||
|
"legendFormat": "{{container_label_com_docker_compose_project}}/{{name}}",
|
||||||
|
"metric": "cpu",
|
||||||
|
"range": true,
|
||||||
|
"refId": "A",
|
||||||
|
"step": 10
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"title": "CPU Usage",
|
||||||
|
"type": "timeseries"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"datasource": {
|
||||||
|
"type": "prometheus",
|
||||||
|
"uid": "${DS_PROMETHEUS}"
|
||||||
|
},
|
||||||
|
"fieldConfig": {
|
||||||
|
"defaults": {
|
||||||
|
"color": {
|
||||||
|
"mode": "palette-classic"
|
||||||
|
},
|
||||||
|
"custom": {
|
||||||
|
"axisBorderShow": false,
|
||||||
|
"axisCenteredZero": false,
|
||||||
|
"axisColorMode": "text",
|
||||||
|
"axisLabel": "",
|
||||||
|
"axisPlacement": "auto",
|
||||||
|
"barAlignment": 0,
|
||||||
|
"barWidthFactor": 0.6,
|
||||||
|
"drawStyle": "line",
|
||||||
|
"fillOpacity": 10,
|
||||||
|
"gradientMode": "none",
|
||||||
|
"hideFrom": {
|
||||||
|
"legend": false,
|
||||||
|
"tooltip": false,
|
||||||
|
"viz": false
|
||||||
|
},
|
||||||
|
"insertNulls": false,
|
||||||
|
"lineInterpolation": "linear",
|
||||||
|
"lineWidth": 2,
|
||||||
|
"pointSize": 5,
|
||||||
|
"scaleDistribution": {
|
||||||
|
"type": "linear"
|
||||||
|
},
|
||||||
|
"showPoints": "never",
|
||||||
|
"spanNulls": true,
|
||||||
|
"stacking": {
|
||||||
|
"group": "A",
|
||||||
|
"mode": "none"
|
||||||
|
},
|
||||||
|
"thresholdsStyle": {
|
||||||
|
"mode": "off"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"links": [
|
||||||
|
{
|
||||||
|
"targetBlank": true,
|
||||||
|
"title": "Portainer host",
|
||||||
|
"url": "https://portainer.kaz.bzh/#!/${__field.labels.portainer_id}/docker/containers"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"targetBlank": true,
|
||||||
|
"title": "Portainer container",
|
||||||
|
"url": "https://portainer.kaz.bzh/#!/${__field.labels.portainer_id}/docker/containers/${__field.labels.id.21}${__field.labels.id.22}${__field.labels.id.23}${__field.labels.id.24}${__field.labels.id.25}${__field.labels.id.26}${__field.labels.id.27}${__field.labels.id.28}${__field.labels.id.29}${__field.labels.id.30}${__field.labels.id.31}${__field.labels.id.32}"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"mappings": [],
|
||||||
|
"thresholds": {
|
||||||
|
"mode": "absolute",
|
||||||
|
"steps": [
|
||||||
|
{
|
||||||
|
"color": "green"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"color": "red",
|
||||||
|
"value": 80
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"unit": "bytes"
|
||||||
|
},
|
||||||
|
"overrides": []
|
||||||
|
},
|
||||||
|
"gridPos": {
|
||||||
|
"h": 7,
|
||||||
|
"w": 24,
|
||||||
|
"x": 0,
|
||||||
|
"y": 11
|
||||||
|
},
|
||||||
|
"id": 1,
|
||||||
|
"links": [
|
||||||
|
{
|
||||||
|
"targetBlank": true,
|
||||||
|
"title": "Portainer",
|
||||||
|
"url": "https://portainer.kaz.bzh"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"options": {
|
||||||
|
"legend": {
|
||||||
|
"calcs": [
|
||||||
|
"mean",
|
||||||
|
"lastNotNull"
|
||||||
|
],
|
||||||
|
"displayMode": "table",
|
||||||
|
"placement": "right",
|
||||||
|
"showLegend": true
|
||||||
|
},
|
||||||
|
"tooltip": {
|
||||||
|
"hideZeros": false,
|
||||||
|
"mode": "multi",
|
||||||
|
"sort": "desc"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"pluginVersion": "11.6.0",
|
||||||
|
"targets": [
|
||||||
|
{
|
||||||
|
"datasource": {
|
||||||
|
"type": "prometheus",
|
||||||
|
"uid": "${DS_PROMETHEUS}"
|
||||||
|
},
|
||||||
|
"editorMode": "builder",
|
||||||
|
"expr": "container_memory_usage_bytes{image!=\"\", host=\"$host\"}",
|
||||||
|
"hide": false,
|
||||||
|
"intervalFactor": 2,
|
||||||
|
"legendFormat": "{{container_label_com_docker_compose_project}}/{{name}}",
|
||||||
|
"metric": "container_memory_usage_bytes",
|
||||||
|
"range": true,
|
||||||
|
"refId": "A",
|
||||||
|
"step": 10
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"title": "Memory Usage",
|
||||||
|
"type": "timeseries"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"datasource": {
|
||||||
|
"type": "prometheus",
|
||||||
|
"uid": "${DS_PROMETHEUS}"
|
||||||
|
},
|
||||||
|
"fieldConfig": {
|
||||||
|
"defaults": {
|
||||||
|
"color": {
|
||||||
|
"mode": "palette-classic"
|
||||||
|
},
|
||||||
|
"custom": {
|
||||||
|
"axisBorderShow": false,
|
||||||
|
"axisCenteredZero": false,
|
||||||
|
"axisColorMode": "text",
|
||||||
|
"axisLabel": "",
|
||||||
|
"axisPlacement": "auto",
|
||||||
|
"barAlignment": 0,
|
||||||
|
"barWidthFactor": 0.6,
|
||||||
|
"drawStyle": "line",
|
||||||
|
"fillOpacity": 10,
|
||||||
|
"gradientMode": "none",
|
||||||
|
"hideFrom": {
|
||||||
|
"legend": false,
|
||||||
|
"tooltip": false,
|
||||||
|
"viz": false
|
||||||
|
},
|
||||||
|
"insertNulls": false,
|
||||||
|
"lineInterpolation": "linear",
|
||||||
|
"lineWidth": 2,
|
||||||
|
"pointSize": 5,
|
||||||
|
"scaleDistribution": {
|
||||||
|
"type": "linear"
|
||||||
|
},
|
||||||
|
"showPoints": "never",
|
||||||
|
"spanNulls": true,
|
||||||
|
"stacking": {
|
||||||
|
"group": "A",
|
||||||
|
"mode": "none"
|
||||||
|
},
|
||||||
|
"thresholdsStyle": {
|
||||||
|
"mode": "off"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"mappings": [],
|
||||||
|
"thresholds": {
|
||||||
|
"mode": "absolute",
|
||||||
|
"steps": [
|
||||||
|
{
|
||||||
|
"color": "green"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"color": "red",
|
||||||
|
"value": 80
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"unit": "Bps"
|
||||||
|
},
|
||||||
|
"overrides": []
|
||||||
|
},
|
||||||
|
"gridPos": {
|
||||||
|
"h": 7,
|
||||||
|
"w": 12,
|
||||||
|
"x": 0,
|
||||||
|
"y": 18
|
||||||
|
},
|
||||||
|
"id": 3,
|
||||||
|
"options": {
|
||||||
|
"legend": {
|
||||||
|
"calcs": [
|
||||||
|
"mean",
|
||||||
|
"lastNotNull"
|
||||||
|
],
|
||||||
|
"displayMode": "table",
|
||||||
|
"placement": "right",
|
||||||
|
"showLegend": true,
|
||||||
|
"sortBy": "Mean",
|
||||||
|
"sortDesc": true
|
||||||
|
},
|
||||||
|
"tooltip": {
|
||||||
|
"hideZeros": false,
|
||||||
|
"mode": "multi",
|
||||||
|
"sort": "desc"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"pluginVersion": "11.6.0",
|
||||||
|
"targets": [
|
||||||
|
{
|
||||||
|
"datasource": {
|
||||||
|
"type": "prometheus",
|
||||||
|
"uid": "${DS_PROMETHEUS}"
|
||||||
|
},
|
||||||
|
"editorMode": "code",
|
||||||
|
"expr": "irate(container_network_receive_bytes_total{image!=\"\", host=\"$host\"}[5m])",
|
||||||
|
"intervalFactor": 2,
|
||||||
|
"legendFormat": "{{container_label_com_docker_compose_project}}/{{name}}",
|
||||||
|
"metric": "container_network_receive_bytes_total",
|
||||||
|
"range": true,
|
||||||
|
"refId": "A",
|
||||||
|
"step": 20
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"title": "Network Rx",
|
||||||
|
"transformations": [
|
||||||
|
{
|
||||||
|
"id": "renameByRegex",
|
||||||
|
"options": {
|
||||||
|
"regex": "(.*)",
|
||||||
|
"renamePattern": "$1"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"type": "timeseries"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"datasource": {
|
||||||
|
"type": "prometheus",
|
||||||
|
"uid": "${DS_PROMETHEUS}"
|
||||||
|
},
|
||||||
|
"fieldConfig": {
|
||||||
|
"defaults": {
|
||||||
|
"color": {
|
||||||
|
"mode": "palette-classic"
|
||||||
|
},
|
||||||
|
"custom": {
|
||||||
|
"axisBorderShow": false,
|
||||||
|
"axisCenteredZero": false,
|
||||||
|
"axisColorMode": "text",
|
||||||
|
"axisLabel": "",
|
||||||
|
"axisPlacement": "auto",
|
||||||
|
"barAlignment": 0,
|
||||||
|
"barWidthFactor": 0.6,
|
||||||
|
"drawStyle": "line",
|
||||||
|
"fillOpacity": 10,
|
||||||
|
"gradientMode": "none",
|
||||||
|
"hideFrom": {
|
||||||
|
"legend": false,
|
||||||
|
"tooltip": false,
|
||||||
|
"viz": false
|
||||||
|
},
|
||||||
|
"insertNulls": false,
|
||||||
|
"lineInterpolation": "linear",
|
||||||
|
"lineWidth": 2,
|
||||||
|
"pointSize": 5,
|
||||||
|
"scaleDistribution": {
|
||||||
|
"type": "linear"
|
||||||
|
},
|
||||||
|
"showPoints": "never",
|
||||||
|
"spanNulls": true,
|
||||||
|
"stacking": {
|
||||||
|
"group": "A",
|
||||||
|
"mode": "none"
|
||||||
|
},
|
||||||
|
"thresholdsStyle": {
|
||||||
|
"mode": "off"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"mappings": [],
|
||||||
|
"thresholds": {
|
||||||
|
"mode": "absolute",
|
||||||
|
"steps": [
|
||||||
|
{
|
||||||
|
"color": "green"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"color": "red",
|
||||||
|
"value": 80
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"unit": "Bps"
|
||||||
|
},
|
||||||
|
"overrides": []
|
||||||
|
},
|
||||||
|
"gridPos": {
|
||||||
|
"h": 7,
|
||||||
|
"w": 12,
|
||||||
|
"x": 12,
|
||||||
|
"y": 18
|
||||||
|
},
|
||||||
|
"id": 9,
|
||||||
|
"options": {
|
||||||
|
"legend": {
|
||||||
|
"calcs": [
|
||||||
|
"mean",
|
||||||
|
"lastNotNull"
|
||||||
|
],
|
||||||
|
"displayMode": "table",
|
||||||
|
"placement": "right",
|
||||||
|
"showLegend": true,
|
||||||
|
"sortBy": "Mean",
|
||||||
|
"sortDesc": true
|
||||||
|
},
|
||||||
|
"tooltip": {
|
||||||
|
"hideZeros": false,
|
||||||
|
"mode": "multi",
|
||||||
|
"sort": "desc"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"pluginVersion": "11.6.0",
|
||||||
|
"targets": [
|
||||||
|
{
|
||||||
|
"datasource": {
|
||||||
|
"type": "prometheus",
|
||||||
|
"uid": "${DS_PROMETHEUS}"
|
||||||
|
},
|
||||||
|
"editorMode": "code",
|
||||||
|
"expr": "irate(container_network_transmit_bytes_total{image!=\"\", host=\"$host\"}[5m])",
|
||||||
|
"hide": false,
|
||||||
|
"intervalFactor": 2,
|
||||||
|
"legendFormat": "{{container_label_com_docker_compose_project}}/{{name}}",
|
||||||
|
"metric": "container_network_receive_bytes_total",
|
||||||
|
"range": true,
|
||||||
|
"refId": "B",
|
||||||
|
"step": 20
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"title": "Network Tx",
|
||||||
|
"type": "timeseries"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"refresh": "30s",
|
||||||
|
"schemaVersion": 41,
|
||||||
|
"tags": [],
|
||||||
|
"templating": {
|
||||||
|
"list": [
|
||||||
|
{
|
||||||
|
"allowCustomValue": false,
|
||||||
|
"current": {},
|
||||||
|
"definition": "label_values(host)",
|
||||||
|
"includeAll": true,
|
||||||
|
"multi": true,
|
||||||
|
"name": "host",
|
||||||
|
"options": [],
|
||||||
|
"query": {
|
||||||
|
"qryType": 1,
|
||||||
|
"query": "label_values(host)",
|
||||||
|
"refId": "PrometheusVariableQueryEditor-VariableQuery"
|
||||||
|
},
|
||||||
|
"refresh": 1,
|
||||||
|
"regex": "",
|
||||||
|
"type": "query"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"baseFilters": [],
|
||||||
|
"datasource": {
|
||||||
|
"type": "prometheus",
|
||||||
|
"uid": "PBFA97CFB590B2093"
|
||||||
|
},
|
||||||
|
"filters": [
|
||||||
|
{
|
||||||
|
"condition": "",
|
||||||
|
"key": "container_label_com_docker_compose_project",
|
||||||
|
"keyLabel": "container_label_com_docker_compose_project",
|
||||||
|
"operator": "=~",
|
||||||
|
"value": ".*",
|
||||||
|
"valueLabels": [
|
||||||
|
".*"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"hide": 1,
|
||||||
|
"name": "filter",
|
||||||
|
"type": "adhoc"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"time": {
|
||||||
|
"from": "now-3h",
|
||||||
|
"to": "now"
|
||||||
|
},
|
||||||
|
"timepicker": {},
|
||||||
|
"timezone": "browser",
|
||||||
|
"title": "Docker monitoring par host",
|
||||||
|
"uid": "eekgch7tdq8sgc",
|
||||||
|
"version": 29,
|
||||||
|
"weekStart": ""
|
||||||
|
}
|
@ -0,0 +1,442 @@
|
|||||||
|
|
||||||
|
"color": "green"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"color": "red",
|
||||||
|
"value": 80
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"unit": "Bps"
|
||||||
|
},
|
||||||
|
"overrides": []
|
||||||
|
},
|
||||||
|
"gridPos": {
|
||||||
|
"h": 7,
|
||||||
|
"w": 12,
|
||||||
|
"x": 0,
|
||||||
|
"y": 14
|
||||||
|
},
|
||||||
|
"id": 84,
|
||||||
|
"options": {
|
||||||
|
"legend": {
|
||||||
|
"calcs": [
|
||||||
|
"mean",
|
||||||
|
"lastNotNull",
|
||||||
|
"max",
|
||||||
|
"min"
|
||||||
|
],
|
||||||
|
"displayMode": "table",
|
||||||
|
"placement": "bottom",
|
||||||
|
"showLegend": true
|
||||||
|
},
|
||||||
|
"tooltip": {
|
||||||
|
"hideZeros": false,
|
||||||
|
"mode": "multi",
|
||||||
|
"sort": "none"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"pluginVersion": "11.6.0",
|
||||||
|
"targets": [
|
||||||
|
{
|
||||||
|
"datasource": {
|
||||||
|
"type": "prometheus"
|
||||||
|
},
|
||||||
|
"editorMode": "code",
|
||||||
|
"expr": "rate(node_network_receive_bytes_total{host=\"$host\", device=~\"$device\"}[5m])",
|
||||||
|
"format": "time_series",
|
||||||
|
"intervalFactor": 1,
|
||||||
|
"legendFormat": "{{device}} - rx",
|
||||||
|
"range": true,
|
||||||
|
"refId": "A",
|
||||||
|
"step": 240
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"datasource": {
|
||||||
|
"type": "prometheus"
|
||||||
|
},
|
||||||
|
"editorMode": "code",
|
||||||
|
"expr": "- rate(node_network_transmit_bytes_total{host=\"$host\", device=~\"$device\"}[5m])",
|
||||||
|
"hide": false,
|
||||||
|
"instant": false,
|
||||||
|
"legendFormat": "{{device}} - tx",
|
||||||
|
"range": true,
|
||||||
|
"refId": "B"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"title": "Network Traffic Rx",
|
||||||
|
"type": "timeseries"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"datasource": {
|
||||||
|
"type": "prometheus"
|
||||||
|
},
|
||||||
|
"description": "",
|
||||||
|
"fieldConfig": {
|
||||||
|
"defaults": {
|
||||||
|
"color": {
|
||||||
|
"mode": "palette-classic"
|
||||||
|
},
|
||||||
|
"custom": {
|
||||||
|
"axisBorderShow": false,
|
||||||
|
"axisCenteredZero": false,
|
||||||
|
"axisColorMode": "text",
|
||||||
|
"axisLabel": "",
|
||||||
|
"axisPlacement": "auto",
|
||||||
|
"barAlignment": 0,
|
||||||
|
"barWidthFactor": 0.6,
|
||||||
|
"drawStyle": "line",
|
||||||
|
"fillOpacity": 0,
|
||||||
|
"gradientMode": "none",
|
||||||
|
"hideFrom": {
|
||||||
|
"legend": false,
|
||||||
|
"tooltip": false,
|
||||||
|
"viz": false
|
||||||
|
},
|
||||||
|
"insertNulls": false,
|
||||||
|
"lineInterpolation": "linear",
|
||||||
|
"lineWidth": 1,
|
||||||
|
"pointSize": 5,
|
||||||
|
"scaleDistribution": {
|
||||||
|
"type": "linear"
|
||||||
|
},
|
||||||
|
"showPoints": "auto",
|
||||||
|
"spanNulls": false,
|
||||||
|
"stacking": {
|
||||||
|
"group": "A",
|
||||||
|
"mode": "none"
|
||||||
|
},
|
||||||
|
"thresholdsStyle": {
|
||||||
|
"mode": "off"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"links": [],
|
||||||
|
"mappings": [],
|
||||||
|
"max": 100,
|
||||||
|
"min": 0,
|
||||||
|
"thresholds": {
|
||||||
|
"mode": "absolute",
|
||||||
|
"steps": [
|
||||||
|
{
|
||||||
|
"color": "green"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"color": "red",
|
||||||
|
"value": 80
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"unit": "percent"
|
||||||
|
},
|
||||||
|
"overrides": []
|
||||||
|
},
|
||||||
|
"gridPos": {
|
||||||
|
"h": 7,
|
||||||
|
"w": 12,
|
||||||
|
"x": 12,
|
||||||
|
"y": 14
|
||||||
|
},
|
||||||
|
"id": 174,
|
||||||
|
"options": {
|
||||||
|
"alertThreshold": true,
|
||||||
|
"legend": {
|
||||||
|
"calcs": [],
|
||||||
|
"displayMode": "list",
|
||||||
|
"placement": "bottom",
|
||||||
|
"showLegend": true
|
||||||
|
},
|
||||||
|
"tooltip": {
|
||||||
|
"hideZeros": false,
|
||||||
|
"mode": "single",
|
||||||
|
"sort": "none"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"pluginVersion": "11.6.0",
|
||||||
|
"targets": [
|
||||||
|
{
|
||||||
|
"datasource": {
|
||||||
|
"type": "prometheus"
|
||||||
|
},
|
||||||
|
"editorMode": "code",
|
||||||
|
"expr": "(node_filesystem_size_bytes{host=\"$host\",fstype=~\"ext.*|xfs\",mountpoint !~\".*pod.*\"}-node_filesystem_free_bytes{host=\"$host\",fstype=~\"ext.*|xfs\",mountpoint !~\".*pod.*\"}) *100/(node_filesystem_avail_bytes{host=\"$host\",fstype=~\"ext.*|xfs\",mountpoint !~\".*pod.*\"}+(node_filesystem_size_bytes{host=\"$host\",fstype=~\"ext.*|xfs\",mountpoint !~\".*pod.*\"}-node_filesystem_free_bytes{host=\"$host\",fstype=~\"ext.*|xfs\",mountpoint !~\".*pod.*\"}))",
|
||||||
|
"format": "time_series",
|
||||||
|
"instant": false,
|
||||||
|
"interval": "",
|
||||||
|
"intervalFactor": 1,
|
||||||
|
"legendFormat": "{{mountpoint}}",
|
||||||
|
"refId": "A"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"datasource": {
|
||||||
|
"type": "prometheus"
|
||||||
|
},
|
||||||
|
"expr": "node_filesystem_files_free{host=\"$host\",fstype=~\"ext.?|xfs\"} / node_filesystem_files{host=\"$host\",fstype=~\"ext.?|xfs\"}",
|
||||||
|
"hide": true,
|
||||||
|
"interval": "",
|
||||||
|
"legendFormat": "Inodes:{{instance}}:{{mountpoint}}",
|
||||||
|
"refId": "B"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"title": "Disk",
|
||||||
|
"type": "timeseries"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"datasource": {
|
||||||
|
"type": "prometheus"
|
||||||
|
},
|
||||||
|
"description": "Physical machines only",
|
||||||
|
"fieldConfig": {
|
||||||
|
"defaults": {
|
||||||
|
"color": {
|
||||||
|
"mode": "palette-classic"
|
||||||
|
},
|
||||||
|
"custom": {
|
||||||
|
"axisBorderShow": false,
|
||||||
|
"axisCenteredZero": false,
|
||||||
|
"axisColorMode": "text",
|
||||||
|
"axisLabel": "",
|
||||||
|
"axisPlacement": "auto",
|
||||||
|
"barAlignment": 0,
|
||||||
|
"barWidthFactor": 0.6,
|
||||||
|
"drawStyle": "line",
|
||||||
|
"fillOpacity": 0,
|
||||||
|
"gradientMode": "none",
|
||||||
|
"hideFrom": {
|
||||||
|
"legend": false,
|
||||||
|
"tooltip": false,
|
||||||
|
"viz": false
|
||||||
|
},
|
||||||
|
"insertNulls": false,
|
||||||
|
"lineInterpolation": "linear",
|
||||||
|
"lineWidth": 1,
|
||||||
|
"pointSize": 5,
|
||||||
|
"scaleDistribution": {
|
||||||
|
"type": "linear"
|
||||||
|
},
|
||||||
|
"showPoints": "auto",
|
||||||
|
"spanNulls": false,
|
||||||
|
"stacking": {
|
||||||
|
"group": "A",
|
||||||
|
"mode": "none"
|
||||||
|
},
|
||||||
|
"thresholdsStyle": {
|
||||||
|
"mode": "off"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"mappings": [],
|
||||||
|
"min": 0,
|
||||||
|
"thresholds": {
|
||||||
|
"mode": "absolute",
|
||||||
|
"steps": [
|
||||||
|
{
|
||||||
|
"color": "green"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"color": "red",
|
||||||
|
"value": 80
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"unit": "celsius"
|
||||||
|
},
|
||||||
|
"overrides": []
|
||||||
|
},
|
||||||
|
"gridPos": {
|
||||||
|
"h": 7,
|
||||||
|
"w": 12,
|
||||||
|
"x": 0,
|
||||||
|
"y": 21
|
||||||
|
},
|
||||||
|
"id": 175,
|
||||||
|
"options": {
|
||||||
|
"legend": {
|
||||||
|
"calcs": [],
|
||||||
|
"displayMode": "list",
|
||||||
|
"placement": "bottom",
|
||||||
|
"showLegend": true
|
||||||
|
},
|
||||||
|
"tooltip": {
|
||||||
|
"hideZeros": false,
|
||||||
|
"mode": "single",
|
||||||
|
"sort": "none"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"pluginVersion": "11.6.0",
|
||||||
|
"targets": [
|
||||||
|
{
|
||||||
|
"editorMode": "code",
|
||||||
|
"expr": "node_thermal_zone_temp{host=\"$host\"}",
|
||||||
|
"legendFormat": "{{type}}-zone{{zone}}",
|
||||||
|
"range": true,
|
||||||
|
"refId": "A"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"title": "Temperature",
|
||||||
|
"type": "timeseries"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"datasource": {
|
||||||
|
"type": "prometheus"
|
||||||
|
},
|
||||||
|
"fieldConfig": {
|
||||||
|
"defaults": {
|
||||||
|
"color": {
|
||||||
|
"mode": "palette-classic"
|
||||||
|
},
|
||||||
|
"custom": {
|
||||||
|
"axisBorderShow": false,
|
||||||
|
"axisCenteredZero": false,
|
||||||
|
"axisColorMode": "text",
|
||||||
|
"axisLabel": "",
|
||||||
|
"axisPlacement": "auto",
|
||||||
|
"barAlignment": 0,
|
||||||
|
"barWidthFactor": 0.6,
|
||||||
|
"drawStyle": "line",
|
||||||
|
"fillOpacity": 0,
|
||||||
|
"gradientMode": "none",
|
||||||
|
"hideFrom": {
|
||||||
|
"legend": false,
|
||||||
|
"tooltip": false,
|
||||||
|
"viz": false
|
||||||
|
},
|
||||||
|
"insertNulls": false,
|
||||||
|
"lineInterpolation": "linear",
|
||||||
|
"lineWidth": 1,
|
||||||
|
"pointSize": 5,
|
||||||
|
"scaleDistribution": {
|
||||||
|
"type": "linear"
|
||||||
|
},
|
||||||
|
"showPoints": "auto",
|
||||||
|
"spanNulls": false,
|
||||||
|
"stacking": {
|
||||||
|
"group": "A",
|
||||||
|
"mode": "none"
|
||||||
|
},
|
||||||
|
"thresholdsStyle": {
|
||||||
|
"mode": "off"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"mappings": [],
|
||||||
|
"thresholds": {
|
||||||
|
"mode": "absolute",
|
||||||
|
"steps": [
|
||||||
|
{
|
||||||
|
"color": "green"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"color": "red",
|
||||||
|
"value": 80
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"overrides": []
|
||||||
|
},
|
||||||
|
"gridPos": {
|
||||||
|
"h": 7,
|
||||||
|
"w": 12,
|
||||||
|
"x": 12,
|
||||||
|
"y": 21
|
||||||
|
},
|
||||||
|
"id": 176,
|
||||||
|
"options": {
|
||||||
|
"legend": {
|
||||||
|
"calcs": [],
|
||||||
|
"displayMode": "list",
|
||||||
|
"placement": "bottom",
|
||||||
|
"showLegend": true
|
||||||
|
},
|
||||||
|
"tooltip": {
|
||||||
|
"hideZeros": false,
|
||||||
|
"mode": "single",
|
||||||
|
"sort": "none"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"pluginVersion": "11.6.0",
|
||||||
|
"targets": [
|
||||||
|
{
|
||||||
|
"editorMode": "code",
|
||||||
|
"expr": "rate(node_disk_reads_completed_total{host=\"$host\"}[2m])",
|
||||||
|
"legendFormat": "{{device}} reads",
|
||||||
|
"range": true,
|
||||||
|
"refId": "A"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"datasource": {
|
||||||
|
"type": "prometheus"
|
||||||
|
},
|
||||||
|
"editorMode": "code",
|
||||||
|
"expr": " rate(node_disk_writes_completed_total{host=~\"$host\"}[2m])",
|
||||||
|
"hide": false,
|
||||||
|
"instant": false,
|
||||||
|
"legendFormat": "{{device}} writes",
|
||||||
|
"range": true,
|
||||||
|
"refId": "B"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"title": "Disks IOs",
|
||||||
|
"type": "timeseries"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"preload": false,
|
||||||
|
"refresh": "5s",
|
||||||
|
"schemaVersion": 41,
|
||||||
|
"tags": [],
|
||||||
|
"templating": {
|
||||||
|
"list": [
|
||||||
|
{
|
||||||
|
"allowCustomValue": false,
|
||||||
|
"current": {
|
||||||
|
"text": "kazguel",
|
||||||
|
"value": "kazguel"
|
||||||
|
},
|
||||||
|
"definition": "label_values(host)",
|
||||||
|
"includeAll": false,
|
||||||
|
"name": "host",
|
||||||
|
"options": [],
|
||||||
|
"query": {
|
||||||
|
"qryType": 1,
|
||||||
|
"query": "label_values(host)",
|
||||||
|
"refId": "PrometheusVariableQueryEditor-VariableQuery"
|
||||||
|
},
|
||||||
|
"refresh": 1,
|
||||||
|
"regex": "",
|
||||||
|
"type": "query"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"allowCustomValue": false,
|
||||||
|
"current": {
|
||||||
|
"text": [
|
||||||
|
"ens18"
|
||||||
|
],
|
||||||
|
"value": [
|
||||||
|
"ens18"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"definition": "label_values(node_network_info{device!~\"br.*|veth.*|lo.*|tap.*|docker.*|vibr.*\"},device)",
|
||||||
|
"includeAll": true,
|
||||||
|
"label": "NIC",
|
||||||
|
"multi": true,
|
||||||
|
"name": "device",
|
||||||
|
"options": [],
|
||||||
|
"query": {
|
||||||
|
"qryType": 1,
|
||||||
|
"query": "label_values(node_network_info{device!~\"br.*|veth.*|lo.*|tap.*|docker.*|vibr.*\"},device)",
|
||||||
|
"refId": "PrometheusVariableQueryEditor-VariableQuery"
|
||||||
|
},
|
||||||
|
"refresh": 1,
|
||||||
|
"regex": "",
|
||||||
|
"type": "query"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"time": {
|
||||||
|
"from": "now-6h",
|
||||||
|
"to": "now"
|
||||||
|
},
|
||||||
|
"timepicker": {},
|
||||||
|
"timezone": "",
|
||||||
|
"title": "Vue Serveur",
|
||||||
|
"uid": "deki6c3qvihhcd",
|
||||||
|
"version": 22
|
||||||
|
}
|
1197
dockers/grafana/grafana/provisioning/dashboards/server_overview.json
Normal file
1197
dockers/grafana/grafana/provisioning/dashboards/server_overview.json
Normal file
File diff suppressed because it is too large
Load Diff
@ -1,12 +1,108 @@
|
|||||||
global:
|
global:
|
||||||
scrape_interval: 15s
|
scrape_interval: 60s
|
||||||
evaluation_interval: 15s
|
evaluation_interval: 60s
|
||||||
|
scrape_timeout: 55s
|
||||||
|
|
||||||
rule_files:
|
rule_files:
|
||||||
- 'alert.rules'
|
- 'alert.rules'
|
||||||
|
|
||||||
scrape_configs:
|
scrape_configs:
|
||||||
- job_name: 'traefik'
|
# unused for now
|
||||||
scrape_interval: 5s
|
#- job_name: 'traefik'
|
||||||
|
# scrape_interval: 5s
|
||||||
|
# static_configs:
|
||||||
|
# - targets: ['reverse-proxy:8080']
|
||||||
|
|
||||||
|
- job_name: prometheus
|
||||||
static_configs:
|
static_configs:
|
||||||
- targets: ['dashboard.kaz.sns:8289','dashboard2.kaz.sns:8289']
|
- targets: ["prometheus:9090"]
|
||||||
|
|
||||||
|
|
||||||
|
- job_name: cadvisor-prod1
|
||||||
|
scheme: "https"
|
||||||
|
static_configs:
|
||||||
|
- targets: ["cadvisor-prod1.kaz.bzh:443"]
|
||||||
|
labels:
|
||||||
|
host: 'prod1'
|
||||||
|
portainer_id: 2
|
||||||
|
|
||||||
|
- job_name: cadvisor-prod2
|
||||||
|
scheme: "https"
|
||||||
|
static_configs:
|
||||||
|
- targets: ["cadvisor-prod2.kaz.bzh:443"]
|
||||||
|
labels:
|
||||||
|
host: 'prod2'
|
||||||
|
portainer_id: 4
|
||||||
|
|
||||||
|
- job_name: cadvisor-kazoulet
|
||||||
|
scheme: "https"
|
||||||
|
static_configs:
|
||||||
|
- targets: ["cadvisor-kazoulet.kaz.bzh:443"]
|
||||||
|
labels:
|
||||||
|
host: 'kazoulet'
|
||||||
|
portainer_id: 3
|
||||||
|
|
||||||
|
- job_name: cadvisor-tykaz
|
||||||
|
scheme: "https"
|
||||||
|
static_configs:
|
||||||
|
- targets: ["cadvisor-tykaz.kaz.bzh:443"]
|
||||||
|
labels:
|
||||||
|
host: 'tykaz'
|
||||||
|
portainer_id: 10
|
||||||
|
|
||||||
|
- job_name: cadvisor-kazguel
|
||||||
|
scheme: "https"
|
||||||
|
static_configs:
|
||||||
|
- targets: ["cadvisor-kazguel.kaz.bzh:443"]
|
||||||
|
labels:
|
||||||
|
host: 'kazguel'
|
||||||
|
portainer_id: 11
|
||||||
|
|
||||||
|
- job_name: cadvisor-kazkouil
|
||||||
|
scheme: "https"
|
||||||
|
static_configs:
|
||||||
|
- targets: ["cadvisor-dev.kazkouil.fr:443"]
|
||||||
|
labels:
|
||||||
|
host: 'kazkouil'
|
||||||
|
portainer_id: 5
|
||||||
|
|
||||||
|
- job_name: node-exporter-prod1
|
||||||
|
static_configs:
|
||||||
|
# - targets: ["prod1.kaz.bzh:9100","prod2.kaz.bzh:9100","kazoulet.kaz.bzh:9100","tykaz.kaz.bzh:9100","kazguel.kaz.bzh:9100","kazkouil.fr:9100"]
|
||||||
|
|
||||||
|
- targets: ["prod1.kaz.bzh:9100"]
|
||||||
|
labels:
|
||||||
|
host: 'prod1'
|
||||||
|
|
||||||
|
|
||||||
|
- job_name: node-exporter-prod2
|
||||||
|
static_configs:
|
||||||
|
# - targets: ["prod1.kaz.bzh:9100","prod2.kaz.bzh:9100","kazoulet.kaz.bzh:9100","tykaz.kaz.bzh:9100","kazguel.kaz.bzh:9100","kazkouil.fr:9100"]
|
||||||
|
|
||||||
|
- targets: ["prod2.kaz.bzh:9100"]
|
||||||
|
labels:
|
||||||
|
host: 'prod2'
|
||||||
|
|
||||||
|
- job_name: node-exporter-kazoulet
|
||||||
|
static_configs:
|
||||||
|
- targets: ["kazoulet.kaz.bzh:9100"]
|
||||||
|
labels:
|
||||||
|
host: 'kazoulet'
|
||||||
|
|
||||||
|
- job_name: node-exporter-tykaz
|
||||||
|
static_configs:
|
||||||
|
- targets: ["tykaz.kaz.bzh:9100"]
|
||||||
|
labels:
|
||||||
|
host: 'tykaz'
|
||||||
|
|
||||||
|
- job_name: node-exporter-kazguel
|
||||||
|
static_configs:
|
||||||
|
- targets: ["kazguel.kaz.bzh:9100"]
|
||||||
|
labels:
|
||||||
|
host: 'kazguel'
|
||||||
|
|
||||||
|
- job_name: node-exporter-kazkouil
|
||||||
|
static_configs:
|
||||||
|
- targets: ["kazkouil.fr:9100"]
|
||||||
|
labels:
|
||||||
|
host: 'kazkouil'
|
||||||
|
@ -13,8 +13,10 @@ services:
|
|||||||
test: ['CMD', 'pg_isready', '-U', 'postgres']
|
test: ['CMD', 'pg_isready', '-U', 'postgres']
|
||||||
volumes:
|
volumes:
|
||||||
- postgres:/var/lib/postgresql/data
|
- postgres:/var/lib/postgresql/data
|
||||||
environment:
|
# environment:
|
||||||
- 'POSTGRES_HOST_AUTH_METHOD=trust'
|
# - 'POSTGRES_HOST_AUTH_METHOD=trust'
|
||||||
|
env_file:
|
||||||
|
- ../../secret/env-mastodonDB
|
||||||
|
|
||||||
redis:
|
redis:
|
||||||
container_name: ${mastodonRedisName}
|
container_name: ${mastodonRedisName}
|
||||||
@ -72,6 +74,7 @@ services:
|
|||||||
env_file:
|
env_file:
|
||||||
- env-config
|
- env-config
|
||||||
- ../../secret/env-mastodonServ
|
- ../../secret/env-mastodonServ
|
||||||
|
- ../../secret/env-mastodonDB
|
||||||
command: bundle exec puma -C config/puma.rb
|
command: bundle exec puma -C config/puma.rb
|
||||||
networks:
|
networks:
|
||||||
- mastodonNet
|
- mastodonNet
|
||||||
|
@ -24,9 +24,9 @@ REDIS_PORT=
|
|||||||
# PostgreSQL
|
# PostgreSQL
|
||||||
# ----------
|
# ----------
|
||||||
DB_HOST=db
|
DB_HOST=db
|
||||||
DB_USER=postgres
|
#DB_USER=postgres
|
||||||
DB_NAME=postgres
|
#DB_NAME=postgres
|
||||||
DB_PASS=
|
#DB_PASS=
|
||||||
DB_PORT=5432
|
DB_PORT=5432
|
||||||
|
|
||||||
# Elasticsearch (optional)
|
# Elasticsearch (optional)
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
services:
|
services:
|
||||||
|
|
||||||
app:
|
app:
|
||||||
image: mattermost/mattermost-team-edition:10.6
|
image: mattermost/mattermost-team-edition:10.9.1
|
||||||
container_name: ${mattermostServName}
|
container_name: ${mattermostServName}
|
||||||
restart: ${restartPolicy}
|
restart: ${restartPolicy}
|
||||||
volumes:
|
volumes:
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
FROM paheko/paheko:1.3.13
|
FROM paheko/paheko:1.3.15
|
||||||
|
|
||||||
ENV PAHEKO_DIR /var/www/paheko
|
ENV PAHEKO_DIR /var/www/paheko
|
||||||
|
|
||||||
|
@ -127,4 +127,4 @@ define('Paheko\SHOW_ERRORS', true);
|
|||||||
#add by fab le 21/04/2022
|
#add by fab le 21/04/2022
|
||||||
//const PDF_COMMAND = 'prince';
|
//const PDF_COMMAND = 'prince';
|
||||||
# const PDF_COMMAND = 'auto';
|
# const PDF_COMMAND = 'auto';
|
||||||
const PDF_COMMAND = 'chromium --no-sandbox --headless --disable-dev-shm-usage --autoplay-policy=no-user-gesture-required --no-first-run --disable-gpu --disable-features=DefaultPassthroughCommandDecoder --use-fake-ui-for-media-stream --use-fake-device-for-media-stream --disable-sync --print-to-pdf=%2$s %1$s';
|
const PDF_COMMAND = 'chromium --no-sandbox --headless --no-pdf-header-footer --disable-dev-shm-usage --autoplay-policy=no-user-gesture-required --no-first-run --disable-gpu --disable-features=DefaultPassthroughCommandDecoder --use-fake-ui-for-media-stream --use-fake-device-for-media-stream --disable-sync --print-to-pdf=%2$s %1$s';
|
||||||
|
Binary file not shown.
84
dockers/peertube/docker-compose.yml
Normal file
84
dockers/peertube/docker-compose.yml
Normal file
@ -0,0 +1,84 @@
|
|||||||
|
services:
|
||||||
|
|
||||||
|
webserver:
|
||||||
|
image: chocobozzz/peertube-webserver:latest
|
||||||
|
restart: ${restartPolicy}
|
||||||
|
depends_on:
|
||||||
|
- peertube
|
||||||
|
networks:
|
||||||
|
- peertubeNet
|
||||||
|
#ports:
|
||||||
|
#- "80:80"
|
||||||
|
#- "443:443"
|
||||||
|
volumes:
|
||||||
|
- assets:/var/www/peertube/peertube-latest/client/dist:ro
|
||||||
|
- data:/var/www/peertube/storage
|
||||||
|
env_file:
|
||||||
|
- ../../secret/env-${peertubeServName}
|
||||||
|
labels:
|
||||||
|
- "traefik.enable=true"
|
||||||
|
- "traefik.http.routers.${peertubeServName}.rule=Host(`${peertubeHost}.${domain}`)"
|
||||||
|
- "traefik.docker.network=peertubeNet"
|
||||||
|
|
||||||
|
peertube:
|
||||||
|
image: chocobozzz/peertube:production-bookworm
|
||||||
|
container_name: ${peertubeServName}
|
||||||
|
restart: ${restartPolicy}
|
||||||
|
depends_on:
|
||||||
|
- postgres
|
||||||
|
- redis
|
||||||
|
networks:
|
||||||
|
- peertubeNet
|
||||||
|
volumes:
|
||||||
|
# Remove the following line if you want to use another webserver/proxy or test PeerTube in local
|
||||||
|
- assets:/app/client/dist
|
||||||
|
- data:/data
|
||||||
|
- config:/config
|
||||||
|
env_file:
|
||||||
|
- ../../secret/env-${peertubeServName}
|
||||||
|
labels:
|
||||||
|
- "traefik.enable=true"
|
||||||
|
- "traefik.http.routers.${peertubeServName}.rule=Host(`${peertubeHost}.${domain}`)"
|
||||||
|
- "traefik.docker.network=peertubeNet"
|
||||||
|
- "traefik.http.services.${peertubeServName}.loadbalancer.server.port=9000"
|
||||||
|
#traefik.frontend.rule: "Host:videos.kaz.bzh"
|
||||||
|
#traefik.port: "9000"
|
||||||
|
# traefik.frontend.redirect.entryPoint: https
|
||||||
|
|
||||||
|
postgres:
|
||||||
|
image: postgres:13-alpine
|
||||||
|
container_name: ${peertubeDBName}
|
||||||
|
restart: ${restartPolicy}
|
||||||
|
networks:
|
||||||
|
- peertubeNet
|
||||||
|
volumes:
|
||||||
|
- db:/var/lib/postgresql/data
|
||||||
|
env_file:
|
||||||
|
- ../../secret/env-${peertubeDBName}
|
||||||
|
labels:
|
||||||
|
traefik.enable: "false"
|
||||||
|
|
||||||
|
redis:
|
||||||
|
image: redis:6-alpine
|
||||||
|
container_name: peertubeCache
|
||||||
|
restart: ${restartPolicy}
|
||||||
|
networks:
|
||||||
|
- peertubeNet
|
||||||
|
env_file:
|
||||||
|
- ../../secret/env-${peertubeServName}
|
||||||
|
volumes:
|
||||||
|
- redis:/data
|
||||||
|
labels:
|
||||||
|
traefik.enable: "false"
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
assets:
|
||||||
|
data:
|
||||||
|
config:
|
||||||
|
db:
|
||||||
|
redis:
|
||||||
|
|
||||||
|
networks:
|
||||||
|
peertubeNet:
|
||||||
|
external: true
|
||||||
|
name: peertubeNet
|
@ -1,4 +1,4 @@
|
|||||||
FROM docker.io/mailserver/docker-mailserver:15.0.0
|
FROM docker.io/mailserver/docker-mailserver:15.0.2
|
||||||
|
|
||||||
########################################
|
########################################
|
||||||
# APT local cache
|
# APT local cache
|
||||||
|
@ -44,8 +44,8 @@ services:
|
|||||||
labels:
|
labels:
|
||||||
- "traefik.enable=true"
|
- "traefik.enable=true"
|
||||||
- "traefik.http.routers.mail.rule=Host(`mail.${domain}`) || Host(`smtp.${domain}`)"
|
- "traefik.http.routers.mail.rule=Host(`mail.${domain}`) || Host(`smtp.${domain}`)"
|
||||||
- "traefik.http.routers.webmails.rule=Host(`webmail.kaz.bzh`)"
|
- "traefik.http.routers.webmails.rule=Host(`webmail.${domain}`)"
|
||||||
- "traefik.http.middlewares.reg-webmails.redirectregex.regex=^https://webmail.kaz.bzh(.*)"
|
- "traefik.http.middlewares.reg-webmails.redirectregex.regex=^https://webmail.${domain}(.*)"
|
||||||
- "traefik.http.middlewares.reg-webmails.redirectregex.replacement=https://kaz.bzh/relever-ses-mails-chez-kaz-via-un-webmail"
|
- "traefik.http.middlewares.reg-webmails.redirectregex.replacement=https://kaz.bzh/relever-ses-mails-chez-kaz-via-un-webmail"
|
||||||
- "traefik.http.middlewares.reg-webmails.redirectregex.permanent=true"
|
- "traefik.http.middlewares.reg-webmails.redirectregex.permanent=true"
|
||||||
- "traefik.http.routers.webmails.middlewares=reg-webmails"
|
- "traefik.http.routers.webmails.middlewares=reg-webmails"
|
||||||
|
@ -99,7 +99,7 @@ RUN echo "root: ADMIN_EMAIL" >> /etc/aliases \
|
|||||||
RUN echo aliases_program postalias >>/etc/sympa/sympa/sympa.conf \
|
RUN echo aliases_program postalias >>/etc/sympa/sympa/sympa.conf \
|
||||||
&& echo sendmail /usr/sbin/sendmail >>/etc/sympa/sympa/sympa.conf \
|
&& echo sendmail /usr/sbin/sendmail >>/etc/sympa/sympa/sympa.conf \
|
||||||
&& echo soap_url /sympasoap >>/etc/sympa/sympa/sympa.conf \
|
&& echo soap_url /sympasoap >>/etc/sympa/sympa/sympa.conf \
|
||||||
&& echo dmarc_protection.mode dmarc_reject >>/etc/sympa/sympa/sympa.conf \
|
&& echo dmarc_protection.mode dmarc_reject,dmarc_quarantine >>/etc/sympa/sympa/sympa.conf \
|
||||||
&& cp /usr/share/doc/sympa/examples/script/sympa_soap_client.pl.gz /usr/lib/sympa/bin/ \
|
&& cp /usr/share/doc/sympa/examples/script/sympa_soap_client.pl.gz /usr/lib/sympa/bin/ \
|
||||||
&& gunzip /usr/lib/sympa/bin/sympa_soap_client.pl.gz \
|
&& gunzip /usr/lib/sympa/bin/sympa_soap_client.pl.gz \
|
||||||
&& chmod +x /usr/lib/sympa/bin/sympa_soap_client.pl \
|
&& chmod +x /usr/lib/sympa/bin/sympa_soap_client.pl \
|
||||||
|
@ -3,6 +3,7 @@ orange.com veryslow:
|
|||||||
wanadoo.com veryslow:
|
wanadoo.com veryslow:
|
||||||
wanadoo.fr veryslow:
|
wanadoo.fr veryslow:
|
||||||
gmail.com slow:
|
gmail.com slow:
|
||||||
|
laposte.net slow:
|
||||||
yahoo.com slow:
|
yahoo.com slow:
|
||||||
yahoo.fr slow:
|
yahoo.fr slow:
|
||||||
outlook.com veryslow:
|
outlook.com veryslow:
|
||||||
|
@ -16,7 +16,6 @@ services:
|
|||||||
- ${jirafeauServName}:${fileHost}
|
- ${jirafeauServName}:${fileHost}
|
||||||
ports:
|
ports:
|
||||||
- ${SYMPA_IP}:25:25
|
- ${SYMPA_IP}:25:25
|
||||||
- ${SYMPA_IP}:80:80
|
|
||||||
- ${SYMPA_IP}:443:443
|
- ${SYMPA_IP}:443:443
|
||||||
env_file:
|
env_file:
|
||||||
- ../../secret/env-${sympaServName}
|
- ../../secret/env-${sympaServName}
|
||||||
@ -33,7 +32,12 @@ services:
|
|||||||
- ./config/transport:/etc/postfix/transport:rw
|
- ./config/transport:/etc/postfix/transport:rw
|
||||||
- /etc/localtime:/etc/localtime:ro
|
- /etc/localtime:/etc/localtime:ro
|
||||||
- /etc/timezone:/etc/timezone:ro
|
- /etc/timezone:/etc/timezone:ro
|
||||||
- /etc/letsencrypt:/etc/letsencrypt:ro
|
- /etc/ssl:/etc/ssl:ro
|
||||||
|
labels:
|
||||||
|
- "traefik.enable=true"
|
||||||
|
- "traefik.http.routers.sympa.rule=host(`listes.${domain}`)"
|
||||||
|
- "traefik.docker.network=sympaNet"
|
||||||
|
|
||||||
|
|
||||||
db:
|
db:
|
||||||
image: mariadb:10.5
|
image: mariadb:10.5
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
services:
|
services:
|
||||||
reverse-proxy:
|
reverse-proxy:
|
||||||
image: traefik:v3.3.4
|
image: traefik:v3.4.1
|
||||||
container_name: ${traefikServName}
|
container_name: ${traefikServName}
|
||||||
restart: ${restartPolicy}
|
restart: ${restartPolicy}
|
||||||
# Enables the web UI and tells Traefik to listen to docker
|
# Enables the web UI and tells Traefik to listen to docker
|
||||||
@ -11,6 +11,7 @@ services:
|
|||||||
- /var/run/docker.sock:/var/run/docker.sock:ro
|
- /var/run/docker.sock:/var/run/docker.sock:ro
|
||||||
- ./conf:/etc/traefik/
|
- ./conf:/etc/traefik/
|
||||||
- letsencrypt:/letsencrypt
|
- letsencrypt:/letsencrypt
|
||||||
|
- log:/log
|
||||||
environment:
|
environment:
|
||||||
- TRAEFIK_PROVIDERS_DOCKER=true
|
- TRAEFIK_PROVIDERS_DOCKER=true
|
||||||
- TRAEFIK_PROVIDERS_DOCKER_EXPOSEDBYDEFAULT=false
|
- TRAEFIK_PROVIDERS_DOCKER_EXPOSEDBYDEFAULT=false
|
||||||
@ -25,11 +26,19 @@ services:
|
|||||||
- TRAEFIK_CERTIFICATESRESOLVERS_letsencrypt_ACME_EMAIL=admin@${domain}
|
- TRAEFIK_CERTIFICATESRESOLVERS_letsencrypt_ACME_EMAIL=admin@${domain}
|
||||||
- TRAEFIK_CERTIFICATESRESOLVERS_letsencrypt_ACME_CASERVER=${acme_server}
|
- TRAEFIK_CERTIFICATESRESOLVERS_letsencrypt_ACME_CASERVER=${acme_server}
|
||||||
- TRAEFIK_CERTIFICATESRESOLVERS_letsencrypt_ACME_STORAGE=/letsencrypt/acme.json
|
- TRAEFIK_CERTIFICATESRESOLVERS_letsencrypt_ACME_STORAGE=/letsencrypt/acme.json
|
||||||
- TRAEFIK_CERTIFICATESRESOLVERS_letsencrypt_ACME_TLSCHALLENGE=true
|
- TRAEFIK_CERTIFICATESRESOLVERS_letsencrypt_ACME_HTTPCHALLENGE_ENTRYPOINT=web
|
||||||
- TRAEFIK_LOG_LEVEL=INFO
|
|
||||||
- TRAEFIK_API_DASHBOARD=true
|
- TRAEFIK_API_DASHBOARD=true
|
||||||
#pour la migration vers traefik3
|
#pour la migration vers traefik3
|
||||||
- TRAEFIK_CORE_DEFAULTRULESYNTAX=v3
|
- TRAEFIK_CORE_DEFAULTRULESYNTAX=v3
|
||||||
|
|
||||||
|
- TZ=Europe/Paris
|
||||||
|
- TRAEFIK_ACCESSLOG=true
|
||||||
|
- TRAEFIK_ACCESSLOG_FILEPATH=/log/traefik_acces.log
|
||||||
|
- TRAEFIK_ACCESSLOG_FILTERS_STATUSCODES=404,403,401
|
||||||
|
- TRAEFIK_LOG=true
|
||||||
|
- TRAEFIK_LOG_LEVEL=INFO
|
||||||
|
- TRAEFIK_LOG_FILEPATH=/log/traefik.log
|
||||||
|
|
||||||
labels:
|
labels:
|
||||||
- "traefik.enable=true"
|
- "traefik.enable=true"
|
||||||
- "traefik.http.routers.traefik_https.rule=Host(`${site}.${domain}`) && PathPrefix(`/api`, `/dashboard`)"
|
- "traefik.http.routers.traefik_https.rule=Host(`${site}.${domain}`) && PathPrefix(`/api`, `/dashboard`)"
|
||||||
@ -101,6 +110,9 @@ services:
|
|||||||
{{mastodon
|
{{mastodon
|
||||||
- mastodonNet
|
- mastodonNet
|
||||||
}}
|
}}
|
||||||
|
{{peertube
|
||||||
|
- peertubeNet
|
||||||
|
}}
|
||||||
|
|
||||||
#### BEGIN ORGA USE_NET
|
#### BEGIN ORGA USE_NET
|
||||||
#### END ORGA USE_NET
|
#### END ORGA USE_NET
|
||||||
@ -209,6 +221,11 @@ networks:
|
|||||||
external: true
|
external: true
|
||||||
name: mastodonNet
|
name: mastodonNet
|
||||||
}}
|
}}
|
||||||
|
{{peertube
|
||||||
|
peertubeNet:
|
||||||
|
external:true
|
||||||
|
name:peertubeNet
|
||||||
|
}}
|
||||||
|
|
||||||
|
|
||||||
#### BEGIN ORGA DEF_NET
|
#### BEGIN ORGA DEF_NET
|
||||||
@ -216,3 +233,4 @@ networks:
|
|||||||
|
|
||||||
volumes:
|
volumes:
|
||||||
letsencrypt:
|
letsencrypt:
|
||||||
|
log:
|
||||||
|
@ -67,3 +67,59 @@ div.kaz::after {
|
|||||||
border-width: thin;
|
border-width: thin;
|
||||||
border-color: red;
|
border-color: red;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
div.kaz2:hover {
|
||||||
|
font-size: initial !important;
|
||||||
|
color: initial !important;
|
||||||
|
}
|
||||||
|
div.kaz2:hover a.kaz2 {
|
||||||
|
background-size: initial !important;
|
||||||
|
padding: 4px 0 4px 230px;
|
||||||
|
}
|
||||||
|
div.kaz2 a.kaz2 {
|
||||||
|
background-size: 110px 12px;
|
||||||
|
padding: 4px 0 4px 120px;
|
||||||
|
}
|
||||||
|
div.kaz2 {
|
||||||
|
font-size: 10px;
|
||||||
|
color: #969696;
|
||||||
|
padding: 1pc 0 0 0;
|
||||||
|
margin: 0 0 0 80px;
|
||||||
|
min-height: 200px;
|
||||||
|
clear: left;
|
||||||
|
}
|
||||||
|
div.kaz2::before {
|
||||||
|
content: url("/m/logo.png");
|
||||||
|
position: absolute;
|
||||||
|
padding: 0;
|
||||||
|
margin: 0 0 0 -70px;
|
||||||
|
width: 50px;
|
||||||
|
height: 100px;
|
||||||
|
}
|
||||||
|
div.kaz2>ul>li {
|
||||||
|
list-style-type: none; /* Remove bullets */
|
||||||
|
}
|
||||||
|
div.kaz2>ul>li::before {
|
||||||
|
content: "\2713";
|
||||||
|
color: green;
|
||||||
|
margin-left: -20px;
|
||||||
|
margin-right: 10px;
|
||||||
|
}
|
||||||
|
a.kaz2 {
|
||||||
|
background-image: url("/m/coche.png");
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
padding: 4px 0 4px 230px;
|
||||||
|
margin: 0 0 0 0;
|
||||||
|
min-height: 25px;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.kaz2 div.nb {
|
||||||
|
padding: 1pc;
|
||||||
|
margin: 0 0 0 -70px;
|
||||||
|
display: block;
|
||||||
|
border-radius: 30px;
|
||||||
|
border-style: solid;
|
||||||
|
border-width: thin;
|
||||||
|
border-color: red;
|
||||||
|
}
|
||||||
|
@ -303,6 +303,42 @@ castopod_CP_EMAIL_SMTP_PASSWORD=
|
|||||||
castopod_CP_EMAIL_FROM=noreply@${domain}
|
castopod_CP_EMAIL_FROM=noreply@${domain}
|
||||||
castopod_CP_EMAIL_SMTP_CRYPTO=tls
|
castopod_CP_EMAIL_SMTP_CRYPTO=tls
|
||||||
|
|
||||||
|
#####################
|
||||||
|
# Peertube
|
||||||
|
peertube_POSTGRES_USER="--clean_val--"
|
||||||
|
peertube_POSTGRES_PASSWORD="--clean_val--"
|
||||||
|
peertube_PEERTUBE_DB_NAME="--clean_val--"
|
||||||
|
|
||||||
|
peertube_PEERTUBE_DB_USERNAME="${peertube_POSTGRES_USER}"
|
||||||
|
peertube_PEERTUBE_DB_PASSWORD="${peertube_POSTGRES_PASSWORD}"
|
||||||
|
peertube_PEERTUBE_DB_SSL=false
|
||||||
|
peertube_PEERTUBE_DB_HOSTNAME="${peertubeDBName}"
|
||||||
|
peertube_PEERTUBE_WEBSERVER_HOSTNAME="${peertubeHost}.${domain}"
|
||||||
|
peertube_PEERTUBE_TRUST_PROXY="['10.0.0.0/8', '127.0.0.1', 'loopback', '172.18.0.0/16']"
|
||||||
|
|
||||||
|
peertube_PEERTUBE_SECRET="--clean_val--"
|
||||||
|
peertube_PT_INITIAL_ROOT_PASSWORD="--clean_val--"
|
||||||
|
|
||||||
|
#peertube_PEERTUBE_SMTP_USERNAME=
|
||||||
|
#peertube_PEERTUBE_SMTP_PASSWORD=
|
||||||
|
# Default to Postfix service name "postfix" in docker-compose.yml
|
||||||
|
# May be the hostname of your Custom SMTP server
|
||||||
|
peertube_PEERTUBE_SMTP_HOSTNAME=
|
||||||
|
peertube_PEERTUBE_SMTP_PORT=25
|
||||||
|
peertube_PEERTUBE_SMTP_FROM=
|
||||||
|
peertube_PEERTUBE_SMTP_TLS=false
|
||||||
|
peertube_PEERTUBE_SMTP_DISABLE_STARTTLS=false
|
||||||
|
peertube_PEERTUBE_ADMIN_EMAIL=
|
||||||
|
peertube_POSTFIX_myhostname=
|
||||||
|
#peertube_OPENDKIM_DOMAINS=peertube
|
||||||
|
peertube_OPENDKIM_RequireSafeKeys=no
|
||||||
|
|
||||||
|
peertube_PEERTUBE_OBJECT_STORAGE_UPLOAD_ACL_PUBLIC="public-read"
|
||||||
|
peertube_PEERTUBE_OBJECT_STORAGE_UPLOAD_ACL_PRIVATE="private"
|
||||||
|
|
||||||
|
######################
|
||||||
|
peertube_POSTGRES_DB="${peertube_PEERTUBE_DB_NAME}"
|
||||||
|
|
||||||
######################
|
######################
|
||||||
# SNAPPYMAIL
|
# SNAPPYMAIL
|
||||||
# Url https://snappymail.${domain}/?admin
|
# Url https://snappymail.${domain}/?admin
|
||||||
@ -313,3 +349,11 @@ castopod_CP_EMAIL_SMTP_CRYPTO=tls
|
|||||||
snappymail_TZ="Europe/Paris"
|
snappymail_TZ="Europe/Paris"
|
||||||
snappymail_UPLOAD_MAX_SIZE="100M"
|
snappymail_UPLOAD_MAX_SIZE="100M"
|
||||||
|
|
||||||
|
####################
|
||||||
|
# mastodon
|
||||||
|
mastodon_POSTGRES_USER="--clean_val--"
|
||||||
|
mastodon_POSTGRES_PASSWORD="--clean_val--"
|
||||||
|
mastodon_POSTGRES_DB=mastodon
|
||||||
|
mastodon_DB_USER="${mastodon_POSTGRES_USER}"
|
||||||
|
mastodon_DB_PASS="${mastodon_POSTGRES_PASSWORD}"
|
||||||
|
mastodon_DB_NAME=mastodon
|
||||||
|
6
secret.tmpl/env-mastodonDB
Normal file
6
secret.tmpl/env-mastodonDB
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
DB_USER=
|
||||||
|
DB_NAME=
|
||||||
|
DB_PASS=
|
||||||
|
POSTGRES_USER=
|
||||||
|
POSTGRES_PASSWORD=
|
||||||
|
POSTGRES_DB=postgres
|
10
secret.tmpl/env-mastodonServ
Normal file
10
secret.tmpl/env-mastodonServ
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
SECRET_KEY_BASE=
|
||||||
|
OTP_SECRET=
|
||||||
|
ACTIVE_RECORD_ENCRYPTION_DETERMINISTIC_KEY=
|
||||||
|
ACTIVE_RECORD_ENCRYPTION_KEY_DERIVATION_SALT=
|
||||||
|
ACTIVE_RECORD_ENCRYPTION_PRIMARY_KEY=
|
||||||
|
VAPID_PRIVATE_KEY==
|
||||||
|
VAPID_PUBLIC_KEY=
|
||||||
|
SMTP_PASSWORD=
|
||||||
|
EMAIL_DOMAIN_ALLOWLIST=
|
||||||
|
ADMIN_PASSWORD=
|
Reference in New Issue
Block a user