Ser


Ser(ve) your web app with HTTPS to any device on your network (mDNS):

  • Use convenient domain names without ports (https://app.local vs http://127.0.0.1:3000)
  • Use mDNS for .local domains, so you can visit them from your phone or any other device connected to the same network
  • Locally-trusted development certificates (read on filosottile/mkcert how to trust certificates on mobile devices)

Use-cases:

  • Simulate production-like subdomains (e.g., blog.example.com, api.example.com)
  • Test cookies scoped to specific domains
  • Preview multi-tenant routing (e.g., tenant1.example.com, tenant2.example.com)
  • Use third-party APIs that need HTTPS

Installation

You can install ser with Go:

go install github.com/3v0k4/ser

Ser is also distributed as a Ruby gem. Because Ser is written in Go, several pre-built platform-specific binaries are available. Installing the gem will automatically fetch the appropriate binary for your platform.

To install it, add it to your application's Gemfile:

gem 'ser'

Or install it globally:

$ gem install ser

Usage

If your app server listens on http://localhost:3000, you can just run ser [APP-SERVER] and visit https://ser.local on any device connected to the same network.

Otherwise, you can customise the addresses with ENVs:

Usage: ser CMD

Ser(ve) your web app with HTTPS to any device on your network (mDNS):
  Provisions HTTPS certificates for FROM
  Executes CMD
  Proxies requests from FROM to TO
  Starts a mDNS server to announce FROM (if .local)

Arguments:
  CMD the command that launches the app server (it must expect requests at TO)

ENVs:
  FROM (default: https://ser.local) comma-separated HTTPS domains you want to access
  SER_FROM same as above but takes precedence
  TO   (default: http://localhost:3000) address where CMD expects requests
  SER_TO same as above but takes precedence

Examples:
  ser bundle exec rails server
  # Access the Rails app at https://ser.local (from your phone)

  FROM=https://app.local TO=http://127.0.0.1:8080 ser npm run start
  # Access the Node app at https://app.local (from your phone)

Development

Testing

make test

Running || Building

You can run the application using go run:

go run ./cmd/ser

You can also build for the current environment (bin/) using the Makefile:

make build

To build binaries for all supported architectures and operating systems (dist/), use:

make dist

Releasing

In order to ship the platform-specific binary inside a gem, multiple gems are released, one for each platform. The rake release task builds all the necessary gems.

Checklist:

  • Update version & changelog:

    • [ ] Update lib/ser/version.rb
    • [ ] Update CHANGELOG.md
    • [ ] Commit and git tag vX.Y.Z
  • Build native gems:

    • [ ] rake clobber (to clean up any old packages)
    • [ ] rake package
  • Push gems:

    • [ ] for g in pkg/*.gem ; do gem push $g ; done
    • [ ] git push

Contributing

Bug reports and pull requests are welcome on GitHub.

License

The module is available as open source under the terms of the MIT License.