Linux && Windows
- Установка веб-серверов Nginx и Apache.
- Windows Ubuntu WSL
- Установка Ubuntu через WSL под Windows.
- Создание пользователя - администратора
- Что такое WSL
- Настройка Git в WSL-Ubuntu && Windows
- Установка MinIO
- Настройка VPN через туннель к VPS
- Работа с MS Vs Code
- Настройка SSH для VPS (Windows && Linux-WPS)
Установка веб-серверов Nginx и Apache.
Итоговая архитектура для разработки предполагается такая:
Internet
↓
┌─────────────────────┐
│ Nginx │ ← порт 8081 (вход)
└─────────────────────┘
↓ ↓
WordPress .NET apps (опционально)
(Apache) (Kestrel)
↓
MariaDB
PostgreSQL
🥇 Роли компонентов
🌐 Nginx (front door)
- SSL (HTTPS)
- маршрутизация
- защита
- статика
🟦 Apache (только WordPress)
Apache HTTP Server
- PHP обработка
- WordPress
- .htaccess
🚀 ШАГ 1 — установка пакетов
В Ubuntu:
sudo apt install -y nginx
sudo apt install -y apache2
sudo apt install -y mariadb-server
sudo apt install -y postgresql
⚙️ ШАГ 2 — порты (ВАЖНО)
Apache уводим с 80:
Примерное содержимое:
Listen 8082
<IfModule ssl_module>
Listen 443
</IfModule>
<IfModule mod_gnutls.c>
Listen 443
</IfModule>
И в site config:
Примерное содержимое с учетом проекта на wordpress:
<VirtualHost *:8082>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
Alias /portfolio /mnt/d/Soft/Freelance/Wordpress/portfolio/site
<Directory /mnt/d/Soft/Freelance/Wordpress/portfolio/site>
Options Indexes FollowSymLinks Includes ExecCGI
AllowOverride All
Order allow,deny
Allow from all
Require all granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
Устанавливаем
Эта установка запустит триггеры, один из которых запустит Apache, теперь он будет на правильном порту, если запуска Apache не произойдет, перезапустим его вручную:
🌐 ШАГ 3 — WordPress (Apache backend)
Документа root:
ШАГ 4 — включить mod_rewrite (нужно для WordPress)
ШАГ 5 — права доступа (очень важно в WSL)
Иногда Apache не может читать Windows-диск:
База:
GRANT ALL PRIVILEGES ON *.* TO 'dev'@'%';
FLUSH PRIVILEGES;
🟨 ШАГ 6 — MariaDB
sudo systemctl start mariadb
Проброс порта 3306 наружу (в windows)
🧠 Что это за файл
fix-mysql-port.ps1 — это PowerShell-скрипт, который:
- берёт актуальный IP WSL
- пересоздаёт проброс порта 3307 → 3306
- чтобы не зависеть от смены IP
🥇 ГДЕ СОЗДАТЬ
Создай его в любом удобном месте, например:
👉 главное — чтобы путь был простой
🧪 КАК СОЗДАТЬ
- Откройте Блокнот или VS Code
- Вставьте код:
$ip = (wsl hostname -I).Trim()
netsh interface portproxy delete v4tov4 listenport=3307 listenaddress=127.0.0.1 2>$null
netsh interface portproxy add v4tov4 `
listenport=3307 listenaddress=127.0.0.1 `
connectport=3306 connectaddress=$ip
Write-Host "WSL MariaDB → localhost:3307 → $ip"
- Сохраните как:
🚀 КОГДА ЕГО ЗАПУСКАТЬ
✔ Вручную (пока проще всего)
Каждый раз:
- после перезапуска WSL
- после перезагрузки Windows
- если не работает порт 3307
👉 запуск:
Откройте PowerShell:
🧠 ПОЧЕМУ ЭТО НУЖНО
WSL меняет IP:
👉 поэтому static portproxy НЕ работает стабильно
🧪 КАК ПРОВЕРИТЬ ЧТО ВСЁ ОК
После запуска скрипта:
Должно быть:
🧠 ВАЖНО (частая ошибка)
❌ НЕ подключайтесь в DBeaver к WSL IP
✔ всегда используйте:
🟪 ШАГ 7 — PostgreSQL
sudo systemctl start postgresql
Зайдите через системного пользователя:
Потом:
И сразу:
(введите новый пароль вручную дважды)
Выйти:
✅ Проверить в WSL
Выполните:
Что должно быть хорошо:
или
Если плохо:
или
Тогда внешний доступ из Windows через portproxy не работает.
🥇 Как исправить
1. Открыть конфиг PostgreSQL
Найдите:
Замените на:
2. Разрешить подключение
Откройте:
Добавьте строку:
(если у вас в Windows есть уже запущенный Postgres и у него адрес именно такой)
3. Перезапустить PostgreSQL
🥇 Потом проверить снова
Проброс порта:
По аналогии с mySql нужно внести изменения в файл start-dev-db.ps1
$ip = (wsl hostname -I).Trim()
netsh interface portproxy delete v4tov4 listenaddress=127.0.0.1 listenport=3307
netsh interface portproxy delete v4tov4 listenaddress=127.0.0.1 listenport=5433
netsh interface portproxy add v4tov4 `
listenport=3307 listenaddress=127.0.0.1 `
connectport=3306 connectaddress=$ip
netsh interface portproxy add v4tov4 `
listenport=5433 listenaddress=127.0.0.1 `
connectport=5432 connectaddress=$ip
Write-Host ""
Write-Host "Portproxy rules:"
netsh interface portproxy show all
Write-Host ""
Write-Host "Ready:"
Write-Host "MariaDB -> 127.0.0.1:3307"
Write-Host "PostgreSQL -> 127.0.0.1:5433"
🌐 ШАГ 8 — Nginx (главный вход)
Конфиг:
📌 Конфигурация
Примерное содержимое файла:
server {
listen 8081 default_server;
listen [::]:8081 default_server;
root /var/www/html;
# Add index.php to the list if you are using PHP
index index.html index.htm index.nginx-debian.html;
server_name _;
location / {
proxy_pass http://127.0.0.1:8082;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
Перезапуск Nginx:
Windows Ubuntu WSL
Установка Ubuntu через WSL под Windows.
Речь про WSL и дистрибутив Ubuntu.
🧱 ЧАСТЬ 1 — УСТАНОВКА WSL (правильно с нуля)
1. Установить WSL
Откройте PowerShell от администратора:
wsl --install
👉 Это:
-
включает WSL
-
включает WSL2
-
устанавливает Ubuntu (по умолчанию)
2. Перезагрузка
После установки:
👉 обязательно перезагрузи ПК
3. Проверка
wsl -l -v
Ожидаемо:
Ubuntu Stopped 2
4. Первый запуск Ubuntu
Запусти:
wsl -d Ubuntu
или через меню Пуск
👉 создаёшь:
-
username
-
password
5. Обновление системы
sudo apt update
sudo apt upgrade -y
⚙️ ЧАСТЬ 2 — ПОДГОТОВКА К ПЕРЕНОСУ НА D:
⚠️ Важно:
По умолчанию Ubuntu хранится на диске C:
Путь выглядит так:
C:\Users\<USER>\AppData\Local\Packages\...\LocalState\
🚚 ЧАСТЬ 3 — ПЕРЕНОС WSL НА ДИСК D (ПРАВИЛЬНЫЙ СПОСОБ)
1. Остановить WSL
wsl --shutdown
2. Экспорт Ubuntu (создание бэкапа)
wsl --export Ubuntu D:\wsl\ubuntu.tar
👉 создаётся резервная копия всей системы
3. Удаление старой Ubuntu из WSL
wsl --unregister Ubuntu
⚠️ Это удаляет привязку к старому ext4.vhdx
4. Импорт Ubuntu на диск D
wsl --import Ubuntu D:\wsl\Ubuntu D:\wsl\ubuntu.tar --version 2
👉 теперь система живёт на D:
5. Проверка
wsl -l -v
📍 ЧАСТЬ 4 — ПРОВЕРКА ПУТИ
Проверьте, где реально хранится система:
Get-ItemProperty HKCU:\Software\Microsoft\Windows\CurrentVersion\Lxss\* |
Select DistributionName, BasePath
👉 должно быть:
D:\wsl\Ubuntu\
🧹 ЧАСТЬ 5 — УДАЛЕНИЕ СЛЕДОВ НА C:
После успешного переноса:
Можно удалить:
C:\Users\<USER>\AppData\Local\Packages\...\LocalState\
(если осталась)
Также удалить архив:
D:\wsl\ubuntu.tar
(если перенос завершён успешно)
🧠 ЧАСТЬ 6 — ЧТО В ИТОГЕ ПОЛУЧАЕТЕ
Было:
-
Ubuntu на C ❌
-
диск быстро забивается
Стало:
-
Ubuntu на D ✅
-
C освобождён
-
можно ставить:
-
nginx
-
MariaDB
-
PostgreSQL
-
GitLab
-
.NET
-
🚀 ЧАСТЬ 7 — РЕКОМЕНДАЦИИ (ВАЖНО)
После переноса:
включите systemd (для сервера):
sudo nano /etc/wsl.conf
Добавьте:
[boot]
systemd=true
Потом:
wsl --shutdown
Дополнительные сведения.
WSL запускается в окне Power Shell, после запуска вы попадаете в терминал, выйти из терминала можно через команду exit при этом WSL останется работающим, если же окно Power Shell закрыть, то WSL будет остановлен.
Если в системе есть еще установленные дистрибутивы WSL, то дистрибутив Ubuntu может оказаться не основным по умолчанию и команда
wsl -l -v
может выдать примерно следующее:
NAME STATE VERSION
*docker-desktop Stopped 2
Ubuntu Stopped 2
docker-desktop-data Stopped 2
Чтобы сделать Ubuntu основным дистрибутивом по умолчанию выполните следующую команду:
wsl --set-default Ubuntu
В разных окнах Power Sell можно несколько раз выполнить команду wsl но среда WSL будет запущена только один раз, все остальные команды откроют терминалы к этой среде.
❌ Остановка WSL
👉 тогда:
- ВСЕ процессы останавливаются
- WSL полностью выгружается
🎯 ИТОГ
✔ WSL ставится через wsl --install
✔ Ubuntu создаётся на C по умолчанию
✔ перенос делается через:
-
export -
unregister -
import
✔ после этого ext4.vhdx на C больше не нужен
Создание пользователя - администратора
Текущая работа от root в WSL неудобна и рискованна. Лучше создать обычного пользователя devadmin, дать ему sudo-права и перевести dev-среду на него. Создать пользователя admin не получится, так как уже есть группа с таким названием.
🏆 Что важно понять заранее
Не все сервисы нужно “переводить” на пользователя devadmin.
Системные сервисы уже работают правильно:
-
nginx → пользователь
www-data -
Apache HTTP Server →
www-data -
MariaDB →
mysql -
PostgreSQL →
postgres
Это нормально и менять не надо.
Что реально перевести на admin
✔ вход в WSL
✔ твои проекты
✔ MinIO
✔ dotnet run / build / git / npm
✔ домашние папки
🥇 План действий
1. Создать devadmin
2. Дать sudo
3. Сделать default user
4. Перенести dev-файлы
5. MinIO запускать от admin
6. root оставить только для администрирования
🥇 ШАГ 1 — создать пользователя
Сейчас все работает под root, это удобно.
adduser devadmin
Задайте пароль.
🏆 ШАГ 2 — дать sudo права
Проверить:
Должно быть:
🏆 ШАГ 3 — проверить домашнюю папку
Должно появиться:
devadmin
🏆 ШАГ 4 — сделать default user для WSL
В Windows PowerShell:
🏆 ШАГ 5 — проверить
Закройте WSL и снова откройте:
Потом:
Должно быть:
🏆 ШАГ 6 — дать доступ к проектам
Если проекты лежат в:
или на D: — отдельно настроим.
Создайте dev-папки:
mkdir -p /home/devadmin/services
mkdir -p /home/devadmin/backups
🏆 ШАГ 7 — MinIO перевести на devadmin
Когда пользователь будет создан:
sudo mkdir -p /home/devadmin/minio-config
sudo chown -R devadmin:devadmin /home/devadmin/minio-data
sudo chown -R devadmin:devadmin /home/devadmin/minio-config
🧠 Что с nginx/apache/db
Оставляем как есть:
apache -> www-data
MariaDB -> mysql
Postgres -> postgres
Это правильно.
Что такое WSL
WSL (Windows Subsystem for Linux) — это подсистема Linux внутри Windows, которая позволяет запускать полноценное Linux-окружение без отдельной виртуальной машины.
Что даёт WSL
Linux-команды
Можно выполнять:
ls
grep
find
ssh
curl
как на обычном сервере Ubuntu.
Разработка как на сервере
Если ваш хостинг работает на Ubuntu, то WSL очень удобен:
Продакшен: Ubuntu
Разработка: Ubuntu (WSL)
Меньше различий между средами.
Docker
Большинство разработчиков под Windows используют Docker через WSL.
.NET
Можно поставить Linux-версию SDK:
dotnet --version
и собирать проект так же, как на сервере.
React / Node.js
Обычно работают быстрее и стабильнее в WSL, чем в некоторых конфигурациях Windows.
Как это устроено
В современных версиях используется лёгкая виртуализация.
У WSL есть собственная сеть:
Windows
172.31.32.1
WSL
172.31.xx.xx
Именно поэтому вы можете видеть:
cat /etc/resolv.conf
nameserver 172.31.32.1
Это адрес Windows, который виден из WSL.
Чем WSL отличается от виртуальной машины
Виртуальная машина
Например, через Oracle VM VirtualBox или VMware Workstation:
Windows
└─ Полноценная VM
└─ Ubuntu
Плюсы:
-
полная изоляция
Минусы:
-
больше памяти
-
больше диска
-
медленнее старт
WSL
Windows
└─ Ubuntu
Плюсы:
-
быстрый запуск
-
меньше ресурсов
-
интеграция с Windows
Почему VS Code любит WSL
Когда открываете проект через:
Remote - WSL
VS Code устанавливает внутри Linux свой сервер:
~/.vscode-server
Поэтому вы видели каталоги вроде:
~/.vscode-server/data/logs
Именно там лежат логи Copilot и Continue.
Настройка Git в WSL-Ubuntu && Windows
Зайдите в папку проекта.
Проверка версии Git
Чтобы узнать, какая версия Git установлена в Ubuntu:
git --version
(Если нужно обновить Git до актуальной версии в Ubuntu: sudo apt update && sudo apt install git -y).
Проверить, установлена ли утилита GitHub CLI (gh) в вашей системе (в WSL Ubuntu, PowerShell на Windows или Linux), можно с помощью любой из следующих команд:
Проверка версии (Самый простой способ)
Выполните в терминале:
gh --version
-
Если
ghустановлен: Вы увидите версию утилиты и архитектуру, например:gh version 2.52.0 (2024-06-20) -
Если
ghНЕ установлен:-
В WSL / Ubuntu вы получите сообщение:
Command 'gh' not found... -
В Windows PowerShell вы получите ошибку:
gh : Имя "gh" не распознано как имя командлета...
-
Проверка пути к исполняемому файлу
-
В WSL / Ubuntu / Linux:
which gh(Если установлен, вернет путь вида
/usr/bin/ghили/usr/local/bin/gh). -
В Windows PowerShell:
Get-Command gh
Как быстро установить gh, если его нет:
В WSL / Ubuntu:
sudo apt update && sudo apt install gh -y
В Windows (через winget в PowerShell):
winget install --id GitHub.cli
Перед началом работы с репозиторием в GitHub вам нужно к нему подключиться с помощью команды
gh auth login
Далее последует небольшой диалог, в приведенном примере я использую ключ GitHub для авторизации:
gh auth login
? What account do you want to log into? GitHub.com
? What is your preferred protocol for Git operations on this host? HTTPS
? Authenticate Git with your GitHub credentials? Yes
? How would you like to authenticate GitHub CLI? Paste an authentication token
Tip: you can generate a Personal Access Token here https://github.com/settings/tokens
The minimum required scopes are 'repo', 'read:org', 'workflow'.
? Paste your authentication token: **************************************************
- gh config set -h github.com git_protocol https
✓ Configured git protocol
! Authentication credentials saved in plain text
✓ Logged in as YourGitLogin
Чтобы склонировать репозиторий с GitHub со всеми ветками и полной историей, достаточно выполнить стандартную команду git clone:
git clone git@github.com:username/repository.git
(Или через HTTPS / GitHub CLI, например: gh repo clone username/repository).
Вопреки распространенному заблуждению, стандартный git clone по умолчанию скачивает абсолютно ВСЕ ветки, теги и всю историю проекта.
Однако локально Git сразу создает текстовую указательную ветку только для главной (обычно main или master). Остальные ветки остаются в так называемом режиме отслеживания (remote-tracking branches).
Как увидеть все забранные ветки и работать с ними
1. Посмотреть список всех веток
Перейдите в папку проекта (cd repository) и выполните:
git branch -a
Вы увидите список:
* main
remotes/origin/HEAD -> origin/main
remotes/origin/main
remotes/origin/dev
remotes/origin/feature-login
Все ветки с префиксом remotes/origin/ уже находятся на вашем компьютере, их не нужно скачивать заново из интернета.
2. Как переключиться на нужную ветку
Чтобы начать работать с любой из локально загруженных веток (например, dev), просто переключитесь на нее:
git checkout dev
(В современных версиях Git также можно использовать git switch dev).
Git автоматически создаст локальную ветку dev, свяжет ее с origin/dev и переключит ваш рабочий каталог.
Если вам нужно гарантированно развернуть ЛОКАЛЬНЫЕ копии ВСЕХ веток сразу
Если ваша цель — не просто скачать проект, а сделать так, чтобы команда git branch (без флага -a) сразу показывала полный список всех веток как локальных, используйте короткий однострочник прямо в терминале:
В WSL / Ubuntu (Bash):
git branch -r | grep -v '\->' | while read remote; do git branch --track "${remote#origin/}" "$remote"; done
git fetch --all
В Windows PowerShell:
git branch -r | Where-Object { $_ -notmatch '->' } | ForEach-Object {
$branch = $_.Trim().Replace('origin/', '')
git branch --track $branch $_.Trim()
}
git fetch --all
После выполнения этого скрипта каждая удаленная ветка превратится в полноценную локальную ветку.
Рекомендуемый файл .gitignore для проекта в связке с .NET и REACT:
# ==========================================
# .NET / C# (Правила сработают для любой подпапки)
# ==========================================
## --- Build & Output directories ---
bin/
obj/
out/
[Bb]in/
[Ob]j/
## --- Visual Studio & Rider temporary files ---
.vs/
.idea/
*.user
*.userosscache
*.sln.docstates
*.suo
*.userprefs
## --- NuGet Packages & Cache ---
*.nupkg
*.snupkg
**/packages/
project.lock.json
project.assets.json
## --- Local settings & Secrets ---
# Локальные пользовательские конфигурации (раскомментируйте, если не хотите коммитить appsettings.Development.json)
# appsettings.Development.json
# appsettings.*.local.json
secrets.json
## --- Test Results & Coverage ---
[Tt]est[Rr]esult*/
*.coverage
*.coveragexml
# ==========================================
# Node.js / Frontend (Vue, React и т.д.)
# ==========================================
node_modules/
dist/
.npm
*.log
# ==========================================
# Общие временные файлы ОС
# ==========================================
.DS_Store
Thumbs.db
Установка MinIO
Инструкция по установке под пользователем devadmin в WSL Ubuntu Windows с автозапуском через systemd.
🏆 Что получим
User: devadmin
Data: /home/devadmin/minio-data
Console: http://localhost:9001
API: http://localhost:9000
Autostart: yes
🥇 ШАГ 0 — зайти под devadmin
Проверьте:
whoami
Должно быть:
devadmin
Если нет:
su - devadmin
🥇 ШАГ 1 — скачать MinIO
wget https://dl.min.io/server/minio/release/linux-amd64/minio
chmod +x minio
sudo mv minio /usr/local/bin/
Проверка:
minio --version
🥇 ШАГ 2 — создать каталоги
mkdir -p /home/devadmin/minio-data
mkdir -p /home/devadmin/minio-config
🥇 ШАГ 3 — создать env файл
nano /home/devadmin/minio-config/minio.env
Вставьте:
MINIO_ROOT_USER=admin
MINIO_ROOT_PASSWORD=StrongPass123!
MINIO_VOLUMES=/home/devadmin/minio-data
MINIO_OPTS=--console-address :9001
Сохраните.
Нужно иметь в виду, что
MINIO_ROOT_USER=admin
это пользователь-администратор внутри MinIO и к текущему пользователю devadmin отношения не имеет.
🥇 ШАГ 4 — создать systemd сервис
sudo nano /etc/systemd/system/minio.service
Вставьте:
[Unit]
Description=MinIO Object Storage
After=network.target
[Service]
User=devadmin
Group=devadmin
WorkingDirectory=/home/devadmin
Environment="MINIO_ROOT_USER=admin"
Environment="MINIO_ROOT_PASSWORD=StrongPass123!"
ExecStart=/usr/local/bin/minio server /home/devadmin/minio-data --console-address :9001
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
🥇 ШАГ 5 — включить автозапуск
sudo systemctl daemon-reload
sudo systemctl enable minio
sudo systemctl start minio
🥇 ШАГ 6 — проверить статус
sudo systemctl status minio
Должно быть:
active (running)
🥇 ШАГ 7 — открыть в Windows
Браузер:
http://localhost:9001
Логин:
admin
Пароль:
StrongPass123!
🥇 ШАГ 8 — создать bucket
В UI:
uploads
🧠 Если localhost не открывается
Проверь:
sudo ss -tulpn | grep 900
🏆 После этого можно использовать в .NET
Endpoint: http://localhost:9000
AccessKey: admin
SecretKey: StrongPass123!
Bucket: uploads
🥇 Важно
Если systemd ещё не включён:
sudo nano /etc/wsl.conf
Добавить:
[boot]
systemd=true
Затем из Windows:
wsl --shutdown
Настройка VPN через туннель к VPS
Окружение для настройки.
- Имеется VPS с выделенным IP где-то в Европе. Там стоит Linux, в моем случае это Ubuntu. Нужно иметь на сервер права администратора. Сервер должен принимать соединения по ssh.
- Машина с Windows 10 или 11.
- VPS должен быть виден через ваше интернет-соединение. В моем случае у меня было два интернет-подключения: через мобильное соединение VPS виден не был, через проводное соединение видимость была.
- Не должно быть работающих VPN-соединений.
Установка туннеля.
Нужно открыть windows PowerShell от лица администратора.
В windows PowerShell нужно подключиться к вашему VPS:
ssh -D 0.0.0.0:1080 -N root@[IP_your_vps]
Windows может попросить подтвердить использование туннеля.
Если у вас нет ключа доступа к VPS, то потребуется ввести пароль для root.
Сессия откроется, это окно PowerShell нужно оставить открытым, оно "зависнет", то есть через туннель пойдет обмен.
Откройте другое окно PowerShell с обычными правами. Проверка соединения:
curl.exe --proxy socks5h://127.0.0.1:1080 https://api.ipify.org
Команда должна показать IP вашего VPS.
В настройках Windows есть раздел "proxy" его можно использовать для включения обмена, но с оговорками. Нужно иметь в виду, что туннель открывается только для протокола socks, для протоколов http и https он не работает. В поле "Proxy IP address" нужно прописать
socks=127.0.0.1:1080
в поле для значения порта ничего быть не должно.
После того, как вы запишите эти настройки, они корректно пропишутся в реестр windows, но при редактировании оттуда будут взяты неверные значения. при повторной записи работа прокси сломается, ниже пример того, как интерпретирует эти настройки интерфейс windows:
для корректной настройки лучше пользоваться PowerShell, чтобы посмотреть настройки используйте команду
Get-ItemProperty 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Internet Settings'
для установки протокола socks:
Set-ItemProperty 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Internet Settings' ProxyServer 'socks=127.0.0.1:1080'
Нужно иметь в виду, что с таким proxy в вашем случае будут работать только те приложения, которые используют протокол socks.
Не все приложения Windows используют системный SOCKS-прокси.
Например:
- браузеры обычно умеют
- некоторые программы используют WinINET/WinHTTP
- некоторые (включая часть Electron/Node-приложений) игнорируют системный SOCKS и требуют отдельной настройки
Для включения proxy используйте команду
Set-ItemProperty 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Internet Settings' ProxyEnable 1
В обычном cmd.exe (или FAR например) аналог делается через reg add.
Включить прокси:
reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyEnable /t REG_DWORD /d 1 /f
Отключить прокси:
reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyEnable /t REG_DWORD /d 0 /f
Установить SOCKS-прокси:
reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyServer /t REG_SZ /d "socks=127.0.0.1:1080" /f
Проверить текущие значения:
reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyEnable
reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyServer
После изменения реестра некоторые программы сразу подхватывают настройки, а некоторые — только после перезапуска. Чтобы уведомить Windows о смене настроек прокси без выхода из системы, можно выполнить:
RUNDLL32.EXE inetcpl.cpl,LaunchConnectionDialog
или просто перезапустить приложение (браузер, VS Code и т.п.).
Пояснения по открытию туннеля от ChatGPT.
Вопрос:
что конкретно делает эта команда ssh -D 0.0.0.0:1080 -N root@[IP_your_vps]
На вашем компьютере запускается локальный SOCKS5-прокси на порту 1080.
Все программы, которые используют этот SOCKS-прокси, будут выходить в интернет через VPS.
Схема:
Приложение
↓
SOCKS5 127.0.0.1:1080
↓
SSH-соединение
↓
VPS
↓
Интернет
Разбор параметров
ssh
Запускает SSH-клиент.
root@IP_VPS
Подключается к VPS:
Пользователь: root
Сервер: IP_VPS
Например:
ssh root@38.242.220.114
-D
Означает Dynamic Port Forwarding.
То есть SSH создаёт SOCKS-прокси.
Например:
-D 1080
создаёт:
SOCKS5 localhost:1080
Любая программа, умеющая SOCKS5, может его использовать.
0.0.0.0:1080
Очень важный момент.
Если написать:
-D 1080
или
-D 127.0.0.1:1080
то SOCKS будет доступен только на локальном интерфейсе Windows.
WSL обычно не сможет к нему подключиться напрямую.
Если написать:
-D 0.0.0.0:1080
то SSH слушает на всех интерфейсах:
127.0.0.1
LAN IP
WSL gateway
и т.д.
-N
Означает:
Не запускать shell на VPS
То есть:
❌ не открывать консоль Linux
✅ только держать туннель
Окно просто висит:
ssh -D ...
и прокси работает.
Что НЕ делает эта команда
Она НЕ создаёт полноценный VPN.
Не происходит автоматического перенаправления всего трафика.
Например в WSL:
curl https://api.ipify.org
по умолчанию всё ещё идёт напрямую.
А вот:
curl --proxy socks5h://172.31.32.1:1080 https://api.ipify.org
идёт через VPS.
Чем отличается от VPN
VPN:
Весь трафик
↓
VPN
↓
VPS
SSH SOCKS:
Только программы,
которые настроены на SOCKS
↓
VPS
Почему это удобно
Для связки:
Windows
└─ WSL
└─ VS Code
└─ Continue
достаточно настроить Continue, VS Code или переменные окружения на использование SOCKS.
Тогда:
- Continue
- OpenAI API
- Gemini API
- GitHub Copilot
будут работать через VPS,
а остальной интернет останется обычным.
Для дополнительной безопасности я бы рекомендовал использовать не root, а отдельного пользователя на VPS:
ssh -D 0.0.0.0:1080 -N devadmin@IP_VPS
Это не влияет на работу туннеля, но считается хорошей практикой администрирования.
Работа с MS Vs Code
Настройка, работа в Windows и Linux, подключение AI-агентов и плагинов.
Настройка VS Code для работы в WSL
WSL - это среда Linux под Windows подробнее о WSL.
Для стека Ubuntu-хостинг + .NET 10 + React + SSH-туннели VS Code через WSL обычно удобнее, чем запуск проекта напрямую в Windows.
1. Среда разработки совпадает с сервером
Если у вас продакшен на Ubuntu.
Когда VS Code открыт как:
WSL: Ubuntu
команды выполняются в Linux:
dotnet build
npm install
npm run dev
То есть почти в той же среде, что и сервер.
Меньше сюрпризов вида:
"На Windows работает, а на Ubuntu нет".
2. Лучше работает Node.js и React
Многие инструменты фронтенда изначально ориентированы на Linux/macOS.
Например:
-
Vite
-
Webpack
-
ESLint
-
npm
-
pnpm
обычно чувствуют себя в WSL стабильнее, чем при работе с проектом на диске Windows.
Особенно это заметно на больших проектах.
3. Нормальные Linux-инструменты
Сразу доступны:
grep
find
sed
awk
ssh
rsync
curl
Не нужно искать Windows-аналоги.
4. Удобнее работать с сервером
Если вы постоянно используете SSH к VPS.
В WSL можно:
ssh server
scp file
rsync project
без дополнительных утилит.
5. AI-инструменты работают рядом с кодом
Когда VS Code открыт в WSL:
VS Code
↓
VS Code Server (в WSL)
↓
Continue / Copilot
↓
Файлы проекта
AI видит проект напрямую в Linux-среде.
6. .NET ближе к реальному продакшену
Если сервер Ubuntu, то:
dotnet publish
в WSL собирает проект в Linux-окружении.
Легче ловить проблемы:
-
путей (
/против\) -
регистра файлов
-
прав доступа
-
конфигурации Linux
Когда лучше открывать через Windows
Есть случаи, когда удобнее работать напрямую из Windows:
-
WinForms
-
WPF
-
MAUI под Windows
-
COM-компоненты
-
специфичные Windows SDK
Но если у вас:
React
ASP.NET Core
Ubuntu
то WSL выглядит более естественным вариантом.
Важный момент
Если вы используете WSL, держите проект внутри Linux-файловой системы:
/home/devadmin/projects/myapp
а не в:
/mnt/c/Users/...
На небольших проектах разница может быть незаметна, но на React-проектах с большим количеством файлов производительность и скорость работы инструментов обычно лучше внутри файловой системы WSL.
Для работы в WSL вам нужно выполнить сначала установку VS Code под Windows, скачайте его с официального сайта по ссылке.
После запуска установленного VS Code вам нужно установить расширение WSL. Перейдите на вкладку расширений и в строке поиска наберите:
wsl
В результатах поиска найдите расширение с названием WSL и примерно таким описанием:
Open any folder in the Windows Subsystem for Linux (WSL) and take advantage of Visual Studio Code's full feature set.
Установите это расширение. После установки вы сможете работать с WSL. Для этого нужно сделать к нему подключение.
Нажмите Ctrl->Alt->O или кликните в нижнем левом углу по иконке "><",откроется Remote Menu, в нем выберите "Connect to WSL", после запуска будет загружен и запущен сервер VS Code в WSL, затем вы сможете работать в проводнике с папками в вашем WSL-хранилище.
Установка плагина Continue и настройка под ним AI-моделей.
-- Что ниже пока неизвестно, нужно или нет --
Откройте:
nano ~/.bashrc
добавьте в конец:
export ALL_PROXY=socks5://172.31.32.1:1080
export HTTP_PROXY=socks5://172.31.32.1:1080
export HTTPS_PROXY=socks5://172.31.32.1:1080
Сохраните:
Ctrl+O
Enter
Ctrl+X
Применить:
source ~/.bashrc
Для VS Code Remote WSL
В settings.json:
{
"http.proxy": "socks5://172.31.32.1:1080",
"http.proxySupport": "override",
"http.proxyStrictSSL": false
}
После этого:
- Continue
- Copilot
- npm
- dotnet restore
- git clone
- curl
из WSL будут идти через VPS.
Ваша итоговая схема теперь:
Windows
|
| SSH -D 0.0.0.0:1080
|
v
VPS (38.242.221.111)
|
v
Internet
WSL
|
v
172.31.32.1:1080
Настройка SSH для VPS (Windows && Linux-WPS)
Настройка под Windows.
Для настройки соединения у вас обязательно должен быть файл с приватным ключом и желательно с публичным тоже. В моем примере я использую ключи в формате ED25519, которые приходят сейчас на смену ключам RSA. На VPS вы сгенирировали файлы с ключами, в моем случае они назывались id_ed25519 и id_ed25519.pub, лучше их переименовать в виде id_ed25519_myproxy и id_ed25519_myproxy,pub. Если у вас имеется несколько серверов с различными ключами, то названия файлов будут различаться и подключение будет управляться через файл config.
Положите файлы в папку C:\Users\[your_user_name]\.ssh\, в той же папке создайте файл config без расширения примерно с таким содержанием:
Host myproxy
HostName 11.22.33.44 # IP-адрес или домен вашего VPS
User root # Логин для подключения
IdentityFile ~/.ssh/id_ed25519_myproxy # Путь к файлу ключа
DynamicForward 0.0.0.0:1080
IdentitiesOnly yes
SessionType none
Port 22 # Порт (если меняли стандартный)
Строка DynamicForward 0.0.0.0:1080 это прямой аналог флага -D 0.0.0.0:1080 в файле конфигурации. Он включает локальный SOCKS5-прокси на порту 1080 для всех сетевых интерфейсов (0.0.0.0), строка SessionType none это директива RequestTTY no которая аналогична флагу -N и позволяет не выполнять команды на удаленном сервере, а только держать туннель.
Запуск туннеля на ваш сервер будет теперь выполняться одной командой:
ssh myproxy
Способ 1. Проверка через PowerShell (Windows) — Самый удобный
Get-NetTCPConnection -LocalPort 1080 -ErrorAction SilentlyContinue
-
Если порт открыт и прослушивается: Команда выведет таблицу с состоянием подключения (
State: Listen), а в колонкеOwningProcessбудет указан PID (идентификатор процесса, например, вашегоssh.exe). -
Если порт закрыт: Команда ничего не выведет (вернется пустая строка).
Способ 2. Классическая команда netstat (Windows CMD / PowerShell)
netstat -ano | findstr :1080
-
Ожидаемый результат (порт открыт):
PlaintextTCP 0.0.0.0:1080 0.0.0.0:0 LISTENING 1234(ЗначениеLISTENINGозначает, что SOCKS-туннель успешно поднят и ждет подключений, а1234в конце — это PID процесса SSH). -
Если порт закрыт: Вывод будет абсолютно пустым.
Способ 3. Проверка через терминал WSL (Linux)
# Через ss (современный аналог netstat)
ss -tulpn | grep 1080
# Или через классический netstat
netstat -tulpn | grep 1080
Способ 4. Экспресс-проверка подключения (Test-NetConnection)
Test-NetConnection -ComputerName 127.0.0.1 -Port 1080
-
TcpTestSucceeded : True— порт открыт и принимает соединения. -
TcpTestSucceeded : False— порт закрыт (SSH-туннель не запущен или упал).
Узнать, какая программа заняла порт:Если порт 1080 занят, но вы не уверены, чем именно, узнайте PID из командыnetstat(последнее число в строке) и выполните в PowerShell:PowerShellGet-Process -Id <PID>