diff --git a/.env b/.env index 5549f9c..6ca2b6c 100644 --- a/.env +++ b/.env @@ -1,7 +1,7 @@ -TG_TOKEN= -PREFIXES=/;! -DEBUG=true -USE_REQ_LOG=true -PSQL_USER= -PSQL_NAME= -PSQL_PASS= \ No newline at end of file +# Used for bot AND docker compose +PSQL_USER=kurumi_bot +PSQL_PASS=kurumi_bot +PSQL_NAME=kurumi_bot +MONGO_USER=kurumi_bot +MONGO_PASS=kurumi_bot +MONGO_NAME=kurumi_bot \ No newline at end of file diff --git a/.env.development b/.env.development new file mode 100644 index 0000000..25b0cf1 --- /dev/null +++ b/.env.development @@ -0,0 +1,5 @@ +# User ONLY for bot. Rename to .env.production +TG_TOKEN= +PREFIXES=/;! +DEBUG=true +USE_REQ_LOG=true \ No newline at end of file diff --git a/.gitignore b/.gitignore index 5e6d518..adad71e 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ logs/ .idea/ -config.json \ No newline at end of file +config.json +.env.production \ No newline at end of file diff --git a/Dockerfile b/Dockerfile index 59e8987..d4047e3 100644 --- a/Dockerfile +++ b/Dockerfile @@ -3,5 +3,5 @@ WORKDIR /usr/src/kurumi COPY go.mod go.sum ./ RUN go mod download COPY . . -RUN go build -v -o /usr/local/bin/kurumi ./ +RUN --mount=type=cache,target=/go/pkg/mod go build -trimpath -o /usr/local/bin/kurumi ./ CMD ["kurumi"] \ No newline at end of file diff --git a/database/database.go b/database/database.go index 8ac4fa3..3793717 100644 --- a/database/database.go +++ b/database/database.go @@ -1,9 +1,7 @@ package database import ( - "encoding/json" "fmt" - "io" "log" "os" @@ -19,33 +17,23 @@ type config struct { } var Database *gorm.DB -var conf *config - -func loadConfig() { - file, err := os.Open("./config.json") - if err != nil { - log.Fatalln(err) - } - data, err := io.ReadAll(file) - if err != nil { - log.Fatalln(err) - } - conf = new(config) - err = json.Unmarshal(data, conf) - if err != nil { - log.Fatalln(err) - } -} func getDSN() string { - return fmt.Sprintf("postgresql://%s:%s@%s/%s?sslmode=disable", conf.User, conf.Password, conf.Host, conf.Database) + user := os.Getenv("PSQL_USER") + password := os.Getenv("PSQL_PASS") + database := os.Getenv("PSQL_NAME") + log.Println("user:", user, "database:", database) + return fmt.Sprintf("postgresql://%s:%s@%s/%s?sslmode=disable", user, password, "postgres", database) } func Connect() { var err error - loadConfig() Database, err = gorm.Open(postgres.Open(getDSN()), new(gorm.Config)) if err != nil { log.Fatalln(err) } + err = Database.AutoMigrate(&User{}, &Fraction{}, &Group{}, &ShopAuto{}) + if err != nil { + log.Fatalln(err) + } } diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..7746e01 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,67 @@ +services: + postgres: + image: postgres:alpine + networks: + - bot + restart: always + ports: + - "5432:5432" + environment: + POSTGRES_DB: ${PSQL_NAME} + POSTGRES_USER: ${PSQL_USER} + POSTGRES_PASSWORD: ${PSQL_PASS} + healthcheck: + test: ["CMD-SHELL", "pg_isready -U ${PSQL_USER} -d ${PSQL_NAME}"] + interval: 2s + retries: 5 + timeout: 10s + volumes: + - ./scripts/postgres:/docker-entrypoint-initdb.d + - postgres_data:/var/lib/postgresql/data + mongo: + image: mongo:noble + networks: + - bot + restart: always + ports: + - "27017:27017" + environment: + MONGO_INITDB_ROOT_USERNAME: ${MONGO_USER} + MONGO_INITDB_ROOT_PASSWORD: ${MONGO_PASS} + MONGO_INIDB_DATABASE: ${MONGO_NAME} + volumes: + - ./scripts/mongo:/docker-entrypoint-initdb.d + - mongo_data:/data/db + + redis: + image: redis:alpine + networks: + - bot + restart: always + ports: + - "6379:6379" + + bot: + env_file: + - .env + - .env.production + build: + context: ./ + dockerfile: ./Dockerfile + networks: + - bot + depends_on: + mongo: + condition: service_started + redis: + condition: service_started + postgres: + condition: service_healthy + restart: true + +networks: + bot: + driver: bridge +volumes: + postgres_data: + mongo_data: \ No newline at end of file diff --git a/main.go b/main.go index c02bcf8..dd786b6 100644 --- a/main.go +++ b/main.go @@ -3,6 +3,8 @@ package main import ( "kurumibot/database" "kurumibot/plugins" + "log" + "os" "kurumibot/laniakea" ) @@ -10,12 +12,14 @@ import ( func main() { database.Connect() bot := laniakea.NewBot(&laniakea.BotSettings{ - Token: "", + Token: os.Getenv("TG_TOKEN"), Debug: true, Prefixes: laniakea.LoadPrefixesFromEnv(), UseRequestLogger: true, LoggerBasePath: "./logs/", }) + log.Println(os.Getenv("PSQL_NAME")) + log.Println(os.Getenv("PREFIXES")) bot = bot.ErrorTemplate("Во время выполнения команды произошла ошибка!\nСообщите об этом разработчику!\n\n%s") plugins.RegisterEconomy(bot) plugins.RegisterWaifus(bot)