@@ -80,7 +80,14 @@ const generateEditorEnv = (config, deploymentType) => {
8080 addEnvVar ( envVars , 'M3U_PROXY_PORT' , config . M3U_PROXY_PORT || '38085' ) ;
8181 }
8282
83- addEnvVar ( envVars , 'M3U_PROXY_TOKEN' , config . M3U_PROXY_TOKEN ) ;
83+ // Proxy token - use .env substitution so the value comes from .env file
84+ // For embedded proxy, token is optional (auto-generated at boot if not set)
85+ // For external proxy, token must always be defined
86+ if ( config . M3U_PROXY_TOKEN ) {
87+ envVars . push ( ` - M3U_PROXY_TOKEN=\${M3U_PROXY_TOKEN:-${ config . M3U_PROXY_TOKEN } }` ) ;
88+ } else if ( ! useEmbeddedProxy ) {
89+ envVars . push ( ` - M3U_PROXY_TOKEN=\${M3U_PROXY_TOKEN}` ) ;
90+ }
8491 addEnvVar ( envVars , 'M3U_PROXY_LOG_LEVEL' , config . M3U_PROXY_LOG_LEVEL , config . M3U_PROXY_LOG_LEVEL ) ;
8592
8693 // Redis settings
@@ -232,16 +239,18 @@ const generateProxyService = (config, useVpnNetwork = false) => {
232239 service += `
233240 - m3u-redis` ;
234241 }
235- // Note: No dependency on m3u-editor for embedded Redis to avoid circular dependency
236- // The proxy can connect to editor's Redis via hostname without depends_on
237242 } else {
243+ // When redis is external, proxy depends on redis
244+ // When redis is embedded in editor, proxy depends on editor (connects to editor's redis)
238245 if ( redisExternal ) {
239246 service += `
240247 depends_on:
241248 - m3u-redis` ;
249+ } else {
250+ service += `
251+ depends_on:
252+ - m3u-editor` ;
242253 }
243- // Note: No dependency on m3u-editor for embedded Redis to avoid circular dependency
244- // The proxy can connect to editor's Redis via hostname without depends_on
245254 service += `
246255 networks:
247256 - m3u-network` ;
@@ -284,9 +293,10 @@ export const generateModularCompose = (config) => {
284293 const imageTag = getImageTag ( config ) ;
285294
286295 // Build depends_on for editor
287- // Note: Editor only depends on external Redis (if used)
288- // Proxy is not a startup dependency - it's a runtime service
296+ // When redis is external: editor depends on proxy (if external) + redis
297+ // When redis is embedded: editor has no depends_on (proxy depends on editor instead)
289298 const editorDependsOn = [ ] ;
299+ if ( proxyExternal && redisExternal ) editorDependsOn . push ( 'm3u-proxy' ) ;
290300 if ( redisExternal ) editorDependsOn . push ( 'm3u-redis' ) ;
291301
292302 let compose = `# Docker Compose - Modular Deployment
@@ -413,9 +423,10 @@ export const generateVpnCompose = (config) => {
413423 }
414424
415425 // Build depends_on for editor
416- // Note: Editor only depends on external Redis (if used) and gluetun
417- // Proxy is not a startup dependency - it's a runtime service
426+ // Editor always depends on gluetun (VPN network)
427+ // When redis is external: also depends on proxy (if external) + redis
418428 const editorDependsOn = [ ] ;
429+ if ( proxyExternal && redisExternal ) editorDependsOn . push ( 'm3u-proxy' ) ;
419430 if ( redisExternal ) editorDependsOn . push ( 'm3u-redis' ) ;
420431
421432 let compose = `# Docker Compose - VPN Deployment (Gluetun)
@@ -514,9 +525,9 @@ export const generateExternalNginxCompose = (config) => {
514525 const imageTag = getImageTag ( config ) ;
515526
516527 // Build depends_on for editor
517- // Note: Editor only depends on external Redis (if used)
518- // Proxy is not a startup dependency - it's a runtime service
528+ // When redis is external: editor depends on proxy (if external) + redis
519529 const editorDependsOn = [ ] ;
530+ if ( proxyExternal && redisExternal ) editorDependsOn . push ( 'm3u-proxy' ) ;
520531 if ( redisExternal ) editorDependsOn . push ( 'm3u-redis' ) ;
521532
522533 let compose = `# Docker Compose - External Nginx Deployment
@@ -568,7 +579,8 @@ ${editorDependsOn.map(d => ` - ${d}`).join('\n')}`;
568579 - ${ config . CONFIG_PATH || './data' } :/var/www/html:ro
569580 restart: unless-stopped
570581 depends_on:
571- - m3u-editor
582+ - m3u-editor${ proxyExternal ? `
583+ - m3u-proxy` : '' }
572584 networks:
573585 - m3u-network
574586
@@ -635,9 +647,9 @@ export const generateExternalCaddyCompose = (config) => {
635647 const domain = config . APP_URL ?. replace ( / ^ h t t p s ? : \/ \/ / , '' ) . replace ( / \/ $ / , '' ) || 'localhost' ;
636648
637649 // Build depends_on for editor
638- // Note: Editor only depends on external Redis (if used)
639- // Proxy is not a startup dependency - it's a runtime service
650+ // When redis is external: editor depends on proxy (if external) + redis
640651 const editorDependsOn = [ ] ;
652+ if ( proxyExternal && redisExternal ) editorDependsOn . push ( 'm3u-proxy' ) ;
641653 if ( redisExternal ) editorDependsOn . push ( 'm3u-redis' ) ;
642654
643655 let compose = `# Docker Compose - External Caddy Deployment
@@ -691,7 +703,8 @@ ${editorDependsOn.map(d => ` - ${d}`).join('\n')}`;
691703 - ${ config . CONFIG_PATH || './data' } :/var/www/html:ro
692704 restart: unless-stopped
693705 depends_on:
694- - m3u-editor
706+ - m3u-editor${ proxyExternal ? `
707+ - m3u-proxy` : '' }
695708 networks:
696709 - m3u-network
697710
0 commit comments