Added castopod service

This commit is contained in:
root 2023-07-25 18:58:00 +00:00
parent 64cb844608
commit b201eafce0
4 changed files with 117 additions and 2 deletions

View File

@ -55,6 +55,10 @@ backupservice() {
docker exec -it pdnsmysql mysqldump -uroot -p${MYSQL_PASSWORD} pdns | gzip -9 > /federated/apps/pdnsadmin/dump_$SERVICE.sql.gz
PASSPHRASE=$GPG_PASSPHRASE duplicity /federated/apps/$SERVICE b2://$B2_APPLICATION_KEY_ID:$B2_APPLICATION_KEY@$UUID/$SERVICE/
rm /federated/apps/pdnsadmin/dump_$SERVICE.sql.gz
elif [ "$SERVICE" = "castopod" ]; then
docker exec -it pdnsmysql mysqldump -uroot -p${MYSQL_PASSWORD} castopod | gzip -9 > /federated/apps/castopod/dump_$SERVICE.sql.gz
PASSPHRASE=$GPG_PASSPHRASE duplicity /federated/apps/$SERVICE b2://$B2_APPLICATION_KEY_ID:$B2_APPLICATION_KEY@$UUID/$SERVICE/
rm /federated/apps/castopod/dump_$SERVICE.sql.gz
else
# For all other services, If the postgresql database exists for that service then dump it
if [ ! "`docker exec -it postgresql psql -U $SERVICE -c '\q'`" ]; then
@ -86,6 +90,10 @@ backupserviceall() {
docker exec -it pdnsmysql mysqldump -uroot -p${MYSQL_PASSWORD} pdns | gzip -9 > /federated/apps/pdnsadmin/dump_$i.sql.gz
PASSPHRASE=$GPG_PASSPHRASE duplicity /federated/apps/$i b2://$B2_APPLICATION_KEY_ID:$B2_APPLICATION_KEY@$UUID/$i/
rm /federated/apps/pdnsadmin/dump_$i.sql.gz
elif [ "$i" = "castopod" ]; then
docker exec -it pdnsmysql mysqldump -uroot -p${MYSQL_PASSWORD} castopod | gzip -9 > /federated/apps/castopod/dump_$i.sql.gz
PASSPHRASE=$GPG_PASSPHRASE duplicity /federated/apps/$i b2://$B2_APPLICATION_KEY_ID:$B2_APPLICATION_KEY@$UUID/$i/
rm /federated/apps/castopod/dump_$i.sql.gz
else
if [ ! "`docker exec -it postgresql psql -U $i -c '\q'`" ]; then
docker exec postgresql /bin/bash -c "pg_dump $i -c -U postgres | gzip -9 > /docker-entrypoint-initdb.d/dump_$i.sql.gz"

View File

@ -39,6 +39,7 @@ get_config() {
. /federated/lib/gitea.sh
. /federated/lib/caddy.sh
. /federated/lib/autodiscover.sh
. /federated/lib/castopod.sh
COUNTRIES=("AF" "AL" "DZ" "AS" "AD" "AO" "AI" "AQ" "AG" "AR" "AM" "AW" "AU" "AT" "AZ" "BS" "BH" "BD" "BB" "BY" "BE" "BZ" "BJ" "BM" "BT" "BO" "BO" "BA" "BW" "BV" "BR" "IO" "BN" "BN" "BG" "BF" "BI" "KH" "CM" "CA" "CV" "KY" "CF" "TD" "CL" "CN" "CX" "CC" "CO" "KM" "CG" "CD" "CK" "CR" "CI" "CI" "HR" "CU" "CY" "CZ" "DK" "DJ" "DM" "DO" "EC" "EG" "SV" "GQ" "ER" "EE" "ET" "FK" "FO" "FJ" "FI" "FR" "GF" "PF" "TF" "GA" "GM" "GE" "DE" "GH" "GI" "GR" "GL" "GD" "GP" "GU" "GT" "GG" "GN" "GW" "GY" "HT" "HM" "VA" "HN" "HK" "HU" "IS" "IN" "ID" "IR" "IQ" "IE" "IM" "IL" "IT" "JM" "JP" "JE" "JO" "KZ" "KE" "KI" "KP" "KR" "KR" "KW" "KG" "LA" "LV" "LB" "LS" "LR" "LY" "LY" "LI" "LT" "LU" "MO" "MK" "MG" "MW" "MY" "MV" "ML" "MT" "MH" "MQ" "MR" "MU" "YT" "MX" "FM" "MD" "MC" "MN" "ME" "MS" "MA" "MZ" "MM" "MM" "NA" "NR" "NP" "NL" "AN" "NC" "NZ" "NI" "NE" "NG" "NU" "NF" "MP" "NO" "OM" "PK" "PW" "PS" "PA" "PG" "PY" "PE" "PH" "PN" "PL" "PT" "PR" "QA" "RE" "RO" "RU" "RU" "RW" "SH" "KN" "LC" "PM" "VC" "VC" "VC" "WS" "SM" "ST" "SA" "SN" "RS" "SC" "SL" "SG" "SK" "SI" "SB" "SO" "ZA" "GS" "SS" "ES" "LK" "SD" "SR" "SJ" "SZ" "SE" "CH" "SY" "TW" "TW" "TJ" "TZ" "TH" "TL" "TG" "TK" "TO" "TT" "TN" "TR" "TM" "TC" "TV" "UG" "UA" "AE" "GB" "US" "UM" "UY" "UZ" "VU" "VE" "VE" "VN" "VN" "VG" "VI" "WF" "EH" "YE" "ZM" "ZW")

91
lib/castopod.sh Normal file
View File

@ -0,0 +1,91 @@
#!/bin/bash
#
# Castopod Service
PATH=$HOME/.docker/cli-plugins:/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
config_castopod() {
echo -ne "\n* Configuring /federated/apps/castopod container.."
spin &
SPINPID=$!
if [ ! -d "/federated/apps/castopod" ]; then
mkdir -p /federated/apps/castopod/data/var/www/castopod/public/media
fi
cat > /federated/apps/castopod/docker-compose.yml <<EOF
version: "3.7"
services:
castopod:
image: castopod/castopod:\${IMAGE_VERSION}
container_name: castopod
hostname: castopod.$DOMAIN
domainname: $DOMAIN
restart: always
networks:
federated:
ipv4_address: 172.99.0.33
volumes:
- ./data/var/www/castopod/public/media:/var/www/castopod/public/media
env_file:
- ./.env
labels:
- "traefik.enable=true"
- "traefik.http.routers.castopod.rule=Host(\`castopod.$DOMAIN\`)"
- "traefik.http.routers.castopod.entrypoints=websecure"
- "traefik.http.routers.castopod.tls.certresolver=letsencrypt"
- "traefik.http.services.castopod.loadbalancer.server.port=8000"
networks:
federated:
external: true
EOF
CP_ANALYTICS_SALT=$(create_password);
CASTOPOD_SECRET=$(create_password);
ADMINPASS="XlyJjjYgs5XkjhVzdTlV0VZNydTk3yJK"
MYSQL_ROOTPASSWORD="v8JK67qvA96fcQbQWReitRyNqN4NZanY"
cat > /federated/apps/castopod/.env <<EOF
IMAGE_VERSION="1.4.7"
MYSQL_DATABASE=castopod
MYSQL_USER=castopod
MYSQL_PASSWORD=$CASTOPOD_SECRET
CP_DATABASE_HOSTNAME=pdnsmysql.$DOMAIN
CP_BASEURL="https://castopod.$DOMAIN"
CP_ANALYTICS_SALT="$CP_ANALYTICS_SALT"
CP_EMAIL_SMTP_HOST="mail.$DOMAIN"
CP_EMAIL_FROM="castopod@$DOMAIN"
CP_EMAIL_SMTP_USERNAME="admin"
CP_EMAIL_SMTP_PASSWORD=$ADMINPASS
CP_EMAIL_SMTP_PORT="465"
CP_EMAIL_SMTP_CRYPTO="tls"
EOF
chmod 600 /federated/apps/castopod/.env
# Create database and user in mysql
docker exec pdnsmysql bash -c "mysql -uroot -p$MYSQL_ROOTPASSWORD -e 'create database castopod;'"
docker exec pdnsmysql bash -c "mysql -uroot -p$MYSQL_ROOTPASSWORD -e \"CREATE USER 'castopod'@'%' IDENTIFIED BY '$CASTOPOD_SECRET';\""
docker exec pdnsmysql bash -c "mysql -uroot -p$MYSQL_ROOTPASSWORD -e \"grant all privileges on castopod.* to 'castopod'@'%';\""
docker exec pdnsmysql bash -c "mysql -uroot -p$MYSQL_ROOTPASSWORD -e 'flush privileges;'"
kill -9 $SPINPID &> /dev/null
echo -ne "done."
}
start_castopod() {
# Start service with command to make sure it's up before proceeding
start_service "castopod" "nc -z 172.99.0.33 8000 &> /dev/null" "7"
CASTOPOD_BASE_URL="https://castopod.$DOMAIN"
CASTOPOD_ADMIN_USERNAME="admin@$DOMAIN"
CASTOPOD_ADMIN_EMAIL="admin@$DOMAIN"
CASTOPOD_ADMIN_PASSWORD="$ADMINPASS"
CSRF_TEST_NAME=$(curl -v -k -c /tmp/cp-cookies $CASTOPOD_BASE_URL/cp-install | sed -n 's/.*input.*name="csrf_test_name".*value="\([^"]\+\)".*/\1/p') &> /dev/null
curl -v -b /tmp/cp-cookies --data-urlencode "csrf_test_name=$CSRF_TEST_NAME" --data-urlencode "username=$CASTOPOD_ADMIN_USERNAME" --data-urlencode "email=$CASTOPOD_ADMIN_EMAIL" --data-urlencode "password=$CASTOPOD_ADMIN_PASSWORD" $CASTOPOD_BASE_URL/cp-install/create-superadmin &> /dev/null
rm /tmp/cp-cookies
kill -9 $SPINPID &> /dev/null
echo -ne "done."
}

View File

@ -1,7 +1,7 @@
# Federated Computer functions
# Define all services
SERVICES=("pdnsmysql" "pdns" "pdnsadmin" "traefik" "postgresql" "ldap" "mail" "collabora" "nextcloud" "matrix" "element" "listmonk" "vaultwarden" "panel" "wireguard" "jitsi" "baserow" "gitea" "caddy" "autodiscover")
SERVICES=("pdnsmysql" "pdns" "pdnsadmin" "traefik" "postgresql" "ldap" "mail" "collabora" "nextcloud" "matrix" "element" "listmonk" "vaultwarden" "panel" "wireguard" "jitsi" "baserow" "gitea" "caddy" "autodiscover" "castopod")
fail() {
echo -ne "FAILED\n\n$1\n\n"
@ -90,8 +90,23 @@ upgrade_federated() {
echo -ne "\n Done Updating $APP to $VERSION."
fi
done
echo -ne "\n\n"
echo -ne "\n* Getting upgrade script from Upgrades repo.."
curl -s -f https://$API_TOKEN@code.federated.company/federatedcomputer/Upgrades/raw/branch/master/upgrade.sh > /tmp/upgrade.sh
if [ $? -ne 0 ]; then
echo "not found."
else
echo -ne "\n* Found. Running /tmp/upgrade.sh..\n\n"
chmod +x /tmp/upgrade.sh
bash -c /tmp/upgrade.sh
if [ $? -ne 0 ]; then
rm /tmp/upgrade.sh
fail "There was an error running /tmp/upgrade.sh"
else
echo -ne "\nDone.\n"
fi
fi
}
create_password() {
# eval $1_var=$1