v4 save copy

This commit is contained in:
Danila Manakov 2024-11-09 17:25:11 +03:00
parent 49ddd5fe13
commit 331d493346
6 changed files with 108 additions and 4 deletions

32
Notes/notes.txt Normal file
View file

@ -0,0 +1,32 @@
сборка --
docker build -f Dockerfile -t xxx:1v .
запуск
docker run -itd --name 3x-ui-v2\
-e XRAY_VMESS_AEAD_FORCED=false \
-v $PWD/db/:/etc/x-ui/ \
-v $PWD/cert/:/root/cert/ \
--network=host \
--restart=unless-stopped \
--name 3x-ui \
xxx:1v
процедура
>docker run -itd --name 3x-ui-v2\
-e XRAY_VMESS_AEAD_FORCED=false \
-v $PWD/db/:/etc/x-ui/ \
-v $PWD/cert/:/root/cert/ \
--network=host \
--restart=unless-stopped \
--name 3x-ui \
xxx:1v
3460dc59f51293dab22184103e110468bb08a8fbd49e6ef787f75df8839625c1
00:35:39 ~/GolandProjects/3x-ui (main)
lomonosov@trd12 $>docker logs 346
Server ready
(0x2a48bc0,0xc000041e40)
2024/10/26 01:05:40 Starting x-ui 2.4.5
(0x2a48bc0,0xc000918020)
INFO - Server running HTTP on [::]:2053
INFO - XRAY: infra/conf/serial: Reading config: &{Name:bin/config.json Format:json}
WARNING - XRAY: core: Xray 24.10.16 started
00:37:30 ~/GolandProjects/3x-ui (main)
lomonosov@trd12 $>

BIN
db/x-ui.db Normal file

Binary file not shown.

View file

@ -430,4 +430,8 @@ func main() {
fmt.Println()
settingCmd.Usage()
}
err := service.BackupDB("/home/trd12/GolandProjects/3x-ui/db/x-ui.db", "/home/trd12/GolandProjects/3x-ui/backupplace\n")
if err != nil {
fmt.Println("Ошибка создания резервной копии:", err)
}
}

View file

@ -0,0 +1,23 @@
package service
import (
"os"
"testing"
)
func TestBackupDB(t *testing.T) {
testDBPath := "/home/trd12/GolandProjects/3x-ui/db/x-ui.db"
backupDir := "/home/trd12/GolandProjects/3x-ui/backupplace"
file, err := os.Create(testDBPath)
if err != nil {
t.Fatalf("Ошибка создания тестовой БД: %v", err)
}
file.Close()
//defer os.Remove(testDBPath)
err = BackupDB(testDBPath, backupDir)
if err != nil {
t.Errorf("Ошибка выполнения BackupDB: %v", err)
}
}

View file

@ -4,9 +4,11 @@ import (
"embed"
"errors"
"fmt"
"io"
"net"
"net/url"
"os"
"path/filepath"
"strconv"
"strings"
"time"
@ -1859,3 +1861,45 @@ func (t *Tgbot) editMessageTgBot(chatId int64, messageID int, text string, inlin
logger.Warning(err)
}
}
func BackupDB(dbPath, backupDir string) error {
if _, err := os.Stat(dbPath); os.IsNotExist(err) {
return fmt.Errorf("файл базы данных не найден: %s", dbPath)
}
if _, err := os.Stat(backupDir); os.IsNotExist(err) {
err = os.MkdirAll(backupDir, os.ModePerm)
if err != nil {
return fmt.Errorf("не удалось создать папку для бэкапов: %v", err)
}
}
timestamp := time.Now().Format("20060102_150405")
backupFileName := fmt.Sprintf("backup_%s.db", timestamp)
backupFilePath := filepath.Join(backupDir, backupFileName)
sourceFile, err := os.Open(dbPath)
if err != nil {
return fmt.Errorf("не удалось открыть файл базы данных: %v", err)
}
defer sourceFile.Close()
destFile, err := os.Create(backupFilePath)
if err != nil {
return fmt.Errorf("не удалось создать файл резервной копии: %v", err)
}
defer destFile.Close()
bytesCopied, err := io.Copy(destFile, sourceFile)
if err != nil {
return fmt.Errorf("не удалось копировать данные: %v", err)
}
fmt.Printf("Скопировано %d байт\n", bytesCopied)
if err := destFile.Sync(); err != nil {
return fmt.Errorf("не удалось сохранить данные на диск: %v", err)
}
fmt.Printf("Резервная копия базы данных успешно создана: %s\n", backupFilePath)
return nil
}

View file

@ -336,6 +336,8 @@ func (s *Server) Start() (err error) {
if err != nil {
return err
}
protocol := "HTTP"
if certFile != "" || keyFile != "" {
cert, err := tls.LoadX509KeyPair(certFile, keyFile)
if err == nil {
@ -344,14 +346,13 @@ func (s *Server) Start() (err error) {
}
listener = network.NewAutoHttpsListener(listener)
listener = tls.NewListener(listener, c)
logger.Info("Web server running HTTPS on", listener.Addr())
protocol = "HTTPS"
} else {
logger.Error("Error loading certificates:", err)
logger.Info("Web server running HTTP on", listener.Addr())
}
} else {
logger.Info("Web server running HTTP on", listener.Addr())
}
logger.Info("Server running", protocol, "on", listener.Addr())
s.listener = listener
s.httpServer = &http.Server{