Browse Source

castopod as a service

develop-etcd
Didier Denoual 4 months ago
parent
commit
80330b594a
  1. 8
      bin/gestContainers.sh
  2. 4
      bin/manageCastopod.sh
  3. 56
      config/orgaTmpl/docker-compose.yml
  4. 14
      config/orgaTmpl/init-db.sh
  5. 5
      config/orgaTmpl/init-volume.sh
  6. 30
      config/orgaTmpl/orga-gen.sh
  7. 14
      dockers/castopod/docker-compose.yml
  8. 15
      secret.tmpl/SetAllPass.sh

8
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}" ) 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 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 declare -A composeDirs # Le nom du repertoire compose pour le commun
composeDirs=( [cloud]="cloud" [agora]="mattermost" [wiki]="dokuwiki" [office]="collabora" [paheko]="paheko" [castopod]="castopod" ) 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 OPERATE_ON_NAS_ORGA= ;; # pas celles sur NAS
'-cloud'|'--cloud') '-cloud'|'--cloud')
CONTAINERS_TYPES="${CONTAINERS_TYPES} cloud" ;; CONTAINERS_TYPES="${CONTAINERS_TYPES} cloud" ;;
'-agora'|'--agora') '-agora'|'--agora'|'-mm'|'--mm'|'-matter'*|'--matter'*)
CONTAINERS_TYPES="${CONTAINERS_TYPES} agora" ;; CONTAINERS_TYPES="${CONTAINERS_TYPES} agora" ;;
'-wiki'|'--wiki') '-wiki'|'--wiki')
CONTAINERS_TYPES="${CONTAINERS_TYPES} wiki" ;; CONTAINERS_TYPES="${CONTAINERS_TYPES} wiki" ;;
'-wp'|'--wp') '-wp'|'--wp')
CONTAINERS_TYPES="${CONTAINERS_TYPES} wp" ;; CONTAINERS_TYPES="${CONTAINERS_TYPES} wp" ;;
'-office'|'--office') '-office'|'--office'|'-collab'*|'--collab'*)
CONTAINERS_TYPES="${CONTAINERS_TYPES} office" ;; CONTAINERS_TYPES="${CONTAINERS_TYPES} office" ;;
'-paheko'|'--paheko') '-paheko'|'--paheko')
CONTAINERS_TYPES="${CONTAINERS_TYPES} paheko" ;; CONTAINERS_TYPES="${CONTAINERS_TYPES} paheko" ;;
'-castopod'|'--castopod') '-pod'|'--pod'|'-castopod'|'--castopod')
CONTAINERS_TYPES="${CONTAINERS_TYPES} castopod" ;; CONTAINERS_TYPES="${CONTAINERS_TYPES} castopod" ;;
'-t' ) '-t' )
COMMANDS="${COMMANDS} RESTART-COMPOSE" ;; COMMANDS="${COMMANDS} RESTART-COMPOSE" ;;

4
bin/manageCastopod.sh

@ -99,8 +99,8 @@ for ARG in "$@"; do
;; ;;
*) *)
ORGA="${ARG%-orga}" ORGA="${ARG%-orga}"
DockerServName="${ORGA}-$castopodServName}" DockerServName="${ORGA}-${castopodServName}"
WPCOMMUN= CASTOPOD_COMMUN=
;; ;;
esac esac
done done

56
config/orgaTmpl/docker-compose.yml

@ -203,6 +203,52 @@ services:
external_links: external_links:
- ${smtpServName}:${smtpHost}.${domain} - ${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 #{{services
volumes: volumes:
@ -276,6 +322,16 @@ volumes:
external: true external: true
name: orga_${orga}wordpress name: orga_${orga}wordpress
#}} #}}
#{{castopod
castopodMedia:
external: true
name: orga_${orga}castopodMedia
castopodCache:
external: true
name: orga_${orga}castopodCache
#}}
networks: networks:
orgaNet: orgaNet:

14
config/orgaTmpl/init-db.sh

@ -57,7 +57,19 @@ GRANT ALL ON ${wp_MYSQL_DATABASE}.* TO '${wp_MYSQL_USER}'@'%' IDENTIFIED BY '${w
FLUSH PRIVILEGES;" 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 esac
done done
echo $SQL | docker exec -i ${ORGA}-DB bash -c "mysql --user=root --password=${wp_MYSQL_ROOT_PASSWORD}" echo $SQL | docker exec -i ${ORGA}-DB bash -c "mysql --user=root --password=${wp_MYSQL_ROOT_PASSWORD}"

5
config/orgaTmpl/init-volume.sh

@ -33,4 +33,7 @@ docker volume create --name=orga_${orga}wikiLogs
#{{wp #{{wp
docker volume create --name=orga_${orga}wordpress docker volume create --name=orga_${orga}wordpress
#}} #}}
#{{castopod
docker volume create --name=orga_${orga}castopodCache
docker volume create --name=orga_${orga}castopodMedia
#}}

30
config/orgaTmpl/orga-gen.sh

@ -20,7 +20,7 @@ STAGE_CREATE=
STAGE_INIT= STAGE_INIT=
usage(){ 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 " -h|--help : this help"
echo " -l|--list : list service" echo " -l|--list : list service"
@ -33,6 +33,7 @@ usage(){
echo " +/- matter*|agora : on/off agora" echo " +/- matter*|agora : on/off agora"
echo " +/- wiki : on/off wiki" echo " +/- wiki : on/off wiki"
echo " +/- wp|word* : on/off wp" echo " +/- wp|word* : on/off wp"
echo " +/- casto*|pod : on/off castopod"
echo " x[GMk] : set quota" echo " x[GMk] : set quota"
echo " OrgaName : name must contain a-z0-9_\-" 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 agora=$(flagInCompose docker-compose.yml agora: off)
export wiki=$(flagInCompose docker-compose.yml dokuwiki: off) export wiki=$(flagInCompose docker-compose.yml dokuwiki: off)
export wp=$(flagInCompose docker-compose.yml wordpress: off) export wp=$(flagInCompose docker-compose.yml wordpress: off)
export castopod=$(flagInCompose docker-compose.yml castopod: off)
export db="off" export db="off"
export services="off" export services="off"
export paheko=$([[ -f usePaheko ]] && echo "on" || echo "off") export paheko=$([[ -f usePaheko ]] && echo "on" || echo "off")
@ -155,7 +157,7 @@ DBaInitialiser=""
for ARG in "$@"; do for ARG in "$@"; do
case "${ARG}" in case "${ARG}" in
'-show' ) '-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}" echo "${i}=${!i}"
done done
exit;; exit;;
@ -188,27 +190,34 @@ for ARG in "$@"; do
'-wp' | '-word'* ) '-wp' | '-word'* )
wp="off" wp="off"
;; ;;
'-pod' | '-casto'* )
castopod="off"
;;
'+paheko' ) '+paheko' )
paheko="on" paheko="on"
;; ;;
'+cloud' ) '+cloud' )
cloud="on" cloud="on"
collabora="on" collabora="on"
DBaInitialiser="$DBaInitialiser cloud" DBaInitialiser="$DBaInitialiser cloud"
;; ;;
'+coll'* | '+offi'* ) '+coll'* | '+offi'* )
collabora="on" collabora="on"
;; ;;
'+matter'* | '+agora' ) '+matter'* | '+agora' )
agora="on" agora="on"
DBaInitialiser="$DBaInitialiser agora" DBaInitialiser="$DBaInitialiser agora"
;; ;;
'+wiki' ) '+wiki' )
wiki="on" wiki="on"
;; ;;
'+wp' | '+word'* ) '+wp' | '+word'* )
wp="on" wp="on"
DBaInitialiser="$DBaInitialiser wp" DBaInitialiser="$DBaInitialiser wp"
;;
'+pod' | '+casto'* )
castopod="on"
DBaInitialiser="$DBaInitialiser castopod"
;; ;;
[.0-9]*[GMk] ) [.0-9]*[GMk] )
quota="${ARG}" quota="${ARG}"
@ -216,7 +225,7 @@ for ARG in "$@"; do
esac esac
done done
if [ "${cloud}" = "on" -o "${agora}" = "on" -o "${wp}" = "on" ] if [ "${cloud}" = "on" -o "${agora}" = "on" -o "${wp}" = "on" -o "${castopod}" = "on" ]
then then
db="on" db="on"
fi fi
@ -281,6 +290,12 @@ if [[ "${wp}" = "on" ]]; then
else else
DEL_DOMAIN+="${ORGA}-${wordpressHost} " DEL_DOMAIN+="${ORGA}-${wordpressHost} "
fi 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" DOMAIN_AREA+="}}\n"
if [[ -n "${STAGE_DEFAULT}${STAGE_CREATE}" ]]; then if [[ -n "${STAGE_DEFAULT}${STAGE_CREATE}" ]]; then
@ -450,7 +465,8 @@ if [[ -n "${STAGE_DEFAULT}${STAGE_INIT}" ]]; then
[[ "${wiki}" = "on" ]] && initCmd="$initCmd -wiki" [[ "${wiki}" = "on" ]] && initCmd="$initCmd -wiki"
# XXX risque d'écraser user DB # XXX risque d'écraser user DB
[[ "${agora}" = "on" ]] && initCmd="$initCmd -agora" [[ "${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 fi
if [[ -n "${STAGE_DEFAULT}" ]]; then if [[ -n "${STAGE_DEFAULT}" ]]; then

14
dockers/castopod/docker-compose.yml

@ -3,7 +3,7 @@ services:
image: castopod/castopod:latest image: castopod/castopod:latest
container_name: ${castopodServName} container_name: ${castopodServName}
volumes: volumes:
- castopod-media:/var/www/castopod/public/media - castopodMedia:/var/www/castopod/public/media
environment: environment:
CP_BASEURL: "https://${castopodHost}.${domain}" CP_BASEURL: "https://${castopodHost}.${domain}"
CP_ANALYTICS_SALT: qldsgfliuzrbhgmkjbdbmkvb CP_ANALYTICS_SALT: qldsgfliuzrbhgmkjbdbmkvb
@ -29,7 +29,7 @@ services:
networks: networks:
- castopodNet - castopodNet
volumes: volumes:
- castopod-db:/var/lib/mysql - castopodDb:/var/lib/mysql
env_file: env_file:
- ../../secret/env-${castopodDBName} - ../../secret/env-${castopodDBName}
restart: unless-stopped restart: unless-stopped
@ -38,17 +38,15 @@ services:
image: redis:7.0-alpine image: redis:7.0-alpine
container_name: castopodCache container_name: castopodCache
volumes: volumes:
- castopod-cache:/data - castopodCache:/data
networks: networks:
- castopodNet - castopodNet
env_file:
- ../../secret/env-${castopodServName}
command: --requirepass ${castopodRedisPassword} command: --requirepass ${castopodRedisPassword}
volumes: volumes:
castopod-media: castopodMedia:
castopod-db: castopodDb:
castopod-cache: castopodCache:
networks: networks:
castopodNet: castopodNet:

15
secret.tmpl/SetAllPass.sh

@ -286,4 +286,17 @@ traefik_DASHBOARD_PASSWORD="--clean_val--"
dokuwiki_WIKI_ROOT=Kaz dokuwiki_WIKI_ROOT=Kaz
dokuwiki_WIKI_EMAIL=wiki@kaz.local dokuwiki_WIKI_EMAIL=wiki@kaz.local
dokuwiki_WIKI_PASSWORD="--clean_val--" 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--"

Loading…
Cancel
Save