Browse Source

feat: embed template html files to binary (#12)

* feat: embed template file to binary

* chore: update docker cofiguration

* feat: migrate preparing folder to utils

* feat: set create folder to config folder

* chore: update docs
pull/14/head v3.1.0
Aldino Kemal 4 years ago
committed by GitHub
parent
commit
a99a6e1027
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 1
      .gitignore
  2. 9
      docker/golang.Dockerfile
  3. 13
      readme.md
  4. 2
      src/go.mod
  5. 5
      src/go.sum
  6. 15
      src/main.go
  7. 12
      src/utils/general.go

1
.gitignore

@ -6,3 +6,4 @@ history-*.json
main main
main.exe main.exe
*.jpe *.jpe
src/pkged.go

9
docker/golang.Dockerfile

@ -8,16 +8,17 @@ COPY ./src .
# Fetch dependencies. # Fetch dependencies.
RUN go mod download RUN go mod download
# Install pkger
RUN go install github.com/gobuffalo/packr/v2/packr2@latest
# Build the binary. # Build the binary.
RUN go build -o app
RUN go build -o /app/whatsapp
############################# #############################
## STEP 2 build a smaller image ## STEP 2 build a smaller image
############################# #############################
FROM alpine FROM alpine
RUN apk update && apk add --no-cache vips-dev RUN apk update && apk add --no-cache vips-dev
WORKDIR /whatsapp
# Copy compiled from builder. # Copy compiled from builder.
COPY --from=builder /whatsapp .
COPY --from=builder /app/whatsapp /app/whatsapp
# Run the binary. # Run the binary.
ENTRYPOINT ["./app"]
ENTRYPOINT ["/app/whatsapp"]

13
readme.md

@ -29,6 +29,19 @@
3. run `docker-compose up -d --build` 3. run `docker-compose up -d --build`
4. open `http://localhost:3000` 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) ## Production Mode (without config)
- `docker run --publish 3000:3000 --restart=always aldinokemal2104/go-whatsapp-web-multidevice` - `docker run --publish 3000:3000 --restart=always aldinokemal2104/go-whatsapp-web-multidevice`

2
src/go.mod

@ -7,6 +7,7 @@ require (
github.com/gofiber/fiber/v2 v2.26.0 github.com/gofiber/fiber/v2 v2.26.0
github.com/gofiber/template v1.6.22 github.com/gofiber/template v1.6.22
github.com/h2non/bimg v1.1.6 github.com/h2non/bimg v1.1.6
github.com/markbates/pkger v0.17.1
github.com/mattn/go-sqlite3 v1.14.11 github.com/mattn/go-sqlite3 v1.14.11
github.com/skip2/go-qrcode v0.0.0-20200617195104-da1b6568686e github.com/skip2/go-qrcode v0.0.0-20200617195104-da1b6568686e
github.com/stretchr/testify v1.7.0 github.com/stretchr/testify v1.7.0
@ -19,6 +20,7 @@ require (
github.com/andybalholm/brotli v1.0.4 // indirect github.com/andybalholm/brotli v1.0.4 // indirect
github.com/asaskevich/govalidator v0.0.0-20210307081110-f21760c49a8d // indirect github.com/asaskevich/govalidator v0.0.0-20210307081110-f21760c49a8d // indirect
github.com/davecgh/go-spew v1.1.1 // 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/gorilla/websocket v1.5.0 // indirect
github.com/klauspost/compress v1.14.2 // indirect github.com/klauspost/compress v1.14.2 // indirect
github.com/pmezard/go-difflib v1.0.0 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect

5
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 h1:byhDUpfEwjsVQb1vBunvIjh2BHQ9ead57VkAEY4V+Es=
github.com/go-ozzo/ozzo-validation/v4 v4.3.0/go.mod h1:2NKgrcHl3z6cJs+3Oo940FPRiTzuqKbvfrL2RxCj6Ew= 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/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/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 h1:Awnfqp3fqbZzV3wZWMRJ6Xo2U8X0Ls68M7tXjx52NcM=
github.com/gofiber/fiber/v2 v2.26.0/go.mod h1:7efVWcBOZi1PyMWznnbitjnARPA7nYZxmQXJVod0bo0= 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/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/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/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.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.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE=
github.com/mattn/go-colorable v0.1.6/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= 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.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.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.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.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= 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= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=

15
src/main.go

@ -2,6 +2,7 @@ package main
import ( import (
"fmt" "fmt"
"github.com/aldinokemal/go-whatsapp-web-multidevice/config"
"github.com/aldinokemal/go-whatsapp-web-multidevice/controllers" "github.com/aldinokemal/go-whatsapp-web-multidevice/controllers"
"github.com/aldinokemal/go-whatsapp-web-multidevice/middleware" "github.com/aldinokemal/go-whatsapp-web-multidevice/middleware"
"github.com/aldinokemal/go-whatsapp-web-multidevice/services" "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/cors"
"github.com/gofiber/fiber/v2/middleware/logger" "github.com/gofiber/fiber/v2/middleware/logger"
"github.com/gofiber/template/html" "github.com/gofiber/template/html"
"github.com/markbates/pkger"
_ "github.com/mattn/go-sqlite3" _ "github.com/mattn/go-sqlite3"
"log"
) )
func main() { 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{ app := fiber.New(fiber.Config{
Views: engine, Views: engine,
BodyLimit: 10 * 1024 * 1024, 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())}) 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 { if err != nil {
fmt.Println("Failed to start: ", err.Error())
log.Fatalln("Failed to start: ", err.Error())
} }
} }

12
src/utils/general.go

@ -2,9 +2,11 @@ package utils
import ( import (
"os" "os"
"path/filepath"
"time" "time"
) )
// RemoveFile is removing file with delay
func RemoveFile(delaySecond int, paths ...string) error { func RemoveFile(delaySecond int, paths ...string) error {
if delaySecond > 0 { if delaySecond > 0 {
time.Sleep(time.Duration(delaySecond) * time.Second) time.Sleep(time.Duration(delaySecond) * time.Second)
@ -16,3 +18,13 @@ func RemoveFile(delaySecond int, paths ...string) error {
} }
return nil 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
}
Loading…
Cancel
Save