#!/bin/bash echo "Initializing environment variables..." # general variables for all containers HOSTNAME=$(hostname) PORT="7070" ENV="production" TZ="America/Montreal" DEFAULT_INTERFACE=$(ip route show default | awk '{print $5}'|head -n 1) if [ -f /etc/alpine-release ]; then # Alpine Linux SERVER_IP=$(ip -o -4 addr show $DEFAULT_INTERFACE | awk '{print $4}' | cut -d/ -f1) else # Debian-based systems SERVER_IP=$(hostname -I | tr ' ' '\n' | grep -E "^$(ip -o -4 addr show $DEFAULT_INTERFACE | awk '{print $4}' | cut -d/ -f1)") fi # current user name CURRENT_USER=$(whoami) # Docker registry variables REGISTRY_HOST="docker-registry.dev.home" REGISTRY_PORT="5000" IMAGE_NAME="homelab-automation-api" DOCKER_CONFIG_DIR="/DOCKER_CONFIG" APP_NAME="homelab-dashboard" # Application specific variables API_KEY=dev-key-12345 SSH_USER=automation SSH_KEY_DIR=/home/$CURRENT_USER/.ssh SSH_KEY_PATH=/app/ssh_keys/id_automation_ansible HOMELAB_DATA_DIR=${DOCKER_CONFIG_DIR}/${APP_NAME}/data HOMELAB_LOG_DIR=${DOCKER_CONFIG_DIR}/${APP_NAME}/logs DB_PATH=${DOCKER_CONFIG_DIR}/${APP_NAME}/data/homelab.db DATABASE_URL=sqlite+aiosqlite:////app/data/homelab.db JWT_SECRET_KEY=dev-key-12345 JWT_EXPIRE_MINUTES=1440 # Ntfy notification variables NTFY_BASE_URL=https://ntfy.dracodev.net NTFY_DEFAULT_TOPIC=homelab-events NTFY_ENABLED=true NTFY_MSG_TYPE=ERR NTFY_TIMEOUT=5 # Ansible variables ANSIBLE_HOST_KEY_CHECKING=False ANSIBLE_TIMEOUT=30 ANSIBLE_DIR=/NFS/OBSIDIAN_DOC/SessionsManager/60-📝TACHES📝/ANSIBLE ANSIBLE_INVENTORY=/NFS/OBSIDIAN_DOC/SessionsManager/60-📝TACHES📝/ANSIBLE/inventory ANSIBLE_PLAYBOOKS=/NFS/OBSIDIAN_DOC/SessionsManager/60-📝TACHES📝/ANSIBLE/playbooks ANSIBLE_GROUP_VARS=/NFS/OBSIDIAN_DOC/SessionsManager/60-📝TACHES📝/ANSIBLE/inventory/group_vars DIR_LOGS_TASKS=/NFS/OBSIDIAN_DOC/SessionsManager/60-📝TACHES📝/LOGS # Write environment variables to .env file echo "creating .env file..." # Docker registry variables echo "REGISTRY_HOST=$REGISTRY_HOST" >> .env echo "REGISTRY_PORT=$REGISTRY_PORT" >> .env echo "IMAGE_NAME=$IMAGE_NAME" >> .env # general variables echo "NGINX_HOSTNAME=$HOSTNAME" > .env echo "PORT=$PORT" >> .env echo "ENV=$ENV" >> .env echo "TZ=$TZ" >> .env echo "NGINX_SERVER_IP=$SERVER_IP" >> .env # application specific variables echo "API_KEY=$API_KEY" >> .env echo "SSH_USER=$SSH_USER" >> .env echo "SSH_KEY_DIR=$SSH_KEY_DIR" >> .env echo "SSH_KEY_PATH=$SSH_KEY_PATH" >> .env echo "HOMELAB_DATA_DIR=$HOMELAB_DATA_DIR" >> .env echo "HOMELAB_LOG_DIR=$HOMELAB_LOG_DIR" >> .env echo "DB_PATH=$DB_PATH" >> .env echo "DATABASE_URL=$DATABASE_URL" >> .env echo "JWT_SECRET_KEY=$JWT_SECRET_KEY" >> .env echo "JWT_EXPIRE_MINUTES=$JWT_EXPIRE_MINUTES" >> .env # ntfy notification variables echo "NTFY_BASE_URL=$NTFY_BASE_URL" >> .env echo "NTFY_DEFAULT_TOPIC=$NTFY_DEFAULT_TOPIC" >> .env echo "NTFY_ENABLED=$NTFY_ENABLED" >> .env echo "NTFY_MSG_TYPE=$NTFY_MSG_TYPE" >> .env echo "NTFY_TIMEOUT=$NTFY_TIMEOUT" >> .env # ansible variables echo "ANSIBLE_HOST_KEY_CHECKING=$ANSIBLE_HOST_KEY_CHECKING" >> .env echo "ANSIBLE_TIMEOUT=$ANSIBLE_TIMEOUT" >> .env echo "ANSIBLE_INVENTORY=$ANSIBLE_INVENTORY" >> .env echo "ANSIBLE_PLAYBOOKS=$ANSIBLE_PLAYBOOKS" >> .env echo "ANSIBLE_GROUP_VARS=$ANSIBLE_GROUP_VARS" >> .env echo "DIR_LOGS_TASKS=$DIR_LOGS_TASKS" >> .env # Create directories echo "Creating necessary directories..." # valider si directory /DOCKER_CONFIG/ exists if [ ! -d ${DOCKER_CONFIG_DIR} ]; then mkdir ${DOCKER_CONFIG_DIR} fi if [ ! -d ${DOCKER_CONFIG_DIR}/${APP_NAME} ]; then mkdir -p ${DOCKER_CONFIG_DIR}/${APP_NAME} fi if [ ! -d ${DOCKER_CONFIG_DIR}/${APP_NAME}/ssh_keys ]; then mkdir -p ${DOCKER_CONFIG_DIR}/${APP_NAME}/ssh_keys fi if [ ! -d ${HOMELAB_DATA_DIR} ]; then mkdir -p ${HOMELAB_DATA_DIR} fi if [ ! -d ${HOMELAB_LOG_DIR} ]; then mkdir -p ${HOMELAB_LOG_DIR} fi if [ ! -d ${ANSIBLE_DIR} ]; then mkdir ${ANSIBLE_DIR} fi if [ ! -d ${ANSIBLE_INVENTORY} ]; then mkdir ${ANSIBLE_INVENTORY} fi if [ ! -d ${ANSIBLE_PLAYBOOKS} ]; then mkdir ${ANSIBLE_PLAYBOOKS} fi if [ ! -d ${ANSIBLE_GROUP_VARS} ]; then mkdir ${ANSIBLE_GROUP_VARS} fi if [ ! -d ${DIR_LOGS_TASKS} ]; then mkdir ${DIR_LOGS_TASKS} fi # Copier les fichiers et répertoires Ansible ../DOCKER_CONFIG/homelab-dashboard/ vers /DOCKER_CONFIG/homelab-dashboard/ansible/ et les écraser s'ils existent echo "Copying Ansible configuration files..." cp -r ../DOCKER_CONFIG/homelab-dashboard/ansible.cfg ${ANSIBLE_DIR}/ cp -r ../DOCKER_CONFIG/homelab-dashboard/inventory/* ${ANSIBLE_INVENTORY}/ cp -r ../DOCKER_CONFIG/homelab-dashboard/playbooks/* ${ANSIBLE_PLAYBOOKS}/ cp -r ../DOCKER_CONFIG/homelab-dashboard/inventory/group_vars/* ${ANSIBLE_GROUP_VARS}/ # copy ssh keys to the ssh_keys directory echo "Copying SSH keys..." cp -r ../DOCKER_CONFIG/homelab-dashboard/ssh_keys/known_hosts ${SSH_KEY_DIR}/ cp -r ../DOCKER_CONFIG/homelab-dashboard/ssh_keys/id_automation_ansible.pub ${SSH_KEY_DIR}/ cp -r ../DOCKER_CONFIG/homelab-dashboard/ssh_keys/id_automation_ansible ${SSH_KEY_DIR}/ # apply correct permissions to ssh keys echo "Setting permissions for SSH keys..." chmod 600 ${SSH_KEY_DIR}/id_automation_ansible chmod 644 ${SSH_KEY_DIR}/id_automation_ansible.pub chmod 644 ${SSH_KEY_DIR}/known_hosts echo "Initialization complete. You can now execute bash ./maj.sh to update the Homelab Dashboard."