153 lines
4.8 KiB
Bash
153 lines
4.8 KiB
Bash
#!/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"
|