feat: Добавлены PowerShell скрипты для Discord Windows и установки Docker прокси, обновлен README.
This commit is contained in:
59
README.md
59
README.md
@@ -41,15 +41,18 @@
|
||||
## 📦 Что внутри?
|
||||
|
||||
| Файл | Описание простыми словами |
|
||||
| ----------------------- | ------------------------------------------------------------------ |
|
||||
| --------------------------- | ------------------------------------------------------------------ |
|
||||
| `install-docker-proxy.ps1` | 🚀 **Автоустановщик** — скачайте и запустите, всё сделает сам |
|
||||
| `discord-windows-hack.ps1` | 🎮 Установка ProxiFyre для Discord/Vesktop |
|
||||
| `web/server.py` | Веб-интерфейс для управления через браузер |
|
||||
| `web/index.html` | Страница с красивым интерфейсом |
|
||||
| `docker/entrypoint.sh` | Главный скрипт запуска контейнера |
|
||||
| `docker/Dockerfile` | Инструкция для создания изолированного VPN-приложения (контейнера) |
|
||||
| `docker/Dockerfile.singbox` | Инструкция для создания изолированного VPN-приложения (контейнера) |
|
||||
| `docker-compose.yml` | Файл для удобного запуска одной командой |
|
||||
|
||||
---
|
||||
|
||||
|
||||
## 🚀 Быстрый старт
|
||||
|
||||
### Что вам понадобится
|
||||
@@ -64,9 +67,36 @@
|
||||
|
||||
---
|
||||
|
||||
## 📥 Первый запуск (установка с нуля)
|
||||
## 📥 Установка (Windows — самый простой способ)
|
||||
|
||||
Откройте терминал (Терминал на Mac, PowerShell на Windows) и выполните:
|
||||
Откройте **PowerShell** и выполните:
|
||||
|
||||
```powershell
|
||||
# Перейдите в папку с проектом
|
||||
cd путь\к\папке\vpn-proxy
|
||||
|
||||
# Запустите установщик (проверит Docker, соберёт и запустит)
|
||||
.\install-docker-proxy.ps1
|
||||
```
|
||||
|
||||
> 💡 **Что делает скрипт:**
|
||||
>
|
||||
> - Проверяет установлен ли Docker и Docker Compose
|
||||
> - Если Docker не установлен — показывает ссылку на скачивание
|
||||
> - Если уже установлено — показывает статус и меню управления
|
||||
> - Собирает и запускает контейнер
|
||||
> - Предлагает установить ProxiFyre для Discord/Vesktop
|
||||
|
||||
### Если уже установлено
|
||||
|
||||
При повторном запуске скрипт покажет:
|
||||
- Статус контейнера (работает/остановлен)
|
||||
- Адреса подключения
|
||||
- Меню с действиями (запуск, перезапуск, логи, переустановка)
|
||||
|
||||
---
|
||||
|
||||
## 📥 Ручная установка (Mac/Linux)
|
||||
|
||||
```bash
|
||||
# 1. Перейдите в папку с проектом
|
||||
@@ -172,6 +202,27 @@ http.proxy: http://127.0.0.1:8082
|
||||
- **Адрес**: `127.0.0.1`
|
||||
- **Порт**: `8082`
|
||||
|
||||
### Для Discord / Vesktop (Windows)
|
||||
|
||||
Discord не поддерживает системные настройки прокси, поэтому нужен ProxiFyre:
|
||||
|
||||
```powershell
|
||||
# Запустите от имени Администратора
|
||||
.\discord-windows-hack.ps1
|
||||
```
|
||||
|
||||
**Что делает скрипт:**
|
||||
- Устанавливает драйвер Windows Packet Filter
|
||||
- Устанавливает ProxiFyre как службу Windows
|
||||
- Настраивает перехват трафика для Discord/Vesktop
|
||||
- Направляет его через прокси `127.0.0.1:8082`
|
||||
|
||||
**Если ProxiFyre уже установлен:**
|
||||
При повторном запуске скрипт покажет:
|
||||
- Текущий статус службы
|
||||
- Настроенные приложения и прокси
|
||||
- Меню управления (запуск, остановка, логи, переустановка)
|
||||
|
||||
---
|
||||
|
||||
|
||||
|
||||
269
discord-windows-hack.ps1
Normal file
269
discord-windows-hack.ps1
Normal file
@@ -0,0 +1,269 @@
|
||||
# ==========================================
|
||||
# <20>️ PROXIFYRE INSTALLER ДЛЯ DISCORD/VESKTOP
|
||||
# ==========================================
|
||||
param(
|
||||
[switch]$Force, # Принудительная переустановка
|
||||
[string]$Proxy = "", # Адрес прокси (для неинтерактивного режима), например "127.0.0.1:8082"
|
||||
[string[]]$Apps = @(), # Приложения (для неинтерактивного режима), например @("Discord", "Vesktop")
|
||||
[switch]$Silent # Тихий режим (без лишнего вывода, для вызова из других скриптов)
|
||||
)
|
||||
|
||||
# ==========================================
|
||||
# 🛠️ ПРЯМЫЕ ССЫЛКИ (Hardcoded)
|
||||
# ==========================================
|
||||
$InstallPath = "C:\Tools\ProxiFyre"
|
||||
$DriverUrl = "https://github.com/wiresock/ndisapi/releases/download/v3.6.2/Windows.Packet.Filter.3.6.2.1.x64.msi"
|
||||
$AppUrl = "https://github.com/wiresock/proxifyre/releases/download/v2.1.4/ProxiFyre-v2.1.4-x64-signed.zip"
|
||||
# ==========================================
|
||||
|
||||
# 0. Проверка прав
|
||||
if (!([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator")) {
|
||||
Write-Host "⛔ Запусти от имени АДМИНИСТРАТОРА!" -ForegroundColor Red
|
||||
Start-Sleep -s 3; Exit
|
||||
}
|
||||
|
||||
Clear-Host
|
||||
Write-Host "==========================================" -ForegroundColor Cyan
|
||||
Write-Host " 🚀 PROXIFYRE SERVICE INSTALLER " -ForegroundColor Cyan
|
||||
Write-Host "==========================================" -ForegroundColor Cyan
|
||||
|
||||
# ==========================================
|
||||
# ПРОВЕРКА СУЩЕСТВУЮЩЕЙ УСТАНОВКИ
|
||||
# ==========================================
|
||||
$proxifyreExists = Test-Path "$InstallPath\ProxiFyre.exe"
|
||||
$proxifyreService = Get-Service -Name "ProxiFyreService" -ErrorAction SilentlyContinue
|
||||
|
||||
if ($proxifyreExists -and -not $Force) {
|
||||
Write-Host ""
|
||||
Write-Host "==========================================" -ForegroundColor Green
|
||||
Write-Host " ✅ PROXIFYRE УЖЕ УСТАНОВЛЕН! " -ForegroundColor Green
|
||||
Write-Host "==========================================" -ForegroundColor Green
|
||||
Write-Host ""
|
||||
|
||||
# Статус службы
|
||||
Write-Host "📊 Статус службы: " -NoNewline -ForegroundColor Yellow
|
||||
if ($proxifyreService -and $proxifyreService.Status -eq 'Running') {
|
||||
Write-Host "РАБОТАЕТ" -ForegroundColor Green
|
||||
} elseif ($proxifyreService) {
|
||||
Write-Host "$($proxifyreService.Status)" -ForegroundColor Red
|
||||
} else {
|
||||
Write-Host "НЕ ЗАРЕГИСТРИРОВАНА" -ForegroundColor Red
|
||||
}
|
||||
|
||||
Write-Host ""
|
||||
Write-Host "📁 Расположение:" -ForegroundColor Yellow
|
||||
Write-Host " Путь: $InstallPath" -ForegroundColor White
|
||||
Write-Host " Конфиг: $InstallPath\app-config.json" -ForegroundColor White
|
||||
Write-Host " Логи: $InstallPath\logs\" -ForegroundColor White
|
||||
Write-Host ""
|
||||
|
||||
# Показываем текущий конфиг
|
||||
$configPath = "$InstallPath\app-config.json"
|
||||
if (Test-Path $configPath) {
|
||||
try {
|
||||
$config = Get-Content $configPath -Raw | ConvertFrom-Json
|
||||
$apps = $config.proxies[0].appNames -join ", "
|
||||
$proxy = $config.proxies[0].socks5ProxyEndpoint
|
||||
Write-Host "⚙️ Текущие настройки:" -ForegroundColor Yellow
|
||||
Write-Host " Прокси: $proxy" -ForegroundColor White
|
||||
Write-Host " Приложения: $apps" -ForegroundColor White
|
||||
Write-Host ""
|
||||
} catch {
|
||||
Write-Host " ⚠️ Не удалось прочитать конфиг" -ForegroundColor Yellow
|
||||
}
|
||||
}
|
||||
|
||||
Write-Host "==========================================" -ForegroundColor Cyan
|
||||
Write-Host ""
|
||||
Write-Host "Что вы хотите сделать?" -ForegroundColor Yellow
|
||||
Write-Host " [1] Запустить службу" -ForegroundColor White
|
||||
Write-Host " [2] Остановить службу" -ForegroundColor White
|
||||
Write-Host " [3] Перезапустить службу" -ForegroundColor White
|
||||
Write-Host " [4] Изменить настройки (прокси/приложения)" -ForegroundColor White
|
||||
Write-Host " [5] Показать логи" -ForegroundColor White
|
||||
Write-Host " [6] Показать конфиг" -ForegroundColor White
|
||||
Write-Host " [7] Переустановить (полная переустановка)" -ForegroundColor White
|
||||
Write-Host " [q] Выход" -ForegroundColor White
|
||||
Write-Host ""
|
||||
$choice = Read-Host "👉 Выбор (1-7/q)"
|
||||
|
||||
switch ($choice) {
|
||||
"1" {
|
||||
Write-Host "`n🚀 Запуск службы..." -ForegroundColor Cyan
|
||||
Start-Process -FilePath "$InstallPath\ProxiFyre.exe" -ArgumentList "start" -Wait -NoNewWindow
|
||||
Start-Sleep -s 2
|
||||
$svc = Get-Service -Name "ProxiFyreService" -ErrorAction SilentlyContinue
|
||||
Write-Host " Статус: $($svc.Status)" -ForegroundColor Green
|
||||
exit 0
|
||||
}
|
||||
"2" {
|
||||
Write-Host "`n⏹️ Остановка службы..." -ForegroundColor Cyan
|
||||
Start-Process -FilePath "$InstallPath\ProxiFyre.exe" -ArgumentList "stop" -Wait -NoNewWindow
|
||||
Write-Host " ✅ Служба остановлена" -ForegroundColor Green
|
||||
exit 0
|
||||
}
|
||||
"3" {
|
||||
Write-Host "`n🔄 Перезапуск службы..." -ForegroundColor Cyan
|
||||
Start-Process -FilePath "$InstallPath\ProxiFyre.exe" -ArgumentList "stop" -Wait -NoNewWindow
|
||||
Start-Sleep -s 1
|
||||
Start-Process -FilePath "$InstallPath\ProxiFyre.exe" -ArgumentList "start" -Wait -NoNewWindow
|
||||
Start-Sleep -s 2
|
||||
$svc = Get-Service -Name "ProxiFyreService" -ErrorAction SilentlyContinue
|
||||
Write-Host " Статус: $($svc.Status)" -ForegroundColor Green
|
||||
exit 0
|
||||
}
|
||||
"4" {
|
||||
Write-Host "`n⚙️ Изменение настроек..." -ForegroundColor Cyan
|
||||
# Продолжаем выполнение скрипта для настройки
|
||||
}
|
||||
"5" {
|
||||
Write-Host "`n📋 Логи ProxiFyre:" -ForegroundColor Cyan
|
||||
$logFiles = Get-ChildItem "$InstallPath\logs\*.log" -ErrorAction SilentlyContinue | Sort-Object LastWriteTime -Descending | Select-Object -First 1
|
||||
if ($logFiles) {
|
||||
Get-Content $logFiles.FullName -Tail 50
|
||||
} else {
|
||||
Write-Host " Лог-файлы не найдены" -ForegroundColor Yellow
|
||||
}
|
||||
exit 0
|
||||
}
|
||||
"6" {
|
||||
Write-Host "`n📄 Конфиг ProxiFyre:" -ForegroundColor Cyan
|
||||
if (Test-Path $configPath) {
|
||||
Get-Content $configPath
|
||||
} else {
|
||||
Write-Host " Конфиг не найден" -ForegroundColor Yellow
|
||||
}
|
||||
exit 0
|
||||
}
|
||||
"7" {
|
||||
Write-Host "`n🔧 Переустановка..." -ForegroundColor Cyan
|
||||
# Продолжаем выполнение скрипта
|
||||
}
|
||||
default {
|
||||
Write-Host "`n ℹ️ Выход" -ForegroundColor Gray
|
||||
exit 0
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
# --- ШАГ 1: КОНФИГУРАЦИЯ ---
|
||||
# Если параметры переданы — используем их (неинтерактивный режим)
|
||||
if ($Proxy -and $Apps.Count -gt 0) {
|
||||
$UserProxy = $Proxy
|
||||
$TargetApps = $Apps
|
||||
if (-not $Silent) {
|
||||
Write-Host "`n⚙️ Неинтерактивный режим:" -ForegroundColor Cyan
|
||||
Write-Host " Прокси: $UserProxy" -ForegroundColor White
|
||||
Write-Host " Приложения: $($TargetApps -join ', ')" -ForegroundColor White
|
||||
}
|
||||
} else {
|
||||
# Интерактивный режим
|
||||
Write-Host "`n🌐 SOCKS5 Прокси (IP:PORT):" -ForegroundColor Yellow
|
||||
$UserProxy = Read-Host " [Enter] для 127.0.0.1:1080"
|
||||
if ([string]::IsNullOrWhiteSpace($UserProxy)) { $UserProxy = "127.0.0.1:1080" }
|
||||
|
||||
Write-Host "`n🎮 Что проксируем?" -ForegroundColor Yellow
|
||||
Write-Host " [1] Vesktop"
|
||||
Write-Host " [2] Discord"
|
||||
Write-Host " [3] Vesktop + Discord"
|
||||
$AppChoice = Read-Host "👉 Выбор (1-3)"
|
||||
|
||||
switch ($AppChoice) {
|
||||
"2" { $TargetApps = @("Discord") }
|
||||
"3" { $TargetApps = @("Vesktop", "Discord") }
|
||||
Default { $TargetApps = @("Vesktop") }
|
||||
}
|
||||
}
|
||||
|
||||
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
|
||||
|
||||
# --- ШАГ 2: ПОДГОТОВКА (ОЧИСТКА) ---
|
||||
Write-Host "`n🧹 [0/3] Очистка процессов..." -ForegroundColor Magenta
|
||||
# Убиваем любые старые процессы, чтобы они не держали драйвер
|
||||
Stop-Process -Name "ProxiFyre" -Force -ErrorAction SilentlyContinue
|
||||
Start-Sleep -s 1
|
||||
|
||||
# --- ШАГ 3: ДРАЙВЕР ---
|
||||
Write-Host "⚙️ [1/3] Ставим драйвер (Packet Filter)..." -ForegroundColor Magenta
|
||||
$MsiFile = "$env:TEMP\WinpkFilter.msi"
|
||||
|
||||
try {
|
||||
Invoke-WebRequest -Uri $DriverUrl -OutFile $MsiFile -ErrorAction Stop
|
||||
$Proc = Start-Process -FilePath "msiexec.exe" -ArgumentList "/i `"$MsiFile`" /qn /norestart" -Wait -PassThru
|
||||
if ($Proc.ExitCode -eq 0) { Write-Host " ✅ Успешно." -ForegroundColor Green }
|
||||
elseif ($Proc.ExitCode -eq 1603) { Write-Host " ⚠️ Уже установлен." -ForegroundColor Yellow }
|
||||
} catch {
|
||||
Write-Error "❌ Ошибка скачивания драйвера: $_"; Exit
|
||||
}
|
||||
|
||||
# --- ШАГ 4: PROXIFYRE ---
|
||||
Write-Host "`n⬇️ [2/3] Ставим ProxiFyre..." -ForegroundColor Magenta
|
||||
|
||||
# Если папка есть, чистим всё, кроме конфига (если вдруг хотим сохранить), но проще пересоздать
|
||||
if (Test-Path $InstallPath) { Remove-Item $InstallPath -Recurse -Force -ErrorAction SilentlyContinue }
|
||||
New-Item -ItemType Directory -Force -Path $InstallPath | Out-Null
|
||||
|
||||
try {
|
||||
$ZipFile = "$env:TEMP\ProxiFyre.zip"
|
||||
Invoke-WebRequest -Uri $AppUrl -OutFile $ZipFile -ErrorAction Stop
|
||||
Expand-Archive -Path $ZipFile -DestinationPath $InstallPath -Force
|
||||
Write-Host " ✅ Распаковано." -ForegroundColor Green
|
||||
} catch {
|
||||
Write-Error "❌ Ошибка скачивания ProxiFyre: $_"; Exit
|
||||
}
|
||||
|
||||
# Вытаскиваем из подпапки если надо
|
||||
$ExeItem = Get-ChildItem -Path $InstallPath -Filter "ProxiFyre.exe" -Recurse | Select-Object -First 1
|
||||
if ($ExeItem.DirectoryName -ne $InstallPath) {
|
||||
Copy-Item -Path "$($ExeItem.DirectoryName)\*" -Destination $InstallPath -Recurse -Force
|
||||
}
|
||||
|
||||
# --- ШАГ 5: КОНФИГ ---
|
||||
Write-Host "`n📝 [3/3] Генерируем конфиг..." -ForegroundColor Cyan
|
||||
$ConfigPath = Join-Path -Path $InstallPath -ChildPath "app-config.json"
|
||||
$ConfigData = @{
|
||||
logLevel = "Info"
|
||||
proxies = @(
|
||||
@{
|
||||
appNames = $TargetApps
|
||||
socks5ProxyEndpoint = $UserProxy
|
||||
username = ""
|
||||
password = ""
|
||||
supportedProtocols = @("TCP", "UDP")
|
||||
}
|
||||
)
|
||||
excludes = @()
|
||||
} | ConvertTo-Json -Depth 4
|
||||
Set-Content -Path $ConfigPath -Value $ConfigData -Encoding UTF8
|
||||
|
||||
# --- ШАГ 6: УСТАНОВКА СЛУЖБЫ ---
|
||||
Write-Host "`n🛡️ [4/3] Регистрация службы Windows..." -ForegroundColor Cyan
|
||||
$ExePath = Join-Path -Path $InstallPath -ChildPath "ProxiFyre.exe"
|
||||
|
||||
# 1. Удаляем старую службу если была
|
||||
Start-Process -FilePath $ExePath -ArgumentList "uninstall" -Wait -NoNewWindow
|
||||
Start-Sleep -s 1
|
||||
|
||||
# 2. Инсталлируем службу
|
||||
Start-Process -FilePath $ExePath -ArgumentList "install" -Wait -NoNewWindow
|
||||
Start-Sleep -s 1
|
||||
|
||||
# 3. Запускаем службу
|
||||
Write-Host " 🚀 Запускаем службу..." -ForegroundColor Yellow
|
||||
Start-Process -FilePath $ExePath -ArgumentList "start" -Wait -NoNewWindow
|
||||
Start-Sleep -s 3
|
||||
|
||||
# 4. Проверка
|
||||
# Важно: имя службы в системе именно "ProxiFyreService" (судя по твоим логам)
|
||||
$Service = Get-Service -Name "ProxiFyreService" -ErrorAction SilentlyContinue
|
||||
|
||||
if ($Service -and $Service.Status -eq 'Running') {
|
||||
Write-Host "`n==========================================" -ForegroundColor Green
|
||||
Write-Host "🎉 УСПЕХ! Служба работает в фоне." -ForegroundColor Green
|
||||
Write-Host "📁 Логи тут: $InstallPath\logs"
|
||||
Write-Host "=========================================="
|
||||
} else {
|
||||
Write-Host "`n⚠️ Служба установлена, но статус: $($Service.Status). Проверь логи." -ForegroundColor Red
|
||||
Write-Host "Попробуй вручную: net start ProxiFyreService"
|
||||
}
|
||||
431
install-docker-proxy.ps1
Normal file
431
install-docker-proxy.ps1
Normal file
@@ -0,0 +1,431 @@
|
||||
# ==========================================
|
||||
# 🐳 VPN-PROXY DOCKER INSTALLER ДЛЯ WINDOWS
|
||||
# ==========================================
|
||||
# Устанавливает VPN-прокси через Docker Compose
|
||||
# и опционально настраивает Discord/Vesktop
|
||||
# ==========================================
|
||||
|
||||
param(
|
||||
[switch]$SkipDockerCheck,
|
||||
[switch]$SkipDiscord,
|
||||
[switch]$Force # Принудительная переустановка
|
||||
)
|
||||
|
||||
# Цвета для красивого вывода
|
||||
function Write-Step { param($msg) Write-Host "`n📦 $msg" -ForegroundColor Cyan }
|
||||
function Write-Success { param($msg) Write-Host " ✅ $msg" -ForegroundColor Green }
|
||||
function Write-Warning { param($msg) Write-Host " ⚠️ $msg" -ForegroundColor Yellow }
|
||||
function Write-Error { param($msg) Write-Host " ❌ $msg" -ForegroundColor Red }
|
||||
function Write-Info { param($msg) Write-Host " ℹ️ $msg" -ForegroundColor Gray }
|
||||
|
||||
Clear-Host
|
||||
Write-Host "==========================================" -ForegroundColor Cyan
|
||||
Write-Host " 🐳 VPN-PROXY DOCKER INSTALLER " -ForegroundColor Cyan
|
||||
Write-Host "==========================================" -ForegroundColor Cyan
|
||||
|
||||
# Определяем директорию скрипта
|
||||
$ScriptDir = if ($PSScriptRoot) { $PSScriptRoot } else { Split-Path -Parent $MyInvocation.MyCommand.Path }
|
||||
if (-not $ScriptDir) { $ScriptDir = Get-Location }
|
||||
|
||||
Write-Info "Директория проекта: $ScriptDir"
|
||||
|
||||
# ==========================================
|
||||
# ШАГ 0: ПРОВЕРКА СУЩЕСТВУЮЩЕЙ УСТАНОВКИ
|
||||
# ==========================================
|
||||
Write-Step "Проверка существующей установки..."
|
||||
|
||||
$existingContainer = docker ps -a --filter "name=sing-proxy" --format "{{.Names}}" 2>$null
|
||||
$containerRunning = docker ps --filter "name=sing-proxy" --format "{{.Status}}" 2>$null
|
||||
|
||||
if ($existingContainer -and -not $Force) {
|
||||
Write-Host ""
|
||||
Write-Host "==========================================" -ForegroundColor Green
|
||||
Write-Host " ✅ VPN-PROXY УЖЕ УСТАНОВЛЕН! " -ForegroundColor Green
|
||||
Write-Host "==========================================" -ForegroundColor Green
|
||||
Write-Host ""
|
||||
|
||||
# Статус контейнера
|
||||
if ($containerRunning -match "Up") {
|
||||
Write-Host "📊 Статус: " -NoNewline -ForegroundColor Yellow
|
||||
Write-Host "РАБОТАЕТ" -ForegroundColor Green
|
||||
Write-Host " Контейнер: sing-proxy" -ForegroundColor Gray
|
||||
Write-Host " Uptime: $containerRunning" -ForegroundColor Gray
|
||||
} else {
|
||||
Write-Host "📊 Статус: " -NoNewline -ForegroundColor Yellow
|
||||
Write-Host "ОСТАНОВЛЕН" -ForegroundColor Red
|
||||
$containerStatus = docker ps -a --filter "name=sing-proxy" --format "{{.Status}}" 2>$null
|
||||
Write-Host " Контейнер: sing-proxy ($containerStatus)" -ForegroundColor Gray
|
||||
}
|
||||
|
||||
Write-Host ""
|
||||
Write-Host "📡 Адреса подключения:" -ForegroundColor Yellow
|
||||
Write-Host " Веб-интерфейс: http://localhost:3456" -ForegroundColor White
|
||||
Write-Host " HTTP/SOCKS Прокси: 127.0.0.1:8082" -ForegroundColor White
|
||||
Write-Host ""
|
||||
Write-Host "📁 Расположение:" -ForegroundColor Yellow
|
||||
Write-Host " Проект: $ScriptDir" -ForegroundColor White
|
||||
Write-Host " Данные: $ScriptDir\data" -ForegroundColor White
|
||||
Write-Host ""
|
||||
|
||||
# Проверяем ProxiFyre
|
||||
$proxifyreInstalled = Test-Path "C:\Tools\ProxiFyre\ProxiFyre.exe"
|
||||
if ($proxifyreInstalled) {
|
||||
$proxifyreService = Get-Service -Name "ProxiFyreService" -ErrorAction SilentlyContinue
|
||||
Write-Host "🛡️ ProxiFyre:" -ForegroundColor Yellow
|
||||
Write-Host " Путь: C:\Tools\ProxiFyre" -ForegroundColor White
|
||||
Write-Host " Статус: $($proxifyreService.Status)" -ForegroundColor White
|
||||
|
||||
# Показываем настроенные приложения из конфига
|
||||
$configPath = "C:\Tools\ProxiFyre\app-config.json"
|
||||
if (Test-Path $configPath) {
|
||||
try {
|
||||
$config = Get-Content $configPath -Raw | ConvertFrom-Json
|
||||
$apps = $config.proxies[0].appNames -join ", "
|
||||
$proxy = $config.proxies[0].socks5ProxyEndpoint
|
||||
Write-Host " Прокси: $proxy" -ForegroundColor White
|
||||
Write-Host " Приложения: $apps" -ForegroundColor White
|
||||
} catch {}
|
||||
}
|
||||
Write-Host ""
|
||||
}
|
||||
|
||||
Write-Host "==========================================" -ForegroundColor Cyan
|
||||
Write-Host ""
|
||||
Write-Host "Что вы хотите сделать?" -ForegroundColor Yellow
|
||||
Write-Host " [1] Запустить контейнер (если остановлен)" -ForegroundColor White
|
||||
Write-Host " [2] Перезапустить контейнер" -ForegroundColor White
|
||||
Write-Host " [3] Переустановить (пересобрать)" -ForegroundColor White
|
||||
Write-Host " [4] Показать логи" -ForegroundColor White
|
||||
Write-Host " [5] Открыть веб-интерфейс" -ForegroundColor White
|
||||
Write-Host " [q] Выход" -ForegroundColor White
|
||||
Write-Host ""
|
||||
$choice = Read-Host "👉 Выбор (1-5/q)"
|
||||
|
||||
switch ($choice) {
|
||||
"1" {
|
||||
Write-Step "Запуск контейнера..."
|
||||
Push-Location $ScriptDir
|
||||
docker compose start
|
||||
Pop-Location
|
||||
Write-Success "Контейнер запущен!"
|
||||
Write-Host " Веб-интерфейс: http://localhost:3456" -ForegroundColor Green
|
||||
exit 0
|
||||
}
|
||||
"2" {
|
||||
Write-Step "Перезапуск контейнера..."
|
||||
Push-Location $ScriptDir
|
||||
docker compose restart
|
||||
Pop-Location
|
||||
Write-Success "Контейнер перезапущен!"
|
||||
exit 0
|
||||
}
|
||||
"3" {
|
||||
Write-Info "Переустановка..."
|
||||
# Продолжаем выполнение скрипта
|
||||
}
|
||||
"4" {
|
||||
Write-Step "Логи контейнера (последние 50 строк):"
|
||||
docker logs --tail 50 sing-proxy
|
||||
exit 0
|
||||
}
|
||||
"5" {
|
||||
Start-Process "http://localhost:3456"
|
||||
exit 0
|
||||
}
|
||||
default {
|
||||
Write-Info "Выход"
|
||||
exit 0
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
# ==========================================
|
||||
# ШАГ 1: ПРОВЕРКА DOCKER
|
||||
# ==========================================
|
||||
Write-Step "Проверка Docker..."
|
||||
|
||||
$DockerInstalled = $false
|
||||
$DockerRunning = $false
|
||||
$DockerComposeAvailable = $false
|
||||
|
||||
# Проверяем, установлен ли Docker
|
||||
try {
|
||||
$dockerVersion = docker --version 2>&1
|
||||
if ($LASTEXITCODE -eq 0 -and $dockerVersion -match "Docker version") {
|
||||
Write-Success "Docker установлен: $dockerVersion"
|
||||
$DockerInstalled = $true
|
||||
}
|
||||
} catch {
|
||||
$DockerInstalled = $false
|
||||
}
|
||||
|
||||
if (-not $DockerInstalled -and -not $SkipDockerCheck) {
|
||||
Write-Error "Docker не найден!"
|
||||
Write-Host ""
|
||||
Write-Host "📥 Установите Docker Desktop:" -ForegroundColor Yellow
|
||||
Write-Host " https://www.docker.com/products/docker-desktop/" -ForegroundColor White
|
||||
Write-Host ""
|
||||
Write-Host "После установки:" -ForegroundColor Yellow
|
||||
Write-Host " 1. Запустите Docker Desktop" -ForegroundColor White
|
||||
Write-Host " 2. Дождитесь, пока появится зелёная иконка 🐳 в трее" -ForegroundColor White
|
||||
Write-Host " 3. Запустите этот скрипт заново" -ForegroundColor White
|
||||
Write-Host ""
|
||||
|
||||
$openUrl = Read-Host "Открыть страницу загрузки Docker? (y/n)"
|
||||
if ($openUrl -eq "y" -or $openUrl -eq "Y") {
|
||||
Start-Process "https://www.docker.com/products/docker-desktop/"
|
||||
}
|
||||
exit 1
|
||||
}
|
||||
|
||||
# Проверяем, запущен ли Docker
|
||||
if ($DockerInstalled) {
|
||||
try {
|
||||
$dockerInfo = docker info 2>&1
|
||||
if ($LASTEXITCODE -eq 0) {
|
||||
Write-Success "Docker daemon запущен"
|
||||
$DockerRunning = $true
|
||||
}
|
||||
} catch {
|
||||
$DockerRunning = $false
|
||||
}
|
||||
|
||||
if (-not $DockerRunning -and -not $SkipDockerCheck) {
|
||||
Write-Warning "Docker установлен, но не запущен!"
|
||||
Write-Host ""
|
||||
Write-Host "🚀 Запустите Docker Desktop и дождитесь, пока:" -ForegroundColor Yellow
|
||||
Write-Host " - Появится зелёная иконка 🐳 в трее" -ForegroundColor White
|
||||
Write-Host " - Или надпись 'Docker Desktop is running'" -ForegroundColor White
|
||||
Write-Host ""
|
||||
|
||||
$waitForDocker = Read-Host "Ожидать запуска Docker? (y/n)"
|
||||
if ($waitForDocker -eq "y" -or $waitForDocker -eq "Y") {
|
||||
Write-Info "Ожидание запуска Docker..."
|
||||
$attempts = 0
|
||||
$maxAttempts = 60 # 5 минут макс
|
||||
|
||||
while (-not $DockerRunning -and $attempts -lt $maxAttempts) {
|
||||
Start-Sleep -Seconds 5
|
||||
$attempts++
|
||||
Write-Host "." -NoNewline
|
||||
|
||||
try {
|
||||
$dockerInfo = docker info 2>&1
|
||||
if ($LASTEXITCODE -eq 0) {
|
||||
$DockerRunning = $true
|
||||
}
|
||||
} catch {}
|
||||
}
|
||||
Write-Host ""
|
||||
|
||||
if ($DockerRunning) {
|
||||
Write-Success "Docker запустился!"
|
||||
} else {
|
||||
Write-Error "Таймаут ожидания Docker. Запустите Docker Desktop вручную."
|
||||
exit 1
|
||||
}
|
||||
} else {
|
||||
exit 1
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
# Проверяем Docker Compose
|
||||
if ($DockerRunning) {
|
||||
try {
|
||||
$composeVersion = docker compose version 2>&1
|
||||
if ($LASTEXITCODE -eq 0) {
|
||||
Write-Success "Docker Compose доступен: $composeVersion"
|
||||
$DockerComposeAvailable = $true
|
||||
}
|
||||
} catch {}
|
||||
|
||||
if (-not $DockerComposeAvailable) {
|
||||
# Пробуем старый формат docker-compose
|
||||
try {
|
||||
$composeVersion = docker-compose --version 2>&1
|
||||
if ($LASTEXITCODE -eq 0) {
|
||||
Write-Success "Docker Compose (legacy) доступен: $composeVersion"
|
||||
$DockerComposeAvailable = $true
|
||||
}
|
||||
} catch {}
|
||||
}
|
||||
|
||||
if (-not $DockerComposeAvailable -and -not $SkipDockerCheck) {
|
||||
Write-Error "Docker Compose не найден!"
|
||||
Write-Host ""
|
||||
Write-Host "Docker Compose обычно входит в Docker Desktop." -ForegroundColor Yellow
|
||||
Write-Host "Попробуйте переустановить Docker Desktop." -ForegroundColor Yellow
|
||||
exit 1
|
||||
}
|
||||
}
|
||||
|
||||
# ==========================================
|
||||
# ШАГ 2: ПРОВЕРКА ФАЙЛОВ ПРОЕКТА
|
||||
# ==========================================
|
||||
Write-Step "Проверка файлов проекта..."
|
||||
|
||||
$dockerComposeFile = Join-Path $ScriptDir "docker-compose.yml"
|
||||
$dockerDir = Join-Path $ScriptDir "docker"
|
||||
$dockerFile = Join-Path $dockerDir "Dockerfile.singbox"
|
||||
|
||||
if (-not (Test-Path $dockerComposeFile)) {
|
||||
Write-Error "Не найден docker-compose.yml в $ScriptDir"
|
||||
exit 1
|
||||
}
|
||||
Write-Success "docker-compose.yml найден"
|
||||
|
||||
if (-not (Test-Path $dockerFile)) {
|
||||
Write-Error "Не найден docker/Dockerfile.singbox"
|
||||
exit 1
|
||||
}
|
||||
Write-Success "Dockerfile.singbox найден"
|
||||
|
||||
# ==========================================
|
||||
# ШАГ 3: СБОРКА И ЗАПУСК
|
||||
# ==========================================
|
||||
Write-Step "Сборка Docker-контейнера..."
|
||||
|
||||
# Переходим в директорию проекта
|
||||
Push-Location $ScriptDir
|
||||
|
||||
try {
|
||||
# Останавливаем старый контейнер если есть
|
||||
Write-Info "Останавливаем старый контейнер (если есть)..."
|
||||
docker compose down 2>&1 | Out-Null
|
||||
|
||||
# Собираем образ
|
||||
Write-Info "Сборка образа (может занять 1-2 минуты)..."
|
||||
$buildOutput = docker compose build 2>&1
|
||||
if ($LASTEXITCODE -ne 0) {
|
||||
Write-Error "Ошибка сборки Docker образа!"
|
||||
Write-Host $buildOutput -ForegroundColor Red
|
||||
Pop-Location
|
||||
exit 1
|
||||
}
|
||||
Write-Success "Образ собран"
|
||||
|
||||
# Запускаем контейнер
|
||||
Write-Info "Запуск контейнера..."
|
||||
$upOutput = docker compose up -d 2>&1
|
||||
if ($LASTEXITCODE -ne 0) {
|
||||
Write-Error "Ошибка запуска контейнера!"
|
||||
Write-Host $upOutput -ForegroundColor Red
|
||||
Pop-Location
|
||||
exit 1
|
||||
}
|
||||
Write-Success "Контейнер запущен"
|
||||
|
||||
} finally {
|
||||
Pop-Location
|
||||
}
|
||||
|
||||
# Ждём немного, чтобы контейнер инициализировался
|
||||
Start-Sleep -Seconds 3
|
||||
|
||||
# Проверяем статус
|
||||
Write-Step "Проверка статуса..."
|
||||
$containerStatus = docker ps --filter "name=sing-proxy" --format "{{.Status}}" 2>&1
|
||||
if ($containerStatus -match "Up") {
|
||||
Write-Success "Контейнер sing-proxy работает: $containerStatus"
|
||||
} else {
|
||||
Write-Warning "Контейнер может ещё запускаться. Проверьте через: docker ps"
|
||||
}
|
||||
|
||||
# ==========================================
|
||||
# ШАГ 4: ИНФОРМАЦИЯ О ПОДКЛЮЧЕНИИ
|
||||
# ==========================================
|
||||
Write-Host ""
|
||||
Write-Host "==========================================" -ForegroundColor Green
|
||||
Write-Host " 🎉 УСТАНОВКА ЗАВЕРШЕНА! " -ForegroundColor Green
|
||||
Write-Host "==========================================" -ForegroundColor Green
|
||||
Write-Host ""
|
||||
Write-Host "📡 Адреса подключения:" -ForegroundColor Yellow
|
||||
Write-Host " Веб-интерфейс: http://localhost:3456" -ForegroundColor White
|
||||
Write-Host " HTTP/SOCKS Прокси: 127.0.0.1:8082" -ForegroundColor White
|
||||
Write-Host ""
|
||||
Write-Host "📋 Следующие шаги:" -ForegroundColor Yellow
|
||||
Write-Host " 1. Откройте http://localhost:3456 в браузере" -ForegroundColor White
|
||||
Write-Host " 2. Вставьте VLESS ссылку или URL подписки" -ForegroundColor White
|
||||
Write-Host " 3. Нажмите 'Применить'" -ForegroundColor White
|
||||
Write-Host ""
|
||||
|
||||
# ==========================================
|
||||
# ШАГ 5: УСТАНОВКА СКРИПТА ДЛЯ DISCORD
|
||||
# ==========================================
|
||||
if (-not $SkipDiscord) {
|
||||
Write-Host "==========================================" -ForegroundColor Cyan
|
||||
Write-Host ""
|
||||
Write-Host "🎮 Хотите установить ProxiFyre для Discord/Vesktop?" -ForegroundColor Yellow
|
||||
Write-Host " Это позволит направить трафик Discord через прокси" -ForegroundColor Gray
|
||||
Write-Host ""
|
||||
Write-Host " [1] Да, установить для Discord" -ForegroundColor White
|
||||
Write-Host " [2] Да, установить для Vesktop" -ForegroundColor White
|
||||
Write-Host " [3] Да, установить для Discord + Vesktop" -ForegroundColor White
|
||||
Write-Host " [n] Нет, пропустить" -ForegroundColor White
|
||||
Write-Host ""
|
||||
$discordChoice = Read-Host "👉 Выбор (1-3/n)"
|
||||
|
||||
if ($discordChoice -match "^[123]$") {
|
||||
# Проверяем права администратора
|
||||
$isAdmin = ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator")
|
||||
|
||||
if (-not $isAdmin) {
|
||||
Write-Warning "Для установки ProxiFyre нужны права администратора!"
|
||||
Write-Host ""
|
||||
Write-Host "Запустите этот скрипт от имени администратора," -ForegroundColor Yellow
|
||||
Write-Host "или запустите discord-windows-hack.ps1 отдельно:" -ForegroundColor Yellow
|
||||
Write-Host ""
|
||||
Write-Host " 1. Откройте PowerShell от имени Администратора" -ForegroundColor White
|
||||
Write-Host " 2. Выполните:" -ForegroundColor White
|
||||
Write-Host " cd `"$ScriptDir`"" -ForegroundColor Cyan
|
||||
Write-Host " .\discord-windows-hack.ps1" -ForegroundColor Cyan
|
||||
Write-Host ""
|
||||
} else {
|
||||
# Запускаем скрипт с параметрами для неинтерактивного режима
|
||||
$discordScript = Join-Path $ScriptDir "discord-windows-hack.ps1"
|
||||
|
||||
if (Test-Path $discordScript) {
|
||||
Write-Step "Запуск установки ProxiFyre для Discord..."
|
||||
|
||||
# Определяем целевые приложения
|
||||
$targetApps = switch ($discordChoice) {
|
||||
"1" { @("Discord") }
|
||||
"2" { @("Vesktop") }
|
||||
"3" { @("Vesktop", "Discord") }
|
||||
}
|
||||
|
||||
# Вызываем discord-windows-hack.ps1 с параметрами (без дублирования кода)
|
||||
& $discordScript -Proxy "127.0.0.1:8082" -Apps $targetApps -Force
|
||||
|
||||
} else {
|
||||
Write-Warning "Скрипт discord-windows-hack.ps1 не найден"
|
||||
Write-Info "Скачайте его или создайте вручную"
|
||||
}
|
||||
}
|
||||
} else {
|
||||
Write-Info "Установка Discord прокси пропущена"
|
||||
}
|
||||
}
|
||||
|
||||
# ==========================================
|
||||
# ФИНАЛЬНЫЕ ИНСТРУКЦИИ
|
||||
# ==========================================
|
||||
Write-Host ""
|
||||
Write-Host "==========================================" -ForegroundColor Cyan
|
||||
Write-Host " 📋 ПОЛЕЗНЫЕ КОМАНДЫ " -ForegroundColor Cyan
|
||||
Write-Host "==========================================" -ForegroundColor Cyan
|
||||
Write-Host ""
|
||||
Write-Host "🐳 Docker:" -ForegroundColor Yellow
|
||||
Write-Host " docker ps - статус контейнера" -ForegroundColor Gray
|
||||
Write-Host " docker logs --tail 50 sing-proxy - логи VPN-прокси" -ForegroundColor Gray
|
||||
Write-Host " docker compose restart - перезапуск" -ForegroundColor Gray
|
||||
Write-Host " docker compose down - остановка" -ForegroundColor Gray
|
||||
Write-Host ""
|
||||
Write-Host "🛡️ ProxiFyre (если установлен):" -ForegroundColor Yellow
|
||||
Write-Host " Get-Content C:\Tools\ProxiFyre\app-config.json - конфиг" -ForegroundColor Gray
|
||||
Write-Host " Get-ChildItem C:\Tools\ProxiFyre\logs - список логов" -ForegroundColor Gray
|
||||
Write-Host " Get-Content C:\Tools\ProxiFyre\logs\*.log -Tail 50 - последние логи" -ForegroundColor Gray
|
||||
Write-Host " Get-Service ProxiFyreService - статус службы" -ForegroundColor Gray
|
||||
Write-Host " Restart-Service ProxiFyreService - перезапуск службы" -ForegroundColor Gray
|
||||
Write-Host ""
|
||||
Reference in New Issue
Block a user