Хочете працювати з кодом на віддаленому сервері так само зручно, як локально? Давайте піднімемо віддалене середовище розробки у 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 (без ручного редагування файлів)
- Remote-SSH: підключіться до сервера і відкрийте папку з проєктом.
- Ctrl+Shift+P → "Dev Containers: Add Development Container Configuration Files..." → оберіть шаблон (Python, Node.js, Go тощо).
- Внесіть мінімальні зміни (порти, залежності) у згенерований
devcontainer.json. - 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. 🧡