项目作者: kamaln7

项目描述 :
the minimalist URL shortener
高级语言: Go
项目地址: git://github.com/kamaln7/klein.git
创建时间: 2017-07-26T21:21:45Z
项目社区:https://github.com/kamaln7/klein

开源协议:MIT License

下载



klein logo

klein is a minimalist URL shortener written in Go. No unnecessary clutter, web UI, features, etc. Just shortening and serving redirections.

Modularity

klein has three core components that are abstracted into drivers to allow different functionality:

  1. auth
    • Handles authentication, guarding access to shortening links
    • Comes with two drivers:
      • Unauthenticated—shorten URLs without authentication
      • Static Key—require a static key/password
      • HTTP Basic—uses HTTP Basic Auth, require a username and password
  2. alias
    • Handles generating URL aliases.
    • Comes with two drivers:
      • Alphanumeric—returns a random alphanumeric string with a configurable length
      • Memorable—returns a configurable amount of English words
  3. storage
    • Handles storing and reading shortened URLs.
    • Comes with four drivers:
      • File—stores data as text files in a directory
      • Bolt—stores data in a bolt database
      • Redis—stores data in a redis database (ensure you configure save)
      • Spaces.stateful—stores data as a single file in DigitalOcean Spaces
      • Spaces.stateless—stores each URL as an object in DigitalOcean Spaces
      • PostgreSQL—stores data in a PostgreSQL database
      • Memory—stores data in a temporary map in memory

Usage

Once installed and configured, there are two actions that you can do:

  1. Shorten a URL:
    • Send a POST request to / with the following two fields:
      1. url—the URL to shorten
      2. key—if the Static Key auth driver is enabled
      3. alias—a custom alias to be used instead of a randomly-generated one
    • Example cURL command: curl -X POST -d 'url=http://github.com/kamaln7/klein' -d 'key=secret_password' -d 'alias=klein_gh' http://localhost:5556/
      • This will create a short URL at http://localhost:5556/klein_gh that redirects to http://github.com/kamaln7/klein.
  2. Look up a URL/serve a redirect:
    • Browse to http://[path to klein]/[alias] to access a short URL.

Installation

✅ Use the docker image kamaln7/klein. The latest tag is a good bet. See the releases page for version numbers.

Or grab the latest binary from the releases page and drop it in /usr/local/bin, /opt, or wherever you like.

Configuration

klein uses CLI options or environment variables for config. For environment variables, each option is prefixed with klein and both dots and dashes are replaced with underscores, eg the environment variable for the storage.spaces.access-key option is KLEIN_STORAGE_SPACES_ACCESS_KEY.

Running klein without any configuration will use the following default config:

  • Aliases are random 5-character alphanumeric strings
  • Listens on 127.0.0.1:5556
  • No authentication
  • Stores URLs as files in a urls directory in the current working directory

Full list of config options

  1. $ klein --help
  2. klein is a minimalist URL shortener.
  3. Usage:
  4. klein [flags]
  5. Flags:
  6. --alias.alphanumeric.alpha use letters in code (default true)
  7. --alias.alphanumeric.length int alphanumeric code length (default 5)
  8. --alias.alphanumeric.num use numbers in code (default true)
  9. --alias.driver string what alias generation to use (alphanumeric, memorable) (default "alphanumeric")
  10. --alias.memorable.length int memorable word count (default 3)
  11. --auth.basic.password string password for HTTP basic auth
  12. --auth.basic.username string username for HTTP basic auth
  13. --auth.driver string what auth backend to use (basic, key, none) (default "none")
  14. --auth.key string upload API key
  15. --error-template string path to error template
  16. -h, --help help for klein
  17. --listen string listen address (default "127.0.0.1:5556")
  18. --root string root redirect
  19. --storage.boltdb.path string path to use for bolt db (default "bolt.db")
  20. --storage.driver string what storage backend to use (file, boltdb, redis, spaces.stateful, sql.pg, memory) (default "file")
  21. --storage.file.path string path to use for file store (default "urls")
  22. --storage.redis.address string address:port of redis instance (default "127.0.0.1:6379")
  23. --storage.redis.auth string password to access redis
  24. --storage.redis.db int db to select within redis
  25. --storage.spaces.access-key string access key for spaces
  26. --storage.spaces.region string region for spaces
  27. --storage.spaces.secret-key string secret key for spaces
  28. --storage.spaces.space string space to use
  29. --storage.spaces.stateful.path string path of the file in spaces (default "klein.json")
  30. --storage.spaces.stateless.cache-duration duration time to cache spaces results in memory. 0 to disable (default 1m0s)
  31. --storage.spaces.stateless.path string path of the directory in spaces to store urls in (default "/klein")
  32. --storage.sql.pg.database string postgresql database (default "klein")
  33. --storage.sql.pg.host string postgresql host (default "localhost")
  34. --storage.sql.pg.password string postgresql password (default "secret")
  35. --storage.sql.pg.port int32 postgresql port (default 5432)
  36. --storage.sql.pg.sslmode string postgresql sslmode (default "prefer")
  37. --storage.sql.pg.table string postgresql table (default "klein")
  38. --storage.sql.pg.user string postgresql user (default "klein")
  39. --url string path to public facing url

Service file

Here’s a Systemd service file that you can use with klein:

  1. [Unit]
  2. Description=klein
  3. After=network-online.target
  4. [Service]
  5. Restart=on-failure
  6. User=klein
  7. Group=klein
  8. ExecStart=/usr/local/bin/klein
  9. [Install]
  10. WantedBy=multi-user.target

Don’t forget to add your config to the ExecStart line and update User and Group if necessary. Make sure that klein has permission to write to the URLs directory.

Development

To manage dependencies, we use Go modules.

To build the app, run go build.
This will produce a binary named klein. You can now run the app by running ./klein

❤️ Contributors

License

See ./LICENSE