Browse Source

castopod as a service

develop-etcd
Didier Denoual 3 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}" )
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" ;;

4
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

56
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:

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;"
;;
'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}"
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
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=
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

14
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:

15
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--"
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