#!/bin/bash set -e # Check if the SSH key exists if [ ! -f /root/.ssh/id_rsa ]; then echo "Error: SSH private key not found at /root/.ssh/id_rsa" exit 1 fi # Check if the required environment variables are set if [ -z "$REPO_URL" ]; then echo "Error: REPO_URL environment variable must be set." exit 1 fi if [ -z "$GIT_USER" ]; then echo "Error: GIT_USER environment variable must be set." exit 1 fi if [ -z "$GIT_EMAIL" ]; then echo "Error: GIT_EMAIL environment variable must be set." exit 1 fi # Set the git user and email git config --global user.name $GIT_USER git config --global user.email $GIT_EMAIL git clone https://gitea.bramkelchtermans.be/Bram/linux-presets.git --depth 1 && cd linux-presets && chmod +x setup.sh && ./setup.sh --terminal-icon  rm -r linux-presets/ # Ensure the SSH key has the correct permissions chmod 600 /root/.ssh/id_rsa # Extract the domain from the REPO_URL DOMAIN=$(echo $REPO_URL | awk -F'[@:]' '{print $3}') # Check if the repository directory already exists if [ ! -d "/workspace/.git" ]; then # Add the SSH configuration for the domain echo "Host $DOMAIN HostName $DOMAIN IdentityFile /root/.ssh/id_rsa StrictHostKeyChecking no " >>/root/.ssh/config # Clone the repository if it doesn't exist git clone $REPO_URL /workspace fi # Add the public SSH key to authorized_keys if [ -f /root/.ssh/hostkey.pub ]; then cat /root/.ssh/hostkey.pub >>/root/.ssh/authorized_keys fi # If no teleport edition is given, fallback to oss if [ -z "$TELEPORT_EDITION" ]; then TELEPORT_EDITION="oss" fi # Install Teleport if the environment variables are set if [ -n "$TELEPORT_VERSION" ] && [ -n "$TELEPORT_URL" ]; then echo "Installing Teleport version $TELEPORT_VERSION, edition $TELEPORT_EDITION..." echo "Executing: curl https://goteleport.com/static/install.sh | bash -s $TELEPORT_VERSION $TELEPORT_EDITION" curl https://goteleport.com/static/install.sh | bash -s ${TELEPORT_VERSION} ${TELEPORT_EDITION} else echo "Error: TELEPORT_VERSION and TELEPORT_EDITION environment variables must be set." fi # Change to the repository directory cd /workspace # Install PHP dependencies composer install # Copy the environment file to the repository's environments directory if [ -f /environment/.env ]; then cp /environment/.env /workspace/.env fi ## If teleport token is set and there is no teleport.yaml file, create one if [ -n "$TELEPORT_TOKEN" ] && [ ! -f /etc/teleport.yaml ]; then teleport configure --roles=node --token=$TELEPORT_TOKEN --proxy=$TELEPORT_URL --no-acme -o file echo "Created teleport configuration file" fi HOSTNAME=$(hostname) # File path CONFIG_FILE="/etc/teleport.yaml" # Edit the teleport.yaml file to update the nodename sed -i "s/^ nodename:.*/ nodename: $HOSTNAME/" "$CONFIG_FILE" # Function to add labels to teleport.yaml add_teleport_labels() { if [ -n "$TELEPORT_LABELS" ]; then echo "Adding Teleport labels from TELEPORT_LABELS environment variable..." # Check if ssh_service section exists if ! grep -q "ssh_service:" "$CONFIG_FILE"; then echo "Error: ssh_service section not found in teleport.yaml" return 1 fi # Check if labels section already exists under ssh_service if grep -q " labels:" "$CONFIG_FILE"; then echo "Labels section already exists, updating..." # Remove existing labels section sed -i '/^ labels:/,/^[^ ]/ { /^ labels:/d; /^[^ ]/!d; }' "$CONFIG_FILE" fi # Add labels section after ssh_service sed -i '/^ssh_service:/a\ labels:' "$CONFIG_FILE" # Parse TELEPORT_LABELS and add each label IFS=',' read -ra LABELS <<< "$TELEPORT_LABELS" for label in "${LABELS[@]}"; do # Trim whitespace label=$(echo "$label" | xargs) # Check if label contains colon if [[ "$label" == *":"* ]]; then key=$(echo "$label" | cut -d':' -f1 | xargs) value=$(echo "$label" | cut -d':' -f2- | xargs) if [ -n "$key" ] && [ -n "$value" ]; then echo " $key: $value" >> "$CONFIG_FILE" echo "Added label: $key = $value" else echo "Warning: Invalid label format '$label'. Expected format: key:value" fi else echo "Warning: Label '$label' does not contain colon separator. Expected format: key:value" fi done echo "Teleport labels added successfully" else echo "No TELEPORT_LABELS environment variable set, skipping label configuration" fi } # Add labels to teleport configuration add_teleport_labels # Start the cron service service cron start nohup teleport start & # Start the application with pm2 exec pm2-runtime "php -t public -S 0.0.0.0:8000"