Skip to content

Commit

Permalink
chore: add start_wesql_cluster.yml
Browse files Browse the repository at this point in the history
  • Loading branch information
earayu committed Dec 11, 2024
1 parent c63ae16 commit d65640b
Showing 1 changed file with 97 additions and 6 deletions.
103 changes: 97 additions & 6 deletions .github/workflows/start_wesql_cluster.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,11 +13,102 @@ jobs:
runs-on: ubuntu-latest

steps:
- name: Public IP
id: ip
uses: haythem/public-ip@v1.3
- name: Configure AWS CLI
run: |
aws configure set aws_access_key_id ${{ secrets.AWS_ACCESS_KEY_ID }}
aws configure set aws_secret_access_key ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws configure set default.region us-east-2
- name: Create S3 Bucket
id: create_bucket
run: |
BUCKET_NAME="wescale-$(date +'%Y%m%d%H%M%S')"
echo "Bucket name: $BUCKET_NAME"
aws s3 mb s3://$BUCKET_NAME
echo "bucket_name=$BUCKET_NAME" >> $GITHUB_OUTPUT
- name: Start WeSQL Server
run: |
export WESQL_OBJECTSTORE_BUCKET=${{ steps.create_bucket.outputs.bucket_name }}
export WESQL_OBJECTSTORE_REGION=us-east-2
export WESQL_OBJECTSTORE_ACCESS_KEY=${{ secrets.AWS_ACCESS_KEY_ID }}
export WESQL_OBJECTSTORE_SECRET_KEY=${{ secrets.AWS_SECRET_ACCESS_KEY }}
docker run -itd --network host --name wesql-server \
-p 3306:3306 \
-e MYSQL_CUSTOM_CONFIG="[mysqld]\n\
port=3306\n\
log-bin=binlog\n\
gtid_mode=ON\n\
enforce_gtid_consistency=ON\n\
log_slave_updates=ON\n\
binlog_format=ROW\n\
objectstore_provider='aws'\n\
repo_objectstore_id='tutorial'\n\
objectstore_bucket='${WESQL_OBJECTSTORE_BUCKET}'\n\
objectstore_region='${WESQL_OBJECTSTORE_REGION}'\n\
branch_objectstore_id='main'" \
-v ~/wesql-local-dir:/data/mysql \
-e WESQL_CLUSTER_MEMBER='127.0.0.1:13306' \
-e MYSQL_ROOT_PASSWORD=passwd \
-e WESQL_OBJECTSTORE_ACCESS_KEY=${WESQL_OBJECTSTORE_ACCESS_KEY} \
-e WESQL_OBJECTSTORE_SECRET_KEY=${WESQL_OBJECTSTORE_SECRET_KEY} \
apecloud/wesql-server:8.0.35-0.1.0_beta3.38
- name: Wait for MySQL ports
run: |
timeout=300 # 5 minutes timeout
ports=(3306)
for port in "${ports[@]}"; do
echo "Waiting for MySQL port $port..."
start_time=$(date +%s)
while ! nc -z localhost $port; do
current_time=$(date +%s)
elapsed=$((current_time - start_time))
if [ $elapsed -ge $timeout ]; then
echo "Timeout waiting for MySQL port $port"
exit 1
fi
echo "Port $port not ready. Retrying in 5 seconds..."
sleep 5
done
echo "MySQL port $port is ready!"
done
- name: Install and Start ngrok
run: |
# 安装ngrok
curl -s https://ngrok-agent.s3.amazonaws.com/ngrok.asc | sudo tee /usr/share/keyrings/ngrok-archive-keyring.asc >/dev/null
echo "deb https://ngrok-agent.s3.amazonaws.com buster main" | sudo tee /etc/apt/sources.list.d/ngrok.list
sudo apt-get update && sudo apt-get install ngrok -y
# 配置ngrok token
ngrok config add-authtoken ${{ secrets.NGROK_AUTH_TOKEN }}
# 后台启动ngrok tcp隧道
nohup ngrok tcp 3306 > ngrok.log 2>&1 &
sleep 5
- name: Print ngrok tunnel info
run: |
curl -s http://127.0.0.1:4040/api/tunnels > tunnels.json
cat tunnels.json
# 提取 public_url 字段(这一般会是类似 tcp://X.ngrok.io:XXXXX )
TUNNEL_URL=$(jq -r '.tunnels[0].public_url' tunnels.json)
echo "Public MySQL Tunnel URL: $TUNNEL_URL"
echo "访问方式:将TUNNEL_URL中包含的host和port用于连接MySQL即可"
- name: Keep session running
run: |
echo "Press Ctrl+C to exit."
tail -f /dev/null
- name: Print Public IP
- name: Clean up
if: always()
run: |
echo ${{ steps.ip.outputs.ipv4 }}
echo ${{ steps.ip.outputs.ipv6 }}
echo "Deleting bucket: ${{ steps.create_bucket.outputs.bucket_name }}"
aws s3 rm s3://${{ steps.create_bucket.outputs.bucket_name }} --recursive
aws s3 rb s3://${{ steps.create_bucket.outputs.bucket_name }}

0 comments on commit d65640b

Please sign in to comment.