Развёртывание на Ubuntu/Linux
Руководство по установке и настройке MCP серверов на Ubuntu и других Linux дистрибутивах
Linux — рекомендуемая платформа для production развёртывания MCP серверов благодаря стабильности, безопасности и удобству автоматизации.
Подготовка системы
Заголовок раздела «Подготовка системы»Обновление пакетов
Заголовок раздела «Обновление пакетов»sudo apt update && sudo apt upgrade -yУстановка зависимостей
Заголовок раздела «Установка зависимостей»# Базовые инструментыsudo apt install -y curl git build-essential
# Node.js (через NodeSource)curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -sudo apt install -y nodejs
# Python 3.12sudo add-apt-repository -y ppa:deadsnakes/ppasudo apt install -y python3.12 python3.12-venv python3-pip
# uv (менеджер пакетов Python)curl -LsSf https://astral.sh/uv/install.sh | shУстановка MCP серверов
Заголовок раздела «Установка MCP серверов»Через uvx (рекомендуется для Python)
Заголовок раздела «Через uvx (рекомендуется для Python)»# Одноразовый запускuvx mcp-server-fetch
# Или установка для постоянного использованияuv pip install mcp-server-fetchЧерез npm (для Node.js)
Заголовок раздела «Через npm (для Node.js)»# Глобальная установкаnpm install -g @modelcontextprotocol/server-filesystem
# Или через npxnpx -y @modelcontextprotocol/server-filesystemИз исходников
Заголовок раздела «Из исходников»# Клонированиеgit clone https://github.com/user/mcp-server.gitcd mcp-server
# Pythonpython3.12 -m venv .venvsource .venv/bin/activatepip install -r requirements.txt
# Node.jsnpm installnpm run buildSystemd сервис
Заголовок раздела «Systemd сервис»Создание unit файла
Заголовок раздела «Создание unit файла»sudo nano /etc/systemd/system/mcp-server.service[Unit]Description=MCP ServerAfter=network.target
[Service]Type=simpleUser=mcpGroup=mcpWorkingDirectory=/opt/mcp-serverEnvironment=PATH=/opt/mcp-server/.venv/bin:/usr/local/bin:/usr/binExecStart=/opt/mcp-server/.venv/bin/python -m src.serverRestart=alwaysRestartSec=5
# БезопасностьNoNewPrivileges=yesProtectSystem=strictProtectHome=yesReadWritePaths=/opt/mcp-server/dataPrivateTmp=yes
[Install]WantedBy=multi-user.targetУправление сервисом
Заголовок раздела «Управление сервисом»# Перезагрузка systemdsudo systemctl daemon-reload
# Запускsudo systemctl start mcp-server
# Автозапуск при загрузкеsudo systemctl enable mcp-server
# Статусsudo systemctl status mcp-server
# Логиjournalctl -u mcp-server -fСоздание пользователя
Заголовок раздела «Создание пользователя»# Создание системного пользователяsudo useradd --system --home-dir /opt/mcp-server --shell /bin/false mcp
# Права на директориюsudo mkdir -p /opt/mcp-serversudo chown -R mcp:mcp /opt/mcp-serverКонфигурация Claude Desktop
Заголовок раздела «Конфигурация Claude Desktop»Файл конфигурации:
~/.config/claude/claude_desktop_config.jsonПримеры конфигурации
Заголовок раздела «Примеры конфигурации»Python сервер
Заголовок раздела «Python сервер»{ "mcpServers": { "my-server": { "command": "/opt/mcp-server/.venv/bin/python", "args": ["-m", "src.server"], "cwd": "/opt/mcp-server", "env": { "DATABASE_URL": "postgresql://localhost/mydb" } } }}Node.js сервер
Заголовок раздела «Node.js сервер»{ "mcpServers": { "node-server": { "command": "node", "args": ["/opt/mcp-server/dist/index.js"] } }}{ "mcpServers": { "uvx-server": { "command": "uvx", "args": ["mcp-server-fetch"] } }}Firewall (ufw)
Заголовок раздела «Firewall (ufw)»# Для HTTP/SSE транспортаsudo ufw allow 3000/tcp comment 'MCP Server'
# Проверкаsudo ufw statusNginx reverse proxy
Заголовок раздела «Nginx reverse proxy»Для HTTP/SSE транспорта:
server { listen 443 ssl http2; server_name mcp.example.com;
ssl_certificate /etc/letsencrypt/live/mcp.example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/mcp.example.com/privkey.pem;
location / { proxy_pass http://127.0.0.1:3000; 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;
# SSE настройки proxy_buffering off; proxy_read_timeout 86400s; proxy_send_timeout 86400s; }
# Health check location /health { proxy_pass http://127.0.0.1:3000/health; }}# Активацияsudo ln -s /etc/nginx/sites-available/mcp-server /etc/nginx/sites-enabled/sudo nginx -tsudo systemctl reload nginxМониторинг
Заголовок раздела «Мониторинг»Prometheus metrics
Заголовок раздела «Prometheus metrics»# Установка node_exportersudo apt install prometheus-node-exporterЛогирование
Заголовок раздела «Логирование»# Настройка rsyslogsudo nano /etc/rsyslog.d/mcp-server.confif $programname == 'mcp-server' then /var/log/mcp-server.log& stopLogrotate
Заголовок раздела «Logrotate»sudo nano /etc/logrotate.d/mcp-server/var/log/mcp-server.log { daily rotate 7 compress delaycompress missingok notifempty create 640 mcp mcp postrotate systemctl reload rsyslog > /dev/null 2>&1 || true endscript}Автоматизация с Ansible
Заголовок раздела «Автоматизация с Ansible»---- hosts: mcp_servers become: yes tasks: - name: Create mcp user user: name: mcp system: yes home: /opt/mcp-server shell: /bin/false
- name: Clone repository git: repo: https://github.com/user/mcp-server.git dest: /opt/mcp-server version: main
- name: Install Python dependencies pip: requirements: /opt/mcp-server/requirements.txt virtualenv: /opt/mcp-server/.venv virtualenv_python: python3.12
- name: Copy systemd service template: src: mcp-server.service.j2 dest: /etc/systemd/system/mcp-server.service notify: restart mcp-server
- name: Enable and start service systemd: name: mcp-server enabled: yes state: started
handlers: - name: restart mcp-server systemd: name: mcp-server state: restarted daemon_reload: yesSecurity Hardening
Заголовок раздела «Security Hardening»Эшелонированная защита (Defense in Depth)
Заголовок раздела «Эшелонированная защита (Defense in Depth)»Применяйте несколько уровней защиты:
- Пользователь: Отдельный системный пользователь без shell
- Файловая система: Минимальные права, read-only где возможно
- Сеть: Firewall, только необходимые порты
- Процесс: systemd ограничения, AppArmor/SELinux
- Мониторинг: Fail2ban, логирование, алерты
# Расширенные ограничения systemd[Service]# Изоляция сетиPrivateNetwork=noRestrictAddressFamilies=AF_UNIX AF_INET AF_INET6
# Изоляция файловой системыProtectSystem=strictProtectHome=yesPrivateTmp=yesPrivateDevices=yesProtectKernelTunables=yesProtectKernelModules=yesProtectControlGroups=yes
# Ограничение capabilitiesCapabilityBoundingSet=CAP_NET_BIND_SERVICEAmbientCapabilities=
# Memory и процессыMemoryDenyWriteExecute=yesLockPersonality=yesRestrictRealtime=yesRestrictSUIDSGID=yesAppArmor профиль
Заголовок раздела «AppArmor профиль»sudo nano /etc/apparmor.d/opt.mcp-server#include <tunables/global>
/opt/mcp-server/.venv/bin/python { #include <abstractions/base> #include <abstractions/python>
/opt/mcp-server/** r, /opt/mcp-server/data/** rw, /tmp/** rw,
deny /etc/passwd r, deny /etc/shadow r,}Fail2ban
Заголовок раздела «Fail2ban»sudo nano /etc/fail2ban/jail.d/mcp-server.conf[mcp-server]enabled = trueport = 3000filter = mcp-serverlogpath = /var/log/mcp-server.logmaxretry = 5bantime = 3600