Bruno Charest 05087aa380
Some checks failed
Tests / Backend Tests (Python) (3.10) (push) Has been cancelled
Tests / Backend Tests (Python) (3.11) (push) Has been cancelled
Tests / Backend Tests (Python) (3.12) (push) Has been cancelled
Tests / Frontend Tests (JS) (push) Has been cancelled
Tests / Integration Tests (push) Has been cancelled
Tests / All Tests Passed (push) Has been cancelled
Replace manual upsert logic with SQLite native upsert in Docker CRUD repositories, enhance Ansible backup playbook with better error handling and file permissions, add favicon endpoint, and improve playbook editor UI with syntax highlighting, lint integration, quality badges, and enhanced code editing features
2025-12-17 15:36:49 -05:00

148 lines
5.2 KiB
Bash

#!/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."