Налаштувати віддалене середовище розробки у VS Code через Remote SSH і Docker на Linux: створення контейнера, синхронізація та налагодження

Налаштувати віддалене середовище розробки у VS Code через Remote SSH і Docker на Linux: створення контейнера, синхронізація та налагодження
Категорії: Розробка та програмування

Хочете працювати з кодом на віддаленому сервері так само зручно, як локально? Давайте піднімемо віддалене середовище розробки у VS Code через Remote SSH і Docker на Linux. Ви отримаєте однакове середовище для всієї команди, швидкий доступ до ресурсів сервера та зручне налагодження прямо з редактора. Поїхали! 🚀

Що підготуйте заздалегідь

Перш ніж почати, переконайтеся, що у вас є:

  • Linux-машина (віддалений сервер чи VPS) з доступом по SSH підключення.
  • Встановлений Docker Engine на віддаленому сервері (Docker на Linux), а ваш користувач входить до групи docker.
  • Локально: VS Code та розширення Remote Development (Remote - SSH, Dev Containers).
  • SSH-ключі для входу без пароля (зручно та безпечно).

Основний How-to: Remote SSH + Dev Containers

1) Налаштувати Docker і SSH на віддаленому Linux

Підключіться по термінал Linux до сервера та встановіть Docker (Ubuntu/Debian-приклад):

sudo apt update
sudo apt install -y docker.io docker-buildx-plugin docker-compose-plugin
sudo usermod -aG docker $USER
newgrp docker
# Перевірка
docker run --rm hello-world

Переконайтеся, що SSH-сервер працює та порт 22 відкритий. Якщо у вас UFW:

sudo ufw allow OpenSSH
sudo ufw enable

2) Згенерувати SSH-ключ і додати на сервер

ssh-keygen -t ed25519 -C "you@example.com"
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@your-server

3) Підключитися у VS Code через Remote - SSH

У VS Code: Ctrl+Shift+P → "Remote-SSH: Connect to Host..." → додайте user@your-server і під'єднайтесь. Після підключення відкрийте бажану папку з кодом на сервері.

4) Додати Dev Container до проєкту

Створіть у корені проєкту каталог .devcontainer з двома файлами: devcontainer.json і Dockerfile.

Приклад Dockerfile (Python 3.11):

FROM python:3.11-slim
WORKDIR /workspace
# Системні пакети за потреби
RUN apt-get update \
    && apt-get install -y --no-install-recommends git curl build-essential \
    && rm -rf /var/lib/apt/lists/*
COPY requirements.txt /tmp/requirements.txt
RUN pip install --no-cache-dir -r /tmp/requirements.txt || true
CMD ["sleep", "infinity"]

Приклад devcontainer.json:

{
  "name": "my-remote-dev",
  "build": {
    "dockerfile": "Dockerfile",
    "context": ".."
  },
  "workspaceFolder": "/workspace",
  "mounts": [
    "source=${localWorkspaceFolder},target=/workspace,type=bind,consistency=cached"
  ],
  "remoteUser": "root",
  "postCreateCommand": "pip install -r /workspace/requirements.txt || true",
  "forwardPorts": [8000],
  "customizations": {
    "vscode": {
      "extensions": [
        "ms-python.python",
        "ms-python.debugpy",
        "ms-azuretools.vscode-docker"
      ]
    }
  }
}

Тепер у VS Code: Ctrl+Shift+P → "Dev Containers: Reopen in Container". Редактор побудує образ і відкриє ваш проєкт усередині контейнера на віддаленому сервері. Це і є справжня розробка на Linux з однаковим середовищем для всіх.

5) Запуск і налагодження

Приклад конфігурації налагодження для Python (файл .vscode/launch.json):

{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "Python: Run app",
      "type": "python",
      "request": "launch",
      "program": "${workspaceFolder}/app.py",
      "console": "integratedTerminal",
      "justMyCode": true
    }
  ]
}

Якщо ваш сервіс слухає порт 8000 у контейнері, VS Code автоматично зробить порт-форвардинг (див. forwardPorts у devcontainer.json). Відкрийте локально http://localhost:8000 — отримаєте доступ до сервісу, який реально біжить на віддаленому сервері всередині контейнера.

Альтернативні способи

Варіант A: Docker context через SSH

Можна керувати Docker на сервері прямо з локального комп'ютера, створивши контекст:

docker context create remote --docker "host=ssh://user@your-server"
docker context use remote
# Тепер будь-яка команда піде на віддалений Docker
docker ps

Потім використовуйте "Dev Containers: Clone Repository in Container Volume" або локально запускайте docker compose у цьому контексті, а у VS Code під'єднуйтесь "Dev Containers: Attach to Running Container".

Варіант B: docker-compose на сервері + Attach

Запустіть контейнери на сервері вручну, а в VS Code (через Remote-SSH) виконайте "Dev Containers: Attach to Running Container", щоб приєднатися до потрібного контейнера.

GUI-спосіб у VS Code (без ручного редагування файлів)

  1. Remote-SSH: підключіться до сервера і відкрийте папку з проєктом.
  2. Ctrl+Shift+P → "Dev Containers: Add Development Container Configuration Files..." → оберіть шаблон (Python, Node.js, Go тощо).
  3. Внесіть мінімальні зміни (порти, залежності) у згенерований devcontainer.json.
  4. Ctrl+Shift+P → "Dev Containers: Reopen in Container" — середовище збереться автоматично.

FAQ

VS Code не підключається по SSH. Що робити?

Перевірте, що ви можете зайти в термінал Linux локально: ssh user@your-server. Якщо так — видаліть старі ключі з ~/.ssh/known_hosts, додайте правильний ключ сервера. Переконайтеся, що SSH-порт не змінено або вкажіть його: user@your-server:2222.

Отримую "permission denied" при роботі з Docker

Додайте користувача до групи docker на сервері та перелогіньтесь:

sudo usermod -aG docker $USER
newgrp docker

Dev Container не збирається (помилки apt/pip)

Додайте apt-get update перед встановленням пакетів у Dockerfile, перевірте проксі/мережу та вільне місце на диску. За потреби вкажіть mirror або використайте легший базовий образ.

Порт недоступний локально

Переконайтеся, що сервіс слухає 0.0.0.0 у контейнері й порт додано до forwardPorts. На сервері відкрийте порт у брандмауері (firewall Linux), якщо підключаєтесь напряму без форвардингу VS Code.

Як тримати секрети в безпеці?

Не кладіть секрети у devcontainer.json. Використовуйте .env (у .gitignore), SSH-агент, GitHub Codespaces secrets або змінні середовища на сервері.

Чи можна запускати GUI-програми з контейнера?

Можна через X11/Wayland-forwarding, але це ускладнює конфіг і безпеку. Для більшості задач серверної розробки краще CLI + веб-інтерфейси.

Порада від Kernelka

Версіонуйте .devcontainer разом із кодом — так вся команда отримає однакові інструменти та версії залежностей. А ще налаштуйте тестовий docker compose із сервісами (БД, кеш), щоб локально й віддалено вони збиралися однаково. Маленька дисципліна — велика продуктивність 🙂

Підсумок

  • Remote-SSH + Dev Containers дає стабільне віддалене середовище на Linux.
  • Docker-контейнер фіксує залежності й робить онбординг швидким.
  • Порт-форвардинг у VS Code спрощує налагодження сервісів.
  • Альтернативи: docker context по SSH або Attach до вже працюючих контейнерів.
  • Стежте за правами Docker, мережею та безпечним зберіганням секретів.

Готово! Тепер ви можете комфортно кодити віддалено, використовуючи силу контейнерів та можливості VS Code. 🧡

Прокоментувати

На сайті відображається лише твоє ім'я та коментар. Електронна пошта використовується виключно для зв'язку з тобою за потреби.