Skip to main content
Glama
ariesanhthu

VNStock MCP Server

by ariesanhthu
DEPLOY.md9.41 kB
# Hướng dẫn Deploy vnstock-mcp-server lên Cloud ## Tổng quan vnstock-mcp-server hỗ trợ deploy lên các cloud platforms với Docker. Server hỗ trợ 3 transport modes: - **stdio**: Cho desktop MCP clients - **sse**: Server-Sent Events (phù hợp cho web apps và cloud) - **streamable-http**: HTTP streaming (phù hợp cho API services) ## Yêu cầu - Docker và Docker Compose đã cài đặt - Tài khoản cloud platform (Google Cloud, AWS, Azure, etc.) ## Build Docker Image ### Build local ```bash # Build image docker build -t vnstock-mcp-server:latest . # Hoặc dùng Dockerfile đơn giản hơn docker build -f Dockerfile.simple -t vnstock-mcp-server:latest . ``` ### Test local ```bash # Chạy với docker-compose docker-compose up # Hoặc chạy trực tiếp docker run -p 8000:8000 vnstock-mcp-server:latest # Test health check curl http://localhost:8000/health ``` ## Deploy lên Google Cloud Run ### 1. Setup Google Cloud CLI ```bash # Install gcloud CLI (nếu chưa có) # https://cloud.google.com/sdk/docs/install # Login gcloud auth login # Set project gcloud config set project YOUR_PROJECT_ID ``` ### 2. Build và Push Image ```bash # Set variables export PROJECT_ID=your-project-id export SERVICE_NAME=vnstock-mcp-server export REGION=asia-southeast1 # Build và push image gcloud builds submit --tag gcr.io/$PROJECT_ID/$SERVICE_NAME:latest # Hoặc build local rồi push docker build -t gcr.io/$PROJECT_ID/$SERVICE_NAME:latest . docker push gcr.io/$PROJECT_ID/$SERVICE_NAME:latest ``` ### 3. Deploy lên Cloud Run ```bash # Deploy với các settings cơ bản gcloud run deploy $SERVICE_NAME \ --image gcr.io/$PROJECT_ID/$SERVICE_NAME:latest \ --platform managed \ --region $REGION \ --allow-unauthenticated \ --port 8000 \ --memory 512Mi \ --cpu 1 \ --timeout 300 \ --max-instances 10 \ --set-env-vars TRANSPORT=sse,MOUNT_PATH=/ # Hoặc deploy với file config gcloud run deploy $SERVICE_NAME \ --image gcr.io/$PROJECT_ID/$SERVICE_NAME:latest \ --platform managed \ --region $REGION \ --allow-unauthenticated \ --port 8000 \ --memory 512Mi \ --cpu 1 ``` ### 4. Test Deployment ```bash # Lấy URL của service SERVICE_URL=$(gcloud run services describe $SERVICE_NAME --region $REGION --format 'value(status.url)') # Test curl $SERVICE_URL/health ``` ## Deploy lên AWS ECS/Fargate ### 1. Build và Push Image lên ECR ```bash # Set variables export AWS_REGION=ap-southeast-1 export AWS_ACCOUNT_ID=your-account-id export SERVICE_NAME=vnstock-mcp-server # Login to ECR aws ecr get-login-password --region $AWS_REGION | docker login --username AWS --password-stdin $AWS_ACCOUNT_ID.dkr.ecr.$AWS_REGION.amazonaws.com # Create ECR repository aws ecr create-repository --repository-name $SERVICE_NAME --region $AWS_REGION # Build và push docker build -t $SERVICE_NAME:latest . docker tag $SERVICE_NAME:latest $AWS_ACCOUNT_ID.dkr.ecr.$AWS_REGION.amazonaws.com/$SERVICE_NAME:latest docker push $AWS_ACCOUNT_ID.dkr.ecr.$AWS_REGION.amazonaws.com/$SERVICE_NAME:latest ``` ### 2. Tạo Task Definition Tạo file `task-definition.json`: ```json { "family": "vnstock-mcp-server", "networkMode": "awsvpc", "requiresCompatibilities": ["FARGATE"], "cpu": "512", "memory": "1024", "containerDefinitions": [ { "name": "vnstock-mcp-server", "image": "YOUR_ACCOUNT_ID.dkr.ecr.REGION.amazonaws.com/vnstock-mcp-server:latest", "portMappings": [ { "containerPort": 8000, "protocol": "tcp" } ], "environment": [ { "name": "TRANSPORT", "value": "sse" }, { "name": "MOUNT_PATH", "value": "/" } ], "healthCheck": { "command": [ "CMD-SHELL", "curl -f http://localhost:8000/health || exit 1" ], "interval": 30, "timeout": 5, "retries": 3, "startPeriod": 40 }, "logConfiguration": { "logDriver": "awslogs", "options": { "awslogs-group": "/ecs/vnstock-mcp-server", "awslogs-region": "ap-southeast-1", "awslogs-stream-prefix": "ecs" } } } ] } ``` ### 3. Deploy ```bash # Register task definition aws ecs register-task-definition --cli-input-json file://task-definition.json # Create cluster (nếu chưa có) aws ecs create-cluster --cluster-name vnstock-cluster # Create service aws ecs create-service \ --cluster vnstock-cluster \ --service-name vnstock-mcp-server \ --task-definition vnstock-mcp-server \ --desired-count 1 \ --launch-type FARGATE \ --network-configuration "awsvpcConfiguration={subnets=[subnet-xxx],securityGroups=[sg-xxx],assignPublicIp=ENABLED}" ``` ## Deploy lên Azure Container Instances ### 1. Build và Push Image ```bash # Set variables export AZURE_RESOURCE_GROUP=vnstock-rg export AZURE_REGISTRY=vnstockregistry export SERVICE_NAME=vnstock-mcp-server # Create resource group az group create --name $AZURE_RESOURCE_GROUP --location southeastasia # Create container registry az acr create --resource-group $AZURE_RESOURCE_GROUP --name $AZURE_REGISTRY --sku Basic # Login to ACR az acr login --name $AZURE_REGISTRY # Build và push az acr build --registry $AZURE_REGISTRY --image $SERVICE_NAME:latest . ``` ### 2. Deploy Container Instance ```bash # Deploy az container create \ --resource-group $AZURE_RESOURCE_GROUP \ --name $SERVICE_NAME \ --image $AZURE_REGISTRY.azurecr.io/$SERVICE_NAME:latest \ --cpu 1 \ --memory 1 \ --registry-login-server $AZURE_REGISTRY.azurecr.io \ --ip-address Public \ --ports 8000 \ --environment-variables TRANSPORT=sse MOUNT_PATH=/ ``` ## Deploy với Docker Compose (VPS/VM) ### 1. Setup trên VPS ```bash # Install Docker và Docker Compose curl -fsSL https://get.docker.com -o get-docker.sh sh get-docker.sh # Clone repository git clone <repository-url> cd vnstock-mcp-server ``` ### 2. Deploy ```bash # Chạy với docker-compose production docker-compose -f docker-compose.prod.yml up -d # Xem logs docker-compose -f docker-compose.prod.yml logs -f # Stop docker-compose -f docker-compose.prod.yml down ``` ### 3. Setup Nginx Reverse Proxy (Optional) Tạo file `nginx.conf`: ```nginx events { worker_connections 1024; } http { upstream vnstock { server vnstock-mcp-server:8000; } server { listen 80; server_name your-domain.com; location / { proxy_pass http://vnstock; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; } } } ``` ## Environment Variables - `TRANSPORT`: Transport mode (`stdio`, `sse`, `streamable-http`) - default: `sse` - `MOUNT_PATH`: Mount path cho SSE transport - default: `/` - `PORT`: Port để listen (cho SSE/HTTP) - default: `8000` ## Health Check Server hỗ trợ health check endpoint tại `/health` (nếu transport là SSE/HTTP). ```bash curl http://localhost:8000/health ``` ## Monitoring và Logging ### Cloud Run ```bash # Xem logs gcloud logging read "resource.type=cloud_run_revision AND resource.labels.service_name=vnstock-mcp-server" --limit 50 ``` ### AWS ECS ```bash # Xem logs aws logs tail /ecs/vnstock-mcp-server --follow ``` ### Docker Compose ```bash # Xem logs docker-compose logs -f vnstock-mcp-server ``` ## Troubleshooting ### Container không start ```bash # Check logs docker logs vnstock-mcp-server # Check container status docker ps -a ``` ### Port đã được sử dụng ```bash # Thay đổi port trong docker-compose.yml ports: - "8001:8000" # Map host port 8001 to container port 8000 ``` ### Health check failed - Kiểm tra server có chạy đúng transport mode không - Kiểm tra port có đúng không - Kiểm tra firewall/security groups ## Best Practices 1. **Sử dụng non-root user**: Dockerfile đã config user `appuser` 2. **Health checks**: Đã config health check trong Dockerfile 3. **Resource limits**: Set limits trong docker-compose.prod.yml 4. **Logging**: Sử dụng JSON logging driver 5. **Security**: - Sử dụng private container registry - Enable authentication cho Cloud Run (nếu cần) - Sử dụng secrets management cho sensitive data ## CI/CD Integration ### GitHub Actions Example Tạo `.github/workflows/deploy.yml`: ```yaml name: Deploy to Cloud Run on: push: branches: [main] jobs: deploy: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: Setup Google Cloud uses: google-github-actions/setup-gcloud@v1 with: service_account_key: ${{ secrets.GCP_SA_KEY }} project_id: ${{ secrets.GCP_PROJECT_ID }} - name: Build and Push run: | gcloud builds submit --tag gcr.io/${{ secrets.GCP_PROJECT_ID }}/vnstock-mcp-server:latest - name: Deploy run: | gcloud run deploy vnstock-mcp-server \ --image gcr.io/${{ secrets.GCP_PROJECT_ID }}/vnstock-mcp-server:latest \ --platform managed \ --region asia-southeast1 \ --allow-unauthenticated ``` ## Support Nếu gặp vấn đề, vui lòng mở issue trên repository.

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/ariesanhthu/mcp-server-vietnam-stock-trading'

If you have feedback or need assistance with the MCP directory API, please join our Discord server