Skip to content

Commit 66fe916

Browse files
committed
fix(deploy): docker
1 parent 9d2ec31 commit 66fe916

3 files changed

Lines changed: 33 additions & 15 deletions

File tree

app/api/server.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -301,8 +301,8 @@ app.get('/api/diagnostics/networks', requireAuth, async (req, res) => {
301301
app.post('/api/deploy/apps/:name/full-restart', requireAuth, async (req, res) => {
302302
const { name } = req.params;
303303
try {
304-
res.json({ ok: true, restarting: true });
305-
composeFullRestart(name).catch((err) => console.error(`[full-restart] ${name} failed:`, err.message));
304+
const result = await composeFullRestart(name);
305+
res.json({ ok: true, ...result });
306306
} catch (err) {
307307
res.status(500).json({ error: err.message });
308308
}

app/api/services/compose.js

Lines changed: 21 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -116,27 +116,37 @@ export async function composeRebuild(serviceNames, forceBuild = false) {
116116

117117
export async function composeFullRestart(appName) {
118118
const allServices = await getAllServiceNames(appName);
119-
console.log(`[full-restart] ${appName}: services détectés = [${allServices.join(', ')}]`);
119+
console.log(`[full-restart] ${appName}: services = [${allServices.join(', ')}]`);
120120

121-
// Suppression de tous les containers de l'app (y compris bases de données)
121+
// Suppression de tous les containers
122122
await execFile('docker', ['compose', '-f', MAIN_COMPOSE, 'rm', '-sf', ...allServices], { cwd: APPS_ROOT }).catch(() => {});
123123
await Promise.all(allServices.map((n) => execFile('docker', ['rm', '-f', n]).catch(() => {})));
124124

125-
// Suppression des réseaux orphelins liés à l'app
125+
// Suppression puis recréation d'un réseau dédié propre
126126
const networkName = `${appName}-net`;
127-
await execFile('docker', ['network', 'rm', networkName, `${appName}_net`], {}).catch(() => {});
128-
129-
// Création d'un réseau dédié pour l'app
130-
await execFile('docker', ['network', 'create', networkName], {}).catch(() => {});
127+
await execFile('docker', ['network', 'rm', networkName], {}).catch(() => {});
128+
await execFile('docker', ['network', 'create', networkName], {});
131129

132130
// Démarrage de tous les containers
133131
await execFile('docker', ['compose', '-f', MAIN_COMPOSE, 'up', '-d', ...allServices], { cwd: APPS_ROOT });
134132

135-
// Connexion explicite de tous les containers au réseau partagé (quel que soit leur réseau actuel)
136-
await Promise.all(
137-
allServices.map((n) => execFile('docker', ['network', 'connect', networkName, n]).catch(() => {}))
133+
// Attente que les containers soient créés (3s)
134+
await new Promise((r) => setTimeout(r, 3000));
135+
136+
// Connexion forcée de TOUS les containers au réseau partagé
137+
const connectResults = await Promise.all(
138+
allServices.map(async (n) => {
139+
try {
140+
await execFile('docker', ['network', 'connect', networkName, n]);
141+
return `${n}: connecté`;
142+
} catch (e) {
143+
return `${n}: ${e.message.includes('already') ? 'déjà connecté' : e.message.split('\n')[0]}`;
144+
}
145+
})
138146
);
139-
console.log(`[full-restart] ${appName}: tous les containers connectés à ${networkName}`);
147+
148+
console.log(`[full-restart] réseau ${networkName}:`, connectResults);
149+
return { services: allServices, network: networkName, connections: connectResults };
140150
}
141151

142152
const INFRA_COMPOSE_CONTENT = `services:

app/public/app.js

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -296,8 +296,16 @@ async function fullRestartApp(name, btn) {
296296
btn.disabled = true;
297297
btn.textContent = '…';
298298
const res = await fetch(`/api/deploy/apps/${encodeURIComponent(name)}/full-restart`, { method: 'POST' });
299-
btn.textContent = res.ok ? '✅' : '❌';
300-
setTimeout(() => { btn.disabled = false; btn.textContent = 'Redémarrage complet'; loadDeploy(); }, 3000);
299+
const data = await res.json().catch(() => ({}));
300+
if (res.ok) {
301+
const info = data.connections ? `\n${data.connections.join('\n')}` : '';
302+
alert(`✅ Redémarrage complet de "${name}" terminé.\nRéseau : ${data.network || '?'}${info}`);
303+
} else {
304+
alert(`❌ Erreur : ${data.error || 'inconnue'}`);
305+
}
306+
btn.disabled = false;
307+
btn.textContent = 'Redémarrage complet';
308+
loadDeploy();
301309
}
302310

303311
function toggleEnvSection() {

0 commit comments

Comments
 (0)