Add deployment script and documentation
- Deployment script for Coolify setup - Comprehensive deployment guide - SSH public key included - Updated .gitignore to exclude private key
This commit is contained in:
127
deploy.sh
Executable file
127
deploy.sh
Executable file
@@ -0,0 +1,127 @@
|
||||
#!/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."
|
||||
Reference in New Issue
Block a user