Added docker-compose configuration

This commit is contained in:
2024-04-29 15:08:21 +07:00
parent 36e03c6dca
commit bf0d01ffdf
4 changed files with 85 additions and 11 deletions

View File

@ -1,27 +1,38 @@
FROM node:current-alpine3.19 AS tailwind FROM node:current-alpine3.19 AS node_builder
WORKDIR /src WORKDIR /src
COPY ./public/input.css ./public/ COPY /public /src/public
COPY tailwind.config.js . COPY tailwind.config.js .
COPY ./view ./view COPY /view /src/view
RUN npm install -g tailwindcss RUN npm install -g tailwindcss
RUN npm install -g javascript-obfuscator
RUN npx tailwindcss -i ./public/input.css -o ./public/output.css RUN npx tailwindcss -i ./public/input.css -o ./public/output.css
RUN javascript-obfuscator ./public/upload.js --compact true --self-defending true --output ./public/upload_obfuscated.js
RUN javascript-obfuscator ./public/validatePassword.js --compact true --self-defending true --output ./public/validatePassword_obfuscated.js
FROM golang:1.22.2-alpine3.19 AS go_builder FROM golang:1.22.2-alpine3.19 AS go_builder
WORKDIR /src WORKDIR /src
COPY . . COPY . .
COPY --from=tailwind /src/public/output.css ./public/ COPY --from=node_builder /src/public /src/public
COPY --from=node_builder /src/public/upload_obfuscated.js /src/public/upload.js
COPY --from=node_builder /src/public/validatePassword_obfuscated.js /src/public/validatePassword.js
RUN apk update && apk upgrade && apk add --no-cache ca-certificates
RUN update-ca-certificates
RUN go install github.com/a-h/templ/cmd/templ@$(go list -m -f '{{ .Version }}' github.com/a-h/templ) RUN go install github.com/a-h/templ/cmd/templ@$(go list -m -f '{{ .Version }}' github.com/a-h/templ)
RUN templ generate RUN templ generate
RUN go build -o ./tmp/main RUN go build -o ./tmp/main
RUN rm /src/public/validatePassword_obfuscated.js /src/public/upload_obfuscated.js
FROM scratch FROM scratch
WORKDIR /src WORKDIR /src
COPY --from=go_builder /src /src COPY --from=go_builder /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/
COPY --from=go_builder /src/schema.sql /src
COPY --from=go_builder /src/public /src/public
COPY --from=go_builder /src/tmp/main /src
ENTRYPOINT ["./tmp/main"] ENTRYPOINT ["./main"]

View File

@ -3,7 +3,6 @@ package db
import ( import (
"errors" "errors"
"fmt" "fmt"
"github.com/fossyy/filekeeper/logger"
"github.com/fossyy/filekeeper/types/models" "github.com/fossyy/filekeeper/types/models"
"gorm.io/driver/mysql" "gorm.io/driver/mysql"
"gorm.io/driver/postgres" "gorm.io/driver/postgres"
@ -13,7 +12,6 @@ import (
"strings" "strings"
) )
var log *logger.AggregatedLogger
var DB Database var DB Database
type mySQLdb struct { type mySQLdb struct {
@ -51,7 +49,28 @@ type Database interface {
func NewMYSQLdb(username, password, host, port, dbName string) Database { func NewMYSQLdb(username, password, host, port, dbName string) Database {
var err error var err error
connection := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?charset=utf8mb4&parseTime=True&loc=Local", username, password, host, port, dbName) var count int64
connection := fmt.Sprintf("%s:%s@tcp(%s:%s)/", username, password, host, port)
initDB, err := gorm.Open(mysql.New(mysql.Config{
DSN: connection,
DefaultStringSize: 256,
DisableDatetimePrecision: true,
DontSupportRenameIndex: true,
DontSupportRenameColumn: true,
SkipInitializeWithVersion: false,
}), &gorm.Config{
Logger: gormLogger.Default.LogMode(gormLogger.Silent),
})
initDB.Raw("SELECT count(*) FROM information_schema.SCHEMATA WHERE SCHEMA_NAME = ?", dbName).Scan(&count)
if count <= 0 {
if err := initDB.Exec("CREATE DATABASE IF NOT EXISTS " + dbName).Error; err != nil {
panic("Error creating database: " + err.Error())
}
}
connection = fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?charset=utf8mb4&parseTime=True&loc=Local", username, password, host, port, dbName)
DB, err := gorm.Open(mysql.New(mysql.Config{ DB, err := gorm.Open(mysql.New(mysql.Config{
DSN: connection, DSN: connection,
DefaultStringSize: 256, DefaultStringSize: 256,
@ -83,7 +102,6 @@ func NewMYSQLdb(username, password, host, port, dbName string) Database {
panic("Error executing query: " + err.Error()) panic("Error executing query: " + err.Error())
} }
} }
return &mySQLdb{DB} return &mySQLdb{DB}
} }

46
docker-compose.yaml Normal file
View File

@ -0,0 +1,46 @@
version: '3.8'
services:
mysql-filekeeper:
image: mysql:latest
container_name: mysql-filekeeper
environment:
MYSQL_ROOT_PASSWORD: VerySecretPassword
volumes:
- /opt/mysql:/var/lib/mysql
networks:
- filekeeper
filekeeper:
image: fossyy/filekeeper:latest
container_name: filekeeper
environment:
SERVER_HOST: 0.0.0.0
SERVER_PORT: 8000
DOMAIN: filekeeper.fossy.my.id
CORS_PROTO: https
CORS_LIST: filekeeper.fossy.my.id:443,fossy.my.id:443
CORS_METHODS: POST,GET
DB_HOST: mysql-filekeeper
DB_PORT: 3306
DB_USERNAME: root
DB_PASSWORD: VerySecretPassword
DB_NAME: filekeeper
SMTP_HOST: mail.example.com
SMTP_PORT: 25
SMTP_USER: no-reply@example.com
SMTP_PASSWORD: VerySecretPassword
SESSION_NAME: Session
SESSION_MAX_AGE: 604800
volumes:
- /opt/filekeeper/uploads:/src/uploads
networks:
- filekeeper
depends_on:
- mysql-filekeeper
restart: on-failure
ports:
- "8000:8000"
networks:
filekeeper:

View File

@ -105,7 +105,6 @@ func ConvertFileSize(byte int) string {
func Getenv(key string) string { func Getenv(key string) string {
env.mu.Lock() env.mu.Lock()
defer env.mu.Unlock() defer env.mu.Unlock()
if val, ok := env.value[key]; ok { if val, ok := env.value[key]; ok {
return val return val
} }