Storage and image processing server written in Go
Clone or download
aldor007 Merge pull request #26 from aldor007/bugfix/js-vul
chore (int-test): fix security vulnerabilities in  dependencies
Latest commit b876720 Oct 4, 2018
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
cmd/mort feat (go): update golang version, add hostname and pid to log Sep 24, 2018
configuration [WIP] Feature/plugins compress (#19) Jun 24, 2018
doc Update doc, add coverage to travis Jun 17, 2018
etc Added goreleaser Nov 27, 2017
example Update README.md Jul 12, 2018
pkg feat (go): update golang version, add hostname and pid to log Sep 24, 2018
scripts [WIP] Feature/plugins compress (#19) Jun 24, 2018
tests-int [WIP] Feature/plugins compress (#19) Jun 24, 2018
.dockerignore Docker debian -> ubuntu. use multi stage build Dec 2, 2017
.gitignore Change installation of gorelease Jun 24, 2018
.godir Readme Nov 16, 2017
.goreleaser.yml Added goreleaser Nov 27, 2017
.travis.yml [WIP] Feature/plugins compress (#19) Jun 24, 2018
CHANGELOG.md Develop (#24) Aug 5, 2018
CONTRIBUTING.md Various changes Dec 2, 2017
Dockerfile feat (go): update golang version, add hostname and pid to log Sep 24, 2018
Dockerfile.build Change installation of gorelease Jun 24, 2018
Gopkg.lock Tests for helpers package Jun 25, 2018
Gopkg.toml prometheus reporter ready, update doc Jan 13, 2018
LICENSE.md Create LICENSE.md Nov 19, 2017
Makefile [WIP] Feature/plugins compress (#19) Jun 24, 2018
README.md Feature/nginx grafana config (#23) Jul 11, 2018
TODO.md Update doc, added travis.ci, moved http, noop adapter to stow fork Nov 19, 2017
favicon.png change hashing algorithm - add new folder level Mar 8, 2018
gopher.png added test Sep 29, 2017
package-lock.json chore (int-test): fix security vulnerabilities in dependencies Oct 3, 2018
package.json chore (int-test): fix security vulnerabilities in dependencies Oct 3, 2018

README.md

Mort

Build Status Codecov Docker Docker Registry Go Report Card Godoc Releases LICENSE

An S3-compatible image processing server written in Go. Still in active development.

Features

  • HTTP server
  • Resize, Rotate, SmartCrop
  • Convert (JPEG, PNG , BMP, Webp)
  • Multiple storage backends (disk, S3, http)
  • Fully modular
  • S3 API for listing and uploading files
  • Requests collapsing
  • Build in rate limiter
  • HTTP Range and Conditional requests
  • Compression (gzip, brotli)

And more see changelog for more info

Demo


Original image

Click on result image to see URL. More examples can be found in Image Operations list

Description Result (to see result click on image)

preset: small

(preserve aspect ratio) width: 75

preset: blur

  • resize image (preserve aspect ratio) width: 700

  • blur image with sigma 5.0

preset: webp

  • resize image (preserve aspect ratio) width: 1000

  • and change format to webp

preset: watermark

  • resize image (preserve aspect ratio) width: 1300

  • and add watermark

Usage

Mort can be used directly from the Internet and behind any proxy.

Install

go get github.com/aldor007/mort/cmd/

Command line help

$ ./mort
Usage of  mort
  -config string
    	Path to configuration (default "/etc/mort/mort.yml")

Configuration

Example configuration used for providing demo images:

headers: #  add or overwrite all response headers of given status. This field is optional
  - statusCodes: [200]
    values:
      "cache-control": "max-age=84000, public"

buckets: # list of available buckets 
    demo:    # bucket name 
        keys: # list of S3 keys (optional)
          - accessKey: "access"
            secretAccessKey: "random"
        transform: # config for transforms
            path: "\\/(?P<presetName>[a-z0-9_]+)\\/(?P<parent>[a-z0-9-\\.]+)" # regexp for transform path 
            kind: "presets-query" #  type of transform or "query"
            presets: # list of presets
                small:
                    quality: 75
                    filters:
                        thumbnail: 
                            width: 150
                blur:
                    quality: 80
                    filters:
                        thumbnail: 
                            width: 700
                        blur:
                          sigma: 5.0
                webp:
                    quality: 100
                    format: webp
                    filters:
                        thumbnail: 
                            width: 1000
                watermark:
                    quality: 100
                    filters:
                        thumbnail: 
                            width: 1300
                        watermark:
                            image: "https://i.imgur.com/uomkVIL.png"
                            position: "top-left"
                            opacity: 0.5
                smartcrop:
                    quality: 80
                    filters:
                      crop:
                        width: 200
                        height: 200
        storages:
             basic: # retrieve originals from s3
                 kind: "s3"
                 accessKey: "acc"
                 secretAccessKey: "sec"
                 region: ""
                 endpoint: "http://localhost:8080"
             transform: # and store it on disk
                 kind: "local-meta"
                 rootPath: "/var/www/domain/"
                 pathPrefix: "transform"
        

List of all image operations can be found in Image-Operations.md

More details about configuration can be found in Configuration.md

Debian and Ubuntu

I will provide Debian package when we will be completely stable ;)

Docker

See Dockerfile for image details.

Pull docker image

docker pull aldor007/mort

Create you custom docker deployment

Create Dockerfile or use Dockerfile.service

FROM aldor007/mort:latest
ADD config.yml /etc/mort/mort.yml # add yours config

Build container

docker build -f Dockerfile.service -t myusername/mort

Run docker

docker run -p 8080:8080 myusername/mort

Full example you can find here

Development

  1. Make sure you have a Go language compiler >= 1.9 (required) and git installed.
  2. Install libvips like described on bimg page
  3. Ensure your GOPATH is properly set.
  4. Download it
git clone  https://github.com/aldor007/mort.git $GOPATH/src/github.com/aldor007/mort
cd $GOPATH/src/github.com/aldor007/mort
  1. Install dependencies:
dep ensure

Run unit tests:

make unit

Run integration tests:

make integrations

Built With

  • dep - Dependency Management
  • bimg - Image processing powered by libvips C library

Contributing

Please read CONTRIBUTING.md for details on our code of conduct, and the process for submitting pull requests.

License

This project is licensed under the MIT License - see the LICENSE.md file for details

Inspirations