Add Coolify Wrapper API integration
This enables deployment via apps.startanaicompany.com instead of direct Coolify access. New files: - deploy-to-apps.example.sh: Deployment script using Wrapper API - DEPLOYMENT_GUIDE.md: Comprehensive deployment documentation Updated files: - README.md: Updated deployment steps to use Wrapper API - .gitignore: Added deploy-to-apps.sh to exclusions Benefits: - Users no longer need master Coolify token - Each user gets their own API key - Automatic resource isolation - Rate limiting and audit logging - Simpler deployment process The old deploy-to-coolify.example.sh remains for reference but new deployments should use the wrapper API. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
222
deploy-to-apps.example.sh
Normal file
222
deploy-to-apps.example.sh
Normal file
@@ -0,0 +1,222 @@
|
||||
#!/bin/bash
|
||||
|
||||
# ========================================
|
||||
# AI Recruitment Site - Wrapper API Deployment Script
|
||||
# ========================================
|
||||
# This script deploys your recruitment site via the Coolify Wrapper API
|
||||
# at apps.startanaicompany.com
|
||||
#
|
||||
# IMPORTANT: Copy this file to deploy-to-apps.sh and customize it
|
||||
# DO NOT commit deploy-to-apps.sh to git (it's in .gitignore)
|
||||
#
|
||||
# Prerequisites:
|
||||
# 1. Register for API key at: https://apps.startanaicompany.com/api/v1/register
|
||||
# 2. Set WRAPPER_API_KEY environment variable
|
||||
# 3. Set GITEA_API_TOKEN environment variable (optional, for webhooks)
|
||||
# 4. Customize your .env file with company information
|
||||
|
||||
set -e # Exit on error
|
||||
|
||||
# Load environment variables from .env
|
||||
if [ ! -f .env ]; then
|
||||
echo "❌ Error: .env file not found. Copy .env.example to .env and customize it."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
source .env
|
||||
|
||||
# Check required environment variables
|
||||
if [ -z "$WRAPPER_API_KEY" ]; then
|
||||
echo "❌ Error: WRAPPER_API_KEY environment variable not set"
|
||||
echo ""
|
||||
echo "To get your API key:"
|
||||
echo "1. Register at: curl -X POST https://apps.startanaicompany.com/api/v1/register \\"
|
||||
echo " -H 'Content-Type: application/json' \\"
|
||||
echo " -d '{\"email\":\"your@email.com\",\"gitea_username\":\"${GITEA_USERNAME}\"}'"
|
||||
echo ""
|
||||
echo "2. Save the returned API key"
|
||||
echo "3. Export it: export WRAPPER_API_KEY='your_api_key_here'"
|
||||
echo ""
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Check required .env variables
|
||||
if [ -z "$COMPANY_NAME" ]; then
|
||||
echo "❌ Error: COMPANY_NAME not set in .env"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ -z "$SUBDOMAIN" ]; then
|
||||
echo "❌ Error: SUBDOMAIN not set in .env"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ -z "$GITEA_USERNAME" ]; then
|
||||
echo "❌ Error: GITEA_USERNAME not set in .env"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ -z "$GITEA_REPO_NAME" ]; then
|
||||
echo "❌ Error: GITEA_REPO_NAME not set in .env"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Wrapper API configuration
|
||||
WRAPPER_API="https://apps.startanaicompany.com/api/v1"
|
||||
|
||||
# Repository URL (HTTPS for Coolify to clone)
|
||||
REPO_URL="https://git.startanaicompany.com/${GITEA_USERNAME}/${GITEA_REPO_NAME}.git"
|
||||
|
||||
# Domain (e.g., annarecruit.startanaicompany.com or johnrecruit.startanaicompany.com)
|
||||
FULL_DOMAIN="${SUBDOMAIN}recruit.startanaicompany.com"
|
||||
|
||||
echo "========================================="
|
||||
echo " AI Recruitment Site Deployment"
|
||||
echo "========================================="
|
||||
echo "📦 Configuration:"
|
||||
echo " Company: $COMPANY_NAME"
|
||||
echo " Repository: $REPO_URL"
|
||||
echo " Domain: https://$FULL_DOMAIN"
|
||||
echo ""
|
||||
|
||||
# Create Coolify application via wrapper API
|
||||
echo "📝 Creating application via Wrapper API..."
|
||||
APP_RESPONSE=$(curl -s -X POST "${WRAPPER_API}/applications" \
|
||||
-H "X-API-Key: ${WRAPPER_API_KEY}" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d "{
|
||||
\"name\": \"${SUBDOMAIN}-recruit\",
|
||||
\"subdomain\": \"${SUBDOMAIN}\",
|
||||
\"domain_suffix\": \"recruit.startanaicompany.com\",
|
||||
\"git_repository\": \"${REPO_URL}\",
|
||||
\"git_branch\": \"master\",
|
||||
\"template_type\": \"recruitment\",
|
||||
\"environment_variables\": {
|
||||
\"COMPANY_NAME\": \"${COMPANY_NAME}\",
|
||||
\"COMPANY_TAGLINE\": \"${COMPANY_TAGLINE}\",
|
||||
\"COMPANY_DESCRIPTION\": \"${COMPANY_DESCRIPTION}\",
|
||||
\"PRIMARY_COLOR\": \"${PRIMARY_COLOR}\",
|
||||
\"ACCENT_COLOR\": \"${ACCENT_COLOR}\",
|
||||
\"DARK_COLOR\": \"${DARK_COLOR}\",
|
||||
\"CONTACT_EMAIL\": \"${CONTACT_EMAIL}\",
|
||||
\"CONTACT_PHONE\": \"${CONTACT_PHONE}\",
|
||||
\"CONTACT_ADDRESS\": \"${CONTACT_ADDRESS}\"
|
||||
}
|
||||
}")
|
||||
|
||||
# Check for errors
|
||||
if echo "$APP_RESPONSE" | grep -q "error"; then
|
||||
echo "❌ Deployment failed:"
|
||||
echo "$APP_RESPONSE" | jq '.' 2>/dev/null || echo "$APP_RESPONSE"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Extract application details
|
||||
APP_UUID=$(echo "$APP_RESPONSE" | jq -r '.application_uuid' 2>/dev/null)
|
||||
DOMAIN=$(echo "$APP_RESPONSE" | jq -r '.domain' 2>/dev/null)
|
||||
WEBHOOK_URL=$(echo "$APP_RESPONSE" | jq -r '.webhook_url' 2>/dev/null)
|
||||
|
||||
if [ "$APP_UUID" == "null" ] || [ -z "$APP_UUID" ]; then
|
||||
echo "❌ Failed to create application"
|
||||
echo "Response: $APP_RESPONSE"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "✅ Application created!"
|
||||
echo " Application UUID: $APP_UUID"
|
||||
echo " Domain: $DOMAIN"
|
||||
echo ""
|
||||
|
||||
# Configure webhook for automatic deployments
|
||||
echo "🪝 Setting up deployment webhook..."
|
||||
|
||||
if [ -z "$GITEA_API_TOKEN" ]; then
|
||||
echo "⚠️ Warning: GITEA_API_TOKEN not set"
|
||||
echo " Skipping webhook setup. You can configure it manually later."
|
||||
echo " Webhook URL: $WEBHOOK_URL"
|
||||
else
|
||||
# Create webhook in Gitea
|
||||
GITEA_API="https://git.startanaicompany.com/api/v1"
|
||||
WEBHOOK_RESPONSE=$(curl -s -X POST "${GITEA_API}/repos/${GITEA_USERNAME}/${GITEA_REPO_NAME}/hooks" \
|
||||
-H "Authorization: token ${GITEA_API_TOKEN}" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d "{
|
||||
\"type\": \"gitea\",
|
||||
\"config\": {
|
||||
\"url\": \"${WEBHOOK_URL}\",
|
||||
\"content_type\": \"json\",
|
||||
\"http_method\": \"GET\"
|
||||
},
|
||||
\"events\": [\"push\"],
|
||||
\"authorization_header\": \"Bearer ${WRAPPER_API_KEY}\",
|
||||
\"active\": true
|
||||
}")
|
||||
|
||||
WEBHOOK_ID=$(echo "$WEBHOOK_RESPONSE" | jq -r '.id' 2>/dev/null)
|
||||
|
||||
if [ "$WEBHOOK_ID" == "null" ] || [ -z "$WEBHOOK_ID" ]; then
|
||||
echo "⚠️ Warning: Failed to create Gitea webhook (may already exist)"
|
||||
else
|
||||
echo "✅ Webhook configured for automatic deployments"
|
||||
fi
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "========================================="
|
||||
echo " Deployment Complete!"
|
||||
echo "========================================="
|
||||
echo ""
|
||||
echo "📋 Deployment Details:"
|
||||
echo " Application UUID: $APP_UUID"
|
||||
echo " Domain: $DOMAIN"
|
||||
echo ""
|
||||
echo "⏳ Your site will be available in 2-3 minutes at:"
|
||||
echo " $DOMAIN"
|
||||
echo ""
|
||||
echo "📝 Next Steps:"
|
||||
echo " 1. Configure Cloudflare DNS (if not already done):"
|
||||
echo " - Add CNAME record:"
|
||||
echo " - Name: ${SUBDOMAIN}recruit"
|
||||
echo " - Target: app.coolify.io"
|
||||
echo " - Proxy: Enabled"
|
||||
echo ""
|
||||
echo " 2. Wait 2-3 minutes for deployment to complete"
|
||||
echo ""
|
||||
echo " 3. Visit your site:"
|
||||
echo " $DOMAIN"
|
||||
echo ""
|
||||
echo " 4. Create your first admin account via the login page:"
|
||||
echo " ${DOMAIN}/admin/login"
|
||||
echo ""
|
||||
echo "🔍 Monitor deployment:"
|
||||
echo " View logs:"
|
||||
echo " curl -H \"X-API-Key: \$WRAPPER_API_KEY\" \\"
|
||||
echo " ${WRAPPER_API}/applications/${APP_UUID}/logs"
|
||||
echo ""
|
||||
echo " List your applications:"
|
||||
echo " curl -H \"X-API-Key: \$WRAPPER_API_KEY\" \\"
|
||||
echo " ${WRAPPER_API}/applications"
|
||||
echo ""
|
||||
|
||||
# Save deployment info
|
||||
cat > deployment-info.txt <<DEPLOYMENT_INFO
|
||||
Deployment Information
|
||||
======================
|
||||
Date: $(date)
|
||||
Company: $COMPANY_NAME
|
||||
Domain: $DOMAIN
|
||||
Application UUID: $APP_UUID
|
||||
Repository: $REPO_URL
|
||||
|
||||
Wrapper API: ${WRAPPER_API}
|
||||
Your API Key: ${WRAPPER_API_KEY}
|
||||
|
||||
Monitor deployment:
|
||||
curl -H "X-API-Key: \$WRAPPER_API_KEY" ${WRAPPER_API}/applications/${APP_UUID}/logs
|
||||
|
||||
Trigger manual deployment:
|
||||
curl -X POST -H "X-API-Key: \$WRAPPER_API_KEY" ${WRAPPER_API}/applications/${APP_UUID}/deploy
|
||||
DEPLOYMENT_INFO
|
||||
|
||||
echo "💾 Deployment information saved to deployment-info.txt"
|
||||
echo " ⚠️ Keep this file secure - it contains your API key!"
|
||||
Reference in New Issue
Block a user