This commit is contained in:
@@ -0,0 +1,182 @@
|
||||
#!/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
|
||||
|
||||
# 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
|
||||
# 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
|
||||
|
||||
# Create a backup
|
||||
cp "$CONFIG_FILE" "$CONFIG_FILE.backup"
|
||||
|
||||
# Build the new ssh_service section
|
||||
NEW_SSH_SECTION="ssh_service:"
|
||||
NEW_SSH_SECTION="$NEW_SSH_SECTION"$'\n'" labels:"
|
||||
|
||||
# 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
|
||||
NEW_SSH_SECTION="$NEW_SSH_SECTION"$'\n'" $key: $value"
|
||||
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
|
||||
|
||||
NEW_SSH_SECTION="$NEW_SSH_SECTION"$'\n'" enabled: \"yes\""
|
||||
|
||||
# Replace the ssh_service section
|
||||
awk -v new_section="$NEW_SSH_SECTION" '
|
||||
BEGIN {
|
||||
in_ssh_service = 0
|
||||
section_replaced = 0
|
||||
}
|
||||
/^ssh_service:/ {
|
||||
in_ssh_service = 1
|
||||
if (!section_replaced) {
|
||||
print new_section
|
||||
section_replaced = 1
|
||||
}
|
||||
next
|
||||
}
|
||||
in_ssh_service && /^[a-zA-Z_][a-zA-Z0-9_]*:/ {
|
||||
in_ssh_service = 0
|
||||
}
|
||||
in_ssh_service {
|
||||
next
|
||||
}
|
||||
{
|
||||
print $0
|
||||
}
|
||||
' "$CONFIG_FILE" > "$CONFIG_FILE.tmp"
|
||||
|
||||
# Replace the original file
|
||||
mv "$CONFIG_FILE.tmp" "$CONFIG_FILE"
|
||||
|
||||
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 &
|
||||
|
||||
# If no custom app command is provided, use a simple PHP built-in server
|
||||
if [ -z "$START_COMMAND" ]; then
|
||||
START_COMMAND='php -S 0.0.0.0:8000'
|
||||
fi
|
||||
|
||||
# Always run the app under pm2-runtime
|
||||
exec pm2-runtime "$START_COMMAND"
|
||||
Reference in New Issue
Block a user