dockerfile
parent
d89df2b70d
commit
63bc576bc5
|
@ -0,0 +1,41 @@
|
|||
# Stage 1: Build the Go application
|
||||
FROM golang:latest AS go_builder
|
||||
|
||||
WORKDIR /app
|
||||
|
||||
COPY ./backend/main /app/main
|
||||
COPY ./backend/grouptasks_lang_log_messages.json /app/
|
||||
COPY ./backend/system_lang_log_messages.json /app/
|
||||
COPY ./backend/public/swagger/ /app/swagger
|
||||
|
||||
# Assuming you build your Go binary using "go build -o main"
|
||||
#RUN go build -o main
|
||||
|
||||
# Stage 2: Create the final image with Python 3 and the Go binary
|
||||
FROM python:3
|
||||
|
||||
WORKDIR /app
|
||||
|
||||
# Copy the Go binary from the previous stage
|
||||
COPY --from=go_builder /app/main /app/main
|
||||
|
||||
# Copy any other files you need
|
||||
COPY ./backend/grouptasks_lang_log_messages.json /app/
|
||||
COPY ./backend/system_lang_log_messages.json /app/
|
||||
COPY ./backend/public/swagger/ /app/swagger
|
||||
|
||||
# Set up any Python dependencies you might need
|
||||
# RUN pip install ...
|
||||
|
||||
CMD ["./main"]
|
||||
|
||||
#FROM golang:latest
|
||||
|
||||
#WORKDIR /app
|
||||
|
||||
#COPY ./backend/main /app/main
|
||||
#COPY ./backend/grouptasks_lang_log_messages.json /app/
|
||||
#COPY ./backend/system_lang_log_messages.json /app/
|
||||
#COPY ./backend/public/swagger/ /app/swagger
|
||||
|
||||
#CMD ["./main"]
|
|
@ -0,0 +1,5 @@
|
|||
matplotlib==3.7.2
|
||||
numpy==1.24.3
|
||||
numpy_stl==3.0.1
|
||||
Pillow==9.5.0
|
||||
Pillow==10.0.0
|
|
@ -1,5 +1,47 @@
|
|||
import sys
|
||||
import random
|
||||
import matplotlib.pyplot as plt
|
||||
|
||||
|
||||
def create_avatar(size):
|
||||
# Erstelle ein neues Plot-Fenster
|
||||
fig, ax = plt.subplots()
|
||||
fig.set_size_inches(size/100, size/100) # Größe des Fensters festlegen
|
||||
|
||||
# Generiere zufällige Farben für Hintergrund und Formen
|
||||
bg_color = (random.random(), random.random(), random.random())
|
||||
shape_color = (random.random(), random.random(), random.random())
|
||||
|
||||
# Setze den Hintergrund
|
||||
ax.set_facecolor(bg_color)
|
||||
|
||||
# Zeichne zufällige Formen
|
||||
num_shapes = random.randint(3, 6)
|
||||
for _ in range(num_shapes):
|
||||
shape_type = random.choice(['circle', 'rectangle'])
|
||||
if shape_type == 'circle':
|
||||
x = random.randint(0, size)
|
||||
y = random.randint(0, size)
|
||||
radius = random.randint(0, size // 2)
|
||||
circle = plt.Circle((x, y), radius, fc=shape_color)
|
||||
ax.add_patch(circle)
|
||||
elif shape_type == 'rectangle':
|
||||
x = random.randint(0, size)
|
||||
y = random.randint(0, size)
|
||||
width = random.randint(0, size // 2)
|
||||
height = random.randint(0, size // 2)
|
||||
rectangle = plt.Rectangle((x, y), width, height, fc=shape_color)
|
||||
ax.add_patch(rectangle)
|
||||
|
||||
# Verstecke Achsenbeschriftungen
|
||||
ax.axis("off")
|
||||
|
||||
# Speichere das Bild
|
||||
plt.savefig("random_avatar.png", dpi=100)
|
||||
plt.close()
|
||||
|
||||
|
||||
# Beispielaufruf
|
||||
create_avatar(400)
|
||||
|
||||
print("hello")
|
||||
|
||||
sys.exit(0)
|
||||
|
|
|
@ -0,0 +1,37 @@
|
|||
Brlapi==0.8.2
|
||||
certifi==2020.6.20
|
||||
chardet==4.0.0
|
||||
chrome-gnome-shell==0.0.0
|
||||
cupshelpers==1.0
|
||||
dbus-python==1.2.16
|
||||
distlib==0.3.6
|
||||
distro==1.5.0
|
||||
distro-info==1.0
|
||||
filelock==3.10.7
|
||||
httplib2==0.18.1
|
||||
idna==2.10
|
||||
louis==3.16.0
|
||||
numpy==1.24.3
|
||||
numpy-stl==3.0.1
|
||||
Pillow==9.5.0
|
||||
platformdirs==3.2.0
|
||||
pycairo==1.16.2
|
||||
pycups==2.0.1
|
||||
pycurl==7.43.0.6
|
||||
PyGObject==3.38.0
|
||||
PySimpleSOAP==1.16.2
|
||||
pysmbc==1.0.23
|
||||
python-apt==2.2.1
|
||||
python-debian==0.1.39
|
||||
python-debianbts==3.1.0
|
||||
python-utils==3.6.0
|
||||
pyxdg==0.27
|
||||
reportbug==7.10.3+deb11u1
|
||||
requests==2.25.1
|
||||
six==1.16.0
|
||||
typing_extensions==4.6.3
|
||||
unattended-upgrades==0.1
|
||||
urllib3==1.26.5
|
||||
vboxapi==1.0
|
||||
virtualenv==20.21.0
|
||||
xdg==5
|
80
main.go
80
main.go
|
@ -17,7 +17,7 @@ package main
|
|||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
"io"
|
||||
"janex/admin-dashboard-backend/modules/config"
|
||||
"janex/admin-dashboard-backend/modules/database"
|
||||
"janex/admin-dashboard-backend/modules/grouptasks"
|
||||
|
@ -28,6 +28,8 @@ import (
|
|||
"janex/admin-dashboard-backend/routers/router"
|
||||
"janex/admin-dashboard-backend/socketserver"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"time"
|
||||
|
||||
"github.com/gofiber/fiber/v2"
|
||||
"github.com/gofiber/fiber/v2/middleware/cors"
|
||||
|
@ -37,12 +39,22 @@ import (
|
|||
)
|
||||
|
||||
func init() {
|
||||
createEnvConfigFileIfotExists()
|
||||
fmt.Println("Server is starting...")
|
||||
|
||||
createEnvConfigFileIfNotExists()
|
||||
|
||||
config.LoadConfig()
|
||||
logger.InitLogger()
|
||||
|
||||
createServerDirectoriesIfotExists()
|
||||
if os.Getenv("DOCKER") != "" {
|
||||
fmt.Println("Waiting for mariadb docker")
|
||||
// waiting for the start of mariadb docker
|
||||
time.Sleep(10 * time.Second)
|
||||
|
||||
copySwaggerFolder()
|
||||
}
|
||||
|
||||
createServerDirectoriesIfNotExists()
|
||||
createLogLanguageFilesIfNotExist()
|
||||
|
||||
utils.ValidatorInit()
|
||||
|
@ -52,6 +64,20 @@ func init() {
|
|||
systempermissions.CreateMasterRoleIfNotExist()
|
||||
}
|
||||
|
||||
func copySwaggerFolder() {
|
||||
// copied by docker build to /app/swagger
|
||||
srcDir := "./swagger"
|
||||
destDir := config.Cfg.FolderPaths.PublicStatic + "swagger/"
|
||||
|
||||
err := copyDir(srcDir, destDir)
|
||||
|
||||
if err != nil {
|
||||
panic("Failed to copy swagger folder: " + err.Error())
|
||||
}
|
||||
|
||||
log.Debug().Msgf("Copied swagger folder to %s", destDir)
|
||||
}
|
||||
|
||||
func main() {
|
||||
app := fiber.New()
|
||||
|
||||
|
@ -105,7 +131,11 @@ func main() {
|
|||
app.Listen(config.Cfg.Host + ":" + config.Cfg.Port)
|
||||
}
|
||||
|
||||
func createEnvConfigFileIfotExists() {
|
||||
func createEnvConfigFileIfNotExists() {
|
||||
if os.Getenv("DOCKER") != "" {
|
||||
return
|
||||
}
|
||||
|
||||
content := `DEBUG=false
|
||||
COLORIZED_OUTPUT=true
|
||||
HOST=127.0.0.1
|
||||
|
@ -132,7 +162,7 @@ MARIADB_PASSWORD=db_password
|
|||
MARIADB_DATABASE_NAME=db_database_name`
|
||||
|
||||
if _, err := os.Stat(".env"); os.IsNotExist(err) {
|
||||
err := ioutil.WriteFile(".env", []byte(content), 0644)
|
||||
err := os.WriteFile(".env", []byte(content), 0644)
|
||||
|
||||
if err != nil {
|
||||
panic("Failed to create .env file, err: " + err.Error())
|
||||
|
@ -143,7 +173,7 @@ MARIADB_DATABASE_NAME=db_database_name`
|
|||
}
|
||||
}
|
||||
|
||||
func createServerDirectoriesIfotExists() {
|
||||
func createServerDirectoriesIfNotExists() {
|
||||
cfg := config.Cfg.FolderPaths
|
||||
|
||||
paths := []string{
|
||||
|
@ -205,3 +235,41 @@ func createLogLanguageFilesIfNotExist() {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
func copyDir(srcDir, destDir string) error {
|
||||
err := os.MkdirAll(destDir, 0755)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
files, err := filepath.Glob(filepath.Join(srcDir, "*"))
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
for _, file := range files {
|
||||
destFile := filepath.Join(destDir, filepath.Base(file))
|
||||
if err := copyFile(file, destFile); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func copyFile(srcFile, destFile string) error {
|
||||
source, err := os.Open(srcFile)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer source.Close()
|
||||
|
||||
destination, err := os.Create(destFile)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer destination.Close()
|
||||
|
||||
_, err = io.Copy(destination, source)
|
||||
return err
|
||||
}
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
package config
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"os"
|
||||
|
||||
"github.com/joho/godotenv"
|
||||
|
@ -36,7 +37,13 @@ type MariaDB struct {
|
|||
}
|
||||
|
||||
func LoadConfig() {
|
||||
godotenv.Load(".env")
|
||||
// used to determine server was startet in docker or not
|
||||
if os.Getenv("DOCKER") == "" {
|
||||
fmt.Println("Load env from file")
|
||||
godotenv.Load(".env")
|
||||
} else {
|
||||
fmt.Println("Load env from system")
|
||||
}
|
||||
|
||||
Cfg = Config{
|
||||
Debug: os.Getenv("DEBUG") == "true",
|
||||
|
|
|
@ -529,7 +529,7 @@ func RunGroupTask(args RunGroupTaskArgs) {
|
|||
}
|
||||
|
||||
if !info.IsDir() && filepath.Ext(path) == ".py" {
|
||||
bytesRead, err := ioutil.ReadFile(path)
|
||||
bytesRead, err := os.ReadFile(path)
|
||||
|
||||
if err != nil {
|
||||
log.Error().Msgf("Error reading file %s", err.Error())
|
||||
|
|
|
@ -21,14 +21,6 @@ import (
|
|||
var systemLanguageLogMessages []structs.LanguageLogMessages
|
||||
var grouptasksLanguageLogMessages []structs.LanguageLogMessages
|
||||
|
||||
const (
|
||||
systemLogsRootPath = "./logs/system/"
|
||||
groupTasksLogsRootPath = "./logs/grouptasks/"
|
||||
|
||||
systemLanguageLogPath = "./system_lang_log_messages.json"
|
||||
grouptasksLanguageLogPath = "./grouptasks_lang_log_messages.json"
|
||||
)
|
||||
|
||||
func InitLogger() {
|
||||
zerolog.TimeFieldFormat = zerolog.TimeFormatUnix
|
||||
|
||||
|
@ -54,10 +46,10 @@ func AddGroupTasksLog(logMessage structs.LogMessage) {
|
|||
func addLog(logMessage structs.LogMessage, systemLog bool) {
|
||||
year, month, day := time.Now().Date()
|
||||
|
||||
path := systemLogsRootPath
|
||||
path := config.Cfg.FolderPaths.LogsSystem
|
||||
|
||||
if !systemLog {
|
||||
path = groupTasksLogsRootPath
|
||||
path = config.Cfg.FolderPaths.LogsGroupTasks
|
||||
}
|
||||
|
||||
f, err := os.OpenFile(path+strconv.Itoa(day)+"-"+strconv.Itoa(int(month))+"-"+strconv.Itoa(year)+".json", os.O_APPEND|os.O_WRONLY|os.O_CREATE, 0644)
|
||||
|
@ -79,10 +71,10 @@ func addLog(logMessage structs.LogMessage, systemLog bool) {
|
|||
}
|
||||
|
||||
func ReadLogs(date string, systemLogs bool, language string) []structs.LogMessageResponse {
|
||||
path := systemLogsRootPath
|
||||
path := config.Cfg.FolderPaths.LogsSystem
|
||||
|
||||
if !systemLogs {
|
||||
path = groupTasksLogsRootPath
|
||||
path = config.Cfg.FolderPaths.LogsGroupTasks
|
||||
}
|
||||
|
||||
file, err := os.Open(path + date + ".json")
|
||||
|
@ -159,10 +151,10 @@ func getLogLanguageMessage(languages []structs.LanguageLogMessagesLanguage, lang
|
|||
}
|
||||
|
||||
func GetAllLogMessagesDates(systemLogs bool) []string {
|
||||
path := systemLogsRootPath
|
||||
path := config.Cfg.FolderPaths.LogsSystem
|
||||
|
||||
if !systemLogs {
|
||||
path = groupTasksLogsRootPath
|
||||
path = config.Cfg.FolderPaths.LogsGroupTasks
|
||||
}
|
||||
|
||||
files, err := ioutil.ReadDir(path)
|
||||
|
@ -220,13 +212,13 @@ func InitLanguageLogMessages() {
|
|||
}
|
||||
|
||||
func readLanguageLogMessages(systemLogs bool) {
|
||||
path := systemLanguageLogPath
|
||||
path := config.Cfg.LogLanguageSystem
|
||||
|
||||
if !systemLogs {
|
||||
path = grouptasksLanguageLogPath
|
||||
path = config.Cfg.LogLanguageGroupTasks
|
||||
}
|
||||
|
||||
content, err := ioutil.ReadFile(path)
|
||||
content, err := os.ReadFile(path)
|
||||
|
||||
if err != nil {
|
||||
panic("Could not read language log messages: " + err.Error())
|
||||
|
|
|
@ -2,6 +2,7 @@ package user
|
|||
|
||||
import (
|
||||
"fmt"
|
||||
"janex/admin-dashboard-backend/modules/config"
|
||||
"janex/admin-dashboard-backend/modules/database"
|
||||
"janex/admin-dashboard-backend/modules/logger"
|
||||
"janex/admin-dashboard-backend/modules/structs"
|
||||
|
@ -36,7 +37,7 @@ func UpdateAvatar(c *fiber.Ctx) error {
|
|||
database.DB.First(&user)
|
||||
|
||||
if user.Avatar != "" {
|
||||
os.Remove("./public/avatars/" + user.Avatar)
|
||||
os.Remove(config.Cfg.FolderPaths.PublicStatic + "avatars/" + user.Avatar)
|
||||
}
|
||||
|
||||
fileName := uuid.V4() + "." + strings.Split(fileHeader.Header["Content-Type"][0], "/")[1]
|
||||
|
@ -62,7 +63,7 @@ func UpdateAvatar(c *fiber.Ctx) error {
|
|||
},
|
||||
})
|
||||
|
||||
return c.SaveFile(fileHeader, fmt.Sprintf("./public/avatars/%s", fileName))
|
||||
return c.SaveFile(fileHeader, fmt.Sprintf("%savatars/%s", config.Cfg.FolderPaths.PublicStatic, fileName))
|
||||
}
|
||||
|
||||
func isAvatarFileTypeInList(contentType string) bool {
|
||||
|
|
Loading…
Reference in New Issue