简体中文
本指南将带您从头开始在运行 Ubuntu 的 DigitalOcean VPS 上部署 MetaMCP,作为示例。
ssh root@your_server_ip
apt update && apt upgrade -y
apt install -y curl wget git ufw nginx certbot python3-certbot-nginx
ufw allow OpenSSH ufw allow 'Nginx Full' ufw enable
adduser metamcp usermod -aG sudo metamcp # 切换到新用户 su - metamcp
sudo apt update sudo apt install -y apt-transport-https ca-certificates curl gnupg lsb-release
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
sudo apt update sudo apt install -y docker-ce
sudo systemctl status docker
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
sudo
sudo usermod -aG docker $USER
newgrp docker
cd /opt sudo git clone https://github.com/metatool-ai/metamcp.git sudo chown -R $USER:$USER metamcp cd metamcp
cp example.env .env
.env
nano .env
POSTGRES_PASSWORD
BETTER_AUTH_SECRET
openssl rand -hex 32 | base64
# 您的域名 URL(生产环境必须使用 HTTPS) APP_URL=https://yourdomain.com # 数据库 - 从默认值更改密码! DATABASE_URL=postgresql://postgres:YOUR_SECURE_PASSWORD@db:5432/metamcp POSTGRES_PASSWORD=YOUR_SECURE_PASSWORD # 生成安全密钥 - 不要使用示例值! BETTER_AUTH_SECRET=your-super-secret-key-here ENCRYPTION_KEY=your-32-character-encryption-key # 可选:如果需要配置 OIDC # OIDC_CLIENT_ID=your-oidc-client-id # OIDC_CLIENT_SECRET=your-oidc-client-secret # OIDC_DISCOVERY_URL=https://your-provider.com/.well-known/openid-configuration
docker-compose.yml
nano docker-compose.yml
volumes: metamcp_postgres_data: driver: local
# 拉取镜像并启动服务 docker-compose up -d # 检查服务是否正在运行 docker-compose ps # 如果需要查看日志 docker-compose logs -f
sudo nano /etc/nginx/sites-available/metamcp
yourdomain.com
server { listen 80; server_name yourdomain.com; return 301 https://$server_name$request_uri; } server { listen 443 ssl http2; server_name yourdomain.com; # SSL 配置(将由 Certbot 管理) ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem; include /etc/letsencrypt/options-ssl-nginx.conf; ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # 安全标头 add_header X-Frame-Options "SAMEORIGIN" always; add_header X-Content-Type-Options "nosniff" always; add_header X-XSS-Protection "1; mode=block" always; add_header Referrer-Policy "no-referrer-when-downgrade" always; location / { proxy_pass http://localhost:12008; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; # MCP 连接的 SSE 特定优化 proxy_buffering off; proxy_cache off; proxy_read_timeout 86400s; # 长寿命 SSE 连接 24 小时 proxy_send_timeout 86400s; # 用于 SSE 的 HTTP/1.1 和适当的连接处理 proxy_set_header Connection ''; proxy_http_version 1.1; # 更好的 SSE 支持的附加标头 proxy_set_header Cache-Control 'no-cache'; proxy_set_header X-Accel-Buffering 'no'; } # 可选:增加客户端最大正文大小以进行文件上传 client_max_body_size 100M; }
# 启用站点 sudo ln -s /etc/nginx/sites-available/metamcp /etc/nginx/sites-enabled/ # 移除默认站点 sudo rm /etc/nginx/sites-enabled/default # 测试 nginx 配置 sudo nginx -t # 启动 nginx sudo systemctl enable nginx sudo systemctl start nginx
# 创建临时仅 HTTP 配置 sudo nano /etc/nginx/sites-available/metamcp-temp
server { listen 80; server_name yourdomain.com; location / { proxy_pass http://localhost:12008; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } }
sudo ln -sf /etc/nginx/sites-available/metamcp-temp /etc/nginx/sites-enabled/metamcp sudo nginx -t && sudo systemctl reload nginx
sudo certbot --nginx -d yourdomain.com
sudo ln -sf /etc/nginx/sites-available/metamcp /etc/nginx/sites-enabled/metamcp sudo nginx -t && sudo systemctl reload nginx
# 测试自动续期 sudo certbot renew --dry-run # 添加到 crontab 以自动续期 sudo crontab -e
0 12 * * * /usr/bin/certbot renew --quiet