You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							171 lines
						
					
					
						
							7.1 KiB
						
					
					
				
			
		
		
		
			
			
			
		
		
	
	
							171 lines
						
					
					
						
							7.1 KiB
						
					
					
				| # This workflow will build and deploy the SeaweedFS telemetry server | |
| # For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-go | |
|  | |
| name: Deploy Telemetry Server | |
|  | |
| on: | |
|   workflow_dispatch: | |
|     inputs: | |
|       setup: | |
|         description: 'Run first-time server setup' | |
|         required: true | |
|         type: boolean | |
|         default: false | |
|       deploy: | |
|         description: 'Deploy telemetry server to remote server' | |
|         required: true | |
|         type: boolean | |
|         default: false | |
|  | |
| jobs: | |
|   deploy: | |
|     runs-on: ubuntu-latest | |
|     steps: | |
|       - uses: actions/checkout@v5 | |
|  | |
|       - name: Set up Go | |
|         uses: actions/setup-go@v5 | |
|         with: | |
|           go-version: '1.24' | |
|  | |
|       - name: Build Telemetry Server | |
|         if: github.event_name == 'workflow_dispatch' && inputs.deploy | |
|         run: | | |
|           go mod tidy | |
|           echo "Building telemetry server..." | |
|           GOOS=linux GOARCH=amd64 go build -o telemetry-server ./telemetry/server/main.go | |
|           ls -la telemetry-server | |
|           echo "Build completed successfully"           | |
|  | |
|       - name: First-time Server Setup | |
|         if: github.event_name == 'workflow_dispatch' && inputs.setup | |
|         env: | |
|           SSH_PRIVATE_KEY: ${{ secrets.TELEMETRY_SSH_PRIVATE_KEY }} | |
|           REMOTE_HOST: ${{ secrets.TELEMETRY_HOST }} | |
|           REMOTE_USER: ${{ secrets.TELEMETRY_USER }} | |
|         run: | | |
|           mkdir -p ~/.ssh | |
|           echo "$SSH_PRIVATE_KEY" > ~/.ssh/deploy_key | |
|           chmod 600 ~/.ssh/deploy_key | |
|           echo "Host *" > ~/.ssh/config | |
|           echo "  StrictHostKeyChecking no" >> ~/.ssh/config | |
|  | |
|           # Create all required directories with proper permissions | |
|           ssh -i ~/.ssh/deploy_key $REMOTE_USER@$REMOTE_HOST " | |
|             mkdir -p ~/seaweedfs-telemetry/bin ~/seaweedfs-telemetry/logs ~/seaweedfs-telemetry/data ~/seaweedfs-telemetry/tmp && \ | |
|             chmod 755 ~/seaweedfs-telemetry/logs && \ | |
|             chmod 755 ~/seaweedfs-telemetry/data && \ | |
|             touch ~/seaweedfs-telemetry/logs/telemetry.log ~/seaweedfs-telemetry/logs/telemetry.error.log && \ | |
|             chmod 644 ~/seaweedfs-telemetry/logs/*.log" | |
|  | |
|           # Create systemd service file | |
|           echo " | |
|           [Unit] | |
|           Description=SeaweedFS Telemetry Server | |
|           After=network.target | |
|  | |
|           [Service] | |
|           Type=simple | |
|           User=$REMOTE_USER | |
|           WorkingDirectory=/home/$REMOTE_USER/seaweedfs-telemetry | |
|           ExecStart=/home/$REMOTE_USER/seaweedfs-telemetry/bin/telemetry-server -port=8353 | |
|           Restart=always | |
|           RestartSec=5 | |
|           StandardOutput=append:/home/$REMOTE_USER/seaweedfs-telemetry/logs/telemetry.log | |
|           StandardError=append:/home/$REMOTE_USER/seaweedfs-telemetry/logs/telemetry.error.log | |
|  | |
|           [Install] | |
|           WantedBy=multi-user.target" > telemetry.service | |
|  | |
|           # Setup logrotate configuration | |
|           echo "# SeaweedFS Telemetry service log rotation | |
|           /home/$REMOTE_USER/seaweedfs-telemetry/logs/*.log { | |
|               daily | |
|               rotate 30 | |
|               compress | |
|               delaycompress | |
|               missingok | |
|               notifempty | |
|               create 644 $REMOTE_USER $REMOTE_USER | |
|               postrotate | |
|                   systemctl restart telemetry.service | |
|               endscript | |
|           }" > telemetry_logrotate | |
|  | |
|           # Copy configuration files | |
|           scp -i ~/.ssh/deploy_key telemetry/grafana-dashboard.json $REMOTE_USER@$REMOTE_HOST:~/seaweedfs-telemetry/ | |
|           scp -i ~/.ssh/deploy_key telemetry/prometheus.yml $REMOTE_USER@$REMOTE_HOST:~/seaweedfs-telemetry/ | |
|  | |
|           # Copy and install service and logrotate files | |
|           scp -i ~/.ssh/deploy_key telemetry.service telemetry_logrotate $REMOTE_USER@$REMOTE_HOST:~/seaweedfs-telemetry/ | |
|           ssh -i ~/.ssh/deploy_key $REMOTE_USER@$REMOTE_HOST " | |
|             sudo mv ~/seaweedfs-telemetry/telemetry.service /etc/systemd/system/ && \ | |
|             sudo mv ~/seaweedfs-telemetry/telemetry_logrotate /etc/logrotate.d/seaweedfs-telemetry && \ | |
|             sudo systemctl daemon-reload && \ | |
|             sudo systemctl enable telemetry.service" | |
|  | |
|           echo "✅ First-time setup completed successfully!" | |
|           echo "📋 Next step: Run the deployment to install the telemetry server binary" | |
|           echo "   1. Go to GitHub Actions → Deploy Telemetry Server" | |
|           echo "   2. Click 'Run workflow'" | |
|           echo "   3. Check 'Deploy telemetry server to remote server'" | |
|           echo "   4. Click 'Run workflow'" | |
|  | |
|           rm -f ~/.ssh/deploy_key           | |
|  | |
|       - name: Deploy Telemetry Server to Remote Server | |
|         if: github.event_name == 'workflow_dispatch' && inputs.deploy | |
|         env: | |
|           SSH_PRIVATE_KEY: ${{ secrets.TELEMETRY_SSH_PRIVATE_KEY }} | |
|           REMOTE_HOST: ${{ secrets.TELEMETRY_HOST }} | |
|           REMOTE_USER: ${{ secrets.TELEMETRY_USER }} | |
|         run: | | |
|           mkdir -p ~/.ssh | |
|           echo "$SSH_PRIVATE_KEY" > ~/.ssh/deploy_key | |
|           chmod 600 ~/.ssh/deploy_key | |
|           echo "Host *" > ~/.ssh/config | |
|           echo "  StrictHostKeyChecking no" >> ~/.ssh/config | |
|  | |
|           # Create temp directory and copy binary | |
|           ssh -i ~/.ssh/deploy_key $REMOTE_USER@$REMOTE_HOST "mkdir -p ~/seaweedfs-telemetry/tmp" | |
|           scp -i ~/.ssh/deploy_key telemetry-server $REMOTE_USER@$REMOTE_HOST:~/seaweedfs-telemetry/tmp/ | |
|  | |
|           # Copy updated configuration files | |
|           scp -i ~/.ssh/deploy_key telemetry/grafana-dashboard.json $REMOTE_USER@$REMOTE_HOST:~/seaweedfs-telemetry/ | |
|           scp -i ~/.ssh/deploy_key telemetry/prometheus.yml $REMOTE_USER@$REMOTE_HOST:~/seaweedfs-telemetry/ | |
|  | |
|           # Check if service exists and deploy accordingly | |
|           ssh -i ~/.ssh/deploy_key $REMOTE_USER@$REMOTE_HOST " | |
|             if systemctl list-unit-files telemetry.service >/dev/null 2>&1; then | |
|               echo 'Service exists, performing update...' | |
|               sudo systemctl stop telemetry.service | |
|               mkdir -p ~/seaweedfs-telemetry/bin | |
|               mv ~/seaweedfs-telemetry/tmp/telemetry-server ~/seaweedfs-telemetry/bin/ | |
|               chmod +x ~/seaweedfs-telemetry/bin/telemetry-server | |
|               sudo systemctl start telemetry.service | |
|               sudo systemctl status telemetry.service | |
|             else | |
|               echo 'ERROR: telemetry.service not found!' | |
|               echo 'Please run the first-time setup before deploying.' | |
|               echo 'Go to GitHub Actions → Deploy Telemetry Server → Run workflow → Check \"Run first-time server setup\"' | |
|               exit 1 | |
|             fi" | |
|  | |
|           # Verify deployment | |
|           ssh -i ~/.ssh/deploy_key $REMOTE_USER@$REMOTE_HOST " | |
|             echo 'Waiting for service to start...' | |
|             sleep 5 | |
|             curl -f http://localhost:8353/health || echo 'Health check failed'" | |
|  | |
|           rm -f ~/.ssh/deploy_key           | |
|  | |
|       - name: Notify Deployment Status | |
|         if: always() | |
|         run: | | |
|           if [ "${{ job.status }}" == "success" ]; then | |
|             echo "✅ Telemetry server deployment successful" | |
|             echo "Dashboard: http://${{ secrets.TELEMETRY_HOST }}:8353" | |
|             echo "Metrics: http://${{ secrets.TELEMETRY_HOST }}:8353/metrics" | |
|           else | |
|             echo "❌ Telemetry server deployment failed" | |
|           fi            |