{{ $t('tls.detectedSystem') }}:{{ nginxSetup.os }} {{ nginxSetup.version }} · {{ nginxSetup.package_manager || '—' }}
Nginx:{{ nginxSetup.nginx_installed ? '✓' : '—' }} · Certbot:{{ nginxSetup.certbot_installed ? '✓' : '—' }} · HTTP-01 webroot:{{ nginxSetup.webroot_ready ? '✓' : '—' }}
+{{ $t('tls.siteStage') }}:{{ $t(`tls.stage_${nginxSetup.site_stage || 'none'}`) }}
{{ $t('tls.setupHint') }}
{{ $t('tls.activateHint') }}
+{{ nginxActivateLog }}
{{ $t('tls.previewOnly') }}
@@ -188,6 +192,52 @@ const nginxSetupLoading = ref(false) const nginxInstalling = ref(false) const nginxInstallLog = ref('') const nginxLogView = ref(null) +const nginxActivating = ref(false) +const nginxActivateLog = ref('') +const nginxActivateLogView = ref(null) + +async function activateNginx() { + nginxActivating.value = true + nginxActivateLog.value = '' + let completed = false + try { + const response = await fetch('/api/system/tls/nginx-activate', { + method: 'POST', headers: { Authorization: `Bearer ${auth.token}` } + }) + if (!response.ok) { + const body = await response.json().catch(() => ({})) + throw new Error(body.error || `${response.status} ${response.statusText}`) + } + const reader = response.body.getReader() + const decoder = new TextDecoder() + let buffer = '' + const show = (line) => { + if (!line) return + const event = JSON.parse(line) + nginxActivateLog.value = (nginxActivateLog.value + (event.message || '')).slice(-100000) + if (event.type === 'done') completed = true + if (event.type === 'error') throw new Error(event.message) + nextTick(() => { if (nginxActivateLogView.value) nginxActivateLogView.value.scrollTop = nginxActivateLogView.value.scrollHeight }) + } + while (true) { + const { done, value } = await reader.read() + if (done) break + buffer += decoder.decode(value, { stream: true }) + const lines = buffer.split('\n') + buffer = lines.pop() + for (const line of lines) show(line) + } + if (buffer) show(buffer) + if (!completed) throw new Error(t('tls.setupInterrupted')) + ElMessage.success(t('tls.siteReady')) + } catch (e) { + nginxActivateLog.value += `\n${e.message}\n` + ElMessage.error(t('tls.siteFailed')) + } finally { + nginxActivating.value = false + await Promise.all([loadNginxSetup(), loadTLS()]) + } +} async function loadNginxSetup() { nginxSetupLoading.value = true