feat: logrotate cron task for docker users #255

This commit is contained in:
Jacky 2024-02-25 20:45:45 +08:00
parent b7f50f0053
commit 0fa98703cd
26 changed files with 663 additions and 119 deletions

View file

@ -2,6 +2,7 @@ package system
import (
"github.com/0xJacky/Nginx-UI/api"
"github.com/0xJacky/Nginx-UI/internal/cron"
"github.com/0xJacky/Nginx-UI/settings"
"github.com/gin-gonic/gin"
"net/http"
@ -10,26 +11,34 @@ import (
func GetSettings(c *gin.Context) {
c.JSON(http.StatusOK, gin.H{
"server": settings.ServerSettings,
"nginx": settings.NginxSettings,
"openai": settings.OpenAISettings,
"server": settings.ServerSettings,
"nginx": settings.NginxSettings,
"openai": settings.OpenAISettings,
"logrotate": settings.LogrotateSettings,
})
}
func SaveSettings(c *gin.Context) {
var json struct {
Server settings.Server `json:"server"`
Nginx settings.Nginx `json:"nginx"`
Openai settings.OpenAI `json:"openai"`
Server settings.Server `json:"server"`
Nginx settings.Nginx `json:"nginx"`
Openai settings.OpenAI `json:"openai"`
Logrotate settings.Logrotate `json:"logrotate"`
}
if !api.BindAndValid(c, &json) {
return
}
if settings.LogrotateSettings.Enabled != json.Logrotate.Enabled ||
settings.LogrotateSettings.Interval != json.Logrotate.Interval {
go cron.RestartLogrotate()
}
fillSettings(&settings.ServerSettings, &json.Server)
fillSettings(&settings.NginxSettings, &json.Nginx)
fillSettings(&settings.OpenAISettings, &json.Openai)
fillSettings(&settings.LogrotateSettings, &json.Logrotate)
settings.ReflectFrom()

View file

@ -155,7 +155,7 @@ msgstr "Base information"
#: src/views/config/ConfigEdit.vue:117
#: src/views/domain/components/RightSettings.vue:76
#: src/views/preference/Preference.vue:96
#: src/views/preference/Preference.vue:95
#: src/views/stream/components/RightSettings.vue:76
#, fuzzy
msgid "Basic"
@ -255,6 +255,11 @@ msgstr ""
msgid "Cleared successfully"
msgstr "Disabled successfully"
#: src/views/preference/LogrotateSettings.vue:27
#, fuzzy
msgid "Command"
msgstr "Comments"
#: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:107
#: src/views/domain/ngx_conf/LocationEditor.vue:119
#: src/views/domain/ngx_conf/LocationEditor.vue:88
@ -503,7 +508,7 @@ msgstr "Are you sure you want to remove this directive?"
msgid "Do you want to remove this upstream?"
msgstr "Are you sure you want to remove this directive?"
#: src/views/certificate/WildcardCertificate.vue:72
#: src/views/certificate/WildcardCertificate.vue:100
msgid "Domain"
msgstr ""
@ -618,6 +623,7 @@ msgstr "Enable TLS"
#: src/views/domain/cert/ChangeCert.vue:44
#: src/views/domain/components/RightSettings.vue:78
#: src/views/domain/DomainEdit.vue:179 src/views/domain/DomainList.vue:32
#: src/views/preference/LogrotateSettings.vue:24
#: src/views/stream/components/RightSettings.vue:78
#: src/views/stream/StreamEdit.vue:170 src/views/stream/StreamList.vue:32
msgid "Enabled"
@ -838,12 +844,16 @@ msgstr "Enabled successfully"
msgid "Intermediate Certification Authorities: %{issuer}"
msgstr "Intermediate Certification Authorities: %{issuer}"
#: src/views/preference/LogrotateSettings.vue:30
msgid "Interval"
msgstr ""
#: src/views/certificate/Certificate.vue:137
#, fuzzy
msgid "Issue wildcard certificate"
msgstr "Certificate is valid"
#: src/views/certificate/WildcardCertificate.vue:61
#: src/views/certificate/WildcardCertificate.vue:89
#, fuzzy
msgid "Issue Wildcard Certificate"
msgstr "Certificate Status"
@ -857,6 +867,7 @@ msgstr "Enabled successfully"
msgid "Jwt Secret"
msgstr ""
#: src/views/certificate/WildcardCertificate.vue:107
#: src/views/domain/cert/components/AutoCertStepOne.vue:108
msgid "Key Type"
msgstr ""
@ -924,6 +935,20 @@ msgstr "Login successful"
msgid "Logout successful"
msgstr "Logout successful"
#: src/views/preference/Preference.vue:113
msgid "Logrotate"
msgstr ""
#: src/views/preference/LogrotateSettings.vue:17
msgid ""
"Logrotate, by default, is enabled in most mainstream Linux distributions for "
"users who install Nginx UI on the host machine, so you don't need to modify "
"the parameters on this page. For users who install Nginx UI using Docker "
"containers, you can manually enable this option. The crontab task scheduler "
"of Nginx UI will execute the logrotate command at the interval you set in "
"minutes."
msgstr ""
#: src/views/domain/cert/components/AutoCertStepOne.vue:87
#, fuzzy
msgid ""
@ -963,6 +988,10 @@ msgstr "Memory"
msgid "Memory and Storage"
msgstr "Memory and Storage"
#: src/views/preference/LogrotateSettings.vue:34
msgid "Minutes"
msgstr ""
#: src/components/ChatGPT/ChatGPT.vue:256
#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:141
#: src/components/StdDesign/StdDataDisplay/StdTable.vue:336
@ -1019,13 +1048,13 @@ msgstr "Network Total Send"
msgid "New version released"
msgstr ""
#: src/views/certificate/WildcardCertificate.vue:87
#: src/views/certificate/WildcardCertificate.vue:127
#: src/views/domain/cert/components/ObtainCert.vue:204
#: src/views/domain/DomainAdd.vue:145
msgid "Next"
msgstr "Next"
#: src/views/preference/Preference.vue:102
#: src/views/preference/Preference.vue:101
msgid "Nginx"
msgstr ""
@ -1148,7 +1177,7 @@ msgstr ""
msgid "Online"
msgstr ""
#: src/views/preference/Preference.vue:108
#: src/views/preference/Preference.vue:107
msgid "OpenAI"
msgstr ""
@ -1242,7 +1271,7 @@ msgstr ""
msgid "Pre-release"
msgstr ""
#: src/routes/index.ts:210 src/views/preference/Preference.vue:91
#: src/routes/index.ts:210 src/views/preference/Preference.vue:90
msgid "Preference"
msgstr ""
@ -1334,7 +1363,7 @@ msgid "Renew Certificate Success"
msgstr "Certificate is valid"
#: src/views/certificate/RenewCert.vue:25
#: src/views/certificate/WildcardCertificate.vue:50
#: src/views/certificate/WildcardCertificate.vue:51
#, fuzzy
msgid "Renew successfully"
msgstr "Enabled successfully"
@ -1368,7 +1397,7 @@ msgstr ""
#: src/views/certificate/CertificateEditor.vue:245
#: src/views/config/ConfigEdit.vue:98 src/views/domain/DomainEdit.vue:263
#: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:121
#: src/views/preference/Preference.vue:119 src/views/stream/StreamEdit.vue:253
#: src/views/preference/Preference.vue:124 src/views/stream/StreamEdit.vue:253
msgid "Save"
msgstr "Save"
@ -1383,7 +1412,7 @@ msgstr "Save error %{msg}"
#: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:42
#: src/views/certificate/CertificateEditor.vue:48
#: src/views/preference/Preference.vue:61
#: src/views/preference/Preference.vue:60
#, fuzzy
msgid "Save successfully"
msgstr "Saved successfully"
@ -1416,7 +1445,7 @@ msgstr "Send"
#: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:45
#: src/components/StdDesign/StdDataDisplay/StdTable.vue:157
#: src/views/config/ConfigEdit.vue:42 src/views/domain/DomainList.vue:84
#: src/views/other/Install.vue:72 src/views/preference/Preference.vue:65
#: src/views/other/Install.vue:72 src/views/preference/Preference.vue:64
#: src/views/stream/StreamList.vue:116 src/views/stream/StreamList.vue:84
#: src/views/system/Upgrade.vue:45
msgid "Server error"
@ -1617,6 +1646,10 @@ msgstr ""
msgid "This field should not be empty"
msgstr ""
#: src/views/preference/LogrotateSettings.vue:16
msgid "Tips"
msgstr ""
#: src/views/notification/Notification.vue:21
msgid "Title"
msgstr ""

View file

@ -152,7 +152,7 @@ msgstr "Información general"
#: src/views/config/ConfigEdit.vue:117
#: src/views/domain/components/RightSettings.vue:76
#: src/views/preference/Preference.vue:96
#: src/views/preference/Preference.vue:95
#: src/views/stream/components/RightSettings.vue:76
msgid "Basic"
msgstr "Básico"
@ -246,6 +246,11 @@ msgstr "Borrar"
msgid "Cleared successfully"
msgstr "Limpiado exitoso"
#: src/views/preference/LogrotateSettings.vue:27
#, fuzzy
msgid "Command"
msgstr "Comentarios"
#: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:107
#: src/views/domain/ngx_conf/LocationEditor.vue:119
#: src/views/domain/ngx_conf/LocationEditor.vue:88
@ -480,7 +485,7 @@ msgstr "¿Quieres eliminar este servidor?"
msgid "Do you want to remove this upstream?"
msgstr "¿Quieres eliminar esta transmisión?"
#: src/views/certificate/WildcardCertificate.vue:72
#: src/views/certificate/WildcardCertificate.vue:100
msgid "Domain"
msgstr "Dominio"
@ -590,6 +595,7 @@ msgstr "Habilitar TLS"
#: src/views/domain/cert/ChangeCert.vue:44
#: src/views/domain/components/RightSettings.vue:78
#: src/views/domain/DomainEdit.vue:179 src/views/domain/DomainList.vue:32
#: src/views/preference/LogrotateSettings.vue:24
#: src/views/stream/components/RightSettings.vue:78
#: src/views/stream/StreamEdit.vue:170 src/views/stream/StreamList.vue:32
msgid "Enabled"
@ -802,11 +808,15 @@ msgstr "Instalación exitosa"
msgid "Intermediate Certification Authorities: %{issuer}"
msgstr "Autoridades de certificación intermedias: %{issuer}"
#: src/views/preference/LogrotateSettings.vue:30
msgid "Interval"
msgstr ""
#: src/views/certificate/Certificate.vue:137
msgid "Issue wildcard certificate"
msgstr "Obtener certificado comodín"
#: src/views/certificate/WildcardCertificate.vue:61
#: src/views/certificate/WildcardCertificate.vue:89
msgid "Issue Wildcard Certificate"
msgstr "Obtener certificado Comodín"
@ -818,6 +828,7 @@ msgstr "Certificado emitido con éxito"
msgid "Jwt Secret"
msgstr "Secreto Jwt"
#: src/views/certificate/WildcardCertificate.vue:107
#: src/views/domain/cert/components/AutoCertStepOne.vue:108
#, fuzzy
msgid "Key Type"
@ -881,6 +892,20 @@ msgstr "Acceso exitoso"
msgid "Logout successful"
msgstr "Cierre de sesión exitoso"
#: src/views/preference/Preference.vue:113
msgid "Logrotate"
msgstr ""
#: src/views/preference/LogrotateSettings.vue:17
msgid ""
"Logrotate, by default, is enabled in most mainstream Linux distributions for "
"users who install Nginx UI on the host machine, so you don't need to modify "
"the parameters on this page. For users who install Nginx UI using Docker "
"containers, you can manually enable this option. The crontab task scheduler "
"of Nginx UI will execute the logrotate command at the interval you set in "
"minutes."
msgstr ""
#: src/views/domain/cert/components/AutoCertStepOne.vue:87
msgid ""
"Make sure you have configured a reverse proxy for .well-known directory to "
@ -917,6 +942,10 @@ msgstr "Memoria"
msgid "Memory and Storage"
msgstr "Memoria y almacenamiento"
#: src/views/preference/LogrotateSettings.vue:34
msgid "Minutes"
msgstr ""
#: src/components/ChatGPT/ChatGPT.vue:256
#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:141
#: src/components/StdDesign/StdDataDisplay/StdTable.vue:336
@ -970,13 +999,13 @@ msgstr "Total enviado por la red"
msgid "New version released"
msgstr "Se liberó una nueva versión"
#: src/views/certificate/WildcardCertificate.vue:87
#: src/views/certificate/WildcardCertificate.vue:127
#: src/views/domain/cert/components/ObtainCert.vue:204
#: src/views/domain/DomainAdd.vue:145
msgid "Next"
msgstr "Siguiente"
#: src/views/preference/Preference.vue:102
#: src/views/preference/Preference.vue:101
msgid "Nginx"
msgstr "Nginx"
@ -1093,7 +1122,7 @@ msgstr "Una vez que se complete la verificación, los registros se eliminarán."
msgid "Online"
msgstr "En línea"
#: src/views/preference/Preference.vue:108
#: src/views/preference/Preference.vue:107
msgid "OpenAI"
msgstr "OpenAI"
@ -1195,7 +1224,7 @@ msgstr "¡Seleccione al menos un nodo!"
msgid "Pre-release"
msgstr "Prelanzamiento"
#: src/routes/index.ts:210 src/views/preference/Preference.vue:91
#: src/routes/index.ts:210 src/views/preference/Preference.vue:90
msgid "Preference"
msgstr "Configuración"
@ -1280,7 +1309,7 @@ msgid "Renew Certificate Success"
msgstr "Renovado de Certificado exitoso"
#: src/views/certificate/RenewCert.vue:25
#: src/views/certificate/WildcardCertificate.vue:50
#: src/views/certificate/WildcardCertificate.vue:51
msgid "Renew successfully"
msgstr "Renovado con éxito"
@ -1312,7 +1341,7 @@ msgstr "Corriendo"
#: src/views/certificate/CertificateEditor.vue:245
#: src/views/config/ConfigEdit.vue:98 src/views/domain/DomainEdit.vue:263
#: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:121
#: src/views/preference/Preference.vue:119 src/views/stream/StreamEdit.vue:253
#: src/views/preference/Preference.vue:124 src/views/stream/StreamEdit.vue:253
msgid "Save"
msgstr "Guardar"
@ -1327,7 +1356,7 @@ msgstr "Error al guardar %{msg}"
#: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:42
#: src/views/certificate/CertificateEditor.vue:48
#: src/views/preference/Preference.vue:61
#: src/views/preference/Preference.vue:60
msgid "Save successfully"
msgstr "Guardado con éxito"
@ -1358,7 +1387,7 @@ msgstr "Enviado"
#: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:45
#: src/components/StdDesign/StdDataDisplay/StdTable.vue:157
#: src/views/config/ConfigEdit.vue:42 src/views/domain/DomainList.vue:84
#: src/views/other/Install.vue:72 src/views/preference/Preference.vue:65
#: src/views/other/Install.vue:72 src/views/preference/Preference.vue:64
#: src/views/stream/StreamList.vue:116 src/views/stream/StreamList.vue:84
#: src/views/system/Upgrade.vue:45
msgid "Server error"
@ -1548,6 +1577,10 @@ msgstr "Este campo es obligatorio"
msgid "This field should not be empty"
msgstr "Este campo no debe estar vacío"
#: src/views/preference/LogrotateSettings.vue:16
msgid "Tips"
msgstr ""
#: src/views/notification/Notification.vue:21
msgid "Title"
msgstr "Título"

View file

@ -155,7 +155,7 @@ msgstr "Information générale"
#: src/views/config/ConfigEdit.vue:117
#: src/views/domain/components/RightSettings.vue:76
#: src/views/preference/Preference.vue:96
#: src/views/preference/Preference.vue:95
#: src/views/stream/components/RightSettings.vue:76
msgid "Basic"
msgstr "Basique"
@ -253,6 +253,11 @@ msgstr "Effacer"
msgid "Cleared successfully"
msgstr "Désactivé avec succès"
#: src/views/preference/LogrotateSettings.vue:27
#, fuzzy
msgid "Command"
msgstr "Commentaires"
#: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:107
#: src/views/domain/ngx_conf/LocationEditor.vue:119
#: src/views/domain/ngx_conf/LocationEditor.vue:88
@ -497,7 +502,7 @@ msgstr "Voulez-vous supprimer ce serveur ?"
msgid "Do you want to remove this upstream?"
msgstr "Voulez-vous supprimer ce serveur ?"
#: src/views/certificate/WildcardCertificate.vue:72
#: src/views/certificate/WildcardCertificate.vue:100
msgid "Domain"
msgstr ""
@ -615,6 +620,7 @@ msgstr "Activer TLS"
#: src/views/domain/cert/ChangeCert.vue:44
#: src/views/domain/components/RightSettings.vue:78
#: src/views/domain/DomainEdit.vue:179 src/views/domain/DomainList.vue:32
#: src/views/preference/LogrotateSettings.vue:24
#: src/views/stream/components/RightSettings.vue:78
#: src/views/stream/StreamEdit.vue:170 src/views/stream/StreamList.vue:32
msgid "Enabled"
@ -836,12 +842,16 @@ msgstr "Installé avec succès"
msgid "Intermediate Certification Authorities: %{issuer}"
msgstr "Autorités de certification intermédiaires : %{issuer}"
#: src/views/preference/LogrotateSettings.vue:30
msgid "Interval"
msgstr ""
#: src/views/certificate/Certificate.vue:137
#, fuzzy
msgid "Issue wildcard certificate"
msgstr "Obtenir un certificat"
#: src/views/certificate/WildcardCertificate.vue:61
#: src/views/certificate/WildcardCertificate.vue:89
#, fuzzy
msgid "Issue Wildcard Certificate"
msgstr "État du certificat"
@ -854,6 +864,7 @@ msgstr "Certificat délivré avec succès"
msgid "Jwt Secret"
msgstr "Secret Jwt"
#: src/views/certificate/WildcardCertificate.vue:107
#: src/views/domain/cert/components/AutoCertStepOne.vue:108
#, fuzzy
msgid "Key Type"
@ -924,6 +935,20 @@ msgstr "Connexion réussie"
msgid "Logout successful"
msgstr "Déconnexion réussie"
#: src/views/preference/Preference.vue:113
msgid "Logrotate"
msgstr ""
#: src/views/preference/LogrotateSettings.vue:17
msgid ""
"Logrotate, by default, is enabled in most mainstream Linux distributions for "
"users who install Nginx UI on the host machine, so you don't need to modify "
"the parameters on this page. For users who install Nginx UI using Docker "
"containers, you can manually enable this option. The crontab task scheduler "
"of Nginx UI will execute the logrotate command at the interval you set in "
"minutes."
msgstr ""
#: src/views/domain/cert/components/AutoCertStepOne.vue:87
#, fuzzy
msgid ""
@ -963,6 +988,10 @@ msgstr "Mémoire"
msgid "Memory and Storage"
msgstr "Mémoire et stockage"
#: src/views/preference/LogrotateSettings.vue:34
msgid "Minutes"
msgstr ""
#: src/components/ChatGPT/ChatGPT.vue:256
#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:141
#: src/components/StdDesign/StdDataDisplay/StdTable.vue:336
@ -1017,13 +1046,13 @@ msgstr "Envoi total réseau"
msgid "New version released"
msgstr "Nouvelle version publiée"
#: src/views/certificate/WildcardCertificate.vue:87
#: src/views/certificate/WildcardCertificate.vue:127
#: src/views/domain/cert/components/ObtainCert.vue:204
#: src/views/domain/DomainAdd.vue:145
msgid "Next"
msgstr "Suivant"
#: src/views/preference/Preference.vue:102
#: src/views/preference/Preference.vue:101
#, fuzzy
msgid "Nginx"
msgstr "Journal Nginx"
@ -1144,7 +1173,7 @@ msgstr ""
msgid "Online"
msgstr ""
#: src/views/preference/Preference.vue:108
#: src/views/preference/Preference.vue:107
msgid "OpenAI"
msgstr "OpenAI"
@ -1244,7 +1273,7 @@ msgstr ""
msgid "Pre-release"
msgstr ""
#: src/routes/index.ts:210 src/views/preference/Preference.vue:91
#: src/routes/index.ts:210 src/views/preference/Preference.vue:90
msgid "Preference"
msgstr "Préférence"
@ -1337,7 +1366,7 @@ msgid "Renew Certificate Success"
msgstr "Changer de certificat"
#: src/views/certificate/RenewCert.vue:25
#: src/views/certificate/WildcardCertificate.vue:50
#: src/views/certificate/WildcardCertificate.vue:51
#, fuzzy
msgid "Renew successfully"
msgstr "Activé avec succès"
@ -1370,7 +1399,7 @@ msgstr "En cours d'éxécution"
#: src/views/certificate/CertificateEditor.vue:245
#: src/views/config/ConfigEdit.vue:98 src/views/domain/DomainEdit.vue:263
#: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:121
#: src/views/preference/Preference.vue:119 src/views/stream/StreamEdit.vue:253
#: src/views/preference/Preference.vue:124 src/views/stream/StreamEdit.vue:253
msgid "Save"
msgstr "Enregistrer"
@ -1385,7 +1414,7 @@ msgstr "Enregistrer l'erreur %{msg}"
#: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:42
#: src/views/certificate/CertificateEditor.vue:48
#: src/views/preference/Preference.vue:61
#: src/views/preference/Preference.vue:60
msgid "Save successfully"
msgstr "Sauvegarde réussie"
@ -1416,7 +1445,7 @@ msgstr "Envoyer"
#: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:45
#: src/components/StdDesign/StdDataDisplay/StdTable.vue:157
#: src/views/config/ConfigEdit.vue:42 src/views/domain/DomainList.vue:84
#: src/views/other/Install.vue:72 src/views/preference/Preference.vue:65
#: src/views/other/Install.vue:72 src/views/preference/Preference.vue:64
#: src/views/stream/StreamList.vue:116 src/views/stream/StreamList.vue:84
#: src/views/system/Upgrade.vue:45
msgid "Server error"
@ -1620,6 +1649,10 @@ msgstr ""
msgid "This field should not be empty"
msgstr ""
#: src/views/preference/LogrotateSettings.vue:16
msgid "Tips"
msgstr ""
#: src/views/notification/Notification.vue:21
msgid "Title"
msgstr ""

View file

@ -149,7 +149,7 @@ msgstr ""
#: src/views/config/ConfigEdit.vue:117
#: src/views/domain/components/RightSettings.vue:76
#: src/views/preference/Preference.vue:96
#: src/views/preference/Preference.vue:95
#: src/views/stream/components/RightSettings.vue:76
msgid "Basic"
msgstr ""
@ -245,6 +245,10 @@ msgstr ""
msgid "Cleared successfully"
msgstr ""
#: src/views/preference/LogrotateSettings.vue:27
msgid "Command"
msgstr ""
#: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:107
#: src/views/domain/ngx_conf/LocationEditor.vue:119
#: src/views/domain/ngx_conf/LocationEditor.vue:88
@ -484,7 +488,7 @@ msgstr ""
msgid "Do you want to remove this upstream?"
msgstr ""
#: src/views/certificate/WildcardCertificate.vue:72
#: src/views/certificate/WildcardCertificate.vue:100
msgid "Domain"
msgstr ""
@ -595,6 +599,7 @@ msgstr ""
#: src/views/domain/components/RightSettings.vue:78
#: src/views/domain/DomainEdit.vue:179
#: src/views/domain/DomainList.vue:32
#: src/views/preference/LogrotateSettings.vue:24
#: src/views/stream/components/RightSettings.vue:78
#: src/views/stream/StreamEdit.vue:170
#: src/views/stream/StreamList.vue:32
@ -814,11 +819,15 @@ msgstr ""
msgid "Intermediate Certification Authorities: %{issuer}"
msgstr ""
#: src/views/preference/LogrotateSettings.vue:30
msgid "Interval"
msgstr ""
#: src/views/certificate/Certificate.vue:137
msgid "Issue wildcard certificate"
msgstr ""
#: src/views/certificate/WildcardCertificate.vue:61
#: src/views/certificate/WildcardCertificate.vue:89
msgid "Issue Wildcard Certificate"
msgstr ""
@ -830,6 +839,7 @@ msgstr ""
msgid "Jwt Secret"
msgstr ""
#: src/views/certificate/WildcardCertificate.vue:107
#: src/views/domain/cert/components/AutoCertStepOne.vue:108
msgid "Key Type"
msgstr ""
@ -894,6 +904,14 @@ msgstr ""
msgid "Logout successful"
msgstr ""
#: src/views/preference/Preference.vue:113
msgid "Logrotate"
msgstr ""
#: src/views/preference/LogrotateSettings.vue:17
msgid "Logrotate, by default, is enabled in most mainstream Linux distributions for users who install Nginx UI on the host machine, so you don't need to modify the parameters on this page. For users who install Nginx UI using Docker containers, you can manually enable this option. The crontab task scheduler of Nginx UI will execute the logrotate command at the interval you set in minutes."
msgstr ""
#: src/views/domain/cert/components/AutoCertStepOne.vue:87
msgid "Make sure you have configured a reverse proxy for .well-known directory to HTTPChallengePort before obtaining the certificate."
msgstr ""
@ -929,6 +947,10 @@ msgstr ""
msgid "Memory and Storage"
msgstr ""
#: src/views/preference/LogrotateSettings.vue:34
msgid "Minutes"
msgstr ""
#: src/components/ChatGPT/ChatGPT.vue:256
#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:141
#: src/components/StdDesign/StdDataDisplay/StdTable.vue:336
@ -985,13 +1007,13 @@ msgstr ""
msgid "New version released"
msgstr ""
#: src/views/certificate/WildcardCertificate.vue:87
#: src/views/certificate/WildcardCertificate.vue:127
#: src/views/domain/cert/components/ObtainCert.vue:204
#: src/views/domain/DomainAdd.vue:145
msgid "Next"
msgstr ""
#: src/views/preference/Preference.vue:102
#: src/views/preference/Preference.vue:101
msgid "Nginx"
msgstr ""
@ -1112,7 +1134,7 @@ msgstr ""
msgid "Online"
msgstr ""
#: src/views/preference/Preference.vue:108
#: src/views/preference/Preference.vue:107
msgid "OpenAI"
msgstr ""
@ -1203,7 +1225,7 @@ msgid "Pre-release"
msgstr ""
#: src/routes/index.ts:210
#: src/views/preference/Preference.vue:91
#: src/views/preference/Preference.vue:90
msgid "Preference"
msgstr ""
@ -1288,7 +1310,7 @@ msgid "Renew Certificate Success"
msgstr ""
#: src/views/certificate/RenewCert.vue:25
#: src/views/certificate/WildcardCertificate.vue:50
#: src/views/certificate/WildcardCertificate.vue:51
msgid "Renew successfully"
msgstr ""
@ -1321,7 +1343,7 @@ msgstr ""
#: src/views/config/ConfigEdit.vue:98
#: src/views/domain/DomainEdit.vue:263
#: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:121
#: src/views/preference/Preference.vue:119
#: src/views/preference/Preference.vue:124
#: src/views/stream/StreamEdit.vue:253
msgid "Save"
msgstr ""
@ -1338,7 +1360,7 @@ msgstr ""
#: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:42
#: src/views/certificate/CertificateEditor.vue:48
#: src/views/preference/Preference.vue:61
#: src/views/preference/Preference.vue:60
msgid "Save successfully"
msgstr ""
@ -1372,7 +1394,7 @@ msgstr ""
#: src/views/config/ConfigEdit.vue:42
#: src/views/domain/DomainList.vue:84
#: src/views/other/Install.vue:72
#: src/views/preference/Preference.vue:65
#: src/views/preference/Preference.vue:64
#: src/views/stream/StreamList.vue:116
#: src/views/stream/StreamList.vue:84
#: src/views/system/Upgrade.vue:45
@ -1557,6 +1579,10 @@ msgstr ""
msgid "This field should not be empty"
msgstr ""
#: src/views/preference/LogrotateSettings.vue:16
msgid "Tips"
msgstr ""
#: src/views/notification/Notification.vue:21
msgid "Title"
msgstr ""

View file

@ -155,7 +155,7 @@ msgstr "Основная информация"
#: src/views/config/ConfigEdit.vue:117
#: src/views/domain/components/RightSettings.vue:76
#: src/views/preference/Preference.vue:96
#: src/views/preference/Preference.vue:95
#: src/views/stream/components/RightSettings.vue:76
#, fuzzy
msgid "Basic"
@ -255,6 +255,11 @@ msgstr "Очистить"
msgid "Cleared successfully"
msgstr "Отключено успешно"
#: src/views/preference/LogrotateSettings.vue:27
#, fuzzy
msgid "Command"
msgstr "Комментарии"
#: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:107
#: src/views/domain/ngx_conf/LocationEditor.vue:119
#: src/views/domain/ngx_conf/LocationEditor.vue:88
@ -503,7 +508,7 @@ msgstr "Вы хотите удалить этот сервер?"
msgid "Do you want to remove this upstream?"
msgstr "Вы хотите удалить этот сервер?"
#: src/views/certificate/WildcardCertificate.vue:72
#: src/views/certificate/WildcardCertificate.vue:100
msgid "Domain"
msgstr ""
@ -620,6 +625,7 @@ msgstr "Включить TLS"
#: src/views/domain/cert/ChangeCert.vue:44
#: src/views/domain/components/RightSettings.vue:78
#: src/views/domain/DomainEdit.vue:179 src/views/domain/DomainList.vue:32
#: src/views/preference/LogrotateSettings.vue:24
#: src/views/stream/components/RightSettings.vue:78
#: src/views/stream/StreamEdit.vue:170 src/views/stream/StreamList.vue:32
msgid "Enabled"
@ -841,12 +847,16 @@ msgstr "Установленно"
msgid "Intermediate Certification Authorities: %{issuer}"
msgstr "Промежуточные центры сертификации: %{issuer}"
#: src/views/preference/LogrotateSettings.vue:30
msgid "Interval"
msgstr ""
#: src/views/certificate/Certificate.vue:137
#, fuzzy
msgid "Issue wildcard certificate"
msgstr "Получить сертификат"
#: src/views/certificate/WildcardCertificate.vue:61
#: src/views/certificate/WildcardCertificate.vue:89
#, fuzzy
msgid "Issue Wildcard Certificate"
msgstr "Статус сертификата"
@ -860,6 +870,7 @@ msgstr "Сертификат успешно выдан"
msgid "Jwt Secret"
msgstr ""
#: src/views/certificate/WildcardCertificate.vue:107
#: src/views/domain/cert/components/AutoCertStepOne.vue:108
#, fuzzy
msgid "Key Type"
@ -928,6 +939,20 @@ msgstr "Авторизация успешна"
msgid "Logout successful"
msgstr "Выход выполнен успешно"
#: src/views/preference/Preference.vue:113
msgid "Logrotate"
msgstr ""
#: src/views/preference/LogrotateSettings.vue:17
msgid ""
"Logrotate, by default, is enabled in most mainstream Linux distributions for "
"users who install Nginx UI on the host machine, so you don't need to modify "
"the parameters on this page. For users who install Nginx UI using Docker "
"containers, you can manually enable this option. The crontab task scheduler "
"of Nginx UI will execute the logrotate command at the interval you set in "
"minutes."
msgstr ""
#: src/views/domain/cert/components/AutoCertStepOne.vue:87
#, fuzzy
msgid ""
@ -967,6 +992,10 @@ msgstr "Память"
msgid "Memory and Storage"
msgstr "Память и хранилище"
#: src/views/preference/LogrotateSettings.vue:34
msgid "Minutes"
msgstr ""
#: src/components/ChatGPT/ChatGPT.vue:256
#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:141
#: src/components/StdDesign/StdDataDisplay/StdTable.vue:336
@ -1023,13 +1052,13 @@ msgstr "Всего отправлено"
msgid "New version released"
msgstr "Вышла новая версия"
#: src/views/certificate/WildcardCertificate.vue:87
#: src/views/certificate/WildcardCertificate.vue:127
#: src/views/domain/cert/components/ObtainCert.vue:204
#: src/views/domain/DomainAdd.vue:145
msgid "Next"
msgstr "Дальше"
#: src/views/preference/Preference.vue:102
#: src/views/preference/Preference.vue:101
#, fuzzy
msgid "Nginx"
msgstr "Журнал"
@ -1153,7 +1182,7 @@ msgstr ""
msgid "Online"
msgstr ""
#: src/views/preference/Preference.vue:108
#: src/views/preference/Preference.vue:107
msgid "OpenAI"
msgstr ""
@ -1249,7 +1278,7 @@ msgstr ""
msgid "Pre-release"
msgstr ""
#: src/routes/index.ts:210 src/views/preference/Preference.vue:91
#: src/routes/index.ts:210 src/views/preference/Preference.vue:90
msgid "Preference"
msgstr "Настройки"
@ -1341,7 +1370,7 @@ msgid "Renew Certificate Success"
msgstr "Сертификат действителен"
#: src/views/certificate/RenewCert.vue:25
#: src/views/certificate/WildcardCertificate.vue:50
#: src/views/certificate/WildcardCertificate.vue:51
#, fuzzy
msgid "Renew successfully"
msgstr "Активировано успешно"
@ -1375,7 +1404,7 @@ msgstr "Выполняется"
#: src/views/certificate/CertificateEditor.vue:245
#: src/views/config/ConfigEdit.vue:98 src/views/domain/DomainEdit.vue:263
#: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:121
#: src/views/preference/Preference.vue:119 src/views/stream/StreamEdit.vue:253
#: src/views/preference/Preference.vue:124 src/views/stream/StreamEdit.vue:253
msgid "Save"
msgstr "Сохранить"
@ -1390,7 +1419,7 @@ msgstr "Ошибка сохранения %{msg}"
#: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:42
#: src/views/certificate/CertificateEditor.vue:48
#: src/views/preference/Preference.vue:61
#: src/views/preference/Preference.vue:60
#, fuzzy
msgid "Save successfully"
msgstr "Успешно сохранено"
@ -1423,7 +1452,7 @@ msgstr "Отправлено"
#: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:45
#: src/components/StdDesign/StdDataDisplay/StdTable.vue:157
#: src/views/config/ConfigEdit.vue:42 src/views/domain/DomainList.vue:84
#: src/views/other/Install.vue:72 src/views/preference/Preference.vue:65
#: src/views/other/Install.vue:72 src/views/preference/Preference.vue:64
#: src/views/stream/StreamList.vue:116 src/views/stream/StreamList.vue:84
#: src/views/system/Upgrade.vue:45
msgid "Server error"
@ -1625,6 +1654,10 @@ msgstr ""
msgid "This field should not be empty"
msgstr "Это поле обязательно к заполнению"
#: src/views/preference/LogrotateSettings.vue:16
msgid "Tips"
msgstr ""
#: src/views/notification/Notification.vue:21
msgid "Title"
msgstr "Заголовок"
@ -1723,8 +1756,8 @@ msgid ""
"We will add one or more TXT records to the DNS records of your domain for "
"ownership verification."
msgstr ""
"Мы добавим одну или несколько записей TXT в DNS записи вашего домена для"
"подтверждение права собственности"
"Мы добавим одну или несколько записей TXT в DNS записи вашего домена "
"дляподтверждение права собственности"
#: src/views/domain/cert/components/ObtainCert.vue:135
msgid ""

View file

@ -155,7 +155,7 @@ msgstr "Thông tin"
#: src/views/config/ConfigEdit.vue:117
#: src/views/domain/components/RightSettings.vue:76
#: src/views/preference/Preference.vue:96
#: src/views/preference/Preference.vue:95
#: src/views/stream/components/RightSettings.vue:76
#, fuzzy
msgid "Basic"
@ -255,6 +255,11 @@ msgstr "Xoá"
msgid "Cleared successfully"
msgstr "Đã xóa thành công"
#: src/views/preference/LogrotateSettings.vue:27
#, fuzzy
msgid "Command"
msgstr "Bình luận"
#: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:107
#: src/views/domain/ngx_conf/LocationEditor.vue:119
#: src/views/domain/ngx_conf/LocationEditor.vue:88
@ -504,7 +509,7 @@ msgstr "Bạn muốn xóa máy chủ này ?"
msgid "Do you want to remove this upstream?"
msgstr "Bạn muốn xóa máy chủ này ?"
#: src/views/certificate/WildcardCertificate.vue:72
#: src/views/certificate/WildcardCertificate.vue:100
msgid "Domain"
msgstr ""
@ -621,6 +626,7 @@ msgstr "Bật TLS"
#: src/views/domain/cert/ChangeCert.vue:44
#: src/views/domain/components/RightSettings.vue:78
#: src/views/domain/DomainEdit.vue:179 src/views/domain/DomainList.vue:32
#: src/views/preference/LogrotateSettings.vue:24
#: src/views/stream/components/RightSettings.vue:78
#: src/views/stream/StreamEdit.vue:170 src/views/stream/StreamList.vue:32
msgid "Enabled"
@ -843,12 +849,16 @@ msgstr "Cài đặt thành công"
msgid "Intermediate Certification Authorities: %{issuer}"
msgstr "Cơ quan cấp chứng chỉ: %{issuer}"
#: src/views/preference/LogrotateSettings.vue:30
msgid "Interval"
msgstr ""
#: src/views/certificate/Certificate.vue:137
#, fuzzy
msgid "Issue wildcard certificate"
msgstr "Gia hạn SSL"
#: src/views/certificate/WildcardCertificate.vue:61
#: src/views/certificate/WildcardCertificate.vue:89
#, fuzzy
msgid "Issue Wildcard Certificate"
msgstr "Thêm chứng chỉ SSL"
@ -862,6 +872,7 @@ msgstr "Cấp chứng chỉ thành công"
msgid "Jwt Secret"
msgstr ""
#: src/views/certificate/WildcardCertificate.vue:107
#: src/views/domain/cert/components/AutoCertStepOne.vue:108
#, fuzzy
msgid "Key Type"
@ -930,6 +941,20 @@ msgstr "Đăng nhập thành công"
msgid "Logout successful"
msgstr "Đã đăng xuất"
#: src/views/preference/Preference.vue:113
msgid "Logrotate"
msgstr ""
#: src/views/preference/LogrotateSettings.vue:17
msgid ""
"Logrotate, by default, is enabled in most mainstream Linux distributions for "
"users who install Nginx UI on the host machine, so you don't need to modify "
"the parameters on this page. For users who install Nginx UI using Docker "
"containers, you can manually enable this option. The crontab task scheduler "
"of Nginx UI will execute the logrotate command at the interval you set in "
"minutes."
msgstr ""
#: src/views/domain/cert/components/AutoCertStepOne.vue:87
#, fuzzy
msgid ""
@ -968,6 +993,10 @@ msgstr "Memory"
msgid "Memory and Storage"
msgstr "Memory và Storage"
#: src/views/preference/LogrotateSettings.vue:34
msgid "Minutes"
msgstr ""
#: src/components/ChatGPT/ChatGPT.vue:256
#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:141
#: src/components/StdDesign/StdDataDisplay/StdTable.vue:336
@ -1024,13 +1053,13 @@ msgstr "Tổng lưu lượng mạng đã gửi"
msgid "New version released"
msgstr "Đã có phiên bản mới"
#: src/views/certificate/WildcardCertificate.vue:87
#: src/views/certificate/WildcardCertificate.vue:127
#: src/views/domain/cert/components/ObtainCert.vue:204
#: src/views/domain/DomainAdd.vue:145
msgid "Next"
msgstr "Tiếp theo"
#: src/views/preference/Preference.vue:102
#: src/views/preference/Preference.vue:101
msgid "Nginx"
msgstr ""
@ -1153,7 +1182,7 @@ msgstr "Sau khi quá trình xác minh hoàn tất, bản ghi sẽ bị xóa."
msgid "Online"
msgstr "Trực tuyến"
#: src/views/preference/Preference.vue:108
#: src/views/preference/Preference.vue:107
msgid "OpenAI"
msgstr ""
@ -1251,7 +1280,7 @@ msgstr ""
msgid "Pre-release"
msgstr ""
#: src/routes/index.ts:210 src/views/preference/Preference.vue:91
#: src/routes/index.ts:210 src/views/preference/Preference.vue:90
msgid "Preference"
msgstr "Cài đặt"
@ -1343,7 +1372,7 @@ msgid "Renew Certificate Success"
msgstr "Gia hạn chứng chỉ SSL thành công"
#: src/views/certificate/RenewCert.vue:25
#: src/views/certificate/WildcardCertificate.vue:50
#: src/views/certificate/WildcardCertificate.vue:51
#, fuzzy
msgid "Renew successfully"
msgstr "Gia hạn chứng chỉ SSL"
@ -1377,7 +1406,7 @@ msgstr "Running"
#: src/views/certificate/CertificateEditor.vue:245
#: src/views/config/ConfigEdit.vue:98 src/views/domain/DomainEdit.vue:263
#: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:121
#: src/views/preference/Preference.vue:119 src/views/stream/StreamEdit.vue:253
#: src/views/preference/Preference.vue:124 src/views/stream/StreamEdit.vue:253
msgid "Save"
msgstr "Lưu"
@ -1392,7 +1421,7 @@ msgstr "Đã xảy ra lỗi khi lưu %{msg}"
#: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:42
#: src/views/certificate/CertificateEditor.vue:48
#: src/views/preference/Preference.vue:61
#: src/views/preference/Preference.vue:60
#, fuzzy
msgid "Save successfully"
msgstr "Lưu thành công"
@ -1425,7 +1454,7 @@ msgstr "Gửi"
#: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:45
#: src/components/StdDesign/StdDataDisplay/StdTable.vue:157
#: src/views/config/ConfigEdit.vue:42 src/views/domain/DomainList.vue:84
#: src/views/other/Install.vue:72 src/views/preference/Preference.vue:65
#: src/views/other/Install.vue:72 src/views/preference/Preference.vue:64
#: src/views/stream/StreamList.vue:116 src/views/stream/StreamList.vue:84
#: src/views/system/Upgrade.vue:45
msgid "Server error"
@ -1619,6 +1648,10 @@ msgstr ""
msgid "This field should not be empty"
msgstr "Trường này không được để trống"
#: src/views/preference/LogrotateSettings.vue:16
msgid "Tips"
msgstr ""
#: src/views/notification/Notification.vue:21
msgid "Title"
msgstr "Tiêu đề"

Binary file not shown.

View file

@ -151,7 +151,7 @@ msgstr "基本信息"
#: src/views/config/ConfigEdit.vue:117
#: src/views/domain/components/RightSettings.vue:76
#: src/views/preference/Preference.vue:96
#: src/views/preference/Preference.vue:95
#: src/views/stream/components/RightSettings.vue:76
msgid "Basic"
msgstr "基本"
@ -245,6 +245,10 @@ msgstr "清空"
msgid "Cleared successfully"
msgstr "清除成功"
#: src/views/preference/LogrotateSettings.vue:27
msgid "Command"
msgstr "命令"
#: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:107
#: src/views/domain/ngx_conf/LocationEditor.vue:119
#: src/views/domain/ngx_conf/LocationEditor.vue:88
@ -478,7 +482,7 @@ msgstr "你想删除这个服务器吗?"
msgid "Do you want to remove this upstream?"
msgstr "你想删除这个 Upstream 吗?"
#: src/views/certificate/WildcardCertificate.vue:72
#: src/views/certificate/WildcardCertificate.vue:100
msgid "Domain"
msgstr "域名"
@ -586,6 +590,7 @@ msgstr "启用 TLS"
#: src/views/domain/cert/ChangeCert.vue:44
#: src/views/domain/components/RightSettings.vue:78
#: src/views/domain/DomainEdit.vue:179 src/views/domain/DomainList.vue:32
#: src/views/preference/LogrotateSettings.vue:24
#: src/views/stream/components/RightSettings.vue:78
#: src/views/stream/StreamEdit.vue:170 src/views/stream/StreamList.vue:32
msgid "Enabled"
@ -796,11 +801,15 @@ msgstr "安装成功"
msgid "Intermediate Certification Authorities: %{issuer}"
msgstr "中级证书颁发机构: %{issuer}"
#: src/views/preference/LogrotateSettings.vue:30
msgid "Interval"
msgstr "间隔"
#: src/views/certificate/Certificate.vue:137
msgid "Issue wildcard certificate"
msgstr "签发通配符证书"
#: src/views/certificate/WildcardCertificate.vue:61
#: src/views/certificate/WildcardCertificate.vue:89
msgid "Issue Wildcard Certificate"
msgstr "颁发通配符证书"
@ -812,6 +821,7 @@ msgstr "证书申请成功"
msgid "Jwt Secret"
msgstr "Jwt 密钥"
#: src/views/certificate/WildcardCertificate.vue:107
#: src/views/domain/cert/components/AutoCertStepOne.vue:108
msgid "Key Type"
msgstr "密钥类型"
@ -874,6 +884,24 @@ msgstr "登录成功"
msgid "Logout successful"
msgstr "登出成功"
#: src/views/preference/Preference.vue:113
msgid "Logrotate"
msgstr "Logrotate"
#: src/views/preference/LogrotateSettings.vue:17
msgid ""
"Logrotate, by default, is enabled in most mainstream Linux distributions for "
"users who install Nginx UI on the host machine, so you don't need to modify "
"the parameters on this page. For users who install Nginx UI using Docker "
"containers, you can manually enable this option. The crontab task scheduler "
"of Nginx UI will execute the logrotate command at the interval you set in "
"minutes."
msgstr ""
"对于在宿主机上安装 Nginx UI 的用户,大多数主流 Linux 发行版都默认启用 "
"logrotate 定时任务,因此您无需修改本页面的参数。对于使用 Docker 容器安装 "
"Nginx 用户界面的用户您可以手动启用该选项。Nginx UI 的定时任务任务调度器将按"
"照您设置的时间间隔(以分钟为单位)执行 logrotate 命令。"
#: src/views/domain/cert/components/AutoCertStepOne.vue:87
msgid ""
"Make sure you have configured a reverse proxy for .well-known directory to "
@ -910,6 +938,10 @@ msgstr "内存"
msgid "Memory and Storage"
msgstr "内存与存储"
#: src/views/preference/LogrotateSettings.vue:34
msgid "Minutes"
msgstr "分钟"
#: src/components/ChatGPT/ChatGPT.vue:256
#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:141
#: src/components/StdDesign/StdDataDisplay/StdTable.vue:336
@ -963,13 +995,13 @@ msgstr "上传流量"
msgid "New version released"
msgstr "新版本发布"
#: src/views/certificate/WildcardCertificate.vue:87
#: src/views/certificate/WildcardCertificate.vue:127
#: src/views/domain/cert/components/ObtainCert.vue:204
#: src/views/domain/DomainAdd.vue:145
msgid "Next"
msgstr "下一步"
#: src/views/preference/Preference.vue:102
#: src/views/preference/Preference.vue:101
msgid "Nginx"
msgstr "Nginx"
@ -1086,7 +1118,7 @@ msgstr "一旦验证完成,这些记录将被删除。"
msgid "Online"
msgstr "在线"
#: src/views/preference/Preference.vue:108
#: src/views/preference/Preference.vue:107
msgid "OpenAI"
msgstr "OpenAI"
@ -1181,7 +1213,7 @@ msgstr "请至少选择一个节点!"
msgid "Pre-release"
msgstr "预发布"
#: src/routes/index.ts:210 src/views/preference/Preference.vue:91
#: src/routes/index.ts:210 src/views/preference/Preference.vue:90
msgid "Preference"
msgstr "偏好设置"
@ -1266,7 +1298,7 @@ msgid "Renew Certificate Success"
msgstr "证书续期成功"
#: src/views/certificate/RenewCert.vue:25
#: src/views/certificate/WildcardCertificate.vue:50
#: src/views/certificate/WildcardCertificate.vue:51
msgid "Renew successfully"
msgstr "更新成功"
@ -1298,7 +1330,7 @@ msgstr "运行中"
#: src/views/certificate/CertificateEditor.vue:245
#: src/views/config/ConfigEdit.vue:98 src/views/domain/DomainEdit.vue:263
#: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:121
#: src/views/preference/Preference.vue:119 src/views/stream/StreamEdit.vue:253
#: src/views/preference/Preference.vue:124 src/views/stream/StreamEdit.vue:253
msgid "Save"
msgstr "保存"
@ -1313,7 +1345,7 @@ msgstr "保存错误 %{msg}"
#: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:42
#: src/views/certificate/CertificateEditor.vue:48
#: src/views/preference/Preference.vue:61
#: src/views/preference/Preference.vue:60
msgid "Save successfully"
msgstr "保存成功"
@ -1344,7 +1376,7 @@ msgstr "上传"
#: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:45
#: src/components/StdDesign/StdDataDisplay/StdTable.vue:157
#: src/views/config/ConfigEdit.vue:42 src/views/domain/DomainList.vue:84
#: src/views/other/Install.vue:72 src/views/preference/Preference.vue:65
#: src/views/other/Install.vue:72 src/views/preference/Preference.vue:64
#: src/views/stream/StreamList.vue:116 src/views/stream/StreamList.vue:84
#: src/views/system/Upgrade.vue:45
msgid "Server error"
@ -1530,6 +1562,10 @@ msgstr "此字段必填"
msgid "This field should not be empty"
msgstr "该字段不能为空"
#: src/views/preference/LogrotateSettings.vue:16
msgid "Tips"
msgstr "提示"
#: src/views/notification/Notification.vue:21
msgid "Title"
msgstr "标题"

View file

@ -155,7 +155,7 @@ msgstr "基本資訊"
#: src/views/config/ConfigEdit.vue:117
#: src/views/domain/components/RightSettings.vue:76
#: src/views/preference/Preference.vue:96
#: src/views/preference/Preference.vue:95
#: src/views/stream/components/RightSettings.vue:76
msgid "Basic"
msgstr "基本"
@ -252,6 +252,11 @@ msgstr "清除"
msgid "Cleared successfully"
msgstr "成功停用"
#: src/views/preference/LogrotateSettings.vue:27
#, fuzzy
msgid "Command"
msgstr "備註"
#: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:107
#: src/views/domain/ngx_conf/LocationEditor.vue:119
#: src/views/domain/ngx_conf/LocationEditor.vue:88
@ -492,7 +497,7 @@ msgstr "您要移除此伺服器嗎?"
msgid "Do you want to remove this upstream?"
msgstr "您要移除此伺服器嗎?"
#: src/views/certificate/WildcardCertificate.vue:72
#: src/views/certificate/WildcardCertificate.vue:100
msgid "Domain"
msgstr "網域"
@ -602,6 +607,7 @@ msgstr "啟用 TLS"
#: src/views/domain/cert/ChangeCert.vue:44
#: src/views/domain/components/RightSettings.vue:78
#: src/views/domain/DomainEdit.vue:179 src/views/domain/DomainList.vue:32
#: src/views/preference/LogrotateSettings.vue:24
#: src/views/stream/components/RightSettings.vue:78
#: src/views/stream/StreamEdit.vue:170 src/views/stream/StreamList.vue:32
msgid "Enabled"
@ -819,12 +825,16 @@ msgstr "安裝成功"
msgid "Intermediate Certification Authorities: %{issuer}"
msgstr "中級憑證頒發機構: %{issuer}"
#: src/views/preference/LogrotateSettings.vue:30
msgid "Interval"
msgstr ""
#: src/views/certificate/Certificate.vue:137
#, fuzzy
msgid "Issue wildcard certificate"
msgstr "取得憑證"
#: src/views/certificate/WildcardCertificate.vue:61
#: src/views/certificate/WildcardCertificate.vue:89
#, fuzzy
msgid "Issue Wildcard Certificate"
msgstr "憑證狀態"
@ -837,6 +847,7 @@ msgstr "成功頒發憑證"
msgid "Jwt Secret"
msgstr "Jwt Secret"
#: src/views/certificate/WildcardCertificate.vue:107
#: src/views/domain/cert/components/AutoCertStepOne.vue:108
#, fuzzy
msgid "Key Type"
@ -904,6 +915,20 @@ msgstr "登入成功"
msgid "Logout successful"
msgstr "登出成功"
#: src/views/preference/Preference.vue:113
msgid "Logrotate"
msgstr ""
#: src/views/preference/LogrotateSettings.vue:17
msgid ""
"Logrotate, by default, is enabled in most mainstream Linux distributions for "
"users who install Nginx UI on the host machine, so you don't need to modify "
"the parameters on this page. For users who install Nginx UI using Docker "
"containers, you can manually enable this option. The crontab task scheduler "
"of Nginx UI will execute the logrotate command at the interval you set in "
"minutes."
msgstr ""
#: src/views/domain/cert/components/AutoCertStepOne.vue:87
msgid ""
"Make sure you have configured a reverse proxy for .well-known directory to "
@ -941,6 +966,10 @@ msgstr "記憶體"
msgid "Memory and Storage"
msgstr "記憶體與儲存"
#: src/views/preference/LogrotateSettings.vue:34
msgid "Minutes"
msgstr ""
#: src/components/ChatGPT/ChatGPT.vue:256
#: src/components/StdDesign/StdDataDisplay/StdCurd.vue:141
#: src/components/StdDesign/StdDataDisplay/StdTable.vue:336
@ -995,13 +1024,13 @@ msgstr "上傳流量"
msgid "New version released"
msgstr "新版本發布"
#: src/views/certificate/WildcardCertificate.vue:87
#: src/views/certificate/WildcardCertificate.vue:127
#: src/views/domain/cert/components/ObtainCert.vue:204
#: src/views/domain/DomainAdd.vue:145
msgid "Next"
msgstr "下一步"
#: src/views/preference/Preference.vue:102
#: src/views/preference/Preference.vue:101
msgid "Nginx"
msgstr "Nginx"
@ -1120,7 +1149,7 @@ msgstr ""
msgid "Online"
msgstr "線上"
#: src/views/preference/Preference.vue:108
#: src/views/preference/Preference.vue:107
msgid "OpenAI"
msgstr "OpenAI"
@ -1216,7 +1245,7 @@ msgstr "請至少選擇一個節點!"
msgid "Pre-release"
msgstr "預先發布"
#: src/routes/index.ts:210 src/views/preference/Preference.vue:91
#: src/routes/index.ts:210 src/views/preference/Preference.vue:90
msgid "Preference"
msgstr "偏好設定"
@ -1306,7 +1335,7 @@ msgid "Renew Certificate Success"
msgstr "更換憑證"
#: src/views/certificate/RenewCert.vue:25
#: src/views/certificate/WildcardCertificate.vue:50
#: src/views/certificate/WildcardCertificate.vue:51
#, fuzzy
msgid "Renew successfully"
msgstr "啟用成功"
@ -1339,7 +1368,7 @@ msgstr "執行中"
#: src/views/certificate/CertificateEditor.vue:245
#: src/views/config/ConfigEdit.vue:98 src/views/domain/DomainEdit.vue:263
#: src/views/domain/ngx_conf/directive/DirectiveEditorItem.vue:121
#: src/views/preference/Preference.vue:119 src/views/stream/StreamEdit.vue:253
#: src/views/preference/Preference.vue:124 src/views/stream/StreamEdit.vue:253
msgid "Save"
msgstr "儲存"
@ -1354,7 +1383,7 @@ msgstr "儲存錯誤 %{msg}"
#: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:42
#: src/views/certificate/CertificateEditor.vue:48
#: src/views/preference/Preference.vue:61
#: src/views/preference/Preference.vue:60
msgid "Save successfully"
msgstr "儲存成功"
@ -1385,7 +1414,7 @@ msgstr "傳送"
#: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:45
#: src/components/StdDesign/StdDataDisplay/StdTable.vue:157
#: src/views/config/ConfigEdit.vue:42 src/views/domain/DomainList.vue:84
#: src/views/other/Install.vue:72 src/views/preference/Preference.vue:65
#: src/views/other/Install.vue:72 src/views/preference/Preference.vue:64
#: src/views/stream/StreamList.vue:116 src/views/stream/StreamList.vue:84
#: src/views/system/Upgrade.vue:45
msgid "Server error"
@ -1583,6 +1612,10 @@ msgstr ""
msgid "This field should not be empty"
msgstr "此欄位不應為空"
#: src/views/preference/LogrotateSettings.vue:16
msgid "Tips"
msgstr ""
#: src/views/notification/Notification.vue:21
msgid "Title"
msgstr ""

View file

@ -0,0 +1,41 @@
<script setup lang="ts">
import { useGettext } from 'vue3-gettext'
import { inject } from 'vue'
import type { Settings } from '@/views/preference/typedef'
const { $gettext } = useGettext()
const data: Settings = inject('data')!
</script>
<template>
<AForm layout="vertical">
<AAlert
class="mb-4"
:message="$gettext('Tips')"
:description="$gettext('Logrotate, by default, is enabled in most mainstream '
+ 'Linux distributions for users who install Nginx UI on the host machine, '
+ 'so you don\'t need to modify the parameters on this page. '
+ 'For users who install Nginx UI using Docker containers, you can manually enable this option. '
+ 'The crontab task scheduler of Nginx UI will execute the logrotate command at the interval you set in minutes.')"
type="info"
/>
<AFormItem :label="$gettext('Enabled')">
<ASwitch v-model:checked="data.logrotate.enabled" />
</AFormItem>
<AFormItem :label="$gettext('Command')">
{{ data.logrotate.cmd }}
</AFormItem>
<AFormItem :label="$gettext('Interval')">
<AInputNumber
v-model:value="data.logrotate.interval"
:min="1"
:addon-after="$gettext('Minutes')"
/>
</AFormItem>
</AForm>
</template>
<style lang="less" scoped>
</style>

View file

@ -8,6 +8,7 @@ import BasicSettings from '@/views/preference/BasicSettings.vue'
import OpenAISettings from '@/views/preference/OpenAISettings.vue'
import NginxSettings from '@/views/preference/NginxSettings.vue'
import type { Settings } from '@/views/preference/typedef'
import LogrotateSettings from '@/views/preference/LogrotateSettings.vue'
const { $gettext } = useGettext()
@ -38,12 +39,10 @@ const data = ref<Settings>({
proxy: '',
token: '',
},
git: {
url: '',
auth_method: '',
username: '',
password: '',
private_key_file_path: '',
logrotate: {
enabled: false,
cmd: '',
interval: 1440,
},
})
@ -109,6 +108,12 @@ onMounted(() => {
>
<OpenAISettings />
</ATabPane>
<ATabPane
key="logrotate"
:tab="$gettext('Logrotate')"
>
<LogrotateSettings />
</ATabPane>
</ATabs>
</div>
<FooterToolBar>

View file

@ -25,11 +25,9 @@ export interface Settings {
proxy: string
token: string
}
git: {
url: string
auth_method: string
username: string
password: string
private_key_file_path: string
logrotate: {
enabled: boolean
cmd: string
interval: number
}
}

View file

@ -37,7 +37,8 @@ export const enConfig: LocaleSpecificConfig<DefaultTheme.Config> = {
{text: 'Server', link: '/guide/config-server'},
{text: 'Nginx', link: '/guide/config-nginx'},
{text: 'Open AI', link: '/guide/config-openai'},
{text: 'Casdoor', link: '/guide/config-casdoor'}
{text: 'Casdoor', link: '/guide/config-casdoor'},
{text: 'Logrotate', link: '/guide/config-logrotate'}
]
},
{

View file

@ -42,7 +42,8 @@ export const zhCNConfig: LocaleSpecificConfig<DefaultTheme.Config> = {
{text: '服务端', link: '/zh_CN/guide/config-server'},
{text: 'Nginx', link: '/zh_CN/guide/config-nginx'},
{text: 'Open AI', link: '/zh_CN/guide/config-openai'},
{text: 'Casdoor', link: '/zh_CN/guide/config-casdoor'}
{text: 'Casdoor', link: '/zh_CN/guide/config-casdoor'},
{text: 'Logrotate', link: '/zh_CN/guide/config-logrotate'}
]
},
{

View file

@ -41,7 +41,8 @@ export const zhTWConfig: LocaleSpecificConfig<DefaultTheme.Config> = {
{text: '服務端', link: '/zh_TW/guide/config-server'},
{text: 'Nginx', link: '/zh_TW/guide/config-nginx'},
{text: 'Open AI', link: '/zh_TW/guide/config-openai'},
{text: 'Casdoor', link: '/zh_TW/guide/config-casdoor'}
{text: 'Casdoor', link: '/zh_TW/guide/config-casdoor'},
{text: 'Logrotate', link: '/zh_CN/guide/config-logrotate'}
]
},
{

View file

@ -0,0 +1,31 @@
# Logrotate
In this section, we will introduce configuration options in Nginx UI about logrotate.
**logrotate** is designed to ease administration of systems that generate large numbers of log files.
It allows automatic rotation, compression, removal, and mailing of log files.
Each log file may be handled daily, weekly, monthly, or when it grows too large.
By default, logrotate is enabled in most mainstream Linux distributions for users who install Nginx UI on the host machine,
so you don't need to modify anything.
For users who install Nginx UI using Docker containers, you can manually enable this option.
The crontab task scheduler of Nginx UI will execute the logrotate command at the interval you set in minutes.
## Enabled
- Type: `bool`
- Default: `false`
This option is used to enable logrotate crontab task in Nginx UI.
## CMD
- Type: `string`
- Default: `logrotate /etc/logrotate.d/nginx`
This option is used to set the logrotate command in Nginx UI.
## Interval
- Type: `int`
- Default: `1440`
This option is used to set the interval in minutes of logrotate crontab task in Nginx UI.

View file

@ -63,8 +63,6 @@ In Nginx UI v2, we parse the output of the `nginx -V` command to get the default
If you need to set a different path, you can use this option.
:::
## Service Monitoring and Control
In this section, we will introduce configuration options in Nginx UI for monitoring and controlling Nginx services.

View file

@ -0,0 +1,30 @@
# Logrotate
在这个部分,我们将介绍 Nginx UI 中关于 logrotate 的配置选项。
**logrotate** 旨在简化生成大量日志文件的系统的管理。
它可以按天、周、月或者文件大小来轮转日志文件,还可以压缩、删除旧的日志文件,以及发送日志文件到指定的邮箱。
默认情况下,对于在主机上安装 Nginx UI 的用户,大多数主流的 Linux 发行版都已集成 logrotate
所以你不需要修改任何东西。
对于使用 Docker 容器安装 Nginx UI 的用户,你可以手动启用这个选项。
Nginx UI 的 crontab 任务调度器将会按照你设定的分钟间隔执行 logrotate 命令。
## Enabled
- 类型:`bool`
- 默认值:`false`
这个选项用于在 Nginx UI 中启用 logrotate crontab 任务。
## CMD
- 类型:`string`
- 默认值:`logrotate /etc/logrotate.d/nginx`
这个选项用于在 Nginx UI 中设置 logrotate 命令。
## Interval
- 类型:`int`
- 默认值:`1440`
这个选项用于在 Nginx UI 中设置 logrotate crontab 任务的分钟间隔。

View file

@ -0,0 +1,29 @@
# Logrotate
在這個部分,我們將介紹 Nginx UI 中關於 logrotate 的配置選項。
**logrotate** 旨在簡化生成大量日誌文件的系統的管理。
它可以按天、周、月或者文件大小來輪轉日誌文件,還可以壓縮、刪除舊的日誌文件,以及發送日誌文件到指定的郵箱。
默認情況下,對於在主機上安裝 Nginx UI 的用戶,大多數主流的 Linux 發行版都已集成 logrotate
所以你不需要修改任何東西。
對於使用 Docker 容器安裝 Nginx UI 的用戶,你可以手動啟用這個選項。
Nginx UI 的 crontab 任務調度器將會按照你設定的分鐘間隔執行 logrotate 命令。
## Enabled
- 類型:`bool`
- 默認值:`false`
這個選項用於在 Nginx UI 中啟用 logrotate crontab 任務。
## CMD
- 類型:`string`
- 默認值:`logrotate /etc/logrotate.d/nginx`
這個選項用於在 Nginx UI 中設置 logrotate 命令。
## Interval
- 類型:`int`
- 默認值:`1440`
這個選項用於在 Nginx UI 中設置 logrotate crontab 任務的分鐘間隔。

52
internal/cron/cron.go Normal file
View file

@ -0,0 +1,52 @@
package cron
import (
"github.com/0xJacky/Nginx-UI/internal/cert"
"github.com/0xJacky/Nginx-UI/internal/logger"
"github.com/0xJacky/Nginx-UI/internal/logrotate"
"github.com/0xJacky/Nginx-UI/settings"
"github.com/go-co-op/gocron"
"time"
)
var s *gocron.Scheduler
func init() {
s = gocron.NewScheduler(time.UTC)
}
var logrotateJob *gocron.Job
func InitCronJobs() {
job, err := s.Every(30).Minute().SingletonMode().Do(cert.AutoObtain)
if err != nil {
logger.Fatalf("AutoCert Job: %v, Err: %v\n", job, err)
}
startLogrotate()
s.StartAsync()
}
func RestartLogrotate() {
logger.Debug("Restart Logrotate")
if logrotateJob != nil {
s.RemoveByReference(logrotateJob)
}
startLogrotate()
}
func startLogrotate() {
if !settings.LogrotateSettings.Enabled {
return
}
var err error
logrotateJob, err = s.Every(settings.LogrotateSettings.Interval).Minute().SingletonMode().Do(logrotate.Exec)
if err != nil {
logger.Fatalf("LogRotate Job: %v, Err: %v\n", logrotateJob, err)
}
}

View file

@ -0,0 +1,22 @@
package cron
import (
"github.com/0xJacky/Nginx-UI/internal/kernal"
"github.com/0xJacky/Nginx-UI/settings"
"testing"
"time"
)
func TestRestartLogrotate(t *testing.T) {
settings.Init("../../app.ini")
kernal.InitDatabase()
InitCronJobs()
time.Sleep(5 * time.Second)
RestartLogrotate()
time.Sleep(2 * time.Second)
}

View file

@ -4,6 +4,7 @@ import (
"github.com/0xJacky/Nginx-UI/internal/analytic"
"github.com/0xJacky/Nginx-UI/internal/cert"
"github.com/0xJacky/Nginx-UI/internal/logger"
"github.com/0xJacky/Nginx-UI/internal/logrotate"
"github.com/0xJacky/Nginx-UI/internal/validation"
"github.com/0xJacky/Nginx-UI/model"
"github.com/0xJacky/Nginx-UI/query"
@ -40,7 +41,7 @@ func Boot() {
func InitAfterDatabase() {
syncs := []func(){
InitAutoObtainCert,
InitCronJobs,
analytic.RetrieveNodesStatus,
}
@ -86,7 +87,7 @@ func InitJsExtensionType() {
_ = mime.AddExtensionType(".js", "text/javascript; charset=utf-8")
}
func InitAutoObtainCert() {
func InitCronJobs() {
s := gocron.NewScheduler(time.UTC)
job, err := s.Every(30).Minute().SingletonMode().Do(cert.AutoObtain)
@ -94,5 +95,11 @@ func InitAutoObtainCert() {
logger.Fatalf("AutoCert Job: %v, Err: %v\n", job, err)
}
job, err = s.Every(settings.LogrotateSettings.Interval).Minute().SingletonMode().Do(logrotate.Exec)
if err != nil {
logger.Fatalf("LogRotate Job: %v, Err: %v\n", job, err)
}
s.StartAsync()
}

View file

@ -0,0 +1,45 @@
package logrotate
import (
"github.com/0xJacky/Nginx-UI/internal/logger"
"github.com/0xJacky/Nginx-UI/settings"
"os/exec"
"strings"
)
func Exec() {
if !settings.LogrotateSettings.Enabled {
return
}
logger.Info("logrotate start")
defer logger.Info("logrotate end")
cmd := strings.Split(settings.LogrotateSettings.CMD, " ")
if len(cmd) == 0 {
return
}
var (
name string
args = make([]string, 0)
)
if len(cmd) > 0 {
name = cmd[0]
}
if len(cmd) > 1 {
args = cmd[1:]
}
out, err := exec.Command(name, args...).CombinedOutput()
if err != nil {
logger.Error(err, string(out))
return
}
if len(out) > 0 {
logger.Debug(string(out))
}
}

13
settings/logrotate.go Normal file
View file

@ -0,0 +1,13 @@
package settings
type Logrotate struct {
Enabled bool `json:"enabled"`
CMD string `json:"cmd" protect:"true"`
Interval int `json:"interval"`
}
var LogrotateSettings = Logrotate{
Enabled: false,
CMD: "logrotate /etc/logrotate.d/nginx",
Interval: 1440, // 24 hours
}

View file

@ -18,10 +18,11 @@ var (
var ConfPath string
var sections = map[string]interface{}{
"server": &ServerSettings,
"nginx": &NginxSettings,
"openai": &OpenAISettings,
"casdoor": &CasdoorSettings,
"server": &ServerSettings,
"nginx": &NginxSettings,
"openai": &OpenAISettings,
"casdoor": &CasdoorSettings,
"logrotate": &LogrotateSettings,
}
func init() {