deployment_ddcdn_multisite/bin/add-site/install_directus.sh

98 lines
4.7 KiB
Bash

#!/bin/bash
check_global_const DOMAIN_NAME USERNAME CADDYFILE IP SSH_PORT
mkdir "/home/${USERNAME}/cms.${DOMAIN_NAME}"
cp assets/directus.docker-compose.yml "/home/${USERNAME}/cms.${DOMAIN_NAME}/docker-compose.yml"
cp assets/setup_mariadb.sql "/home/${USERNAME}/cms.${DOMAIN_NAME}/setup_mariadb.sql"
cp assets/.env.example "/home/${USERNAME}/cms.${DOMAIN_NAME}/.env"
sed -i "s/^PROJECT_NAME=.*/PROJECT_NAME=${DOMAIN_NAME}/" "/home/${USERNAME}/cms.${DOMAIN_NAME}/.env"
echo -e "${ORANGE}${BOLD}Generate and store the credentials somewhere safe${RESET}"
echo -e "${PURPLE}${BOLD}Enter the Directus admin email : ${RESET}"
read directus_admin_email
echo -e "${PURPLE}${BOLD}Enter the Directus admin password : ${RESET}"
read -s directus_admin_password
sed -i "s/^ADMIN_EMAIL=.*/ADMIN_EMAIL=${directus_admin_email}/" "/home/${USERNAME}/cms.${DOMAIN_NAME}/.env"
sed -i "s/^ADMIN_PASSWORD=.*/ADMIN_PASSWORD=${directus_admin_password}/" "/home/${USERNAME}/cms.${DOMAIN_NAME}/.env"
# @TODO: random port
port=8055
key=$(head -c 16 /dev/urandom | od -An -tx1 | tr -d ' \n')
secret=$(head -c 16 /dev/urandom | od -An -tx1 | tr -d ' \n')
sed -i "s/^KEY=.*/KEY=${key}/" "/home/${USERNAME}/cms.${DOMAIN_NAME}/.env"
sed -i "s/^SECRET=.*/SECRET=${secret}/" "/home/${USERNAME}/cms.${DOMAIN_NAME}/.env"
sed -i "s/^PORT=.*/PORT=${port}/" "/home/${USERNAME}/cms.${DOMAIN_NAME}/.env"
# Start the services using Docker Compose
docker compose -f "/home/${USERNAME}/cms.${DOMAIN_NAME}/docker-compose.yml" up -d
# Wait for the database to be ready
##echo "Waiting for Directus database to be ready..."
##until docker exec -i "${DOMAIN_NAME}_Directus_DB" mariadb -uroot -e "SELECT 1 FROM directus.directus_roles LIMIT 1" &> /dev/null
##do
## echo "Database not ready yet... waiting 5 seconds"
## sleep 5
##done
##docker cp assets/directus_policies.sql "${DOMAIN_NAME}_Directus_DB:/directus_policies.sql"
##docker exec -i "${DOMAIN_NAME}_Directus_DB" sh -c "
## mariadb -uroot directus < /directus_policies.sql
##"
# docker exec -i "${DOMAIN_NAME}_Directus" sh -c "npx directus roles create --role Website && npx directus roles create --role User"
##website_role_uuid=$(echo $(docker exec -i "${DOMAIN_NAME}_Directus_DB" mariadb -uroot -e "SELECT id FROM directus.directus_roles WHERE name='Website'") | awk '{print $2}')
##user_role_uuid=$(echo $(docker exec -i "${DOMAIN_NAME}_Directus_DB" mariadb -uroot -e "SELECT id FROM directus.directus_roles WHERE name='User'") | awk '{print $2}')
##website_password=$(head -c 16 /dev/urandom | od -An -tx1 | tr -d ' \n')
##docker exec -i "${DOMAIN_NAME}_Directus" sh -c "npx directus users create --email \"website@${DOMAIN_NAME}\" --password \"${website_password}\" --role \"${website_role_uuid}\""
##WEBSITE_TOKEN=$(head -c 16 /dev/urandom | od -An -tx1 | tr -d ' \n')
##docker exec -i "${DOMAIN_NAME}_Directus_DB" sh -c "
## mariadb -uroot -e \"
## UPDATE directus.directus_users SET token='${WEBSITE_TOKEN}' WHERE email='website@${DOMAIN_NAME}';
## \" directus
##"
# @TODO: random port
# INSERT INTO directus_permissions (role, collection, action, permissions, validation, fields)
# VALUES ('${website_role_uuid}', 'directus_files', 'read', '{}', '{}', '*');
# INSERT INTO directus_permissions (role, collection, action, permissions, validation, fields)
# VALUES ('${user_role_uuid}', 'directus_files', 'read', '{}', '{}', '*');
# INSERT INTO directus_permissions (role, collection, action, permissions, validation, fields)
# VALUES ('${user_role_uuid}', 'directus_folders', 'read', '{}', '{}', '*');
# @TODO: website permission
docker network connect web "${DOMAIN_NAME}_Directus"
echo -e "${PURPLE}${BOLD}Import Directus data model ? (y/N) ${RESET}"
read answer
if [[ "$answer" == "y" ]]; then
echo -e "${PURPLE}${BOLD}Make sure your local Directus is the latest version${RESET}"
echo -e "${BLUE}npx directus schema snapshot ./snapshot.yaml${RESET}"
echo -e "${BLUE}scp -P ${SSH_PORT} /local/path/to/snapshot.yaml ${USERNAME}@${IP}:/home/${USERNAME}/snapshot.yaml${RESET}"
echo -e "${PURPLE}${BOLD}Press any key when done${RESET}"
read
docker cp /home/${USERNAME}/snapshot.yaml "${DOMAIN_NAME}_Directus":/directus/snapshot.yaml
docker exec -i "${DOMAIN_NAME}_Directus" sh -c "npx directus schema apply --yes ./snapshot.yaml"
fi
if ! grep -q "cms.${DOMAIN_NAME}" "$CADDYFILE"; then
echo "cms.${DOMAIN_NAME} {" >> "$CADDYFILE"
echo " reverse_proxy ${DOMAIN_NAME}_Directus:${port}" >> "$CADDYFILE"
echo "}" >> "$CADDYFILE"
docker restart caddy
echo -e "${PURPLE}${BOLD}You can now add some content${RESET}"
else
echo -e "${ORANGE}${BOLD}Entry for cms.${DOMAIN_NAME} already exists in $CADDYFILE.${RESET}"
fi