diff --git a/.gitignore b/.gitignore index 26d25f5..4bb3c9e 100644 --- a/.gitignore +++ b/.gitignore @@ -5,4 +5,5 @@ tmp history-*.json main main.exe -*.jpe \ No newline at end of file +*.jpe +src/pkged.go diff --git a/docker/golang.Dockerfile b/docker/golang.Dockerfile index 0a7a6f7..834a2d6 100644 --- a/docker/golang.Dockerfile +++ b/docker/golang.Dockerfile @@ -8,16 +8,17 @@ COPY ./src . # Fetch dependencies. RUN go mod download +# Install pkger +RUN go install github.com/gobuffalo/packr/v2/packr2@latest # Build the binary. -RUN go build -o app +RUN go build -o /app/whatsapp ############################# ## STEP 2 build a smaller image ############################# FROM alpine RUN apk update && apk add --no-cache vips-dev -WORKDIR /whatsapp # Copy compiled from builder. -COPY --from=builder /whatsapp . +COPY --from=builder /app/whatsapp /app/whatsapp # Run the binary. -ENTRYPOINT ["./app"] \ No newline at end of file +ENTRYPOINT ["/app/whatsapp"] \ No newline at end of file diff --git a/readme.md b/readme.md index b1d64ca..6c87b00 100644 --- a/readme.md +++ b/readme.md @@ -29,6 +29,19 @@ 3. run `docker-compose up -d --build` 4. open `http://localhost:3000` +#### Build your own binary +1. Clone this repo `git clone https://github.com/aldinokemal/go-whatsapp-web-multi-device` +2. open via cmd/terminal +3. run `go install github.com/markbates/pkger/cmd/pkger@latest` +4. run `cd src` +5. run + 1. Linux & MacOS: `pkger && go build -o whatsapp` + 2. Windows (CMD, not PowerShell): `pkger.exe && go build -o whatsapp.exe` +6. run + 1. Linux & MacOS: `./whatsapp` + 2. Windows: `.\whatsapp.exe` or you can double-click it +7. open `http://localhost:3000` in browser + ## Production Mode (without config) - `docker run --publish 3000:3000 --restart=always aldinokemal2104/go-whatsapp-web-multidevice` diff --git a/src/go.mod b/src/go.mod index 23373ad..64e629e 100644 --- a/src/go.mod +++ b/src/go.mod @@ -7,6 +7,7 @@ require ( github.com/gofiber/fiber/v2 v2.26.0 github.com/gofiber/template v1.6.22 github.com/h2non/bimg v1.1.6 + github.com/markbates/pkger v0.17.1 github.com/mattn/go-sqlite3 v1.14.11 github.com/skip2/go-qrcode v0.0.0-20200617195104-da1b6568686e github.com/stretchr/testify v1.7.0 @@ -19,6 +20,7 @@ require ( github.com/andybalholm/brotli v1.0.4 // indirect github.com/asaskevich/govalidator v0.0.0-20210307081110-f21760c49a8d // indirect github.com/davecgh/go-spew v1.1.1 // indirect + github.com/gobuffalo/here v0.6.0 // indirect github.com/gorilla/websocket v1.5.0 // indirect github.com/klauspost/compress v1.14.2 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect diff --git a/src/go.sum b/src/go.sum index 9ea64ab..8ed3c8c 100644 --- a/src/go.sum +++ b/src/go.sum @@ -134,6 +134,8 @@ github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V github.com/go-ozzo/ozzo-validation/v4 v4.3.0 h1:byhDUpfEwjsVQb1vBunvIjh2BHQ9ead57VkAEY4V+Es= github.com/go-ozzo/ozzo-validation/v4 v4.3.0/go.mod h1:2NKgrcHl3z6cJs+3Oo940FPRiTzuqKbvfrL2RxCj6Ew= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= +github.com/gobuffalo/here v0.6.0 h1:hYrd0a6gDmWxBM4TnrGw8mQg24iSVoIkHEk7FodQcBI= +github.com/gobuffalo/here v0.6.0/go.mod h1:wAG085dHOYqUpf+Ap+WOdrPTp5IYcDAs/x7PLa8Y5fM= github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/gofiber/fiber/v2 v2.26.0 h1:Awnfqp3fqbZzV3wZWMRJ6Xo2U8X0Ls68M7tXjx52NcM= github.com/gofiber/fiber/v2 v2.26.0/go.mod h1:7efVWcBOZi1PyMWznnbitjnARPA7nYZxmQXJVod0bo0= @@ -276,6 +278,8 @@ github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/lyft/protoc-gen-star v0.5.3/go.mod h1:V0xaHgaf5oCCqmcxYcWiDfTiKsZsRc87/1qhoTACD8w= github.com/magiconair/properties v1.8.5/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60= +github.com/markbates/pkger v0.17.1 h1:/MKEtWqtc0mZvu9OinB9UzVN9iYCwLWuyUv4Bw+PCno= +github.com/markbates/pkger v0.17.1/go.mod h1:0JoVlrol20BSywW79rN3kdFFsE5xYM+rSCQDXbLhiuI= github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= github.com/mattn/go-colorable v0.1.6/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= @@ -816,6 +820,7 @@ gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.7/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/src/main.go b/src/main.go index 0a37b41..524a865 100644 --- a/src/main.go +++ b/src/main.go @@ -2,6 +2,7 @@ package main import ( "fmt" + "github.com/aldinokemal/go-whatsapp-web-multidevice/config" "github.com/aldinokemal/go-whatsapp-web-multidevice/controllers" "github.com/aldinokemal/go-whatsapp-web-multidevice/middleware" "github.com/aldinokemal/go-whatsapp-web-multidevice/services" @@ -10,11 +11,19 @@ import ( "github.com/gofiber/fiber/v2/middleware/cors" "github.com/gofiber/fiber/v2/middleware/logger" "github.com/gofiber/template/html" + "github.com/markbates/pkger" _ "github.com/mattn/go-sqlite3" + "log" ) func main() { - engine := html.New("./views", ".html") + // preparing folder if not exist + err := utils.CreateFolder(config.PathQrCode, config.PathSendItems) + if err != nil { + log.Fatalln(err) + } + + engine := html.NewFileSystem(pkger.Dir("/views"), ".html") app := fiber.New(fiber.Config{ Views: engine, BodyLimit: 10 * 1024 * 1024, @@ -48,8 +57,8 @@ func main() { return ctx.Render("index", fiber.Map{"AppHost": fmt.Sprintf("%s://%s", ctx.Protocol(), ctx.Hostname())}) }) - err := app.Listen(":3000") + err = app.Listen(":3000") if err != nil { - fmt.Println("Failed to start: ", err.Error()) + log.Fatalln("Failed to start: ", err.Error()) } } diff --git a/src/utils/general.go b/src/utils/general.go index 3dda910..39b4110 100644 --- a/src/utils/general.go +++ b/src/utils/general.go @@ -2,9 +2,11 @@ package utils import ( "os" + "path/filepath" "time" ) +// RemoveFile is removing file with delay func RemoveFile(delaySecond int, paths ...string) error { if delaySecond > 0 { time.Sleep(time.Duration(delaySecond) * time.Second) @@ -16,3 +18,13 @@ func RemoveFile(delaySecond int, paths ...string) error { } return nil } + +// CreateFolder create new folder and sub folder if not exist +func CreateFolder(folderPath ...string) error { + for _, folder := range folderPath { + newFolder := filepath.Join(".", folder) + err := os.MkdirAll(newFolder, os.ModePerm) + return err + } + return nil +}