streamer-node 1.0.31 → 1.0.37
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/package.json +6 -2
- package/dist/scripts/README.md +670 -0
- package/dist/scripts/install-streamer-node.sh +117 -0
- package/dist/scripts/reframe_ball.py +354 -0
- package/dist/src/application/interfaces/StartStreamUseCase.types.d.ts +3 -1
- package/dist/src/application/interfaces/StartStreamUseCase.types.d.ts.map +1 -1
- package/dist/src/application/interfaces/StartStreamUseCase.types.js.map +1 -1
- package/dist/src/application/services/HttpClient.d.ts +21 -0
- package/dist/src/application/services/HttpClient.d.ts.map +1 -1
- package/dist/src/application/services/HttpClient.js +37 -5
- package/dist/src/application/services/HttpClient.js.map +1 -1
- package/dist/src/application/services/StreamManagerService.d.ts.map +1 -1
- package/dist/src/application/services/StreamManagerService.js +2 -0
- package/dist/src/application/services/StreamManagerService.js.map +1 -1
- package/dist/src/application/use-cases/CaptureHighlightUseCase.d.ts +52 -0
- package/dist/src/application/use-cases/CaptureHighlightUseCase.d.ts.map +1 -0
- package/dist/src/application/use-cases/CaptureHighlightUseCase.js +169 -0
- package/dist/src/application/use-cases/CaptureHighlightUseCase.js.map +1 -0
- package/dist/src/application/use-cases/StartStreamUseCase.d.ts +9 -1
- package/dist/src/application/use-cases/StartStreamUseCase.d.ts.map +1 -1
- package/dist/src/application/use-cases/StartStreamUseCase.js +125 -2
- package/dist/src/application/use-cases/StartStreamUseCase.js.map +1 -1
- package/dist/src/application/use-cases/StopStreamUseCase.d.ts +5 -1
- package/dist/src/application/use-cases/StopStreamUseCase.d.ts.map +1 -1
- package/dist/src/application/use-cases/StopStreamUseCase.js +7 -1
- package/dist/src/application/use-cases/StopStreamUseCase.js.map +1 -1
- package/dist/src/domain/events/StreamEvent.d.ts +5 -0
- package/dist/src/domain/events/StreamEvent.d.ts.map +1 -1
- package/dist/src/domain/services/BallReframer.d.ts +35 -0
- package/dist/src/domain/services/BallReframer.d.ts.map +1 -0
- package/dist/src/domain/services/BallReframer.js +3 -0
- package/dist/src/domain/services/BallReframer.js.map +1 -0
- package/dist/src/domain/services/FFmpegService.d.ts +6 -2
- package/dist/src/domain/services/FFmpegService.d.ts.map +1 -1
- package/dist/src/domain/services/HighlightSignalSource.d.ts +113 -0
- package/dist/src/domain/services/HighlightSignalSource.d.ts.map +1 -0
- package/dist/src/domain/services/HighlightSignalSource.js +3 -0
- package/dist/src/domain/services/HighlightSignalSource.js.map +1 -0
- package/dist/src/domain/services/SSEService.d.ts +1 -0
- package/dist/src/domain/services/SSEService.d.ts.map +1 -1
- package/dist/src/infrastructure/config/Config.d.ts +32 -0
- package/dist/src/infrastructure/config/Config.d.ts.map +1 -1
- package/dist/src/infrastructure/config/Config.js +60 -0
- package/dist/src/infrastructure/config/Config.js.map +1 -1
- package/dist/src/infrastructure/listeners/SupabaseListener.d.ts +5 -0
- package/dist/src/infrastructure/listeners/SupabaseListener.d.ts.map +1 -1
- package/dist/src/infrastructure/listeners/SupabaseListener.js +43 -5
- package/dist/src/infrastructure/listeners/SupabaseListener.js.map +1 -1
- package/dist/src/infrastructure/logging/LogShippingService.d.ts +3 -1
- package/dist/src/infrastructure/logging/LogShippingService.d.ts.map +1 -1
- package/dist/src/infrastructure/logging/LogShippingService.js +13 -4
- package/dist/src/infrastructure/logging/LogShippingService.js.map +1 -1
- package/dist/src/infrastructure/logging/RemoteLogger.d.ts +1 -0
- package/dist/src/infrastructure/logging/RemoteLogger.d.ts.map +1 -1
- package/dist/src/infrastructure/logging/RemoteLogger.js +1 -1
- package/dist/src/infrastructure/logging/RemoteLogger.js.map +1 -1
- package/dist/src/infrastructure/services/AdDownloaderService.d.ts +85 -0
- package/dist/src/infrastructure/services/AdDownloaderService.d.ts.map +1 -0
- package/dist/src/infrastructure/services/AdDownloaderService.js +530 -0
- package/dist/src/infrastructure/services/AdDownloaderService.js.map +1 -0
- package/dist/src/infrastructure/services/AdRotator.d.ts +63 -0
- package/dist/src/infrastructure/services/AdRotator.d.ts.map +1 -0
- package/dist/src/infrastructure/services/AdRotator.js +223 -0
- package/dist/src/infrastructure/services/AdRotator.js.map +1 -0
- package/dist/src/infrastructure/services/HighlightBufferManager.d.ts +65 -0
- package/dist/src/infrastructure/services/HighlightBufferManager.d.ts.map +1 -0
- package/dist/src/infrastructure/services/HighlightBufferManager.js +203 -0
- package/dist/src/infrastructure/services/HighlightBufferManager.js.map +1 -0
- package/dist/src/infrastructure/services/HighlightBufferRegistry.d.ts +23 -0
- package/dist/src/infrastructure/services/HighlightBufferRegistry.d.ts.map +1 -0
- package/dist/src/infrastructure/services/HighlightBufferRegistry.js +44 -0
- package/dist/src/infrastructure/services/HighlightBufferRegistry.js.map +1 -0
- package/dist/src/infrastructure/services/HighlightExtractorService.d.ts +65 -0
- package/dist/src/infrastructure/services/HighlightExtractorService.d.ts.map +1 -0
- package/dist/src/infrastructure/services/HighlightExtractorService.js +264 -0
- package/dist/src/infrastructure/services/HighlightExtractorService.js.map +1 -0
- package/dist/src/infrastructure/services/HighlightRendererService.d.ts +38 -0
- package/dist/src/infrastructure/services/HighlightRendererService.d.ts.map +1 -0
- package/dist/src/infrastructure/services/HighlightRendererService.js +182 -0
- package/dist/src/infrastructure/services/HighlightRendererService.js.map +1 -0
- package/dist/src/infrastructure/services/NodeFFmpegService.d.ts +6 -4
- package/dist/src/infrastructure/services/NodeFFmpegService.d.ts.map +1 -1
- package/dist/src/infrastructure/services/NodeFFmpegService.js +154 -32
- package/dist/src/infrastructure/services/NodeFFmpegService.js.map +1 -1
- package/dist/src/infrastructure/services/NodeSSEService.d.ts +8 -0
- package/dist/src/infrastructure/services/NodeSSEService.d.ts.map +1 -1
- package/dist/src/infrastructure/services/NodeSSEService.js +71 -27
- package/dist/src/infrastructure/services/NodeSSEService.js.map +1 -1
- package/dist/src/infrastructure/services/NullBallReframer.d.ts +11 -0
- package/dist/src/infrastructure/services/NullBallReframer.d.ts.map +1 -0
- package/dist/src/infrastructure/services/NullBallReframer.js +16 -0
- package/dist/src/infrastructure/services/NullBallReframer.js.map +1 -0
- package/dist/src/infrastructure/services/PythonBallReframer.d.ts +35 -0
- package/dist/src/infrastructure/services/PythonBallReframer.d.ts.map +1 -0
- package/dist/src/infrastructure/services/PythonBallReframer.js +238 -0
- package/dist/src/infrastructure/services/PythonBallReframer.js.map +1 -0
- package/dist/src/infrastructure/services/SerialHighlightListener.d.ts +45 -0
- package/dist/src/infrastructure/services/SerialHighlightListener.d.ts.map +1 -0
- package/dist/src/infrastructure/services/SerialHighlightListener.js +440 -0
- package/dist/src/infrastructure/services/SerialHighlightListener.js.map +1 -0
- package/dist/src/infrastructure/services/YouTubeUploadService.d.ts +36 -0
- package/dist/src/infrastructure/services/YouTubeUploadService.d.ts.map +1 -0
- package/dist/src/infrastructure/services/YouTubeUploadService.js +402 -0
- package/dist/src/infrastructure/services/YouTubeUploadService.js.map +1 -0
- package/dist/src/infrastructure/utils/ResourceSampler.d.ts +47 -0
- package/dist/src/infrastructure/utils/ResourceSampler.d.ts.map +1 -0
- package/dist/src/infrastructure/utils/ResourceSampler.js +102 -0
- package/dist/src/infrastructure/utils/ResourceSampler.js.map +1 -0
- package/dist/src/infrastructure/utils/lowPriority.d.ts +29 -0
- package/dist/src/infrastructure/utils/lowPriority.d.ts.map +1 -0
- package/dist/src/infrastructure/utils/lowPriority.js +31 -0
- package/dist/src/infrastructure/utils/lowPriority.js.map +1 -0
- package/dist/src/infrastructure/utils/paths.d.ts +27 -0
- package/dist/src/infrastructure/utils/paths.d.ts.map +1 -0
- package/dist/src/infrastructure/utils/paths.js +69 -0
- package/dist/src/infrastructure/utils/paths.js.map +1 -0
- package/dist/src/infrastructure/utils/spawnToFile.d.ts +20 -0
- package/dist/src/infrastructure/utils/spawnToFile.d.ts.map +1 -0
- package/dist/src/infrastructure/utils/spawnToFile.js +98 -0
- package/dist/src/infrastructure/utils/spawnToFile.js.map +1 -0
- package/dist/src/main.js +228 -2
- package/dist/src/main.js.map +1 -1
- package/package.json +6 -2
package/dist/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "streamer-node",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.37",
|
|
4
4
|
"description": "A lightweight TypeScript streaming system with Clean Architecture",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
"LICENSE"
|
|
14
14
|
],
|
|
15
15
|
"scripts": {
|
|
16
|
-
"build": "npx tsc && mkdir -p public && cp -r public dist/",
|
|
16
|
+
"build": "npx tsc && mkdir -p public && cp -r public dist/ && cp -r scripts dist/",
|
|
17
17
|
"start": "node dist/src/main.js",
|
|
18
18
|
"dev": "npm run build && npm start",
|
|
19
19
|
"monitor": "bash -c 'npm run dev 2>&1 | tee >(grep -E \"ERROR|WARN|INFO\" > node.logs) >(grep \"DEBUG\" | grep -v \"frame=\" > ffmpeg.logs)'",
|
|
@@ -49,6 +49,10 @@
|
|
|
49
49
|
"dotenv": "^16.3.1",
|
|
50
50
|
"pngjs": "^7.0.0"
|
|
51
51
|
},
|
|
52
|
+
"optionalDependencies": {
|
|
53
|
+
"@serialport/parser-readline": "^12.0.0",
|
|
54
|
+
"serialport": "^12.0.0"
|
|
55
|
+
},
|
|
52
56
|
"devDependencies": {
|
|
53
57
|
"@types/node": "^20.0.0",
|
|
54
58
|
"@types/pngjs": "^6.0.5",
|
|
@@ -0,0 +1,670 @@
|
|
|
1
|
+
# Global Environment Variables Setup Guide
|
|
2
|
+
|
|
3
|
+
This guide shows how to set global environment variables and use them to create `.env` files automatically for `streamer-node`.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Quick Start
|
|
8
|
+
|
|
9
|
+
### 1. Set Global Environment Variables
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
# Add to your shell profile
|
|
13
|
+
nano ~/.bashrc
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
Add these lines at the end:
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
# Streamer Node Configuration
|
|
20
|
+
export GROUND_ID="385136f6-7cf0-4e7f-b601-fea90079c227"
|
|
21
|
+
export CLIENT_IMAGES_PATH="./public/client.png"
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
Apply changes:
|
|
25
|
+
|
|
26
|
+
```bash
|
|
27
|
+
source ~/.bashrc
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
### 2. Download and Use the Script
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
# Download the script
|
|
34
|
+
curl -sL https://raw.githubusercontent.com/MHA10/drop-shot-streaming-scripts-ubuntu/master/streamer-node-env-setup.sh -o streamer-node-env-setup.sh
|
|
35
|
+
|
|
36
|
+
# Make it executable
|
|
37
|
+
chmod +x streamer-node-env-setup.sh
|
|
38
|
+
|
|
39
|
+
# Run it
|
|
40
|
+
./streamer-node-env-setup.sh
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
**What it does:**
|
|
44
|
+
1. Reads global environment variables
|
|
45
|
+
2. Creates `.env` file at specified path
|
|
46
|
+
3. Changes to that directory
|
|
47
|
+
4. Runs `npx streamer-node@latest`
|
|
48
|
+
|
|
49
|
+
---
|
|
50
|
+
|
|
51
|
+
## Detailed Setup
|
|
52
|
+
|
|
53
|
+
### Option 1: User-Level Environment Variables
|
|
54
|
+
|
|
55
|
+
Best for single-user systems or development.
|
|
56
|
+
|
|
57
|
+
#### Set Variables
|
|
58
|
+
|
|
59
|
+
```bash
|
|
60
|
+
# Edit .bashrc
|
|
61
|
+
nano ~/.bashrc
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
Add at the end:
|
|
65
|
+
|
|
66
|
+
```bash
|
|
67
|
+
# Streamer Node Configuration
|
|
68
|
+
export GROUND_ID="385136f6-7cf0-4e7f-b601-fea90079c227"
|
|
69
|
+
export CLIENT_IMAGES_PATH="./public/client.png"
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
Apply:
|
|
73
|
+
|
|
74
|
+
```bash
|
|
75
|
+
source ~/.bashrc
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
Verify:
|
|
79
|
+
|
|
80
|
+
```bash
|
|
81
|
+
echo $GROUND_ID
|
|
82
|
+
echo $CLIENT_IMAGES_PATH
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
---
|
|
86
|
+
|
|
87
|
+
### Option 2: System-Wide Environment Variables
|
|
88
|
+
|
|
89
|
+
Best for production servers where multiple users need access.
|
|
90
|
+
|
|
91
|
+
#### Method A: /etc/environment
|
|
92
|
+
|
|
93
|
+
```bash
|
|
94
|
+
# Edit system environment
|
|
95
|
+
sudo nano /etc/environment
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
Add:
|
|
99
|
+
|
|
100
|
+
```bash
|
|
101
|
+
GROUND_ID="385136f6-7cf0-4e7f-b601-fea90079c227"
|
|
102
|
+
CLIENT_IMAGES_PATH="./public/client.png"
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
**Note:** Requires logout/login or reboot to take effect.
|
|
106
|
+
|
|
107
|
+
#### Method B: /etc/profile.d/
|
|
108
|
+
|
|
109
|
+
```bash
|
|
110
|
+
# Create a new profile script
|
|
111
|
+
sudo nano /etc/profile.d/streamer-node.sh
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
Add:
|
|
115
|
+
|
|
116
|
+
```bash
|
|
117
|
+
#!/bin/bash
|
|
118
|
+
export GROUND_ID="385136f6-7cf0-4e7f-b601-fea90079c227"
|
|
119
|
+
export CLIENT_IMAGES_PATH="./public/client.png"
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
Make it executable:
|
|
123
|
+
|
|
124
|
+
```bash
|
|
125
|
+
sudo chmod +x /etc/profile.d/streamer-node.sh
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
Apply:
|
|
129
|
+
|
|
130
|
+
```bash
|
|
131
|
+
source /etc/profile.d/streamer-node.sh
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
---
|
|
135
|
+
|
|
136
|
+
## Using the Setup Script
|
|
137
|
+
|
|
138
|
+
### Basic Usage
|
|
139
|
+
|
|
140
|
+
```bash
|
|
141
|
+
# Use default path (/opt/streamer-node)
|
|
142
|
+
./streamer-node-env-setup.sh
|
|
143
|
+
|
|
144
|
+
# Use custom path
|
|
145
|
+
./streamer-node-env-setup.sh --path /home/ubuntu/streamer
|
|
146
|
+
|
|
147
|
+
# Override environment variables
|
|
148
|
+
./streamer-node-env-setup.sh --ground-id "new-id" --image "/custom/logo.png"
|
|
149
|
+
|
|
150
|
+
# Only create .env file (don't run service)
|
|
151
|
+
./streamer-node-env-setup.sh --create-only
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
### Command Line Options
|
|
155
|
+
|
|
156
|
+
| Option | Description | Example |
|
|
157
|
+
|--------|-------------|---------|
|
|
158
|
+
| `-p, --path` | Installation path | `--path /opt/streamer-node` |
|
|
159
|
+
| `-g, --ground-id` | Override GROUND_ID | `--ground-id "abc-123"` |
|
|
160
|
+
| `-i, --image` | Override image path | `--image "./logo.png"` |
|
|
161
|
+
| `-c, --create-only` | Only create .env | `--create-only` |
|
|
162
|
+
| `-h, --help` | Show help | `--help` |
|
|
163
|
+
|
|
164
|
+
---
|
|
165
|
+
|
|
166
|
+
## Systemd Integration
|
|
167
|
+
|
|
168
|
+
### Create Service with Script
|
|
169
|
+
|
|
170
|
+
Create systemd service that uses the setup script:
|
|
171
|
+
|
|
172
|
+
```bash
|
|
173
|
+
sudo nano /etc/systemd/system/streamer-node.service
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
Add:
|
|
177
|
+
|
|
178
|
+
```ini
|
|
179
|
+
[Unit]
|
|
180
|
+
Description=Streamer Node Service
|
|
181
|
+
After=network.target network-online.target
|
|
182
|
+
Wants=network-online.target
|
|
183
|
+
|
|
184
|
+
[Service]
|
|
185
|
+
Type=simple
|
|
186
|
+
User=ubuntu
|
|
187
|
+
Group=ubuntu
|
|
188
|
+
|
|
189
|
+
# Run the setup script
|
|
190
|
+
ExecStart=/usr/local/bin/streamer-node-env-setup.sh --path /opt/streamer-node
|
|
191
|
+
|
|
192
|
+
# Restart policy
|
|
193
|
+
Restart=always
|
|
194
|
+
RestartSec=10
|
|
195
|
+
|
|
196
|
+
# Logging
|
|
197
|
+
StandardOutput=journal
|
|
198
|
+
StandardError=journal
|
|
199
|
+
SyslogIdentifier=streamer-node
|
|
200
|
+
|
|
201
|
+
[Install]
|
|
202
|
+
WantedBy=multi-user.target
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
### Install the Script System-Wide
|
|
206
|
+
|
|
207
|
+
```bash
|
|
208
|
+
# Copy script to system location
|
|
209
|
+
sudo cp streamer-node-env-setup.sh /usr/local/bin/
|
|
210
|
+
sudo chmod +x /usr/local/bin/streamer-node-env-setup.sh
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
### Enable and Start Service
|
|
214
|
+
|
|
215
|
+
```bash
|
|
216
|
+
# Reload systemd
|
|
217
|
+
sudo systemctl daemon-reload
|
|
218
|
+
|
|
219
|
+
# Enable service
|
|
220
|
+
sudo systemctl enable streamer-node
|
|
221
|
+
|
|
222
|
+
# Start service
|
|
223
|
+
sudo systemctl start streamer-node
|
|
224
|
+
|
|
225
|
+
# Check status
|
|
226
|
+
sudo systemctl status streamer-node
|
|
227
|
+
|
|
228
|
+
# View logs
|
|
229
|
+
sudo journalctl -u streamer-node -f
|
|
230
|
+
```
|
|
231
|
+
|
|
232
|
+
---
|
|
233
|
+
|
|
234
|
+
## Complete Installation Script
|
|
235
|
+
|
|
236
|
+
Create an all-in-one installation script:
|
|
237
|
+
|
|
238
|
+
```bash
|
|
239
|
+
nano install-streamer-node.sh
|
|
240
|
+
```
|
|
241
|
+
|
|
242
|
+
```bash
|
|
243
|
+
#!/bin/bash
|
|
244
|
+
|
|
245
|
+
set -e
|
|
246
|
+
|
|
247
|
+
echo "=================================="
|
|
248
|
+
echo "Streamer Node Installation"
|
|
249
|
+
echo "=================================="
|
|
250
|
+
echo ""
|
|
251
|
+
|
|
252
|
+
# Check if running as root
|
|
253
|
+
if [ "$EUID" -eq 0 ]; then
|
|
254
|
+
echo "Please run as regular user (with sudo privileges), not as root"
|
|
255
|
+
exit 1
|
|
256
|
+
fi
|
|
257
|
+
|
|
258
|
+
# Prompt for configuration
|
|
259
|
+
read -p "Enter GROUND_ID: " GROUND_ID
|
|
260
|
+
if [ -z "$GROUND_ID" ]; then
|
|
261
|
+
echo "Error: GROUND_ID is required"
|
|
262
|
+
exit 1
|
|
263
|
+
fi
|
|
264
|
+
|
|
265
|
+
read -p "Enter installation path [/opt/streamer-node]: " INSTALL_PATH
|
|
266
|
+
INSTALL_PATH=${INSTALL_PATH:-/opt/streamer-node}
|
|
267
|
+
|
|
268
|
+
# Install Node.js if not present
|
|
269
|
+
if ! command -v node &> /dev/null; then
|
|
270
|
+
echo "Installing Node.js..."
|
|
271
|
+
curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash -
|
|
272
|
+
sudo apt-get install -y nodejs
|
|
273
|
+
fi
|
|
274
|
+
|
|
275
|
+
# Install FFmpeg if not present
|
|
276
|
+
if ! command -v ffmpeg &> /dev/null; then
|
|
277
|
+
echo "Installing FFmpeg..."
|
|
278
|
+
sudo apt-get update
|
|
279
|
+
sudo apt-get install -y ffmpeg
|
|
280
|
+
fi
|
|
281
|
+
|
|
282
|
+
# Create directories
|
|
283
|
+
echo "Creating directories..."
|
|
284
|
+
sudo mkdir -p $INSTALL_PATH/public
|
|
285
|
+
sudo mkdir -p /var/tmp/stream_registry
|
|
286
|
+
sudo mkdir -p /tmp/stream_registry
|
|
287
|
+
sudo chown -R $USER:$USER $INSTALL_PATH
|
|
288
|
+
sudo chown -R $USER:$USER /var/tmp/stream_registry
|
|
289
|
+
|
|
290
|
+
# Set global environment variables
|
|
291
|
+
echo "Setting up environment variables..."
|
|
292
|
+
if ! grep -q "GROUND_ID" ~/.bashrc; then
|
|
293
|
+
cat >> ~/.bashrc << EOF
|
|
294
|
+
|
|
295
|
+
# Streamer Node Configuration
|
|
296
|
+
export GROUND_ID="$GROUND_ID"
|
|
297
|
+
export CLIENT_IMAGES_PATH="./public/client.png"
|
|
298
|
+
EOF
|
|
299
|
+
source ~/.bashrc
|
|
300
|
+
fi
|
|
301
|
+
|
|
302
|
+
# Download setup script
|
|
303
|
+
echo "Downloading setup script..."
|
|
304
|
+
curl -sL https://raw.githubusercontent.com/MHA10/drop-shot-streaming-scripts-ubuntu/master/streamer-node-env-setup.sh -o /tmp/streamer-node-env-setup.sh
|
|
305
|
+
sudo mv /tmp/streamer-node-env-setup.sh /usr/local/bin/
|
|
306
|
+
sudo chmod +x /usr/local/bin/streamer-node-env-setup.sh
|
|
307
|
+
|
|
308
|
+
# Create systemd service
|
|
309
|
+
echo "Creating systemd service..."
|
|
310
|
+
sudo tee /etc/systemd/system/streamer-node.service > /dev/null << EOF
|
|
311
|
+
[Unit]
|
|
312
|
+
Description=Streamer Node Service
|
|
313
|
+
After=network.target network-online.target
|
|
314
|
+
Wants=network-online.target
|
|
315
|
+
|
|
316
|
+
[Service]
|
|
317
|
+
Type=simple
|
|
318
|
+
User=$USER
|
|
319
|
+
Group=$USER
|
|
320
|
+
Environment="GROUND_ID=$GROUND_ID"
|
|
321
|
+
Environment="CLIENT_IMAGES_PATH=./public/client.png"
|
|
322
|
+
ExecStart=/usr/local/bin/streamer-node-env-setup.sh --path $INSTALL_PATH
|
|
323
|
+
Restart=always
|
|
324
|
+
RestartSec=10
|
|
325
|
+
StandardOutput=journal
|
|
326
|
+
StandardError=journal
|
|
327
|
+
SyslogIdentifier=streamer-node
|
|
328
|
+
|
|
329
|
+
[Install]
|
|
330
|
+
WantedBy=multi-user.target
|
|
331
|
+
EOF
|
|
332
|
+
|
|
333
|
+
# Reload systemd
|
|
334
|
+
echo "Configuring systemd..."
|
|
335
|
+
sudo systemctl daemon-reload
|
|
336
|
+
sudo systemctl enable streamer-node
|
|
337
|
+
|
|
338
|
+
echo ""
|
|
339
|
+
echo "=================================="
|
|
340
|
+
echo "Installation Complete!"
|
|
341
|
+
echo "=================================="
|
|
342
|
+
echo ""
|
|
343
|
+
echo "Configuration:"
|
|
344
|
+
echo " GROUND_ID: $GROUND_ID"
|
|
345
|
+
echo " Installation Path: $INSTALL_PATH"
|
|
346
|
+
echo " Environment Variables: ~/.bashrc"
|
|
347
|
+
echo ""
|
|
348
|
+
echo "Commands:"
|
|
349
|
+
echo " Start: sudo systemctl start streamer-node"
|
|
350
|
+
echo " Stop: sudo systemctl stop streamer-node"
|
|
351
|
+
echo " Status: sudo systemctl status streamer-node"
|
|
352
|
+
echo " Logs: sudo journalctl -u streamer-node -f"
|
|
353
|
+
echo ""
|
|
354
|
+
echo "Manual run:"
|
|
355
|
+
echo " streamer-node-env-setup.sh --path $INSTALL_PATH"
|
|
356
|
+
echo ""
|
|
357
|
+
echo "To apply environment variables in current session:"
|
|
358
|
+
echo " source ~/.bashrc"
|
|
359
|
+
echo ""
|
|
360
|
+
```
|
|
361
|
+
|
|
362
|
+
Make it executable and run:
|
|
363
|
+
|
|
364
|
+
```bash
|
|
365
|
+
chmod +x install-streamer-node.sh
|
|
366
|
+
./install-streamer-node.sh
|
|
367
|
+
```
|
|
368
|
+
|
|
369
|
+
---
|
|
370
|
+
|
|
371
|
+
## Managing Multiple Grounds
|
|
372
|
+
|
|
373
|
+
### Set Multiple Ground IDs
|
|
374
|
+
|
|
375
|
+
```bash
|
|
376
|
+
# In ~/.bashrc
|
|
377
|
+
export GROUND_ID_1="ground-1-id"
|
|
378
|
+
export GROUND_ID_2="ground-2-id"
|
|
379
|
+
export GROUND_ID_3="ground-3-id"
|
|
380
|
+
```
|
|
381
|
+
|
|
382
|
+
### Create Services for Each Ground
|
|
383
|
+
|
|
384
|
+
```bash
|
|
385
|
+
# Ground 1
|
|
386
|
+
streamer-node-env-setup.sh --path /opt/streamer-ground1 --ground-id "$GROUND_ID_1" --create-only
|
|
387
|
+
|
|
388
|
+
# Ground 2
|
|
389
|
+
streamer-node-env-setup.sh --path /opt/streamer-ground2 --ground-id "$GROUND_ID_2" --create-only
|
|
390
|
+
|
|
391
|
+
# Ground 3
|
|
392
|
+
streamer-node-env-setup.sh --path /opt/streamer-ground3 --ground-id "$GROUND_ID_3" --create-only
|
|
393
|
+
```
|
|
394
|
+
|
|
395
|
+
### Create Systemd Services
|
|
396
|
+
|
|
397
|
+
```bash
|
|
398
|
+
# Service for Ground 1
|
|
399
|
+
sudo nano /etc/systemd/system/streamer-node-ground1.service
|
|
400
|
+
```
|
|
401
|
+
|
|
402
|
+
```ini
|
|
403
|
+
[Unit]
|
|
404
|
+
Description=Streamer Node Service - Ground 1
|
|
405
|
+
|
|
406
|
+
[Service]
|
|
407
|
+
Type=simple
|
|
408
|
+
User=ubuntu
|
|
409
|
+
Environment="GROUND_ID=ground-1-id"
|
|
410
|
+
Environment="CLIENT_IMAGES_PATH=./public/client.png"
|
|
411
|
+
ExecStart=/usr/local/bin/streamer-node-env-setup.sh --path /opt/streamer-ground1
|
|
412
|
+
Restart=always
|
|
413
|
+
RestartSec=10
|
|
414
|
+
|
|
415
|
+
[Install]
|
|
416
|
+
WantedBy=multi-user.target
|
|
417
|
+
```
|
|
418
|
+
|
|
419
|
+
Enable and start:
|
|
420
|
+
|
|
421
|
+
```bash
|
|
422
|
+
sudo systemctl daemon-reload
|
|
423
|
+
sudo systemctl enable streamer-node-ground1
|
|
424
|
+
sudo systemctl start streamer-node-ground1
|
|
425
|
+
```
|
|
426
|
+
|
|
427
|
+
---
|
|
428
|
+
|
|
429
|
+
## Updating Configuration
|
|
430
|
+
|
|
431
|
+
### Change GROUND_ID
|
|
432
|
+
|
|
433
|
+
#### Method 1: Update Global Variable
|
|
434
|
+
|
|
435
|
+
```bash
|
|
436
|
+
# Edit .bashrc
|
|
437
|
+
nano ~/.bashrc
|
|
438
|
+
|
|
439
|
+
# Change the GROUND_ID line
|
|
440
|
+
export GROUND_ID="new-ground-id"
|
|
441
|
+
|
|
442
|
+
# Apply
|
|
443
|
+
source ~/.bashrc
|
|
444
|
+
|
|
445
|
+
# Recreate .env and restart
|
|
446
|
+
streamer-node-env-setup.sh --create-only
|
|
447
|
+
sudo systemctl restart streamer-node
|
|
448
|
+
```
|
|
449
|
+
|
|
450
|
+
#### Method 2: Override in Service
|
|
451
|
+
|
|
452
|
+
```bash
|
|
453
|
+
# Edit service
|
|
454
|
+
sudo nano /etc/systemd/system/streamer-node.service
|
|
455
|
+
|
|
456
|
+
# Change Environment line
|
|
457
|
+
Environment="GROUND_ID=new-ground-id"
|
|
458
|
+
|
|
459
|
+
# Reload and restart
|
|
460
|
+
sudo systemctl daemon-reload
|
|
461
|
+
sudo systemctl restart streamer-node
|
|
462
|
+
```
|
|
463
|
+
|
|
464
|
+
### Change Client Image
|
|
465
|
+
|
|
466
|
+
```bash
|
|
467
|
+
# Copy new image
|
|
468
|
+
cp /path/to/new-logo.png /opt/streamer-node/public/client.png
|
|
469
|
+
|
|
470
|
+
# Restart service
|
|
471
|
+
sudo systemctl restart streamer-node
|
|
472
|
+
```
|
|
473
|
+
|
|
474
|
+
---
|
|
475
|
+
|
|
476
|
+
## Verification
|
|
477
|
+
|
|
478
|
+
### Check Environment Variables
|
|
479
|
+
|
|
480
|
+
```bash
|
|
481
|
+
# Check current values
|
|
482
|
+
echo $GROUND_ID
|
|
483
|
+
echo $CLIENT_IMAGES_PATH
|
|
484
|
+
|
|
485
|
+
# Check all environment
|
|
486
|
+
env | grep -E 'GROUND_ID|CLIENT_IMAGES_PATH'
|
|
487
|
+
```
|
|
488
|
+
|
|
489
|
+
### Check .env File
|
|
490
|
+
|
|
491
|
+
```bash
|
|
492
|
+
# View .env file
|
|
493
|
+
cat /opt/streamer-node/.env
|
|
494
|
+
|
|
495
|
+
# Check if file exists
|
|
496
|
+
ls -la /opt/streamer-node/.env
|
|
497
|
+
```
|
|
498
|
+
|
|
499
|
+
### Verify Service Configuration
|
|
500
|
+
|
|
501
|
+
```bash
|
|
502
|
+
# Check service environment
|
|
503
|
+
sudo systemctl show streamer-node -p Environment
|
|
504
|
+
|
|
505
|
+
# Check service status
|
|
506
|
+
sudo systemctl status streamer-node
|
|
507
|
+
|
|
508
|
+
# Check logs
|
|
509
|
+
sudo journalctl -u streamer-node -n 50
|
|
510
|
+
```
|
|
511
|
+
|
|
512
|
+
---
|
|
513
|
+
|
|
514
|
+
## Testing
|
|
515
|
+
|
|
516
|
+
### Test Script Manually
|
|
517
|
+
|
|
518
|
+
```bash
|
|
519
|
+
# Test with default settings
|
|
520
|
+
./streamer-node-env-setup.sh --create-only
|
|
521
|
+
|
|
522
|
+
# Verify .env was created
|
|
523
|
+
cat /opt/streamer-node/.env
|
|
524
|
+
|
|
525
|
+
# Test running
|
|
526
|
+
cd /opt/streamer-node
|
|
527
|
+
npx streamer-node@latest
|
|
528
|
+
```
|
|
529
|
+
|
|
530
|
+
### Test Different Configurations
|
|
531
|
+
|
|
532
|
+
```bash
|
|
533
|
+
# Test custom path
|
|
534
|
+
./streamer-node-env-setup.sh --path /tmp/test-streamer --create-only
|
|
535
|
+
|
|
536
|
+
# Test override
|
|
537
|
+
./streamer-node-env-setup.sh --ground-id "test-123" --create-only
|
|
538
|
+
|
|
539
|
+
# Check results
|
|
540
|
+
cat /tmp/test-streamer/.env
|
|
541
|
+
```
|
|
542
|
+
|
|
543
|
+
---
|
|
544
|
+
|
|
545
|
+
## Troubleshooting
|
|
546
|
+
|
|
547
|
+
### Environment Variables Not Set
|
|
548
|
+
|
|
549
|
+
**Problem:** Script says "GROUND_ID is not set"
|
|
550
|
+
|
|
551
|
+
**Solution:**
|
|
552
|
+
```bash
|
|
553
|
+
# Check if variables are set
|
|
554
|
+
echo $GROUND_ID
|
|
555
|
+
|
|
556
|
+
# If empty, source the profile
|
|
557
|
+
source ~/.bashrc
|
|
558
|
+
|
|
559
|
+
# Or set them temporarily
|
|
560
|
+
export GROUND_ID="your-ground-id"
|
|
561
|
+
export CLIENT_IMAGES_PATH="./public/client.png"
|
|
562
|
+
```
|
|
563
|
+
|
|
564
|
+
### .env File Not Created
|
|
565
|
+
|
|
566
|
+
**Problem:** .env file doesn't exist
|
|
567
|
+
|
|
568
|
+
**Solution:**
|
|
569
|
+
```bash
|
|
570
|
+
# Check directory exists
|
|
571
|
+
ls -la /opt/streamer-node
|
|
572
|
+
|
|
573
|
+
# Check permissions
|
|
574
|
+
ls -ld /opt/streamer-node
|
|
575
|
+
|
|
576
|
+
# Create directory if needed
|
|
577
|
+
sudo mkdir -p /opt/streamer-node
|
|
578
|
+
sudo chown $USER:$USER /opt/streamer-node
|
|
579
|
+
|
|
580
|
+
# Run script again
|
|
581
|
+
./streamer-node-env-setup.sh --create-only
|
|
582
|
+
```
|
|
583
|
+
|
|
584
|
+
### Service Doesn't Start
|
|
585
|
+
|
|
586
|
+
**Problem:** systemctl start fails
|
|
587
|
+
|
|
588
|
+
**Solution:**
|
|
589
|
+
```bash
|
|
590
|
+
# Check service status
|
|
591
|
+
sudo systemctl status streamer-node
|
|
592
|
+
|
|
593
|
+
# Check logs
|
|
594
|
+
sudo journalctl -u streamer-node -n 100
|
|
595
|
+
|
|
596
|
+
# Verify script exists
|
|
597
|
+
ls -la /usr/local/bin/streamer-node-env-setup.sh
|
|
598
|
+
|
|
599
|
+
# Test script manually
|
|
600
|
+
/usr/local/bin/streamer-node-env-setup.sh --create-only
|
|
601
|
+
```
|
|
602
|
+
|
|
603
|
+
### npx Command Not Found
|
|
604
|
+
|
|
605
|
+
**Problem:** "npx: command not found"
|
|
606
|
+
|
|
607
|
+
**Solution:**
|
|
608
|
+
```bash
|
|
609
|
+
# Install Node.js
|
|
610
|
+
curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash -
|
|
611
|
+
sudo apt-get install -y nodejs
|
|
612
|
+
|
|
613
|
+
# Verify installation
|
|
614
|
+
node --version
|
|
615
|
+
npm --version
|
|
616
|
+
npx --version
|
|
617
|
+
```
|
|
618
|
+
|
|
619
|
+
---
|
|
620
|
+
|
|
621
|
+
## Advantages of This Approach
|
|
622
|
+
|
|
623
|
+
✅ **Centralized Configuration** - Environment variables defined once, used everywhere
|
|
624
|
+
✅ **Easy Updates** - Change global variables, recreate .env
|
|
625
|
+
✅ **Multi-Ground Support** - Different variables for different instances
|
|
626
|
+
✅ **Service Integration** - Works seamlessly with systemd
|
|
627
|
+
✅ **Override Capability** - Can override via command line
|
|
628
|
+
✅ **Development Friendly** - Easy to test locally
|
|
629
|
+
|
|
630
|
+
---
|
|
631
|
+
|
|
632
|
+
## Quick Reference
|
|
633
|
+
|
|
634
|
+
### Set Variables
|
|
635
|
+
```bash
|
|
636
|
+
echo 'export GROUND_ID="your-id"' >> ~/.bashrc
|
|
637
|
+
echo 'export CLIENT_IMAGES_PATH="./public/client.png"' >> ~/.bashrc
|
|
638
|
+
source ~/.bashrc
|
|
639
|
+
```
|
|
640
|
+
|
|
641
|
+
### Install Script
|
|
642
|
+
```bash
|
|
643
|
+
curl -sL https://raw.githubusercontent.com/.../streamer-node-env-setup.sh -o /tmp/setup.sh
|
|
644
|
+
sudo mv /tmp/setup.sh /usr/local/bin/streamer-node-env-setup.sh
|
|
645
|
+
sudo chmod +x /usr/local/bin/streamer-node-env-setup.sh
|
|
646
|
+
```
|
|
647
|
+
|
|
648
|
+
### Run
|
|
649
|
+
```bash
|
|
650
|
+
# Default
|
|
651
|
+
streamer-node-env-setup.sh
|
|
652
|
+
|
|
653
|
+
# Custom path
|
|
654
|
+
streamer-node-env-setup.sh --path /opt/streamer-node
|
|
655
|
+
|
|
656
|
+
# Only create .env
|
|
657
|
+
streamer-node-env-setup.sh --create-only
|
|
658
|
+
```
|
|
659
|
+
|
|
660
|
+
### Service
|
|
661
|
+
```bash
|
|
662
|
+
sudo systemctl start streamer-node
|
|
663
|
+
sudo systemctl status streamer-node
|
|
664
|
+
sudo journalctl -u streamer-node -f
|
|
665
|
+
```
|
|
666
|
+
|
|
667
|
+
---
|
|
668
|
+
|
|
669
|
+
**Last Updated:** October 2025
|
|
670
|
+
**Version:** 1.0.0
|