Ten praktyczny lab przeprowadzi Cię przez konfigurację kompletnego środowiska deweloperskiego do tworzenia serwerów MCP z integracją PostgreSQL. Skonfigurujesz wszystkie niezbędne narzędzia, wdrożysz zasoby Azure i zweryfikujesz konfigurację przed przystąpieniem do implementacji.
Odpowiednie środowisko deweloperskie jest kluczowe dla sukcesu w tworzeniu serwerów MCP. Ten lab dostarcza szczegółowych instrukcji dotyczących konfiguracji Dockera, usług Azure, narzędzi deweloperskich oraz weryfikacji, czy wszystko działa poprawnie razem.
Po ukończeniu tego labu będziesz mieć w pełni funkcjonalne środowisko deweloperskie gotowe do budowy serwera MCP dla Zava Retail.
Po ukończeniu tego labu będziesz w stanie:
- Zainstalować i skonfigurować wszystkie wymagane narzędzia deweloperskie
- Wdrożyć zasoby Azure potrzebne dla serwera MCP
- Skonfigurować kontenery Dockera dla PostgreSQL i serwera MCP
- Zweryfikować konfigurację środowiska za pomocą testowych połączeń
- Rozwiązywać problemy związane z konfiguracją i typowymi błędami
- Zrozumieć przepływ pracy deweloperskiej i strukturę plików
Przed rozpoczęciem upewnij się, że masz:
- Podstawowa znajomość korzystania z wiersza poleceń (Windows Command Prompt/PowerShell)
- Zrozumienie zmiennych środowiskowych
- Znajomość systemu kontroli wersji Git
- Podstawowe pojęcia dotyczące Dockera (kontenery, obrazy, woluminy)
- System operacyjny: Windows 10/11, macOS lub Linux
- RAM: Minimum 8GB (zalecane 16GB)
- Pamięć: Co najmniej 10GB wolnego miejsca
- Sieć: Połączenie internetowe do pobierania i wdrożenia Azure
- Subskrypcja Azure: Wystarczy darmowy poziom
- Konto GitHub: Do dostępu do repozytorium
- Konto Docker Hub: (Opcjonalnie) Do publikowania niestandardowych obrazów
Docker zapewnia środowisko konteneryzowane dla naszej konfiguracji deweloperskiej.
-
Pobierz Docker Desktop:
# Visit https://desktop.docker.com/win/stable/Docker%20Desktop%20Installer.exe # Or use Windows Package Manager winget install Docker.DockerDesktop
-
Zainstaluj i skonfiguruj:
- Uruchom instalator jako Administrator
- Włącz integrację WSL 2, gdy zostaniesz o to poproszony
- Uruchom ponownie komputer po zakończeniu instalacji
-
Zweryfikuj instalację:
docker --version docker-compose --version
-
Pobierz i zainstaluj:
# Download from https://desktop.docker.com/mac/stable/Docker.dmg # Or use Homebrew brew install --cask docker
-
Uruchom Docker Desktop:
- Otwórz Docker Desktop z folderu Aplikacje
- Ukończ początkowy kreator konfiguracji
-
Zweryfikuj instalację:
docker --version docker-compose --version
-
Zainstaluj Docker Engine:
# Ubuntu/Debian curl -fsSL https://get.docker.com -o get-docker.sh sudo sh get-docker.sh sudo usermod -aG docker $USER # Log out and back in for group changes to take effect
-
Zainstaluj Docker Compose:
sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose sudo chmod +x /usr/local/bin/docker-compose
Azure CLI umożliwia wdrażanie i zarządzanie zasobami Azure.
# Using Windows Package Manager
winget install Microsoft.AzureCLI
# Or download MSI from: https://aka.ms/installazurecliwindows# Using Homebrew
brew install azure-cli
# Or using installer
curl -L https://aka.ms/InstallAzureCli | bash# Ubuntu/Debian
curl -sL https://aka.ms/InstallAzureCLIDeb | sudo bash
# RHEL/CentOS
sudo rpm --import https://packages.microsoft.com/keys/microsoft.asc
sudo dnf install azure-cli# Check installation
az version
# Login to Azure
az login
# Set default subscription (if you have multiple)
az account list --output table
az account set --subscription "Your-Subscription-Name"Git jest wymagany do klonowania repozytorium i kontroli wersji.
# Using Windows Package Manager
winget install Git.Git
# Or download from: https://git-scm.com/download/win# Git is usually pre-installed, but you can update via Homebrew
brew install git# Ubuntu/Debian
sudo apt update && sudo apt install git
# RHEL/CentOS
sudo dnf install gitVisual Studio Code zapewnia zintegrowane środowisko deweloperskie z obsługą MCP.
# Windows
winget install Microsoft.VisualStudioCode
# macOS
brew install --cask visual-studio-code
# Linux (Ubuntu/Debian)
sudo snap install code --classicZainstaluj te rozszerzenia VS Code:
# Install via command line
code --install-extension ms-python.python
code --install-extension ms-vscode.vscode-json
code --install-extension ms-azuretools.vscode-docker
code --install-extension ms-vscode.azure-accountLub zainstaluj przez VS Code:
- Otwórz VS Code
- Przejdź do rozszerzeń (Ctrl+Shift+X)
- Zainstaluj:
- Python (Microsoft)
- Docker (Microsoft)
- Azure Account (Microsoft)
- JSON (Microsoft)
Python 3.8+ jest wymagany do rozwoju serwera MCP.
# Using Windows Package Manager
winget install Python.Python.3.11
# Or download from: https://www.python.org/downloads/# Using Homebrew
brew install python@3.11# Ubuntu/Debian
sudo apt update && sudo apt install python3.11 python3.11-pip python3.11-venv
# RHEL/CentOS
sudo dnf install python3.11 python3.11-pippython --version # Should show Python 3.11.x
pip --version # Should show pip version# Clone the main repository
git clone https://github.com/microsoft/MCP-Server-and-PostgreSQL-Sample-Retail.git
# Navigate to the project directory
cd MCP-Server-and-PostgreSQL-Sample-Retail
# Verify repository structure
ls -la# Create virtual environment
python -m venv mcp-env
# Activate virtual environment
# Windows
mcp-env\Scripts\activate
# macOS/Linux
source mcp-env/bin/activate
# Upgrade pip
python -m pip install --upgrade pip# Install development dependencies
pip install -r requirements.lock.txt
# Verify key packages
pip list | grep fastmcp
pip list | grep asyncpg
pip list | grep azureNasz serwer MCP wymaga następujących zasobów Azure:
| Zasób | Cel | Szacowany koszt |
|---|---|---|
| Azure AI Foundry | Hosting i zarządzanie modelami AI | $10-50/miesiąc |
| OpenAI Deployment | Model osadzania tekstu (text-embedding-3-small) | $5-20/miesiąc |
| Application Insights | Monitorowanie i telemetria | $5-15/miesiąc |
| Resource Group | Organizacja zasobów | Bezpłatne |
# Navigate to infrastructure directory
cd infra
# Windows - PowerShell
./deploy.ps1
# macOS/Linux - Bash
./deploy.shSkrypt wdrożeniowy:
- Utworzy unikalną grupę zasobów
- Wdroży zasoby Azure AI Foundry
- Wdroży model text-embedding-3-small
- Skonfiguruje Application Insights
- Utworzy głównego użytkownika usługi do uwierzytelnienia
- Wygeneruje plik
.envz konfiguracją
Jeśli preferujesz ręczną kontrolę lub skrypt automatyczny zawiedzie:
# Set variables
RESOURCE_GROUP="rg-zava-mcp-$(date +%s)"
LOCATION="westus2"
AI_PROJECT_NAME="zava-ai-project"
# Create resource group
az group create --name $RESOURCE_GROUP --location $LOCATION
# Deploy main template
az deployment group create \
--resource-group $RESOURCE_GROUP \
--template-file main.bicep \
--parameters location=$LOCATION \
--parameters resourcePrefix="zava-mcp"# Check resource group
az group show --name $RESOURCE_GROUP --output table
# List deployed resources
az resource list --resource-group $RESOURCE_GROUP --output table
# Test AI service
az cognitiveservices account show \
--name "your-ai-service-name" \
--resource-group $RESOURCE_GROUPPo wdrożeniu powinieneś mieć plik .env. Zweryfikuj, czy zawiera:
# .env file contents
PROJECT_ENDPOINT=https://your-project.cognitiveservices.azure.com/
AZURE_OPENAI_ENDPOINT=https://your-openai.openai.azure.com/
EMBEDDING_MODEL_DEPLOYMENT_NAME=text-embedding-3-small
AZURE_CLIENT_ID=your-client-id
AZURE_CLIENT_SECRET=your-client-secret
AZURE_TENANT_ID=your-tenant-id
APPLICATIONINSIGHTS_CONNECTION_STRING=InstrumentationKey=your-key;...
# Database configuration (for development)
POSTGRES_HOST=localhost
POSTGRES_PORT=5432
POSTGRES_DB=zava
POSTGRES_USER=postgres
POSTGRES_PASSWORD=your-secure-passwordNasze środowisko deweloperskie korzysta z Docker Compose:
# docker-compose.yml overview
version: '3.8'
services:
postgres:
image: pgvector/pgvector:pg17
environment:
POSTGRES_DB: zava
POSTGRES_USER: postgres
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-secure_password}
ports:
- "5432:5432"
volumes:
- ./data:/backup_data:ro
- ./docker-init:/docker-entrypoint-initdb.d:ro
mcp_server:
build: .
depends_on:
postgres:
condition: service_healthy
ports:
- "8000:8000"
env_file:
- .env# Ensure you're in the project root directory
cd /path/to/MCP-Server-and-PostgreSQL-Sample-Retail
# Start the services
docker-compose up -d
# Check service status
docker-compose ps
# View logs
docker-compose logs -f# Connect to PostgreSQL container
docker-compose exec postgres psql -U postgres -d zava
# Check database structure
\dt retail.*
# Verify sample data
SELECT COUNT(*) FROM retail.stores;
SELECT COUNT(*) FROM retail.products;
SELECT COUNT(*) FROM retail.orders;
# Exit PostgreSQL
\q# Check MCP server health
curl http://localhost:8000/health
# Test basic MCP endpoint
curl -X POST http://localhost:8000/mcp \
-H "Content-Type: application/json" \
-H "x-rls-user-id: 00000000-0000-0000-0000-000000000000" \
-d '{"method": "tools/list", "params": {}}'Utwórz konfigurację MCP w VS Code:
// .vscode/mcp.json
{
"servers": {
"zava-sales-analysis-headoffice": {
"url": "http://127.0.0.1:8000/mcp",
"type": "http",
"headers": {"x-rls-user-id": "00000000-0000-0000-0000-000000000000"}
},
"zava-sales-analysis-seattle": {
"url": "http://127.0.0.1:8000/mcp",
"type": "http",
"headers": {"x-rls-user-id": "f47ac10b-58cc-4372-a567-0e02b2c3d479"}
},
"zava-sales-analysis-redmond": {
"url": "http://127.0.0.1:8000/mcp",
"type": "http",
"headers": {"x-rls-user-id": "e7f8a9b0-c1d2-3e4f-5678-90abcdef1234"}
}
},
"inputs": []
}// .vscode/settings.json
{
"python.defaultInterpreterPath": "./mcp-env/bin/python",
"python.linting.enabled": true,
"python.linting.pylintEnabled": true,
"python.formatting.provider": "black",
"python.testing.pytestEnabled": true,
"python.testing.pytestArgs": ["tests"],
"files.exclude": {
"**/__pycache__": true,
"**/.pytest_cache": true,
"**/mcp-env": true
}
}-
Otwórz projekt w VS Code:
code . -
Otwórz AI Chat:
- Naciśnij
Ctrl+Shift+P(Windows/Linux) lubCmd+Shift+P(macOS) - Wpisz "AI Chat" i wybierz "AI Chat: Open Chat"
- Naciśnij
-
Testowanie połączenia z serwerem MCP:
- W AI Chat wpisz
#zavai wybierz jeden z skonfigurowanych serwerów - Zapytaj: "Jakie tabele są dostępne w bazie danych?"
- Powinieneś otrzymać odpowiedź z listą tabel bazy danych detalicznej
- W AI Chat wpisz
Uruchom ten skrypt walidacyjny, aby zweryfikować konfigurację:
# Create validation script
cat > validate_setup.py << 'EOF'
#!/usr/bin/env python3
"""
Environment validation script for MCP Server setup.
"""
import asyncio
import os
import sys
import subprocess
import requests
import asyncpg
from azure.identity import DefaultAzureCredential
from azure.ai.projects import AIProjectClient
async def validate_environment():
"""Comprehensive environment validation."""
results = {}
# Check Python version
python_version = sys.version_info
results['python'] = {
'status': 'pass' if python_version >= (3, 8) else 'fail',
'version': f"{python_version.major}.{python_version.minor}.{python_version.micro}",
'required': '3.8+'
}
# Check required packages
required_packages = ['fastmcp', 'asyncpg', 'azure-ai-projects']
for package in required_packages:
try:
__import__(package)
results[f'package_{package}'] = {'status': 'pass'}
except ImportError:
results[f'package_{package}'] = {'status': 'fail', 'error': 'Not installed'}
# Check Docker
try:
result = subprocess.run(['docker', '--version'], capture_output=True, text=True)
results['docker'] = {
'status': 'pass' if result.returncode == 0 else 'fail',
'version': result.stdout.strip() if result.returncode == 0 else 'Not available'
}
except FileNotFoundError:
results['docker'] = {'status': 'fail', 'error': 'Docker not found'}
# Check Azure CLI
try:
result = subprocess.run(['az', '--version'], capture_output=True, text=True)
results['azure_cli'] = {
'status': 'pass' if result.returncode == 0 else 'fail',
'version': result.stdout.split('\n')[0] if result.returncode == 0 else 'Not available'
}
except FileNotFoundError:
results['azure_cli'] = {'status': 'fail', 'error': 'Azure CLI not found'}
# Check environment variables
required_env_vars = [
'PROJECT_ENDPOINT',
'AZURE_OPENAI_ENDPOINT',
'EMBEDDING_MODEL_DEPLOYMENT_NAME',
'AZURE_CLIENT_ID',
'AZURE_CLIENT_SECRET',
'AZURE_TENANT_ID'
]
for var in required_env_vars:
value = os.getenv(var)
results[f'env_{var}'] = {
'status': 'pass' if value else 'fail',
'value': '***' if value and 'SECRET' in var else value
}
# Check database connection
try:
conn = await asyncpg.connect(
host=os.getenv('POSTGRES_HOST', 'localhost'),
port=int(os.getenv('POSTGRES_PORT', 5432)),
database=os.getenv('POSTGRES_DB', 'zava'),
user=os.getenv('POSTGRES_USER', 'postgres'),
password=os.getenv('POSTGRES_PASSWORD', 'secure_password')
)
# Test query
result = await conn.fetchval('SELECT COUNT(*) FROM retail.stores')
await conn.close()
results['database'] = {
'status': 'pass',
'store_count': result
}
except Exception as e:
results['database'] = {
'status': 'fail',
'error': str(e)
}
# Check MCP server
try:
response = requests.get('http://localhost:8000/health', timeout=5)
results['mcp_server'] = {
'status': 'pass' if response.status_code == 200 else 'fail',
'response': response.json() if response.status_code == 200 else response.text
}
except Exception as e:
results['mcp_server'] = {
'status': 'fail',
'error': str(e)
}
# Check Azure AI service
try:
credential = DefaultAzureCredential()
project_client = AIProjectClient(
endpoint=os.getenv('PROJECT_ENDPOINT'),
credential=credential
)
# This will fail if credentials are invalid
results['azure_ai'] = {'status': 'pass'}
except Exception as e:
results['azure_ai'] = {
'status': 'fail',
'error': str(e)
}
return results
def print_results(results):
"""Print formatted validation results."""
print("🔍 Environment Validation Results\n")
print("=" * 50)
passed = 0
failed = 0
for component, result in results.items():
status = result.get('status', 'unknown')
if status == 'pass':
print(f"✅ {component}: PASS")
passed += 1
else:
print(f"❌ {component}: FAIL")
if 'error' in result:
print(f" Error: {result['error']}")
failed += 1
print("\n" + "=" * 50)
print(f"Summary: {passed} passed, {failed} failed")
if failed > 0:
print("\n❗ Please fix the failed components before proceeding.")
return False
else:
print("\n🎉 All validations passed! Your environment is ready.")
return True
if __name__ == "__main__":
asyncio.run(main())
async def main():
results = await validate_environment()
success = print_results(results)
sys.exit(0 if success else 1)
EOF
# Run validation
python validate_setup.py✅ Podstawowe narzędzia
- Zainstalowany i uruchomiony Docker w wersji 20.10+
- Zainstalowany i uwierzytelniony Azure CLI w wersji 2.40+
- Zainstalowany Python 3.8+ z pip
- Zainstalowany Git w wersji 2.30+
- VS Code z wymaganymi rozszerzeniami
✅ Zasoby Azure
- Utworzona grupa zasobów
- Wdrożony projekt AI Foundry
- Wdrożony model text-embedding-3-small
- Skonfigurowane Application Insights
- Utworzony główny użytkownik usługi z odpowiednimi uprawnieniami
✅ Konfiguracja środowiska
- Utworzony plik
.envze wszystkimi wymaganymi zmiennymi - Działające poświadczenia Azure (test z
az account show) - Działający i dostępny kontener PostgreSQL
- Załadowane dane przykładowe w bazie danych
✅ Integracja VS Code
- Skonfigurowany plik
.vscode/mcp.json - Interpreter Python ustawiony na wirtualne środowisko
- Serwery MCP widoczne w AI Chat
- Możliwość wykonywania zapytań testowych przez AI Chat
Problem: Kontenery Dockera nie uruchamiają się
# Check Docker service status
docker info
# Check available resources
docker system df
# Clean up if needed
docker system prune -f
# Restart Docker Desktop (Windows/macOS)
# Or restart Docker service (Linux)
sudo systemctl restart dockerProblem: Połączenie z PostgreSQL nie powiodło się
# Check container logs
docker-compose logs postgres
# Verify container is healthy
docker-compose ps
# Test direct connection
docker-compose exec postgres psql -U postgres -d zava -c "SELECT 1;"Problem: Wdrożenie Azure nie powiodło się
# Check Azure CLI authentication
az account show
# Verify subscription permissions
az role assignment list --assignee $(az account show --query user.name -o tsv)
# Check resource provider registration
az provider register --namespace Microsoft.CognitiveServices
az provider register --namespace Microsoft.InsightsProblem: Uwierzytelnienie usługi AI nie powiodło się
# Test service principal
az login --service-principal \
--username $AZURE_CLIENT_ID \
--password $AZURE_CLIENT_SECRET \
--tenant $AZURE_TENANT_ID
# Verify AI service deployment
az cognitiveservices account list --query "[].{Name:name,Kind:kind,Location:location}"Problem: Instalacja pakietów nie powiodła się
# Upgrade pip and setuptools
python -m pip install --upgrade pip setuptools wheel
# Clear pip cache
pip cache purge
# Install packages one by one to identify issues
pip install fastmcp
pip install asyncpg
pip install azure-ai-projectsProblem: VS Code nie może znaleźć interpretera Python
# Show Python interpreter paths
which python # macOS/Linux
where python # Windows
# Activate virtual environment first
source mcp-env/bin/activate # macOS/Linux
mcp-env\Scripts\activate # Windows
# Then open VS Code
code .Po ukończeniu tego labu powinieneś mieć:
✅ Kompletne środowisko deweloperskie: Wszystkie narzędzia zainstalowane i skonfigurowane
✅ Wdrożone zasoby Azure: Usługi AI i infrastruktura wspierająca
✅ Działające środowisko Docker: Kontenery PostgreSQL i serwera MCP
✅ Integracja VS Code: Skonfigurowane i dostępne serwery MCP
✅ Zweryfikowaną konfigurację: Wszystkie komponenty przetestowane i działające razem
✅ Wiedzę o rozwiązywaniu problemów: Typowe problemy i ich rozwiązania
Po przygotowaniu środowiska przejdź do Lab 04: Projektowanie bazy danych i schemat, aby:
- Zgłębić szczegóły schematu bazy danych detalicznej
- Zrozumieć modelowanie danych dla wielu najemców
- Poznać implementację zabezpieczeń na poziomie wierszy
- Pracować z przykładowymi danymi detalicznymi
- Dokumentacja Dockera - Kompletny przewodnik po Dockerze
- Referencje Azure CLI - Polecenia Azure CLI
- Dokumentacja VS Code - Konfiguracja edytora i rozszerzenia
- Dokumentacja Azure AI Foundry - Konfiguracja usług AI
- Usługa Azure OpenAI - Wdrożenie modeli AI
- Application Insights - Konfiguracja monitorowania
- Wirtualne środowiska Python - Zarządzanie środowiskami
- Dokumentacja AsyncIO - Wzorce programowania asynchronicznego
- Dokumentacja FastAPI - Wzorce frameworka webowego
Dalej: Gotowe środowisko? Kontynuuj z Lab 04: Projektowanie bazy danych i schemat
Zastrzeżenie:
Ten dokument został przetłumaczony za pomocą usługi tłumaczenia AI Co-op Translator. Chociaż staramy się zapewnić dokładność, prosimy pamiętać, że automatyczne tłumaczenia mogą zawierać błędy lub nieścisłości. Oryginalny dokument w jego języku źródłowym powinien być uznawany za autorytatywne źródło. W przypadku informacji krytycznych zaleca się skorzystanie z profesjonalnego tłumaczenia przez człowieka. Nie ponosimy odpowiedzialności za jakiekolwiek nieporozumienia lub błędne interpretacje wynikające z użycia tego tłumaczenia.