From 80330b594a48e17b1118233dfaf9b7d0fbbb7760 Mon Sep 17 00:00:00 2001 From: "didier@kaz.bzh" Date: Sun, 21 Jan 2024 23:12:42 +0100 Subject: [PATCH] castopod as a service --- bin/gestContainers.sh | 8 ++--- bin/manageCastopod.sh | 4 +-- config/orgaTmpl/docker-compose.yml | 56 +++++++++++++++++++++++++++++ config/orgaTmpl/init-db.sh | 14 +++++++- config/orgaTmpl/init-volume.sh | 5 ++- config/orgaTmpl/orga-gen.sh | 30 ++++++++++++---- dockers/castopod/docker-compose.yml | 14 ++++---- secret.tmpl/SetAllPass.sh | 15 +++++++- 8 files changed, 122 insertions(+), 24 deletions(-) diff --git a/bin/gestContainers.sh b/bin/gestContainers.sh index 313c593..695fda1 100755 --- a/bin/gestContainers.sh +++ b/bin/gestContainers.sh @@ -37,7 +37,7 @@ declare -A DockerServNames # le nom des containers correspondant DockerServNames=( [cloud]="${nextcloudServName}" [agora]="${mattermostServName}" [wiki]="${dokuwikiServName}" [wp]="${wordpressServName}" [office]="${officeServName}" [paheko]="${pahekoServName}" [castopod]="${castopodServName}" ) declare -A FilterLsVolume # Pour trouver quel volume appartient à quel container -FilterLsVolume=( [cloud]="cloudMain" [agora]="matterConfig" [wiki]="wikiConf" [wp]="wordpress" [castopod]="castopod" ) +FilterLsVolume=( [cloud]="cloudMain" [agora]="matterConfig" [wiki]="wikiConf" [wp]="wordpress" [castopod]="castopodMedia" ) declare -A composeDirs # Le nom du repertoire compose pour le commun composeDirs=( [cloud]="cloud" [agora]="mattermost" [wiki]="dokuwiki" [office]="collabora" [paheko]="paheko" [castopod]="castopod" ) @@ -530,17 +530,17 @@ for ARG in "$@"; do OPERATE_ON_NAS_ORGA= ;; # pas celles sur NAS '-cloud'|'--cloud') CONTAINERS_TYPES="${CONTAINERS_TYPES} cloud" ;; - '-agora'|'--agora') + '-agora'|'--agora'|'-mm'|'--mm'|'-matter'*|'--matter'*) CONTAINERS_TYPES="${CONTAINERS_TYPES} agora" ;; '-wiki'|'--wiki') CONTAINERS_TYPES="${CONTAINERS_TYPES} wiki" ;; '-wp'|'--wp') CONTAINERS_TYPES="${CONTAINERS_TYPES} wp" ;; - '-office'|'--office') + '-office'|'--office'|'-collab'*|'--collab'*) CONTAINERS_TYPES="${CONTAINERS_TYPES} office" ;; '-paheko'|'--paheko') CONTAINERS_TYPES="${CONTAINERS_TYPES} paheko" ;; - '-castopod'|'--castopod') + '-pod'|'--pod'|'-castopod'|'--castopod') CONTAINERS_TYPES="${CONTAINERS_TYPES} castopod" ;; '-t' ) COMMANDS="${COMMANDS} RESTART-COMPOSE" ;; diff --git a/bin/manageCastopod.sh b/bin/manageCastopod.sh index 232d4f8..a7e0f58 100755 --- a/bin/manageCastopod.sh +++ b/bin/manageCastopod.sh @@ -99,8 +99,8 @@ for ARG in "$@"; do ;; *) ORGA="${ARG%-orga}" - DockerServName="${ORGA}-$castopodServName}" - WPCOMMUN= + DockerServName="${ORGA}-${castopodServName}" + CASTOPOD_COMMUN= ;; esac done diff --git a/config/orgaTmpl/docker-compose.yml b/config/orgaTmpl/docker-compose.yml index 23aebc0..9026983 100644 --- a/config/orgaTmpl/docker-compose.yml +++ b/config/orgaTmpl/docker-compose.yml @@ -203,6 +203,52 @@ services: external_links: - ${smtpServName}:${smtpHost}.${domain} #}} +#{{ + castopod: + image: castopod/castopod:latest + container_name: ${orga}${castopodServName} + #disk_quota: 10G + restart: ${restartPolicy} + # memory: 1G + networks: + - orgaNet +# - postfixNet + expose: + - 8000 + depends_on: + - db + links: + - db + external_links: + - ${smtpServName}:${smtpHost}.${domain} + volumes: + - castopodMedia:/var/www/castopod/public/media + environment: + CP_BASEURL: "https://${orga}${castopodHost}.${domain}" + CP_ANALYTICS_SALT: qldsgfliuzrbhgmkjbdbmkvb + VIRTUAL_PORT: 8000 + CP_CACHE_HANDLER: redis + CP_REDIS_HOST: redis + CP_DATABASE_HOSTNAME: db + env_file: + - ../../secret/env-${castopodServName} + - ../../secret/env-${castopodDBName} + labels: + - "traefik.enable=true" + - "traefik.http.routers.${orga}${castopodServName}.rule=Host(`${orga}${castopodHost}.${domain}`)" + redis: + image: redis:7.0-alpine + container_name: ${orga}castopodCache + volumes: + - castopodCache:/data + networks: + - orgaNet + env_file: + - ../../secret/env-${castopodServName} + command: --requirepass ${castopodRedisPassword} +#}} + + #{{services volumes: @@ -276,6 +322,16 @@ volumes: external: true name: orga_${orga}wordpress #}} +#{{castopod + castopodMedia: + external: true + name: orga_${orga}castopodMedia + castopodCache: + external: true + name: orga_${orga}castopodCache + +#}} + networks: orgaNet: diff --git a/config/orgaTmpl/init-db.sh b/config/orgaTmpl/init-db.sh index 782c152..944d451 100755 --- a/config/orgaTmpl/init-db.sh +++ b/config/orgaTmpl/init-db.sh @@ -57,7 +57,19 @@ GRANT ALL ON ${wp_MYSQL_DATABASE}.* TO '${wp_MYSQL_USER}'@'%' IDENTIFIED BY '${w FLUSH PRIVILEGES;" ;; + 'castopod' ) + SQL="$SQL +CREATE DATABASE IF NOT EXISTS ${castopod_MYSQL_DATABASE}; + +DROP USER IF EXISTS '${castopod_MYSQL_USER}'; +CREATE USER '${castopod_MYSQL_USER}'@'%'; + +GRANT ALL ON ${castopod_MYSQL_DATABASE}.* TO '${castopod_MYSQL_USER}'@'%' IDENTIFIED BY '${castopod_MYSQL_PASSWORD}'; + +FLUSH PRIVILEGES;" + ;; + esac done -echo $SQL | docker exec -i ${ORGA}-DB bash -c "mysql --user=root --password=${wp_MYSQL_ROOT_PASSWORD}" \ No newline at end of file +echo $SQL | docker exec -i ${ORGA}-DB bash -c "mysql --user=root --password=${wp_MYSQL_ROOT_PASSWORD}" diff --git a/config/orgaTmpl/init-volume.sh b/config/orgaTmpl/init-volume.sh index 53b4ab6..0c6cdb9 100755 --- a/config/orgaTmpl/init-volume.sh +++ b/config/orgaTmpl/init-volume.sh @@ -33,4 +33,7 @@ docker volume create --name=orga_${orga}wikiLogs #{{wp docker volume create --name=orga_${orga}wordpress #}} - +#{{castopod +docker volume create --name=orga_${orga}castopodCache +docker volume create --name=orga_${orga}castopodMedia +#}} diff --git a/config/orgaTmpl/orga-gen.sh b/config/orgaTmpl/orga-gen.sh index 4dcd4fd..a7fb966 100755 --- a/config/orgaTmpl/orga-gen.sh +++ b/config/orgaTmpl/orga-gen.sh @@ -20,7 +20,7 @@ STAGE_CREATE= STAGE_INIT= usage(){ - echo "Usage: $0 [-h] [-l] [+/-paheko] [-/+cloud [-/+collabora}]] [+/-agora] [+/-wiki] [+/-wp] [x{G/M/k}] OrgaName" + echo "Usage: $0 [-h] [-l] [+/-paheko] [-/+cloud [-/+collabora}]] [+/-agora] [+/-wiki] [+/-wp] [+/-pod] [x{G/M/k}] OrgaName" echo " -h|--help : this help" echo " -l|--list : list service" @@ -33,6 +33,7 @@ usage(){ echo " +/- matter*|agora : on/off agora" echo " +/- wiki : on/off wiki" echo " +/- wp|word* : on/off wp" + echo " +/- casto*|pod : on/off castopod" echo " x[GMk] : set quota" echo " OrgaName : name must contain a-z0-9_\-" } @@ -139,6 +140,7 @@ export collabora=$(flagInCompose docker-compose.yml collabora: off) export agora=$(flagInCompose docker-compose.yml agora: off) export wiki=$(flagInCompose docker-compose.yml dokuwiki: off) export wp=$(flagInCompose docker-compose.yml wordpress: off) +export castopod=$(flagInCompose docker-compose.yml castopod: off) export db="off" export services="off" export paheko=$([[ -f usePaheko ]] && echo "on" || echo "off") @@ -155,7 +157,7 @@ DBaInitialiser="" for ARG in "$@"; do case "${ARG}" in '-show' ) - for i in cloud collabora agora wiki wp db; do + for i in cloud collabora agora wiki wp castopod db; do echo "${i}=${!i}" done exit;; @@ -188,27 +190,34 @@ for ARG in "$@"; do '-wp' | '-word'* ) wp="off" ;; + '-pod' | '-casto'* ) + castopod="off" + ;; '+paheko' ) paheko="on" ;; '+cloud' ) cloud="on" collabora="on" - DBaInitialiser="$DBaInitialiser cloud" + DBaInitialiser="$DBaInitialiser cloud" ;; '+coll'* | '+offi'* ) collabora="on" ;; '+matter'* | '+agora' ) agora="on" - DBaInitialiser="$DBaInitialiser agora" + DBaInitialiser="$DBaInitialiser agora" ;; '+wiki' ) wiki="on" ;; '+wp' | '+word'* ) wp="on" - DBaInitialiser="$DBaInitialiser wp" + DBaInitialiser="$DBaInitialiser wp" + ;; + '+pod' | '+casto'* ) + castopod="on" + DBaInitialiser="$DBaInitialiser castopod" ;; [.0-9]*[GMk] ) quota="${ARG}" @@ -216,7 +225,7 @@ for ARG in "$@"; do esac done -if [ "${cloud}" = "on" -o "${agora}" = "on" -o "${wp}" = "on" ] +if [ "${cloud}" = "on" -o "${agora}" = "on" -o "${wp}" = "on" -o "${castopod}" = "on" ] then db="on" fi @@ -281,6 +290,12 @@ if [[ "${wp}" = "on" ]]; then else DEL_DOMAIN+="${ORGA}-${wordpressHost} " fi +if [[ "${castopod}" = "on" ]]; then + DOMAIN_AREA+=" - ${ORGA}-\${castopodServName}:${ORGA}-\${castopodHost}.\${domain}\n" + ADD_DOMAIN+="${ORGA}-${castopodHost} " +else + DEL_DOMAIN+="${ORGA}-${castopodHost} " +fi DOMAIN_AREA+="}}\n" if [[ -n "${STAGE_DEFAULT}${STAGE_CREATE}" ]]; then @@ -450,7 +465,8 @@ if [[ -n "${STAGE_DEFAULT}${STAGE_INIT}" ]]; then [[ "${wiki}" = "on" ]] && initCmd="$initCmd -wiki" # XXX risque d'écraser user DB [[ "${agora}" = "on" ]] && initCmd="$initCmd -agora" - ${KAZ_BIN_DIR}/gestContainers.sh $initCmd "${ORGA}" + [[ "${castopod}" = "on" ]] && initCmd="$initCmd -castopod" + ${KAZ_BIN_DIR}/gestContainers.sh $initCmd "${ORGA}" fi if [[ -n "${STAGE_DEFAULT}" ]]; then diff --git a/dockers/castopod/docker-compose.yml b/dockers/castopod/docker-compose.yml index a4af5fb..1a38eae 100644 --- a/dockers/castopod/docker-compose.yml +++ b/dockers/castopod/docker-compose.yml @@ -3,7 +3,7 @@ services: image: castopod/castopod:latest container_name: ${castopodServName} volumes: - - castopod-media:/var/www/castopod/public/media + - castopodMedia:/var/www/castopod/public/media environment: CP_BASEURL: "https://${castopodHost}.${domain}" CP_ANALYTICS_SALT: qldsgfliuzrbhgmkjbdbmkvb @@ -29,7 +29,7 @@ services: networks: - castopodNet volumes: - - castopod-db:/var/lib/mysql + - castopodDb:/var/lib/mysql env_file: - ../../secret/env-${castopodDBName} restart: unless-stopped @@ -38,17 +38,15 @@ services: image: redis:7.0-alpine container_name: castopodCache volumes: - - castopod-cache:/data + - castopodCache:/data networks: - castopodNet - env_file: - - ../../secret/env-${castopodServName} command: --requirepass ${castopodRedisPassword} volumes: - castopod-media: - castopod-db: - castopod-cache: + castopodMedia: + castopodDb: + castopodCache: networks: castopodNet: diff --git a/secret.tmpl/SetAllPass.sh b/secret.tmpl/SetAllPass.sh index 51e1ce9..d9f7707 100755 --- a/secret.tmpl/SetAllPass.sh +++ b/secret.tmpl/SetAllPass.sh @@ -286,4 +286,17 @@ traefik_DASHBOARD_PASSWORD="--clean_val--" dokuwiki_WIKI_ROOT=Kaz dokuwiki_WIKI_EMAIL=wiki@kaz.local -dokuwiki_WIKI_PASSWORD="--clean_val--" \ No newline at end of file +dokuwiki_WIKI_PASSWORD="--clean_val--" + +##################### +# Castopod +castopod_MYSQL_ROOT_PASSWORD="--clean_val--" +castopod_MYSQL_DATABASE="--clean_val--" +castopod_MYSQL_USER="--clean_val--" +castopod_MYSQL_PASSWORD="--clean_val--" +castopod_CP_REDIS_PASSWORD="${castopodRedisPassword}" +castopod_ADMIN_USER=adminKaz +castopod_ADMIN_MAIL=admin@${domain} +castopod_ADMIN_PASSWORD="--clean_val--" + +