@woai
commited on
Commit
Β·
6bf65c9
1
Parent(s):
e775565
πͺ Add Windows deployment scripts and documentation - PowerShell and Batch scripts for Windows Server deployment, Complete Windows Services setup with NSSM, Firewall configuration, .env template creation, Detailed troubleshooting guide in DEPLOYMENT_WINDOWS.md
Browse files- DEPLOYMENT_WINDOWS.md +270 -0
- deploy.bat +131 -0
- deploy.ps1 +202 -0
- update.ps1 +104 -0
DEPLOYMENT_WINDOWS.md
ADDED
|
@@ -0,0 +1,270 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# π Windows Deployment Guide
|
| 2 |
+
|
| 3 |
+
ΠΠΎΠ΄ΡΠΎΠ±Π½Π°Ρ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡ ΠΏΠΎ ΡΠ°Π·Π²Π΅ΡΡΡΠ²Π°Π½ΠΈΡ YouTube Metadata Extractor Π½Π° Windows Server/Desktop.
|
| 4 |
+
|
| 5 |
+
## π Π’ΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡ
|
| 6 |
+
|
| 7 |
+
- **OS**: Windows 10/11 ΠΈΠ»ΠΈ Windows Server 2016+
|
| 8 |
+
- **RAM**: ΠΠΈΠ½ΠΈΠΌΡΠΌ 2GB, ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΡΡΡ 4GB+
|
| 9 |
+
- **ΠΠ΅ΡΡΠΎ Π½Π° Π΄ΠΈΡΠΊΠ΅**: 1GB ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΌΠ΅ΡΡΠ°
|
| 10 |
+
- **ΠΡΠ°Π²Π°**: ΠΠ΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡΡΠΊΠΈΠ΅ ΠΏΡΠ°Π²Π° Π΄Π»Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΡΠ»ΡΠΆΠ±
|
| 11 |
+
|
| 12 |
+
## π― ΠΡΡΡΡΠΎΠ΅ ΡΠ°Π·Π²Π΅ΡΡΡΠ²Π°Π½ΠΈΠ΅
|
| 13 |
+
|
| 14 |
+
### ΠΠ°ΡΠΈΠ°Π½Ρ 1: PowerShell ΡΠΊΡΠΈΠΏΡ (ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΡΡΡ)
|
| 15 |
+
|
| 16 |
+
1. **ΠΠ°ΠΏΡΡΡΠΈΡΠ΅ PowerShell ΠΊΠ°ΠΊ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡ**
|
| 17 |
+
```
|
| 18 |
+
ΠΠ°ΠΆΠΌΠΈΡΠ΅ Win+X β Windows PowerShell (Admin)
|
| 19 |
+
```
|
| 20 |
+
|
| 21 |
+
2. **Π Π°Π·ΡΠ΅ΡΠΈΡΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΡΠΊΡΠΈΠΏΡΠΎΠ²** (Π΅ΡΠ»ΠΈ Π½ΡΠΆΠ½ΠΎ)
|
| 22 |
+
```powershell
|
| 23 |
+
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
|
| 24 |
+
```
|
| 25 |
+
|
| 26 |
+
3. **Π‘ΠΊΠ°ΡΠ°ΠΉΡΠ΅ ΠΈ Π·Π°ΠΏΡΡΡΠΈΡΠ΅ ΡΠΊΡΠΈΠΏΡ ΡΠ°Π·Π²Π΅ΡΡΡΠ²Π°Π½ΠΈΡ**
|
| 27 |
+
```powershell
|
| 28 |
+
# Π‘ΠΊΠ°ΡΠ°ΠΉΡΠ΅ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ
|
| 29 |
+
cd $env:USERPROFILE
|
| 30 |
+
git clone https://huggingface.co/spaces/dzianisBY/YouTube_Creator_MetaData YouTube-Deploy
|
| 31 |
+
cd YouTube-Deploy
|
| 32 |
+
|
| 33 |
+
# ΠΠ°ΠΏΡΡΡΠΈΡΠ΅ ΡΠ°Π·Π²Π΅ΡΡΡΠ²Π°Π½ΠΈΠ΅
|
| 34 |
+
.\deploy.ps1
|
| 35 |
+
```
|
| 36 |
+
|
| 37 |
+
### ΠΠ°ΡΠΈΠ°Π½Ρ 2: Batch ΡΠ°ΠΉΠ»
|
| 38 |
+
|
| 39 |
+
1. **Π‘ΠΊΠ°ΡΠ°ΠΉΡΠ΅ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ**
|
| 40 |
+
2. **ΠΠ°ΠΉΠ΄ΠΈΡΠ΅ ΡΠ°ΠΉΠ» `deploy.bat`**
|
| 41 |
+
3. **ΠΠ°ΠΆΠΌΠΈΡΠ΅ ΠΏΡΠ°Π²ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ β "ΠΠ°ΠΏΡΡΠΊ ΠΎΡ ΠΈΠΌΠ΅Π½ΠΈ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡΠ°"**
|
| 42 |
+
|
| 43 |
+
## π§ Π§ΡΠΎ Π΄Π΅Π»Π°Π΅Ρ ΡΠΊΡΠΈΠΏΡ ΡΠ°Π·Π²Π΅ΡΡΡΠ²Π°Π½ΠΈΡ
|
| 44 |
+
|
| 45 |
+
### π¦ Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ
|
| 46 |
+
- **Chocolatey** - ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ ΠΏΠ°ΠΊΠ΅ΡΠΎΠ² Π΄Π»Ρ Windows
|
| 47 |
+
- **Python 3.x** - ΡΡΠ΅Π΄Π° Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ
|
| 48 |
+
- **Git** - ΡΠΈΡΡΠ΅ΠΌΠ° ΠΊΠΎΠ½ΡΡΠΎΠ»Ρ Π²Π΅ΡΡΠΈΠΉ
|
| 49 |
+
- **NSSM** - ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ ΡΠ»ΡΠΆΠ± Windows
|
| 50 |
+
|
| 51 |
+
### ποΈ ΠΠ°ΡΡΡΠΎΠΉΠΊΠ° ΠΏΡΠΎΠ΅ΠΊΡΠ°
|
| 52 |
+
- ΠΠ»ΠΎΠ½ΠΈΡΡΠ΅Ρ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ Π² `%USERPROFILE%\YouTube`
|
| 53 |
+
- Π‘ΠΎΠ·Π΄Π°Π΅Ρ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠ΅ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΠ΅ Python
|
| 54 |
+
- Π£ΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ Π²ΡΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΈΠ· `requirements.txt`
|
| 55 |
+
- Π‘ΠΎΠ·Π΄Π°Π΅Ρ ΡΠ°ΠΉΠ» `.env` Ρ ΡΠ°Π±Π»ΠΎΠ½ΠΎΠΌ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ
|
| 56 |
+
|
| 57 |
+
### π οΈ Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΡΠ»ΡΠΆΠ± Windows
|
| 58 |
+
- **YouTube-API** - API ΡΠ΅ΡΠ²Π΅Ρ (ΠΏΠΎΡΡ 8080)
|
| 59 |
+
- **YouTube-Bot** - Telegram Π±ΠΎΡ
|
| 60 |
+
- ΠΠ°ΡΡΡΠ°ΠΈΠ²Π°Π΅Ρ Π°Π²ΡΠΎΠ·Π°ΠΏΡΡΠΊ ΡΠ»ΡΠΆΠ±
|
| 61 |
+
- ΠΠ°ΡΡΡΠ°ΠΈΠ²Π°Π΅Ρ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ (Π±ΠΎΡ Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ API)
|
| 62 |
+
|
| 63 |
+
### π₯ ΠΠ°ΡΡΡΠΎΠΉΠΊΠ° Π±ΡΠ°Π½Π΄ΠΌΠ°ΡΡΡΠ°
|
| 64 |
+
- ΠΡΠΊΡΡΠ²Π°Π΅Ρ ΠΏΠΎΡΡ 8080 Π΄Π»Ρ Π²Ρ
ΠΎΠ΄ΡΡΠΈΡ
ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠΉ
|
| 65 |
+
|
| 66 |
+
## βοΈ ΠΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ
|
| 67 |
+
|
| 68 |
+
### 1. ΠΠ°ΡΡΡΠΎΠΉΠΊΠ° API ΠΊΠ»ΡΡΠ΅ΠΉ
|
| 69 |
+
|
| 70 |
+
ΠΡΡΠ΅Π΄Π°ΠΊΡΠΈΡΡΠΉΡΠ΅ ΡΠ°ΠΉΠ» `%USERPROFILE%\YouTube\.env`:
|
| 71 |
+
|
| 72 |
+
```env
|
| 73 |
+
# YouTube API ΠΊΠ»ΡΡ (ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ)
|
| 74 |
+
YOUTUBE_API_KEY=AIzaSyC9XiK_your_youtube_api_key_here
|
| 75 |
+
|
| 76 |
+
# Telegram Bot ΡΠΎΠΊΠ΅Π½ (ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ)
|
| 77 |
+
TELEGRAM_TOKEN=1234567890:AAEBOK_your_telegram_bot_token_here
|
| 78 |
+
|
| 79 |
+
# Gemini AI ΠΊΠ»ΡΡ (ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ Π΄Π»Ρ ΡΠ°ΠΉΠΌ-ΠΊΠΎΠ΄ΠΎΠ²)
|
| 80 |
+
GEMINI_API_KEY=AIzaSyC_your_gemini_api_key_here
|
| 81 |
+
|
| 82 |
+
# MCP Server URL (ΠΎΠ±ΡΡΠ½ΠΎ Π½Π΅ ΡΡΠ΅Π±ΡΠ΅Ρ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ)
|
| 83 |
+
MCP_BASE_URL=https://youtube-bot.tuttech.net/api/mcp
|
| 84 |
+
|
| 85 |
+
# ΠΠ°ΡΡΡΠΎΠΉΠΊΠΈ ΡΠ΅ΡΠ²Π΅ΡΠ°
|
| 86 |
+
HOST=0.0.0.0
|
| 87 |
+
PORT=8080
|
| 88 |
+
```
|
| 89 |
+
|
| 90 |
+
### 2. ΠΠ΅ΡΠ΅Π·Π°ΠΏΡΡΠΊ ΡΠ»ΡΠΆΠ± ΠΏΠΎΡΠ»Π΅ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ
|
| 91 |
+
|
| 92 |
+
```powershell
|
| 93 |
+
# PowerShell
|
| 94 |
+
Restart-Service YouTube-API, YouTube-Bot
|
| 95 |
+
```
|
| 96 |
+
|
| 97 |
+
```cmd
|
| 98 |
+
# Command Prompt
|
| 99 |
+
net stop "YouTube-API" "YouTube-Bot"
|
| 100 |
+
net start "YouTube-API" "YouTube-Bot"
|
| 101 |
+
```
|
| 102 |
+
|
| 103 |
+
## π± Π£ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠ»ΡΠΆΠ±Π°ΠΌΠΈ
|
| 104 |
+
|
| 105 |
+
### PowerShell ΠΊΠΎΠΌΠ°Π½Π΄Ρ
|
| 106 |
+
```powershell
|
| 107 |
+
# ΠΡΠΎΠ²Π΅ΡΠΊΠ° ΡΡΠ°ΡΡΡΠ°
|
| 108 |
+
Get-Service YouTube-API, YouTube-Bot
|
| 109 |
+
|
| 110 |
+
# ΠΠ°ΠΏΡΡΠΊ ΡΠ»ΡΠΆΠ±
|
| 111 |
+
Start-Service YouTube-API, YouTube-Bot
|
| 112 |
+
|
| 113 |
+
# ΠΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΡΠ»ΡΠΆΠ±
|
| 114 |
+
Stop-Service YouTube-API, YouTube-Bot
|
| 115 |
+
|
| 116 |
+
# ΠΠ΅ΡΠ΅Π·Π°ΠΏΡΡΠΊ ΡΠ»ΡΠΆΠ±
|
| 117 |
+
Restart-Service YouTube-API, YouTube-Bot
|
| 118 |
+
|
| 119 |
+
# ΠΡΠΎΡΠΌΠΎΡΡ Π»ΠΎΠ³ΠΎΠ²
|
| 120 |
+
Get-EventLog -LogName Application -Source YouTube* -Newest 50
|
| 121 |
+
```
|
| 122 |
+
|
| 123 |
+
### Command Prompt ΠΊΠΎΠΌΠ°Π½Π΄Ρ
|
| 124 |
+
```cmd
|
| 125 |
+
# ΠΡΠΎΠ²Π΅ΡΠΊΠ° ΡΡΠ°ΡΡΡΠ°
|
| 126 |
+
sc query "YouTube-API"
|
| 127 |
+
sc query "YouTube-Bot"
|
| 128 |
+
|
| 129 |
+
# ΠΠ°ΠΏΡΡΠΊ ΡΠ»ΡΠΆΠ±
|
| 130 |
+
net start "YouTube-API"
|
| 131 |
+
net start "YouTube-Bot"
|
| 132 |
+
|
| 133 |
+
# ΠΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΡΠ»ΡΠΆΠ±
|
| 134 |
+
net stop "YouTube-API"
|
| 135 |
+
net stop "YouTube-Bot"
|
| 136 |
+
```
|
| 137 |
+
|
| 138 |
+
## π ΠΡΠΎΠ²Π΅ΡΠΊΠ° ΡΠ°Π±ΠΎΡΠΎΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡΠΈ
|
| 139 |
+
|
| 140 |
+
### 1. ΠΡΠΎΠ²Π΅ΡΠΊΠ° API ΡΠ΅ΡΠ²Π΅ΡΠ°
|
| 141 |
+
```powershell
|
| 142 |
+
# ΠΡΠΎΠ²Π΅ΡΠΊΠ° ΡΠ΅ΡΠ΅Π· PowerShell
|
| 143 |
+
$response = Invoke-RestMethod -Uri "http://localhost:8080/health" -Method GET
|
| 144 |
+
$response
|
| 145 |
+
|
| 146 |
+
# ΠΠ»ΠΈ ΡΠ΅ΡΠ΅Π· Π±ΡΠ°ΡΠ·Π΅Ρ
|
| 147 |
+
Start "http://localhost:8080"
|
| 148 |
+
```
|
| 149 |
+
|
| 150 |
+
### 2. ΠΡΠΎΠ²Π΅ΡΠΊΠ° ΡΠ»ΡΠΆΠ±
|
| 151 |
+
```powershell
|
| 152 |
+
Get-Service YouTube-* | Format-Table Name, Status, StartType
|
| 153 |
+
```
|
| 154 |
+
|
| 155 |
+
### 3. ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π»ΠΎΠ³ΠΎΠ²
|
| 156 |
+
```powershell
|
| 157 |
+
# ΠΠΎΠ³ΠΈ API ΡΠ΅ΡΠ²Π΅ΡΠ°
|
| 158 |
+
Get-EventLog -LogName Application -Source "YouTube-API" -Newest 10
|
| 159 |
+
|
| 160 |
+
# ΠΠΎΠ³ΠΈ Telegram Π±ΠΎΡΠ°
|
| 161 |
+
Get-EventLog -LogName Application -Source "YouTube-Bot" -Newest 10
|
| 162 |
+
```
|
| 163 |
+
|
| 164 |
+
## π ΠΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΡΠΈΡΡΠ΅ΠΌΡ
|
| 165 |
+
|
| 166 |
+
### ΠΠ²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅
|
| 167 |
+
```powershell
|
| 168 |
+
cd $env:USERPROFILE\YouTube
|
| 169 |
+
.\update.ps1
|
| 170 |
+
```
|
| 171 |
+
|
| 172 |
+
### Π ΡΡΠ½ΠΎΠ΅ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅
|
| 173 |
+
```powershell
|
| 174 |
+
# ΠΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΡΠ»ΡΠΆΠ±Ρ
|
| 175 |
+
Stop-Service YouTube-API, YouTube-Bot
|
| 176 |
+
|
| 177 |
+
# ΠΠ±Π½ΠΎΠ²ΠΈΡΡ ΠΊΠΎΠ΄
|
| 178 |
+
cd $env:USERPROFILE\YouTube
|
| 179 |
+
git pull origin main
|
| 180 |
+
|
| 181 |
+
# ΠΠ±Π½ΠΎΠ²ΠΈΡΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ
|
| 182 |
+
.\.venv\Scripts\Activate.ps1
|
| 183 |
+
pip install -r requirements.txt --upgrade
|
| 184 |
+
|
| 185 |
+
# ΠΠ°ΠΏΡΡΡΠΈΡΡ ΡΠ»ΡΠΆΠ±Ρ
|
| 186 |
+
Start-Service YouTube-API, YouTube-Bot
|
| 187 |
+
```
|
| 188 |
+
|
| 189 |
+
## π§ͺ Π’Π΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅
|
| 190 |
+
|
| 191 |
+
### Π ΡΡΠ½ΠΎΠΉ Π·Π°ΠΏΡΡΠΊ Π΄Π»Ρ ΠΎΡΠ»Π°Π΄ΠΊΠΈ
|
| 192 |
+
```powershell
|
| 193 |
+
# ΠΠΊΡΠΈΠ²ΠΈΡΠΎΠ²Π°ΡΡ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠ΅ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΠ΅
|
| 194 |
+
cd $env:USERPROFILE\YouTube
|
| 195 |
+
.\.venv\Scripts\Activate.ps1
|
| 196 |
+
|
| 197 |
+
# ΠΠ°ΠΏΡΡΡΠΈΡΡ API ΡΠ΅ΡΠ²Π΅Ρ
|
| 198 |
+
python main.py
|
| 199 |
+
|
| 200 |
+
# Π Π΄ΡΡΠ³ΠΎΠΌ ΠΎΠΊΠ½Π΅ - Π·Π°ΠΏΡΡΡΠΈΡΡ Π±ΠΎΡΠ°
|
| 201 |
+
python run_telegram_bot.py
|
| 202 |
+
```
|
| 203 |
+
|
| 204 |
+
## π¨ Π£ΡΡΡΠ°Π½Π΅Π½ΠΈΠ΅ Π½Π΅ΠΏΠΎΠ»Π°Π΄ΠΎΠΊ
|
| 205 |
+
|
| 206 |
+
### Π‘Π»ΡΠΆΠ±Π° Π½Π΅ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΡΡΡ
|
| 207 |
+
1. **ΠΡΠΎΠ²Π΅ΡΡΡΠ΅ ΡΠ°ΠΉΠ» .env** - ΡΠ±Π΅Π΄ΠΈΡΠ΅ΡΡ, ΡΡΠΎ Π²ΡΠ΅ ΠΊΠ»ΡΡΠΈ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½Ρ
|
| 208 |
+
2. **ΠΡΠΎΠ²Π΅ΡΡΡΠ΅ Π»ΠΎΠ³ΠΈ** - `Get-EventLog -LogName Application -Source YouTube*`
|
| 209 |
+
3. **ΠΠ°ΠΏΡΡΡΠΈΡΠ΅ Π²ΡΡΡΠ½ΡΡ** Π΄Π»Ρ Π΄ΠΈΠ°Π³Π½ΠΎΡΡΠΈΠΊΠΈ
|
| 210 |
+
|
| 211 |
+
### ΠΡΠΈΠ±ΠΊΠΈ Π² Π»ΠΎΠ³Π°Ρ
|
| 212 |
+
```powershell
|
| 213 |
+
# ΠΠΎΠ΄ΡΠΎΠ±Π½ΡΠ΅ Π»ΠΎΠ³ΠΈ
|
| 214 |
+
Get-EventLog -LogName Application -Source YouTube* | Format-List
|
| 215 |
+
```
|
| 216 |
+
|
| 217 |
+
### ΠΡΠΎΠ±Π»Π΅ΠΌΡ Ρ ΠΏΠΎΡΡΠΎΠΌ 8080
|
| 218 |
+
```powershell
|
| 219 |
+
# ΠΡΠΎΠ²Π΅ΡΠΈΡΡ, ΡΡΠΎ ΠΏΠΎΡΡ ΡΠ²ΠΎΠ±ΠΎΠ΄Π΅Π½
|
| 220 |
+
netstat -an | findstr :8080
|
| 221 |
+
|
| 222 |
+
# ΠΠ·ΠΌΠ΅Π½ΠΈΡΡ ΠΏΠΎΡΡ Π² .env ΡΠ°ΠΉΠ»Π΅, Π·Π°ΡΠ΅ΠΌ ΠΏΠ΅ΡΠ΅Π·Π°ΠΏΡΡΡΠΈΡΡ ΡΠ»ΡΠΆΠ±Ρ
|
| 223 |
+
```
|
| 224 |
+
|
| 225 |
+
### ΠΡΠΎΠ±Π»Π΅ΠΌΡ Ρ Π±ΡΠ°Π½Π΄ΠΌΠ°ΡΡΡΠΎΠΌ
|
| 226 |
+
```powershell
|
| 227 |
+
# Π ΡΡΠ½ΠΎΠ΅ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΡΠ°Π²ΠΈΠ»Π°
|
| 228 |
+
New-NetFirewallRule -DisplayName "YouTube API" -Direction Inbound -Protocol TCP -LocalPort 8080 -Action Allow
|
| 229 |
+
```
|
| 230 |
+
|
| 231 |
+
## π Π‘ΡΡΡΠΊΡΡΡΠ° ΠΏΡΠΎΠ΅ΠΊΡΠ°
|
| 232 |
+
|
| 233 |
+
```
|
| 234 |
+
%USERPROFILE%\YouTube\
|
| 235 |
+
βββ .env # ΠΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ (API ΠΊΠ»ΡΡΠΈ)
|
| 236 |
+
βββ .venv\ # ΠΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠ΅ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΠ΅ Python
|
| 237 |
+
βββ main.py # API ΡΠ΅ΡΠ²Π΅Ρ
|
| 238 |
+
βββ run_telegram_bot.py # Telegram Π±ΠΎΡ
|
| 239 |
+
βββ start-api.ps1 # Π‘ΠΊΡΠΈΠΏΡ Π·Π°ΠΏΡΡΠΊΠ° API (Π΄Π»Ρ ΡΠ»ΡΠΆΠ±Ρ)
|
| 240 |
+
βββ start-bot.ps1 # Π‘ΠΊΡΠΈΠΏΡ Π·Π°ΠΏΡΡΠΊΠ° Π±ΠΎΡΠ° (Π΄Π»Ρ ΡΠ»ΡΠΆΠ±Ρ)
|
| 241 |
+
βββ start-api.bat # Π‘ΠΊΡΠΈΠΏΡ Π·Π°ΠΏΡΡΠΊΠ° API (batch)
|
| 242 |
+
βββ start-bot.bat # Π‘ΠΊΡΠΈΠΏΡ Π·Π°ΠΏΡΡΠΊΠ° Π±ΠΎΡΠ° (batch)
|
| 243 |
+
βββ requirements.txt # Python Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ
|
| 244 |
+
βββ telegram_requirements.txt
|
| 245 |
+
βββ deploy.ps1 # Π‘ΠΊΡΠΈΠΏΡ ΡΠ°Π·Π²Π΅ΡΡΡΠ²Π°Π½ΠΈΡ
|
| 246 |
+
```
|
| 247 |
+
|
| 248 |
+
## π ΠΠΎΠ»Π΅Π·Π½ΡΠ΅ ΡΡΡΠ»ΠΊΠΈ
|
| 249 |
+
|
| 250 |
+
- **API Health Check**: http://localhost:8080/health
|
| 251 |
+
- **API Documentation**: http://localhost:8080/docs
|
| 252 |
+
- **Service Manager**: `services.msc`
|
| 253 |
+
- **Event Viewer**: `eventvwr.msc`
|
| 254 |
+
|
| 255 |
+
## π‘ Π‘ΠΎΠ²Π΅ΡΡ
|
| 256 |
+
|
| 257 |
+
1. **ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ PowerShell ISE** Π΄Π»Ρ Π±ΠΎΠ»Π΅Π΅ ΡΠ΄ΠΎΠ±Π½ΠΎΠ³ΠΎ ΡΠ΅Π΄Π°ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠΊΡΠΈΠΏΡΠΎΠ²
|
| 258 |
+
2. **Π‘ΠΎΠ·Π΄Π°ΠΉΡΠ΅ ΡΡΠ»ΡΠΊΠΈ** Π΄Π»Ρ ΡΠ°ΡΡΡΡ
ΠΊΠΎΠΌΠ°Π½Π΄ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ
|
| 259 |
+
3. **ΠΠ°ΡΡΡΠΎΠΉΡΠ΅ ΠΌΠΎΠ½ΠΈΡΠΎΡΠΈΠ½Π³** ΡΠ»ΡΠΆΠ± ΡΠ΅ΡΠ΅Π· Task Scheduler
|
| 260 |
+
4. **ΠΠ΅Π»Π°ΠΉΡΠ΅ Π±ΡΠΊΠ°ΠΏΡ** ΡΠ°ΠΉΠ»Π° .env ΠΏΠ΅ΡΠ΅Π΄ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡΠΌΠΈ
|
| 261 |
+
|
| 262 |
+
---
|
| 263 |
+
|
| 264 |
+
## π ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ°
|
| 265 |
+
|
| 266 |
+
ΠΡΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌ:
|
| 267 |
+
1. ΠΡΠΎΠ²Π΅ΡΡΡΠ΅ Π»ΠΎΠ³ΠΈ ΡΠ»ΡΠΆΠ±
|
| 268 |
+
2. Π£Π±Π΅Π΄ΠΈΡΠ΅ΡΡ Π² ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΡΡΠΈ API ΠΊΠ»ΡΡΠ΅ΠΉ
|
| 269 |
+
3. ΠΡΠΎΠ²Π΅ΡΡΡΠ΅ Π΄ΠΎΡΡΡΠΏΠ½ΠΎΡΡΡ ΠΈΠ½ΡΠ΅ΡΠ½Π΅ΡΠ°
|
| 270 |
+
4. ΠΠ°ΠΏΡΡΡΠΈΡΠ΅ ΡΡΡΠ½ΡΡ Π΄ΠΈΠ°Π³Π½ΠΎΡΡΠΈΠΊΡ
|
deploy.bat
ADDED
|
@@ -0,0 +1,131 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
@echo off
|
| 2 |
+
REM π YouTube Metadata Extractor - Windows Deployment (Batch)
|
| 3 |
+
REM Simple deployment script for Windows
|
| 4 |
+
|
| 5 |
+
echo π Starting deployment of YouTube Metadata Extractor on Windows...
|
| 6 |
+
|
| 7 |
+
REM Check if running as Administrator
|
| 8 |
+
net session >nul 2>&1
|
| 9 |
+
if %errorLevel% == 0 (
|
| 10 |
+
echo β
Running as Administrator
|
| 11 |
+
) else (
|
| 12 |
+
echo β This script must be run as Administrator
|
| 13 |
+
echo Please right-click this file and select "Run as administrator"
|
| 14 |
+
pause
|
| 15 |
+
exit /b 1
|
| 16 |
+
)
|
| 17 |
+
|
| 18 |
+
REM Set configuration
|
| 19 |
+
set PROJECT_DIR=%USERPROFILE%\YouTube
|
| 20 |
+
set REPO_URL=https://huggingface.co/spaces/dzianisBY/YouTube_Creator_MetaData
|
| 21 |
+
|
| 22 |
+
echo β
Installing Chocolatey (if not present)...
|
| 23 |
+
where choco >nul 2>&1
|
| 24 |
+
if %errorLevel% == 0 (
|
| 25 |
+
echo Chocolatey already installed
|
| 26 |
+
) else (
|
| 27 |
+
powershell -Command "Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))"
|
| 28 |
+
call refreshenv
|
| 29 |
+
)
|
| 30 |
+
|
| 31 |
+
echo β
Installing Python and Git...
|
| 32 |
+
choco install python git -y
|
| 33 |
+
call refreshenv
|
| 34 |
+
|
| 35 |
+
echo β
Creating project directory...
|
| 36 |
+
if not exist "%PROJECT_DIR%" mkdir "%PROJECT_DIR%"
|
| 37 |
+
cd /d "%PROJECT_DIR%"
|
| 38 |
+
|
| 39 |
+
echo β
Cloning repository...
|
| 40 |
+
if exist ".git" (
|
| 41 |
+
git pull origin main
|
| 42 |
+
) else (
|
| 43 |
+
git clone %REPO_URL% .
|
| 44 |
+
)
|
| 45 |
+
|
| 46 |
+
echo β
Setting up Python virtual environment...
|
| 47 |
+
python -m venv .venv
|
| 48 |
+
call .venv\Scripts\activate.bat
|
| 49 |
+
|
| 50 |
+
echo β
Installing Python dependencies...
|
| 51 |
+
python -m pip install --upgrade pip
|
| 52 |
+
pip install -r requirements.txt
|
| 53 |
+
pip install -r telegram_requirements.txt
|
| 54 |
+
|
| 55 |
+
echo β
Creating .env template...
|
| 56 |
+
if not exist ".env" (
|
| 57 |
+
echo # YouTube API Configuration > .env
|
| 58 |
+
echo YOUTUBE_API_KEY=your_youtube_api_key_here >> .env
|
| 59 |
+
echo. >> .env
|
| 60 |
+
echo # Telegram Bot Configuration >> .env
|
| 61 |
+
echo TELEGRAM_TOKEN=your_telegram_bot_token_here >> .env
|
| 62 |
+
echo. >> .env
|
| 63 |
+
echo # MCP Server Configuration >> .env
|
| 64 |
+
echo MCP_BASE_URL=https://youtube-bot.tuttech.net/api/mcp >> .env
|
| 65 |
+
echo. >> .env
|
| 66 |
+
echo # Gemini AI Configuration >> .env
|
| 67 |
+
echo GEMINI_API_KEY=your_gemini_api_key_here >> .env
|
| 68 |
+
echo. >> .env
|
| 69 |
+
echo # Server Configuration >> .env
|
| 70 |
+
echo HOST=0.0.0.0 >> .env
|
| 71 |
+
echo PORT=8080 >> .env
|
| 72 |
+
|
| 73 |
+
echo β οΈ Created .env template file
|
| 74 |
+
echo β οΈ Please edit %PROJECT_DIR%\.env with your actual API keys!
|
| 75 |
+
)
|
| 76 |
+
|
| 77 |
+
echo β
Creating startup scripts...
|
| 78 |
+
echo @echo off > start-api.bat
|
| 79 |
+
echo cd /d "%PROJECT_DIR%" >> start-api.bat
|
| 80 |
+
echo call .venv\Scripts\activate.bat >> start-api.bat
|
| 81 |
+
echo python main.py >> start-api.bat
|
| 82 |
+
|
| 83 |
+
echo @echo off > start-bot.bat
|
| 84 |
+
echo cd /d "%PROJECT_DIR%" >> start-bot.bat
|
| 85 |
+
echo call .venv\Scripts\activate.bat >> start-bot.bat
|
| 86 |
+
echo python run_telegram_bot.py >> start-bot.bat
|
| 87 |
+
|
| 88 |
+
echo β
Installing NSSM for Windows Services...
|
| 89 |
+
choco install nssm -y
|
| 90 |
+
|
| 91 |
+
echo β
Creating Windows Services...
|
| 92 |
+
nssm remove "YouTube-API" confirm >nul 2>&1
|
| 93 |
+
nssm remove "YouTube-Bot" confirm >nul 2>&1
|
| 94 |
+
|
| 95 |
+
nssm install "YouTube-API" "%PROJECT_DIR%\start-api.bat"
|
| 96 |
+
nssm set "YouTube-API" DisplayName "YouTube MCP API Server"
|
| 97 |
+
nssm set "YouTube-API" Description "YouTube Metadata Extractor API Server"
|
| 98 |
+
nssm set "YouTube-API" Start SERVICE_AUTO_START
|
| 99 |
+
|
| 100 |
+
nssm install "YouTube-Bot" "%PROJECT_DIR%\start-bot.bat"
|
| 101 |
+
nssm set "YouTube-Bot" DisplayName "YouTube Telegram Bot"
|
| 102 |
+
nssm set "YouTube-Bot" Description "YouTube Metadata Extractor Telegram Bot"
|
| 103 |
+
nssm set "YouTube-Bot" Start SERVICE_AUTO_START
|
| 104 |
+
nssm set "YouTube-Bot" DependOnService "YouTube-API"
|
| 105 |
+
|
| 106 |
+
echo β
Starting services...
|
| 107 |
+
net start "YouTube-API"
|
| 108 |
+
timeout /t 5 /nobreak >nul
|
| 109 |
+
net start "YouTube-Bot"
|
| 110 |
+
|
| 111 |
+
echo β
Configuring Windows Firewall...
|
| 112 |
+
netsh advfirewall firewall add rule name="YouTube API Server" dir=in action=allow protocol=TCP localport=8080 >nul 2>&1
|
| 113 |
+
|
| 114 |
+
echo.
|
| 115 |
+
echo β
Deployment completed!
|
| 116 |
+
echo.
|
| 117 |
+
echo π Next steps:
|
| 118 |
+
echo 1. Edit %PROJECT_DIR%\.env with your API keys
|
| 119 |
+
echo 2. Restart services: net stop "YouTube-API" "YouTube-Bot" ^& net start "YouTube-API" "YouTube-Bot"
|
| 120 |
+
echo 3. Check services: sc query "YouTube-API" ^& sc query "YouTube-Bot"
|
| 121 |
+
echo.
|
| 122 |
+
echo π Service URLs:
|
| 123 |
+
echo - API Server: http://localhost:8080
|
| 124 |
+
echo - Health Check: http://localhost:8080/health
|
| 125 |
+
echo.
|
| 126 |
+
echo π± Service Management:
|
| 127 |
+
echo - Start: net start "YouTube-API" "YouTube-Bot"
|
| 128 |
+
echo - Stop: net stop "YouTube-API" "YouTube-Bot"
|
| 129 |
+
echo - Status: sc query "YouTube-API" ^& sc query "YouTube-Bot"
|
| 130 |
+
echo.
|
| 131 |
+
pause
|
deploy.ps1
ADDED
|
@@ -0,0 +1,202 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# π YouTube Metadata Extractor - Windows Deployment Script
|
| 2 |
+
# This script deploys the project on a Windows Server
|
| 3 |
+
|
| 4 |
+
Write-Host "π Starting deployment of YouTube Metadata Extractor on Windows..." -ForegroundColor Green
|
| 5 |
+
|
| 6 |
+
# Configuration
|
| 7 |
+
$ProjectDir = "$env:USERPROFILE\YouTube"
|
| 8 |
+
$RepoUrl = "https://huggingface.co/spaces/dzianisBY/YouTube_Creator_MetaData"
|
| 9 |
+
$PythonEnv = "$ProjectDir\.venv"
|
| 10 |
+
|
| 11 |
+
# Function to print colored output
|
| 12 |
+
function Write-Status {
|
| 13 |
+
param($Message)
|
| 14 |
+
Write-Host "β
$Message" -ForegroundColor Green
|
| 15 |
+
}
|
| 16 |
+
|
| 17 |
+
function Write-Warning {
|
| 18 |
+
param($Message)
|
| 19 |
+
Write-Host "β οΈ $Message" -ForegroundColor Yellow
|
| 20 |
+
}
|
| 21 |
+
|
| 22 |
+
function Write-Error {
|
| 23 |
+
param($Message)
|
| 24 |
+
Write-Host "β $Message" -ForegroundColor Red
|
| 25 |
+
}
|
| 26 |
+
|
| 27 |
+
# Check if running as Administrator
|
| 28 |
+
if (-NOT ([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator")) {
|
| 29 |
+
Write-Error "This script must be run as Administrator"
|
| 30 |
+
Write-Host "Please right-click PowerShell and select 'Run as Administrator'" -ForegroundColor Yellow
|
| 31 |
+
exit 1
|
| 32 |
+
}
|
| 33 |
+
|
| 34 |
+
# Install Chocolatey if not present
|
| 35 |
+
if (!(Get-Command choco -ErrorAction SilentlyContinue)) {
|
| 36 |
+
Write-Status "Installing Chocolatey package manager..."
|
| 37 |
+
Set-ExecutionPolicy Bypass -Scope Process -Force
|
| 38 |
+
[System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072
|
| 39 |
+
iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))
|
| 40 |
+
refreshenv
|
| 41 |
+
}
|
| 42 |
+
|
| 43 |
+
# Install required software
|
| 44 |
+
Write-Status "Installing system dependencies..."
|
| 45 |
+
choco install python git -y
|
| 46 |
+
refreshenv
|
| 47 |
+
|
| 48 |
+
# Create project directory
|
| 49 |
+
Write-Status "Setting up project directory..."
|
| 50 |
+
if (!(Test-Path $ProjectDir)) {
|
| 51 |
+
New-Item -ItemType Directory -Path $ProjectDir -Force
|
| 52 |
+
}
|
| 53 |
+
Set-Location $ProjectDir
|
| 54 |
+
|
| 55 |
+
# Clone or update repository
|
| 56 |
+
if (Test-Path ".git") {
|
| 57 |
+
Write-Status "Updating existing repository..."
|
| 58 |
+
git pull origin main
|
| 59 |
+
} else {
|
| 60 |
+
Write-Status "Cloning repository..."
|
| 61 |
+
git clone $RepoUrl .
|
| 62 |
+
}
|
| 63 |
+
|
| 64 |
+
# Create virtual environment
|
| 65 |
+
Write-Status "Setting up Python virtual environment..."
|
| 66 |
+
python -m venv $PythonEnv
|
| 67 |
+
& "$PythonEnv\Scripts\Activate.ps1"
|
| 68 |
+
|
| 69 |
+
# Install Python dependencies
|
| 70 |
+
Write-Status "Installing Python dependencies..."
|
| 71 |
+
python -m pip install --upgrade pip
|
| 72 |
+
pip install -r requirements.txt
|
| 73 |
+
pip install -r telegram_requirements.txt
|
| 74 |
+
|
| 75 |
+
# Create .env file template if it doesn't exist
|
| 76 |
+
if (!(Test-Path ".env")) {
|
| 77 |
+
Write-Warning "Creating .env template file..."
|
| 78 |
+
@"
|
| 79 |
+
# YouTube API Configuration
|
| 80 |
+
YOUTUBE_API_KEY=your_youtube_api_key_here
|
| 81 |
+
|
| 82 |
+
# Telegram Bot Configuration
|
| 83 |
+
TELEGRAM_TOKEN=your_telegram_bot_token_here
|
| 84 |
+
|
| 85 |
+
# MCP Server Configuration
|
| 86 |
+
MCP_BASE_URL=https://youtube-bot.tuttech.net/api/mcp
|
| 87 |
+
|
| 88 |
+
# Gemini AI Configuration
|
| 89 |
+
GEMINI_API_KEY=your_gemini_api_key_here
|
| 90 |
+
|
| 91 |
+
# Server Configuration
|
| 92 |
+
HOST=0.0.0.0
|
| 93 |
+
PORT=8080
|
| 94 |
+
"@ | Out-File -FilePath ".env" -Encoding UTF8
|
| 95 |
+
Write-Warning "Please edit .env file with your actual API keys!"
|
| 96 |
+
Write-Warning "File location: $ProjectDir\.env"
|
| 97 |
+
}
|
| 98 |
+
|
| 99 |
+
# Create Windows Service scripts
|
| 100 |
+
Write-Status "Creating Windows Service scripts..."
|
| 101 |
+
|
| 102 |
+
# API Server service script
|
| 103 |
+
@"
|
| 104 |
+
# Start API Server
|
| 105 |
+
Set-Location '$ProjectDir'
|
| 106 |
+
& '$PythonEnv\Scripts\Activate.ps1'
|
| 107 |
+
python main.py
|
| 108 |
+
"@ | Out-File -FilePath "start-api.ps1" -Encoding UTF8
|
| 109 |
+
|
| 110 |
+
# Telegram Bot service script
|
| 111 |
+
@"
|
| 112 |
+
# Start Telegram Bot
|
| 113 |
+
Set-Location '$ProjectDir'
|
| 114 |
+
& '$PythonEnv\Scripts\Activate.ps1'
|
| 115 |
+
python run_telegram_bot.py
|
| 116 |
+
"@ | Out-File -FilePath "start-bot.ps1" -Encoding UTF8
|
| 117 |
+
|
| 118 |
+
# Install NSSM (Non-Sucking Service Manager) for Windows Services
|
| 119 |
+
Write-Status "Installing NSSM for Windows Services..."
|
| 120 |
+
choco install nssm -y
|
| 121 |
+
|
| 122 |
+
# Create Windows Services
|
| 123 |
+
Write-Status "Creating Windows Services..."
|
| 124 |
+
|
| 125 |
+
# Remove existing services if they exist
|
| 126 |
+
try {
|
| 127 |
+
nssm remove "YouTube-API" confirm
|
| 128 |
+
nssm remove "YouTube-Bot" confirm
|
| 129 |
+
} catch {
|
| 130 |
+
# Services don't exist, that's ok
|
| 131 |
+
}
|
| 132 |
+
|
| 133 |
+
# Create API Server service
|
| 134 |
+
nssm install "YouTube-API" powershell.exe
|
| 135 |
+
nssm set "YouTube-API" AppParameters "-ExecutionPolicy Bypass -File `"$ProjectDir\start-api.ps1`""
|
| 136 |
+
nssm set "YouTube-API" DisplayName "YouTube MCP API Server"
|
| 137 |
+
nssm set "YouTube-API" Description "YouTube Metadata Extractor API Server"
|
| 138 |
+
nssm set "YouTube-API" Start SERVICE_AUTO_START
|
| 139 |
+
|
| 140 |
+
# Create Telegram Bot service
|
| 141 |
+
nssm install "YouTube-Bot" powershell.exe
|
| 142 |
+
nssm set "YouTube-Bot" AppParameters "-ExecutionPolicy Bypass -File `"$ProjectDir\start-bot.ps1`""
|
| 143 |
+
nssm set "YouTube-Bot" DisplayName "YouTube Telegram Bot"
|
| 144 |
+
nssm set "YouTube-Bot" Description "YouTube Metadata Extractor Telegram Bot"
|
| 145 |
+
nssm set "YouTube-Bot" Start SERVICE_AUTO_START
|
| 146 |
+
|
| 147 |
+
# Configure service dependencies (Bot depends on API)
|
| 148 |
+
nssm set "YouTube-Bot" DependOnService "YouTube-API"
|
| 149 |
+
|
| 150 |
+
# Start services
|
| 151 |
+
Write-Status "Starting Windows Services..."
|
| 152 |
+
Start-Service "YouTube-API"
|
| 153 |
+
Start-Sleep 5
|
| 154 |
+
Start-Service "YouTube-Bot"
|
| 155 |
+
|
| 156 |
+
# Check service status
|
| 157 |
+
Write-Status "Checking service status..."
|
| 158 |
+
Start-Sleep 5
|
| 159 |
+
|
| 160 |
+
$apiStatus = Get-Service "YouTube-API" -ErrorAction SilentlyContinue
|
| 161 |
+
$botStatus = Get-Service "YouTube-Bot" -ErrorAction SilentlyContinue
|
| 162 |
+
|
| 163 |
+
if ($apiStatus.Status -eq "Running") {
|
| 164 |
+
Write-Status "YouTube API Server is running"
|
| 165 |
+
} else {
|
| 166 |
+
Write-Error "YouTube API Server failed to start"
|
| 167 |
+
Get-Service "YouTube-API" | Format-Table
|
| 168 |
+
}
|
| 169 |
+
|
| 170 |
+
if ($botStatus.Status -eq "Running") {
|
| 171 |
+
Write-Status "YouTube Telegram Bot is running"
|
| 172 |
+
} else {
|
| 173 |
+
Write-Error "YouTube Telegram Bot failed to start"
|
| 174 |
+
Get-Service "YouTube-Bot" | Format-Table
|
| 175 |
+
}
|
| 176 |
+
|
| 177 |
+
# Configure Windows Firewall
|
| 178 |
+
Write-Status "Configuring Windows Firewall..."
|
| 179 |
+
try {
|
| 180 |
+
New-NetFirewallRule -DisplayName "YouTube API Server" -Direction Inbound -Protocol TCP -LocalPort 8080 -Action Allow
|
| 181 |
+
Write-Status "Firewall rule added for port 8080"
|
| 182 |
+
} catch {
|
| 183 |
+
Write-Warning "Could not add firewall rule. You may need to do this manually."
|
| 184 |
+
}
|
| 185 |
+
|
| 186 |
+
Write-Status "Deployment completed!"
|
| 187 |
+
Write-Host ""
|
| 188 |
+
Write-Host "π Next steps:" -ForegroundColor Cyan
|
| 189 |
+
Write-Host "1. Edit $ProjectDir\.env with your API keys"
|
| 190 |
+
Write-Host "2. Restart services: Restart-Service YouTube-API, YouTube-Bot"
|
| 191 |
+
Write-Host "3. Check logs in Event Viewer or service logs"
|
| 192 |
+
Write-Host ""
|
| 193 |
+
Write-Host "π Service URLs:" -ForegroundColor Cyan
|
| 194 |
+
Write-Host "- API Server: http://localhost:8080"
|
| 195 |
+
Write-Host "- Health Check: http://localhost:8080/health"
|
| 196 |
+
Write-Host ""
|
| 197 |
+
Write-Host "π± Service Management:" -ForegroundColor Cyan
|
| 198 |
+
Write-Host "- Start: Start-Service YouTube-API, YouTube-Bot"
|
| 199 |
+
Write-Host "- Stop: Stop-Service YouTube-API, YouTube-Bot"
|
| 200 |
+
Write-Host "- Restart: Restart-Service YouTube-API, YouTube-Bot"
|
| 201 |
+
Write-Host "- Status: Get-Service YouTube-API, YouTube-Bot"
|
| 202 |
+
Write-Host "- Remove: nssm remove YouTube-API confirm; nssm remove YouTube-Bot confirm"
|
update.ps1
ADDED
|
@@ -0,0 +1,104 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# π YouTube Metadata Extractor - Windows Update Script
|
| 2 |
+
# This script updates the project on a Windows Server
|
| 3 |
+
|
| 4 |
+
Write-Host "π Updating YouTube Metadata Extractor on Windows..." -ForegroundColor Green
|
| 5 |
+
|
| 6 |
+
# Configuration
|
| 7 |
+
$ProjectDir = "$env:USERPROFILE\YouTube"
|
| 8 |
+
|
| 9 |
+
# Function to print colored output
|
| 10 |
+
function Write-Status {
|
| 11 |
+
param($Message)
|
| 12 |
+
Write-Host "β
$Message" -ForegroundColor Green
|
| 13 |
+
}
|
| 14 |
+
|
| 15 |
+
function Write-Warning {
|
| 16 |
+
param($Message)
|
| 17 |
+
Write-Host "β οΈ $Message" -ForegroundColor Yellow
|
| 18 |
+
}
|
| 19 |
+
|
| 20 |
+
function Write-Error {
|
| 21 |
+
param($Message)
|
| 22 |
+
Write-Host "β $Message" -ForegroundColor Red
|
| 23 |
+
}
|
| 24 |
+
|
| 25 |
+
# Check if project directory exists
|
| 26 |
+
if (!(Test-Path $ProjectDir)) {
|
| 27 |
+
Write-Error "Project directory not found: $ProjectDir"
|
| 28 |
+
Write-Error "Please run deploy.ps1 first to set up the project"
|
| 29 |
+
exit 1
|
| 30 |
+
}
|
| 31 |
+
|
| 32 |
+
Set-Location $ProjectDir
|
| 33 |
+
|
| 34 |
+
# Stop services
|
| 35 |
+
Write-Status "Stopping Windows Services..."
|
| 36 |
+
try {
|
| 37 |
+
Stop-Service "YouTube-API" -Force -ErrorAction SilentlyContinue
|
| 38 |
+
Stop-Service "YouTube-Bot" -Force -ErrorAction SilentlyContinue
|
| 39 |
+
Start-Sleep 3
|
| 40 |
+
} catch {
|
| 41 |
+
Write-Warning "Could not stop services (they may not be running)"
|
| 42 |
+
}
|
| 43 |
+
|
| 44 |
+
# Pull latest changes
|
| 45 |
+
Write-Status "Pulling latest changes from repository..."
|
| 46 |
+
git pull origin main
|
| 47 |
+
|
| 48 |
+
# Activate virtual environment and update dependencies
|
| 49 |
+
Write-Status "Updating Python dependencies..."
|
| 50 |
+
& "$ProjectDir\.venv\Scripts\Activate.ps1"
|
| 51 |
+
python -m pip install --upgrade pip
|
| 52 |
+
pip install -r requirements.txt
|
| 53 |
+
pip install -r telegram_requirements.txt
|
| 54 |
+
|
| 55 |
+
# Start services
|
| 56 |
+
Write-Status "Starting Windows Services..."
|
| 57 |
+
try {
|
| 58 |
+
Start-Service "YouTube-API"
|
| 59 |
+
Start-Sleep 5
|
| 60 |
+
Start-Service "YouTube-Bot"
|
| 61 |
+
} catch {
|
| 62 |
+
Write-Error "Could not start services. They may need to be created first."
|
| 63 |
+
Write-Error "Please run deploy.ps1 to set up services."
|
| 64 |
+
}
|
| 65 |
+
|
| 66 |
+
# Check service status
|
| 67 |
+
Write-Status "Checking service status..."
|
| 68 |
+
Start-Sleep 5
|
| 69 |
+
|
| 70 |
+
try {
|
| 71 |
+
$apiStatus = Get-Service "YouTube-API" -ErrorAction SilentlyContinue
|
| 72 |
+
$botStatus = Get-Service "YouTube-Bot" -ErrorAction SilentlyContinue
|
| 73 |
+
|
| 74 |
+
if ($apiStatus -and $apiStatus.Status -eq "Running") {
|
| 75 |
+
Write-Status "YouTube API Server is running"
|
| 76 |
+
} else {
|
| 77 |
+
Write-Error "YouTube API Server is not running"
|
| 78 |
+
if ($apiStatus) {
|
| 79 |
+
Get-Service "YouTube-API" | Format-Table
|
| 80 |
+
}
|
| 81 |
+
}
|
| 82 |
+
|
| 83 |
+
if ($botStatus -and $botStatus.Status -eq "Running") {
|
| 84 |
+
Write-Status "YouTube Telegram Bot is running"
|
| 85 |
+
} else {
|
| 86 |
+
Write-Error "YouTube Telegram Bot is not running"
|
| 87 |
+
if ($botStatus) {
|
| 88 |
+
Get-Service "YouTube-Bot" | Format-Table
|
| 89 |
+
}
|
| 90 |
+
}
|
| 91 |
+
} catch {
|
| 92 |
+
Write-Error "Could not check service status. Services may not be installed."
|
| 93 |
+
}
|
| 94 |
+
|
| 95 |
+
Write-Status "Update completed!"
|
| 96 |
+
Write-Host ""
|
| 97 |
+
Write-Host "π Useful commands:" -ForegroundColor Cyan
|
| 98 |
+
Write-Host "- Check service status: Get-Service YouTube-API, YouTube-Bot"
|
| 99 |
+
Write-Host "- Start services: Start-Service YouTube-API, YouTube-Bot"
|
| 100 |
+
Write-Host "- Stop services: Stop-Service YouTube-API, YouTube-Bot"
|
| 101 |
+
Write-Host "- Restart services: Restart-Service YouTube-API, YouTube-Bot"
|
| 102 |
+
Write-Host "- Check logs: Get-EventLog -LogName Application -Source YouTube*"
|
| 103 |
+
Write-Host "- Manual start API: cd '$ProjectDir'; .\.venv\Scripts\Activate.ps1; python main.py"
|
| 104 |
+
Write-Host "- Manual start Bot: cd '$ProjectDir'; .\.venv\Scripts\Activate.ps1; python run_telegram_bot.py"
|