diff --git a/bin/applyTemplate.sh b/bin/applyTemplate.sh index 9a7f145..82bf275 100755 --- a/bin/applyTemplate.sh +++ b/bin/applyTemplate.sh @@ -85,6 +85,7 @@ done -e "s|__VIGILO_HOST__|${vigiloHost}|g"\ -e "s|__WEBMAIL_HOST__|${webmailHost}|g"\ -e "s|__CASTOPOD_HOST__|${castopodHost}|g"\ + -e "s|__SPIP_HOST__|${spipHost}|g"\ -e "s|__IMAPSYNC_HOST__|${imapsyncHost}|g"\ -e "s|__YAKFORMS_HOST__|${yakformsHost}|g"\ -e "s|__WORDPRESS_HOST__|${wordpressHost}|g"\ diff --git a/bin/gestContainers.sh b/bin/gestContainers.sh index bf77416..6848e84 100755 --- a/bin/gestContainers.sh +++ b/bin/gestContainers.sh @@ -23,7 +23,7 @@ PRG=$(basename $0) # TEMPO_ACTION_STOP=2 # Lors de redémarrage avec tempo, on attend après le stop # TEMPO_ACTION_START=60 # Lors de redémarrage avec tempo, avant de reload le proxy -# DEFAULTCONTAINERS="cloud agora wp wiki office paheko castopod" +# DEFAULTCONTAINERS="cloud agora wp wiki office paheko castopod spip" # APPLIS_PAR_DEFAUT="tasks calendar contacts bookmarks mail richdocuments external drawio snappymail ransomware_protection" #rainloop richdocumentscode @@ -42,16 +42,16 @@ CONTAINERS_TYPES= 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}" [spip]="${spipServName}" ) declare -A FilterLsVolume # Pour trouver quel volume appartient à quel container -FilterLsVolume=( [cloud]="cloudMain" [agora]="matterConfig" [wiki]="wikiConf" [wp]="wordpress" [castopod]="castopodMedia" ) +FilterLsVolume=( [cloud]="cloudMain" [agora]="matterConfig" [wiki]="wikiConf" [wp]="wordpress" [castopod]="castopodMedia" [spip]="spip") 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" [spip]="spip") declare -A serviceNames # Le nom du du service dans le dockerfile d'orga -serviceNames=( [cloud]="cloud" [agora]="agora" [wiki]="dokuwiki" [wp]="wordpress" [office]="collabora" [castopod]="castopod") +serviceNames=( [cloud]="cloud" [agora]="agora" [wiki]="dokuwiki" [wp]="wordpress" [office]="collabora" [castopod]="castopod" [spip]="spip") declare -A subScripts subScripts=( [cloud]="manageCloud.sh" [agora]="manageAgora.sh" [wiki]="manageWiki.sh" [wp]="manageWp.sh" [castopod]="manageCastopod.sh" ) @@ -93,6 +93,7 @@ CONTAINERS_TYPES -office Les collabora -paheko Le paheko -castopod Les castopod + -spip Les spip COMMANDES (on peut en mettre plusieurs dans l'ordre souhaité) -I|--install L'initialisation du container @@ -551,6 +552,8 @@ for ARG in "$@"; do CONTAINERS_TYPES="${CONTAINERS_TYPES} paheko" ;; '-pod'|'--pod'|'-castopod'|'--castopod') CONTAINERS_TYPES="${CONTAINERS_TYPES} castopod" ;; + '-spip') + CONTAINERS_TYPES="${CONTAINERS_TYPES} spip" ;; '-t' ) COMMANDS="${COMMANDS} RESTART-COMPOSE" ;; '-r' ) diff --git a/bin/updateDockerPassword.sh b/bin/updateDockerPassword.sh index 63b2a54..8818f06 100755 --- a/bin/updateDockerPassword.sh +++ b/bin/updateDockerPassword.sh @@ -92,6 +92,7 @@ updateEnvDB "vigilo" "${KAZ_KEY_DIR}/env-${vigiloDBName}" "${vigiloDBName}" updateEnvDB "wp" "${KAZ_KEY_DIR}/env-${wordpressDBName}" "${wordpressDBName}" updateEnvDB "vaultwarden" "${KAZ_KEY_DIR}/env-${vaultwardenDBName}" "${vaultwardenDBName}" updateEnvDB "castopod" "${KAZ_KEY_DIR}/env-${castopodDBName}" "${castopodDBName}" +updateEnvDB "spip" "${KAZ_KEY_DIR}/env-${spipDBName}" "${spipDBName}" updateEnvDB "mastodon" "${KAZ_KEY_DIR}/env-${mastodonDBName}" "${mastodonDBName}" updateEnv "apikaz" "${KAZ_KEY_DIR}/env-${apikazServName}" @@ -114,6 +115,7 @@ updateEnv "mobilizon" "${KAZ_KEY_DIR}/env-${mobilizonServName}" updateEnv "mobilizon" "${KAZ_KEY_DIR}/env-${mobilizonDBName}" updateEnv "vaultwarden" "${KAZ_KEY_DIR}/env-${vaultwardenServName}" updateEnv "castopod" "${KAZ_KEY_DIR}/env-${castopodServName}" +updateEnv "spip" "${KAZ_KEY_DIR}/env-${spipServName}" updateEnv "ldap" "${KAZ_KEY_DIR}/env-${ldapUIName}" updateEnv "peertube" "${KAZ_KEY_DIR}/env-${peertubeServName}" updateEnv "peertube" "${KAZ_KEY_DIR}/env-${peertubeDBName}" "${peertubeDBName}" diff --git a/config/container-withoutMail.list.tmpl b/config/container-withoutMail.list.tmpl index 13013ff..26160d5 100644 --- a/config/container-withoutMail.list.tmpl +++ b/config/container-withoutMail.list.tmpl @@ -4,3 +4,4 @@ collabora etherpad web imapsync +spip diff --git a/config/dockers.tmpl.env b/config/dockers.tmpl.env index c6aff22..2a4cb85 100644 --- a/config/dockers.tmpl.env +++ b/config/dockers.tmpl.env @@ -93,6 +93,7 @@ vaultwardenHost=koffre traefikHost=dashboard imapsyncHost=imapsync castopodHost=pod +spipHost=spip mastodonHost=masto apikazHost=apikaz snappymailHost=snappymail @@ -149,6 +150,8 @@ imapsyncServName=imapsyncServ castopodDBName=castopodDB castopodServName=castopodServ mastodonServName=mastodonServ +spipDBName=spipDB +spipServName=spipServ mastodonDBName=mastodonDB apikazServName=apikazServ diff --git a/config/orgaTmpl/docker-compose.yml b/config/orgaTmpl/docker-compose.yml index 6f9a2c0..75c9758 100644 --- a/config/orgaTmpl/docker-compose.yml +++ b/config/orgaTmpl/docker-compose.yml @@ -216,6 +216,31 @@ services: - ../../secret/env-${castopodServName} command: --requirepass ${castopodRedisPassword} #}} +#{{spip + spip: + image: ipeos/spip:4.4 + restart: ${restartPolicy} + depends_on: + - db + links: + - db + env_file: + - ../../secret/env-${spipServName} + environment: + - SPIP_AUTO_INSTALL=1 + - SPIP_DB_HOST=db + - SPIP_SITE_ADDRESS=https://${orga}${spipHost}.${domain} + expose: + - 80 + labels: + - "traefik.enable=true" + - "traefik.http.routers.${orga}${spipServName}.rule=Host(`${orga}${spipHost}.${domain}`){{FOREIGN_SPIP}}" + networks: + - orgaNet + volumes: + - spip:/usr/src/spip +#}} + @@ -298,8 +323,13 @@ volumes: castopodCache: external: true name: orga_${orga}castopodCache - #}} +#{{spip + spip: + external: true + name: orga_${orga}spip +#}} + networks: diff --git a/config/orgaTmpl/init-db.sh b/config/orgaTmpl/init-db.sh index 1a13552..1188fa5 100755 --- a/config/orgaTmpl/init-db.sh +++ b/config/orgaTmpl/init-db.sh @@ -68,6 +68,18 @@ GRANT ALL ON ${castopod_MYSQL_DATABASE}.* TO '${castopod_MYSQL_USER}'@'%' IDENTI FLUSH PRIVILEGES;" ;; + 'spip' ) + SQL="$SQL +CREATE DATABASE IF NOT EXISTS ${spip_MYSQL_DATABASE}; + +DROP USER IF EXISTS '${spip_MYSQL_USER}'; +CREATE USER '${spip_MYSQL_USER}'@'%'; + +GRANT ALL ON ${spip_MYSQL_DATABASE}.* TO '${spip_MYSQL_USER}'@'%' IDENTIFIED BY '${spip_MYSQL_PASSWORD}'; + +FLUSH PRIVILEGES;" + ;; + esac done diff --git a/config/orgaTmpl/init-volume.sh b/config/orgaTmpl/init-volume.sh index 0c6cdb9..5fe1b5e 100755 --- a/config/orgaTmpl/init-volume.sh +++ b/config/orgaTmpl/init-volume.sh @@ -37,3 +37,7 @@ docker volume create --name=orga_${orga}wordpress docker volume create --name=orga_${orga}castopodCache docker volume create --name=orga_${orga}castopodMedia #}} +#{{spip +docker volume create --name=orga_${orga}spip +#}} + diff --git a/config/orgaTmpl/orga-gen.sh b/config/orgaTmpl/orga-gen.sh index 752d9ab..3759a52 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] [+/-pod] [x{G/M/k}] OrgaName" + echo "Usage: $0 [-h] [-l] [+/-paheko] [-/+cloud [-/+collabora}]] [+/-agora] [+/-wiki] [+/-wp] [+/-pod] [+/-spip] [x{G/M/k}] OrgaName" echo " -h|--help : this help" echo " -l|--list : list service" @@ -34,6 +34,7 @@ usage(){ echo " +/- wiki : on/off wiki" echo " +/- wp|word* : on/off wp" echo " +/- casto*|pod : on/off castopod" + echo " +/- spip : on/off spip" echo " x[GMk] : set quota" echo " OrgaName : name must contain a-z0-9_\-" } @@ -141,6 +142,7 @@ 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 spip=$(flagInCompose docker-compose.yml spip: off) export db="off" export services="off" export paheko=$([[ -f usePaheko ]] && echo "on" || echo "off") @@ -159,7 +161,7 @@ INITCMD2="--install" for ARG in "$@"; do case "${ARG}" in '-show' ) - for i in cloud collabora agora wiki wp castopod db; do + for i in cloud collabora agora wiki wp castopod spip db; do echo "${i}=${!i}" done exit;; @@ -225,6 +227,11 @@ for ARG in "$@"; do DBaInitialiser="$DBaInitialiser castopod" INITCMD2="$INITCMD2 -pod" ;; + '+spip' ) + spip="on" + DBaInitialiser="$DBaInitialiser spip" + ;; + [.0-9]*[GMk] ) quota="${ARG}" ;; @@ -304,6 +311,13 @@ if [[ "${castopod}" = "on" ]]; then else DEL_DOMAIN+="${ORGA}-${castopodHost} " fi +if [[ "${spip}" = "on" ]]; then + DOMAIN_AREA+=" - ${ORGA}-\${spipServName}:${ORGA}-\${spipHost}.\${domain}\n" + ADD_DOMAIN+="${ORGA}-${spipHost} " +else + DEL_DOMAIN+="${ORGA}-${spipHost} " +fi + DOMAIN_AREA+="}}\n" if [[ -n "${STAGE_DEFAULT}${STAGE_CREATE}" ]]; then @@ -358,6 +372,9 @@ update() { sed "s/\([^ ]*\) ${ORGA};/ \|\| Host(\`\1\`)/" | tr -d "\r\n") FOREIGN_POD=$(grep " ${ORGA};" "${KAZ_CONF_PROXY_DIR}/pod_kaz_map" 2>/dev/null | \ sed "s/\([^ ]*\) ${ORGA};/ \|\| Host(\`\1\`)/" | tr -d "\r\n") + FOREIGN_SPIP=$(grep " ${ORGA};" "${KAZ_CONF_PROXY_DIR}/spip_kaz_map" 2>/dev/null | \ + sed "s/\([^ ]*\) ${ORGA};/ \|\| Host(\`\1\`)/" | tr -d "\r\n") + awk ' BEGIN {cp=1} /#}}/ {cp=1 ; next}; @@ -371,6 +388,7 @@ update() { -e "s/{{FOREIGN_NC}}/${FOREIGN_NC}/"\ -e "s/{{FOREIGN_DW}}/${FOREIGN_DW}/"\ -e "s/{{FOREIGN_POD}}/${FOREIGN_POD}/"\ + -e "s/{{FOREIGN_SPIP}}/${FOREIGN_SPIP}/"\ -e "s|\${orga}|${ORGA}-|g" ) > "$2" sed "s/storage_opt:.*/storage_opt: ${quota}/g" -i "$2" diff --git a/dockers/spip/docker-compose.yml b/dockers/spip/docker-compose.yml new file mode 100644 index 0000000..9da59ba --- /dev/null +++ b/dockers/spip/docker-compose.yml @@ -0,0 +1,42 @@ +services: + db: + image: mariadb:11.4 + container_name: ${spipDBName} + restart: ${restartPolicy} + env_file: + - ../../secret/env-${spipDBName} + volumes: + - spipDB:/var/lib/mysql + networks: + - spipNet + + spip: + image: ipeos/spip:4.4 + restart: ${restartPolicy} + container_name: ${spipServName} + env_file: + - ../../secret/env-${spipServName} + links: + - db:mysql + environment: + - SPIP_AUTO_INSTALL=1 + - SPIP_DB_HOST=${spipDBName} + - SPIP_SITE_ADDRESS=https://${spipHost}.${domain} + expose: + - 80 + labels: + - "traefik.enable=true" + - "traefik.http.routers.${spipServName}.rule=Host(`${spipHost}.${domain}`)" + networks: + - spipNet + volumes: + - spipData:/usr/src/spip + +volumes: + spipDB: + spipData: + +networks: + spipNet: + external: true + name: spipNet diff --git a/dockers/traefik/docker-compose.tmpl.yml.dist b/dockers/traefik/docker-compose.tmpl.yml.dist index 6fc93f1..4c5a1da 100644 --- a/dockers/traefik/docker-compose.tmpl.yml.dist +++ b/dockers/traefik/docker-compose.tmpl.yml.dist @@ -113,6 +113,9 @@ services: {{peertube - peertubeNet }} +{{spip + - spipNet +}} #### BEGIN ORGA USE_NET #### END ORGA USE_NET @@ -226,6 +229,11 @@ networks: external:true name:peertubeNet }} +{{spip + spipNet: + external:true + name:spipNet +}} #### BEGIN ORGA DEF_NET diff --git a/secret.tmpl/SetAllPass.sh b/secret.tmpl/SetAllPass.sh index 80f1992..bda9768 100755 --- a/secret.tmpl/SetAllPass.sh +++ b/secret.tmpl/SetAllPass.sh @@ -303,6 +303,24 @@ castopod_CP_EMAIL_SMTP_PASSWORD= castopod_CP_EMAIL_FROM=noreply@${domain} castopod_CP_EMAIL_SMTP_CRYPTO=tls + +##################### +# Spip +spip_MYSQL_ROOT_PASSWORD="--clean_val--" +spip_MYSQL_DATABASE="--clean_val--" +spip_MYSQL_USER="--clean_val--" +spip_MYSQL_PASSWORD="--clean_val--" +spip_SPIP_AUTO_INSTALL=1 +spip_SPIP_DB_SERVER=mysql +spip_SPIP_DB_LOGIN="${spip_MYSQL_USER}" +spip_SPIP_DB_PASS="${spip_MYSQL_PASSWORD}" +spip_SPIP_DB_NAME="${spip_MYSQL_DATABASE}" +spip_SPIP_ADMIN_NAME=admin +spip_SPIP_ADMIN_LOGIN=admin +spip_SPIP_ADMIN_EMAIL=admin@${domain} +spip_SPIP_ADMIN_PASS="--clean_val--" +spip_PHP_TIMEZONE="Europe/Paris" + ##################### # Peertube peertube_POSTGRES_USER="--clean_val--" diff --git a/secret.tmpl/env-spipDB b/secret.tmpl/env-spipDB new file mode 100644 index 0000000..c77309b --- /dev/null +++ b/secret.tmpl/env-spipDB @@ -0,0 +1,4 @@ +MYSQL_ROOT_PASSWORD= +MYSQL_DATABASE= +MYSQL_USER= +MYSQL_PASSWORD= \ No newline at end of file diff --git a/secret.tmpl/env-spipServ b/secret.tmpl/env-spipServ new file mode 100644 index 0000000..b84a236 --- /dev/null +++ b/secret.tmpl/env-spipServ @@ -0,0 +1,10 @@ +SPIP_AUTO_INSTALL=1 +SPIP_DB_SERVER=mysql +SPIP_DB_LOGIN= +SPIP_DB_PASS= +SPIP_DB_NAME= +SPIP_ADMIN_NAME= +SPIP_ADMIN_LOGIN= +SPIP_ADMIN_EMAIL= +SPIP_ADMIN_PASS= +PHP_TIMEZONE=