From 68cefb67408624853274c81a32eaa89bc630da83 Mon Sep 17 00:00:00 2001 From: Nova Kwok Date: Sun, 25 Dec 2022 16:19:47 +0800 Subject: [PATCH] A bunch of fixes (#161) * Some updates * Update Docs as well --- .github/workflows/CI.yaml | 2 +- .github/workflows/release_binary.yaml | 2 +- Dockerfile | 4 ++-- README.md | 29 +++++++++++---------------- config.go | 2 +- encoder.go | 8 ++++---- go.mod | 19 ++++++++++++++++-- go.sum | 18 +++++++++++++++-- router.go | 6 +++++- webp-server.go | 2 +- 10 files changed, 60 insertions(+), 32 deletions(-) diff --git a/.github/workflows/CI.yaml b/.github/workflows/CI.yaml index fb612b0..c724384 100644 --- a/.github/workflows/CI.yaml +++ b/.github/workflows/CI.yaml @@ -21,7 +21,7 @@ jobs: - name: Install Go uses: actions/setup-go@v2 with: - go-version: 1.18 + go-version: 1.19 - name: Setup necessary packages run: | diff --git a/.github/workflows/release_binary.yaml b/.github/workflows/release_binary.yaml index 93751ff..e2cccfc 100644 --- a/.github/workflows/release_binary.yaml +++ b/.github/workflows/release_binary.yaml @@ -23,7 +23,7 @@ jobs: - name: Install Go uses: actions/setup-go@v2 with: - go-version: 1.18 + go-version: 1.19 - name: Setup necessary packages run: | diff --git a/Dockerfile b/Dockerfile index a30e9fd..16a4b29 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM golang:1.19.0-alpine as builder +FROM golang:1.19.4-alpine as builder ARG IMG_PATH=/opt/pics ARG EXHAUST_PATH=/opt/exhaust @@ -20,7 +20,7 @@ COPY --from=builder /build/config.json /etc/config.json COPY --from=builder /usr/lib/libaom.a /usr/lib/libaom.a COPY --from=builder /usr/lib/libaom.so /usr/lib/libaom.so COPY --from=builder /usr/lib/libaom.so.3 /usr/lib/libaom.so.3 -COPY --from=builder /usr/lib/libaom.so.3.3.0 /usr/lib/libaom.so.3.3.0 +COPY --from=builder /usr/lib/libaom.so.3.5.0 /usr/lib/libaom.so.3.5.0 WORKDIR /opt diff --git a/README.md b/README.md index cb6add2..87d5d2d 100644 --- a/README.md +++ b/README.md @@ -25,32 +25,26 @@ It will convert `jpg,jpeg,png` files by default, this can be customized by editi ### 1. Prepare the environment -If you'd like to run binary directly on your machine, you need to install some dependencies(as AVIF encoder needs it): +If you'd like to run binary directly on your machine, you need to install `libaom`: -#### Ubuntu +`libaom` is for AVIF support, you can install it by `apt install libaom-dev` on Ubuntu, `yum install libaom-devel` on CentOS. -``` -apt install libaom-dev -y -ln -s /usr/lib/x86_64-linux-gnu/libaom.so /usr/lib/x86_64-linux-gnu/libaom.so.3 -``` +Without this library, you may encounter error like this: `libaom.so.3: cannot open shared object file: No such file or directory` -#### CentOS7 +If you are using Intel Mac, you can install it by `brew install aom` -``` -yum install libaom-devel -y -``` +If you are using Apple Silicon, you need to `brew install aom && export CPATH=/opt/homebrew/opt/aom/include/;LIBRARY_PATH=/opt/homebrew/opt/aom/lib/`, more references can be found at [在M1 Mac下开发WebP Server Go | 土豆不好吃](https://dmesg.app/m1-aom.html). If you don't like to hassle around with your system, so do us, why not have a try using Docker? >> [Docker | WebP Server Documentation](https://docs.webp.sh/usage/docker/) - - ### 2. Download the binary -Download the `webp-server` from [release](https://github.com/webp-sh/webp_server_go/releases) page. + +Download the `webp-server-linux-amd64` from [Releases](https://github.com/webp-sh/webp_server_go/releases) page. ### 3. Dump config file ``` -./webp-server -dump-config > config.json +./webp-server-linux-amd64 -dump-config > config.json ``` The default `config.json` may look like this. @@ -88,15 +82,16 @@ in the example above, your `webp` image will be saved at `/var/cache/webp/pics/t ### 3. Run ``` -./webp-server --config=/path/to/config.json +./webp-server-linux-amd64 --config=/path/to/config.json ``` ### 4. Nginx proxy_pass -Let Nginx to `proxy_pass http://localhost:3333/;`, and your webp-server is on-the-fly. + +Let Nginx to `proxy_pass http://localhost:3333/;`, and your WebP Server is on-the-fly. ## Advanced Usage -For supervisor, Docker sections, please read our documentation at [https://docs.webp.sh/](https://docs.webp.sh/) +For supervisor, Docker sections or detailed Nginx configuration, please read our documentation at [https://docs.webp.sh/](https://docs.webp.sh/) ## License diff --git a/config.go b/config.go index 593beaf..6743c0e 100644 --- a/config.go +++ b/config.go @@ -22,7 +22,7 @@ var ( prefetch, proxyMode bool remoteRaw = "remote-raw" config Config - version = "0.4.5" + version = "0.4.7" releaseUrl = "https://github.com/webp-sh/webp_server_go/releases/latest/download/" ) diff --git a/encoder.go b/encoder.go index d6193da..45122a0 100644 --- a/encoder.go +++ b/encoder.go @@ -123,14 +123,14 @@ func avifEncoder(p1, p2 string, quality float32) { convertLog("AVIF", p1, p2, quality) } -func webpEncoder(p1, p2 string, quality float32) { +func webpEncoder(p1, p2 string, quality float32) error { // if convert fails, return error; success nil var buf bytes.Buffer var img image.Image // The maximum pixel dimensions of a WebP image is 16383 x 16383. img, err := readRawImage(p1, webpMax) if err != nil { - return + return err } err = webp.Encode(&buf, img, &webp.Options{Lossless: false, Quality: quality}) @@ -140,11 +140,11 @@ func webpEncoder(p1, p2 string, quality float32) { if err := ioutil.WriteFile(p2, buf.Bytes(), 0644); err != nil { log.Error(err) - return + return err } convertLog("WebP", p1, p2, quality) - + return nil } func convertLog(itype, p1 string, p2 string, quality float32) { diff --git a/go.mod b/go.mod index 2e34afc..3ce8b47 100644 --- a/go.mod +++ b/go.mod @@ -1,6 +1,6 @@ module webp_server_go -go 1.15 +go 1.19 require ( github.com/Kagami/go-avif v0.1.0 @@ -12,7 +12,22 @@ require ( github.com/staktrace/go-update v0.0.0-20210525161054-fc019945f9a2 github.com/stretchr/testify v1.8.1 github.com/valyala/fasthttp v1.43.0 - golang.org/x/image v0.0.0-20200119044424-58c23975cae1 + golang.org/x/image v0.2.0 +) + +require ( + github.com/andybalholm/brotli v1.0.4 // indirect + github.com/davecgh/go-spew v1.1.1 // indirect + github.com/klauspost/compress v1.15.9 // indirect + github.com/mattn/go-runewidth v0.0.14 // indirect + github.com/mitchellh/colorstring v0.0.0-20190213212951-d06e56a500db // indirect + github.com/pmezard/go-difflib v1.0.0 // indirect + github.com/rivo/uniseg v0.4.3 // indirect + github.com/valyala/bytebufferpool v1.0.0 // indirect + github.com/valyala/tcplisten v1.0.0 // indirect + golang.org/x/sys v0.3.0 // indirect + golang.org/x/term v0.3.0 // indirect + gopkg.in/yaml.v3 v3.0.1 // indirect ) replace ( diff --git a/go.sum b/go.sum index 783d903..b9f2355 100644 --- a/go.sum +++ b/go.sum @@ -49,15 +49,23 @@ github.com/webp-sh/fiber/v2 v2.4.0 h1:JtkW0HAqHCExodZMZnG7GrLiJuK2YbNYw8eXo55+tr github.com/webp-sh/fiber/v2 v2.4.0/go.mod h1:f8BRRIMjMdRyt2qmJ/0Sea3j3rwwfufPrh9WNBRiVZ0= github.com/webp-sh/webp v1.2.0 h1:WiAR1M4Cz50Ehv0vP8VaBZwuTqBgLxcGMaBV23zLVDA= github.com/webp-sh/webp v1.2.0/go.mod h1:DWmBXPtpA/zfTgEgWxAlsER3B7nXFvDtCi1YY+K5N9w= +github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20220214200702-86341886e292/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/image v0.0.0-20200119044424-58c23975cae1 h1:5h3ngYt7+vXCDZCup/HkCQgW5XwmSvR/nA2JmJ0RErg= -golang.org/x/image v0.0.0-20200119044424-58c23975cae1/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/image v0.2.0 h1:/DcQ0w3VHKCC5p0/P2B0JpAZ9Z++V2KOo2fyU89CXBQ= +golang.org/x/image v0.2.0/go.mod h1:la7oBXb9w3YFjBqaAwtynVioc1ZvOnNteUNrifGNmAI= +golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20201016165138-7b1cca2348c0/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.0.0-20220906165146-f3363e06e74c/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= +golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -65,7 +73,9 @@ golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20201210223839-7e3030f88018/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.3.0 h1:w8ZOecv6NaNa/zC8944JTU3vz4u6Lagfk4RPQxv92NQ= @@ -78,7 +88,11 @@ golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= +golang.org/x/text v0.5.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= +golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/router.go b/router.go index 0059a12..7f1805a 100644 --- a/router.go +++ b/router.go @@ -109,7 +109,11 @@ func proxyHandler(c *fiber.Ctx, reqURI string) error { localRawImagePath := remoteRaw + reqURI _ = fetchRemoteImage(localRawImagePath, realRemoteAddr) _ = os.MkdirAll(path.Dir(localEtagWebPPath), 0755) - webpEncoder(localRawImagePath, localEtagWebPPath, config.Quality) + encodeErr := webpEncoder(localRawImagePath, localEtagWebPPath, config.Quality) + if encodeErr != nil { + // Send as it is. + return c.SendFile(localRawImagePath) + } chooseProxy(remoteLength, localEtagWebPPath) return c.SendFile(localEtagWebPPath) } diff --git a/webp-server.go b/webp-server.go index 69de167..ddd70b8 100644 --- a/webp-server.go +++ b/webp-server.go @@ -94,7 +94,7 @@ Develop by WebP Server team. https://github.com/webp-sh`, version) os.Exit(0) } - go autoUpdate() + // go autoUpdate() config = loadConfig(configPath) switchProxyMode()