- Deployment script for Coolify setup - Comprehensive deployment guide - SSH public key included - Updated .gitignore to exclude private key
128 lines
4.3 KiB
Bash
Executable File
128 lines
4.3 KiB
Bash
Executable File
#!/bin/bash
|
|
set -e
|
|
|
|
# API Configuration
|
|
COOLIFY_TOKEN="1790|8Klldu1hXjtODfZhl0dFn5D6Jhd7X285CuPzcQBdffaed898"
|
|
GITEA_TOKEN="968f51fc9f957c567f592c691bafd453c839b7e9"
|
|
CLOUDFLARE_TOKEN="h5mN_lhWW5Rl4aVP0eyVU_Z7u3PndZVtW4q7ExLK"
|
|
COOLIFY_API="https://app.coolify.io/api/v1"
|
|
GITEA_API="https://git.startanaicompany.com/api/v1"
|
|
CLOUDFLARE_API="https://api.cloudflare.com/client/v4"
|
|
|
|
# Project details
|
|
PROJECT_UUID="y8804s80goowsccwk8400kwo"
|
|
REPO_NAME="ai-recruit-site-template"
|
|
GITEA_USER="mikael.westoo"
|
|
ZONE_ID="e6ade38a28032c3542140a9cbf592838"
|
|
|
|
echo "=== Step 1: Adding Private Key to Coolify ==="
|
|
PRIVATE_KEY_JSON=$(jq -Rs . < ./deploy_key)
|
|
PRIVATE_KEY_RESPONSE=$(curl -s -X POST "${COOLIFY_API}/private-keys" \
|
|
-H "Authorization: Bearer ${COOLIFY_TOKEN}" \
|
|
-H "Content-Type: application/json" \
|
|
-d "{\"name\": \"recruitai-deploy-key\", \"description\": \"Deploy key for RecruitAI\", \"private_key\": ${PRIVATE_KEY_JSON}}")
|
|
|
|
echo "$PRIVATE_KEY_RESPONSE"
|
|
PRIVATE_KEY_UUID=$(echo "$PRIVATE_KEY_RESPONSE" | jq -r '.uuid')
|
|
echo "Private Key UUID: ${PRIVATE_KEY_UUID}"
|
|
|
|
echo ""
|
|
echo "=== Step 2: Adding Deploy Key to Gitea ==="
|
|
PUBLIC_KEY=$(cat ./deploy_key.pub)
|
|
curl -s -X POST "${GITEA_API}/repos/${GITEA_USER}/${REPO_NAME}/keys" \
|
|
-H "Authorization: token ${GITEA_TOKEN}" \
|
|
-H "Content-Type: application/json" \
|
|
-d "{\"title\": \"Coolify Deploy Key\", \"key\": \"${PUBLIC_KEY}\", \"read_only\": true}" | jq '.'
|
|
|
|
echo ""
|
|
echo "=== Step 3: Pushing to Gitea ==="
|
|
git remote remove origin 2>/dev/null || true
|
|
git remote add origin git@git.startanaicompany.com:${GITEA_USER}/${REPO_NAME}.git
|
|
git push -u origin master
|
|
|
|
echo ""
|
|
echo "=== Step 4: Creating Coolify Application ==="
|
|
APP_RESPONSE=$(curl -s -X POST "${COOLIFY_API}/applications/public" \
|
|
-H "Authorization: Bearer ${COOLIFY_TOKEN}" \
|
|
-H "Content-Type: application/json" \
|
|
-d "{
|
|
\"project_uuid\": \"${PROJECT_UUID}\",
|
|
\"environment_name\": \"production\",
|
|
\"server_uuid\": 0,
|
|
\"type\": \"public\",
|
|
\"source\": {
|
|
\"type\": \"git\",
|
|
\"url\": \"git@git.startanaicompany.com:${GITEA_USER}/${REPO_NAME}\",
|
|
\"branch\": \"master\",
|
|
\"private_key_uuid\": \"${PRIVATE_KEY_UUID}\"
|
|
},
|
|
\"build_pack\": \"dockerfile\",
|
|
\"ports_exposes\": \"3000\",
|
|
\"name\": \"recruitai\"
|
|
}")
|
|
|
|
echo "$APP_RESPONSE" | jq '.'
|
|
APP_UUID=$(echo "$APP_RESPONSE" | jq -r '.uuid')
|
|
DEFAULT_FQDN=$(echo "$APP_RESPONSE" | jq -r '.fqdn' | sed 's|http://||' | sed 's|https://||')
|
|
|
|
echo ""
|
|
echo "App UUID: ${APP_UUID}"
|
|
echo "Default FQDN: ${DEFAULT_FQDN}"
|
|
|
|
echo ""
|
|
echo "=== Step 5: Adding Webhook to Gitea ==="
|
|
curl -s -X POST "${GITEA_API}/repos/${GITEA_USER}/${REPO_NAME}/hooks" \
|
|
-H "Authorization: token ${GITEA_TOKEN}" \
|
|
-H "Content-Type: application/json" \
|
|
-d "{
|
|
\"type\": \"gitea\",
|
|
\"config\": {
|
|
\"url\": \"https://app.coolify.io/api/v1/deploy?uuid=${APP_UUID}\",
|
|
\"content_type\": \"json\",
|
|
\"http_method\": \"GET\"
|
|
},
|
|
\"events\": [\"push\"],
|
|
\"active\": true
|
|
}" | jq '.'
|
|
|
|
echo ""
|
|
echo "=== Step 6: Creating DNS Record ==="
|
|
DNS_RESPONSE=$(curl -s -X POST "${CLOUDFLARE_API}/zones/${ZONE_ID}/dns_records" \
|
|
-H "Authorization: Bearer ${CLOUDFLARE_TOKEN}" \
|
|
-H "Content-Type: application/json" \
|
|
-d "{
|
|
\"type\": \"CNAME\",
|
|
\"name\": \"recruitai\",
|
|
\"content\": \"${DEFAULT_FQDN}\",
|
|
\"ttl\": 1,
|
|
\"proxied\": false
|
|
}")
|
|
|
|
echo "$DNS_RESPONSE" | jq '.'
|
|
|
|
echo ""
|
|
echo "=== Step 7: Updating Application Domain ==="
|
|
curl -s -X PATCH "${COOLIFY_API}/applications/${APP_UUID}" \
|
|
-H "Authorization: Bearer ${COOLIFY_TOKEN}" \
|
|
-H "Content-Type: application/json" \
|
|
-d "{\"domains\": \"http://recruitai.startanaicompany.com\"}" | jq '.'
|
|
|
|
echo ""
|
|
echo "=== Step 8: Deploying Application ==="
|
|
curl -s -X GET "${COOLIFY_API}/deploy?uuid=${APP_UUID}&force=true" \
|
|
-H "Authorization: Bearer ${COOLIFY_TOKEN}" | jq '.'
|
|
|
|
echo ""
|
|
echo "=========================================="
|
|
echo "=== Deployment Complete! ==="
|
|
echo "=========================================="
|
|
echo ""
|
|
echo "Site URL: http://recruitai.startanaicompany.com"
|
|
echo "Admin Panel: http://recruitai.startanaicompany.com/admin/login"
|
|
echo ""
|
|
echo "App UUID: ${APP_UUID}"
|
|
echo "Project UUID: ${PROJECT_UUID}"
|
|
echo ""
|
|
echo "Please wait 2-3 minutes for the deployment to complete."
|
|
echo "You can check the deployment status in the Coolify dashboard."
|