deploy_telemetry.yml 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171
  1. # This workflow will build and deploy the SeaweedFS telemetry server
  2. # For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-go
  3. name: Deploy Telemetry Server
  4. on:
  5. workflow_dispatch:
  6. inputs:
  7. setup:
  8. description: 'Run first-time server setup'
  9. required: true
  10. type: boolean
  11. default: false
  12. deploy:
  13. description: 'Deploy telemetry server to remote server'
  14. required: true
  15. type: boolean
  16. default: false
  17. jobs:
  18. deploy:
  19. runs-on: ubuntu-latest
  20. steps:
  21. - uses: actions/checkout@v5
  22. - name: Set up Go
  23. uses: actions/setup-go@v6
  24. with:
  25. go-version: '1.24'
  26. - name: Build Telemetry Server
  27. if: github.event_name == 'workflow_dispatch' && inputs.deploy
  28. run: |
  29. go mod tidy
  30. echo "Building telemetry server..."
  31. GOOS=linux GOARCH=amd64 go build -o telemetry-server ./telemetry/server/main.go
  32. ls -la telemetry-server
  33. echo "Build completed successfully"
  34. - name: First-time Server Setup
  35. if: github.event_name == 'workflow_dispatch' && inputs.setup
  36. env:
  37. SSH_PRIVATE_KEY: ${{ secrets.TELEMETRY_SSH_PRIVATE_KEY }}
  38. REMOTE_HOST: ${{ secrets.TELEMETRY_HOST }}
  39. REMOTE_USER: ${{ secrets.TELEMETRY_USER }}
  40. run: |
  41. mkdir -p ~/.ssh
  42. echo "$SSH_PRIVATE_KEY" > ~/.ssh/deploy_key
  43. chmod 600 ~/.ssh/deploy_key
  44. echo "Host *" > ~/.ssh/config
  45. echo " StrictHostKeyChecking no" >> ~/.ssh/config
  46. # Create all required directories with proper permissions
  47. ssh -i ~/.ssh/deploy_key $REMOTE_USER@$REMOTE_HOST "
  48. mkdir -p ~/seaweedfs-telemetry/bin ~/seaweedfs-telemetry/logs ~/seaweedfs-telemetry/data ~/seaweedfs-telemetry/tmp && \
  49. chmod 755 ~/seaweedfs-telemetry/logs && \
  50. chmod 755 ~/seaweedfs-telemetry/data && \
  51. touch ~/seaweedfs-telemetry/logs/telemetry.log ~/seaweedfs-telemetry/logs/telemetry.error.log && \
  52. chmod 644 ~/seaweedfs-telemetry/logs/*.log"
  53. # Create systemd service file
  54. echo "
  55. [Unit]
  56. Description=SeaweedFS Telemetry Server
  57. After=network.target
  58. [Service]
  59. Type=simple
  60. User=$REMOTE_USER
  61. WorkingDirectory=/home/$REMOTE_USER/seaweedfs-telemetry
  62. ExecStart=/home/$REMOTE_USER/seaweedfs-telemetry/bin/telemetry-server -port=8353
  63. Restart=always
  64. RestartSec=5
  65. StandardOutput=append:/home/$REMOTE_USER/seaweedfs-telemetry/logs/telemetry.log
  66. StandardError=append:/home/$REMOTE_USER/seaweedfs-telemetry/logs/telemetry.error.log
  67. [Install]
  68. WantedBy=multi-user.target" > telemetry.service
  69. # Setup logrotate configuration
  70. echo "# SeaweedFS Telemetry service log rotation
  71. /home/$REMOTE_USER/seaweedfs-telemetry/logs/*.log {
  72. daily
  73. rotate 30
  74. compress
  75. delaycompress
  76. missingok
  77. notifempty
  78. create 644 $REMOTE_USER $REMOTE_USER
  79. postrotate
  80. systemctl restart telemetry.service
  81. endscript
  82. }" > telemetry_logrotate
  83. # Copy configuration files
  84. scp -i ~/.ssh/deploy_key telemetry/grafana-dashboard.json $REMOTE_USER@$REMOTE_HOST:~/seaweedfs-telemetry/
  85. scp -i ~/.ssh/deploy_key telemetry/prometheus.yml $REMOTE_USER@$REMOTE_HOST:~/seaweedfs-telemetry/
  86. # Copy and install service and logrotate files
  87. scp -i ~/.ssh/deploy_key telemetry.service telemetry_logrotate $REMOTE_USER@$REMOTE_HOST:~/seaweedfs-telemetry/
  88. ssh -i ~/.ssh/deploy_key $REMOTE_USER@$REMOTE_HOST "
  89. sudo mv ~/seaweedfs-telemetry/telemetry.service /etc/systemd/system/ && \
  90. sudo mv ~/seaweedfs-telemetry/telemetry_logrotate /etc/logrotate.d/seaweedfs-telemetry && \
  91. sudo systemctl daemon-reload && \
  92. sudo systemctl enable telemetry.service"
  93. echo "✅ First-time setup completed successfully!"
  94. echo "📋 Next step: Run the deployment to install the telemetry server binary"
  95. echo " 1. Go to GitHub Actions → Deploy Telemetry Server"
  96. echo " 2. Click 'Run workflow'"
  97. echo " 3. Check 'Deploy telemetry server to remote server'"
  98. echo " 4. Click 'Run workflow'"
  99. rm -f ~/.ssh/deploy_key
  100. - name: Deploy Telemetry Server to Remote Server
  101. if: github.event_name == 'workflow_dispatch' && inputs.deploy
  102. env:
  103. SSH_PRIVATE_KEY: ${{ secrets.TELEMETRY_SSH_PRIVATE_KEY }}
  104. REMOTE_HOST: ${{ secrets.TELEMETRY_HOST }}
  105. REMOTE_USER: ${{ secrets.TELEMETRY_USER }}
  106. run: |
  107. mkdir -p ~/.ssh
  108. echo "$SSH_PRIVATE_KEY" > ~/.ssh/deploy_key
  109. chmod 600 ~/.ssh/deploy_key
  110. echo "Host *" > ~/.ssh/config
  111. echo " StrictHostKeyChecking no" >> ~/.ssh/config
  112. # Create temp directory and copy binary
  113. ssh -i ~/.ssh/deploy_key $REMOTE_USER@$REMOTE_HOST "mkdir -p ~/seaweedfs-telemetry/tmp"
  114. scp -i ~/.ssh/deploy_key telemetry-server $REMOTE_USER@$REMOTE_HOST:~/seaweedfs-telemetry/tmp/
  115. # Copy updated configuration files
  116. scp -i ~/.ssh/deploy_key telemetry/grafana-dashboard.json $REMOTE_USER@$REMOTE_HOST:~/seaweedfs-telemetry/
  117. scp -i ~/.ssh/deploy_key telemetry/prometheus.yml $REMOTE_USER@$REMOTE_HOST:~/seaweedfs-telemetry/
  118. # Check if service exists and deploy accordingly
  119. ssh -i ~/.ssh/deploy_key $REMOTE_USER@$REMOTE_HOST "
  120. if systemctl list-unit-files telemetry.service >/dev/null 2>&1; then
  121. echo 'Service exists, performing update...'
  122. sudo systemctl stop telemetry.service
  123. mkdir -p ~/seaweedfs-telemetry/bin
  124. mv ~/seaweedfs-telemetry/tmp/telemetry-server ~/seaweedfs-telemetry/bin/
  125. chmod +x ~/seaweedfs-telemetry/bin/telemetry-server
  126. sudo systemctl start telemetry.service
  127. sudo systemctl status telemetry.service
  128. else
  129. echo 'ERROR: telemetry.service not found!'
  130. echo 'Please run the first-time setup before deploying.'
  131. echo 'Go to GitHub Actions → Deploy Telemetry Server → Run workflow → Check \"Run first-time server setup\"'
  132. exit 1
  133. fi"
  134. # Verify deployment
  135. ssh -i ~/.ssh/deploy_key $REMOTE_USER@$REMOTE_HOST "
  136. echo 'Waiting for service to start...'
  137. sleep 5
  138. curl -f http://localhost:8353/health || echo 'Health check failed'"
  139. rm -f ~/.ssh/deploy_key
  140. - name: Notify Deployment Status
  141. if: always()
  142. run: |
  143. if [ "${{ job.status }}" == "success" ]; then
  144. echo "✅ Telemetry server deployment successful"
  145. echo "Dashboard: http://${{ secrets.TELEMETRY_HOST }}:8353"
  146. echo "Metrics: http://${{ secrets.TELEMETRY_HOST }}:8353/metrics"
  147. else
  148. echo "❌ Telemetry server deployment failed"
  149. fi