2015-04-27 10:53:08 -05:00
|
|
|
[![Caddy](https://caddyserver.com/resources/images/caddy-boxed.png)](https://caddyserver.com)
|
2015-01-13 15:24:43 -05:00
|
|
|
|
2015-11-24 13:17:34 -05:00
|
|
|
[![Documentation](https://img.shields.io/badge/godoc-reference-blue.svg?style=flat-square)](https://godoc.org/github.com/mholt/caddy)
|
|
|
|
[![Linux Build Status](https://img.shields.io/travis/mholt/caddy.svg?style=flat-square&label=linux+build)](https://travis-ci.org/mholt/caddy)
|
|
|
|
[![Windows Build Status](https://img.shields.io/appveyor/ci/mholt/caddy.svg?style=flat-square&label=windows+build)](https://ci.appveyor.com/project/mholt/caddy)
|
2015-01-13 15:24:43 -05:00
|
|
|
|
2015-11-24 13:17:34 -05:00
|
|
|
Caddy is a lightweight, general-purpose web server for Windows, Mac, Linux, BSD
|
|
|
|
and [Android](https://github.com/mholt/caddy/wiki/Running-Caddy-on-Android).
|
|
|
|
It is a capable alternative to other popular and easy to use web servers.
|
|
|
|
([@caddyserver](https://twitter.com/caddyserver) on Twitter)
|
2015-01-13 15:24:43 -05:00
|
|
|
|
2015-11-24 13:17:34 -05:00
|
|
|
The most notable features are HTTP/2, [Let's Encrypt](https://letsencrypt.org)
|
|
|
|
support, Virtual Hosts, TLS + SNI, and easy configuration with a
|
|
|
|
[Caddyfile](https://caddyserver.com/docs/caddyfile). In development, you usually
|
|
|
|
put one Caddyfile with each site. In production, Caddy serves HTTPS by default
|
|
|
|
and manages all cryptographic assets for you.
|
2015-01-21 21:16:31 -05:00
|
|
|
|
2015-11-24 13:17:34 -05:00
|
|
|
[Download](https://github.com/mholt/caddy/releases) ·
|
|
|
|
[User Guide](https://caddyserver.com/docs)
|
2015-01-13 15:24:43 -05:00
|
|
|
|
2015-01-21 21:16:31 -05:00
|
|
|
|
2015-01-13 15:24:43 -05:00
|
|
|
|
2015-04-27 10:53:08 -05:00
|
|
|
### Menu
|
|
|
|
|
|
|
|
- [Getting Caddy](#getting-caddy)
|
|
|
|
- [Quick Start](#quick-start)
|
2015-11-03 14:39:25 -05:00
|
|
|
- [Running from Source](#running-from-source)
|
2015-04-27 10:53:08 -05:00
|
|
|
- [Contributing](#contributing)
|
|
|
|
- [About the Project](#about-the-project)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## Getting Caddy
|
|
|
|
|
2015-04-28 13:07:37 -05:00
|
|
|
Caddy binaries have no dependencies and are available for nearly every platform.
|
2015-04-27 10:53:08 -05:00
|
|
|
|
|
|
|
[Latest release](https://github.com/mholt/caddy/releases/latest)
|
|
|
|
|
|
|
|
|
2015-05-01 09:55:34 -05:00
|
|
|
|
2015-04-27 10:53:08 -05:00
|
|
|
## Quick Start
|
2015-01-13 15:24:43 -05:00
|
|
|
|
2015-11-24 13:17:34 -05:00
|
|
|
The website has [full documentation](https://caddyserver.com/docs) but this will
|
|
|
|
get you started in about 30 seconds:
|
2015-01-13 15:24:43 -05:00
|
|
|
|
2015-04-27 10:53:08 -05:00
|
|
|
Place a file named "Caddyfile" with your site. Paste this into it and save:
|
2015-01-13 15:24:43 -05:00
|
|
|
|
|
|
|
```
|
2015-04-27 10:53:08 -05:00
|
|
|
localhost
|
|
|
|
|
2015-01-13 15:24:43 -05:00
|
|
|
gzip
|
2015-04-27 10:53:08 -05:00
|
|
|
browse
|
2015-01-13 15:24:43 -05:00
|
|
|
ext .html
|
2015-04-27 10:53:08 -05:00
|
|
|
websocket /echo cat
|
|
|
|
log ../access.log
|
2015-01-13 15:24:43 -05:00
|
|
|
header /api Access-Control-Allow-Origin *
|
|
|
|
```
|
|
|
|
|
2015-11-24 13:17:34 -05:00
|
|
|
Run `caddy` from that directory, and it will automatically use that Caddyfile to
|
|
|
|
configure itself.
|
2015-04-27 10:53:08 -05:00
|
|
|
|
2015-11-24 13:17:34 -05:00
|
|
|
That simple file enables compression, allows directory browsing (for folders
|
|
|
|
without an index file), serves clean URLs, hosts a WebSocket echo server at
|
|
|
|
/echo, logs requests to access.log, and adds the coveted
|
|
|
|
`Access-Control-Allow-Origin: *` header for all responses from some API.
|
2015-04-27 10:53:08 -05:00
|
|
|
|
|
|
|
Wow! Caddy can do a lot with just a few lines.
|
2015-01-13 15:24:43 -05:00
|
|
|
|
2015-11-03 14:39:25 -05:00
|
|
|
|
2015-04-27 10:53:08 -05:00
|
|
|
#### Defining multiple sites
|
|
|
|
|
|
|
|
You can run multiple sites from the same Caddyfile, too:
|
2015-01-13 15:24:43 -05:00
|
|
|
|
|
|
|
```
|
2015-11-03 14:39:25 -05:00
|
|
|
site1.com {
|
|
|
|
# ...
|
2015-01-13 15:24:43 -05:00
|
|
|
}
|
|
|
|
|
2015-11-03 14:39:25 -05:00
|
|
|
site2.com, sub.site2.com {
|
2015-04-27 10:53:08 -05:00
|
|
|
# ...
|
2015-01-13 15:24:43 -05:00
|
|
|
}
|
|
|
|
```
|
|
|
|
|
2015-11-24 13:17:34 -05:00
|
|
|
Note that all these sites will automatically be served over HTTPS using Let's
|
|
|
|
Encrypt as the CA. Caddy will manage the certificates (including renewals) for
|
|
|
|
you. You don't even have to think about it.
|
2015-04-27 10:53:08 -05:00
|
|
|
|
2015-11-24 13:17:34 -05:00
|
|
|
For more documentation, please view [the website](https://caddyserver.com/docs).
|
|
|
|
You may also be interested in the [developer guide]
|
|
|
|
(https://github.com/mholt/caddy/wiki) on this project's GitHub wiki.
|
2015-04-27 10:53:08 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2015-11-03 14:39:25 -05:00
|
|
|
## Running from Source
|
|
|
|
|
2015-11-24 14:04:15 -05:00
|
|
|
Note: You will need **[Go 1.4](https://golang.org/dl)** or a later version.
|
2015-11-03 14:39:25 -05:00
|
|
|
|
|
|
|
1. `$ go get github.com/mholt/caddy`
|
|
|
|
2. `cd` into your website's directory
|
|
|
|
3. Run `caddy` (assumes `$GOPATH/bin` is in your `$PATH`)
|
|
|
|
|
|
|
|
If you're tinkering, you can also use `go run main.go`.
|
|
|
|
|
2015-11-24 13:17:34 -05:00
|
|
|
By default, Caddy serves the current directory at
|
|
|
|
[localhost:2015](http://localhost:2015). You can place a Caddyfile to configure
|
|
|
|
Caddy for serving your site.
|
2015-11-03 14:39:25 -05:00
|
|
|
|
2015-11-24 13:17:34 -05:00
|
|
|
Caddy accepts some flags from the command line. Run `caddy -h` to view the help
|
|
|
|
for flags. You can also pipe a Caddyfile into the caddy command.
|
2015-11-03 14:39:25 -05:00
|
|
|
|
2015-11-24 13:17:34 -05:00
|
|
|
**Running as root:** We advise against this; use setcap instead, like so:
|
|
|
|
`setcap cap_net_bind_service=+ep ./caddy` This will allow you to listen on
|
|
|
|
ports < 1024 like 80 and 443.
|
2015-11-03 14:39:25 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#### Docker Container
|
|
|
|
|
|
|
|
Caddy is available as a Docker container from any of these sources:
|
|
|
|
|
|
|
|
- [abiosoft/caddy](https://registry.hub.docker.com/u/abiosoft/caddy/)
|
|
|
|
- [darron/caddy](https://registry.hub.docker.com/u/darron/caddy/)
|
|
|
|
- [joshix/caddy](https://registry.hub.docker.com/u/joshix/caddy/)
|
|
|
|
- [jumanjiman/caddy](https://registry.hub.docker.com/u/jumanjiman/caddy/)
|
|
|
|
- [zenithar/nano-caddy](https://registry.hub.docker.com/u/zenithar/nano-caddy/)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#### 3rd-party dependencies
|
|
|
|
|
2015-11-24 13:17:34 -05:00
|
|
|
Although Caddy's binaries are completely static, Caddy relies on some excellent
|
|
|
|
libraries. [Godoc.org](https://godoc.org/github.com/mholt/caddy) shows the
|
|
|
|
packages that each Caddy package imports.
|
2015-11-03 14:39:25 -05:00
|
|
|
|
|
|
|
|
2015-04-27 10:53:08 -05:00
|
|
|
|
|
|
|
|
|
|
|
## Contributing
|
|
|
|
|
2015-11-24 13:17:34 -05:00
|
|
|
**[Join us on Slack](https://gophers.slack.com/messages/caddy/)** to chat with
|
|
|
|
other Caddy developers! ([Request an invite](http://bit.ly/go-slack-signup),
|
|
|
|
then join the #caddy channel.)
|
2015-05-06 17:39:58 -05:00
|
|
|
|
2015-11-24 13:17:34 -05:00
|
|
|
This project would not be what it is without your help. Please see the
|
|
|
|
[contributing guidelines](https://github.com/mholt/caddy/blob/master/CONTRIBUTING.md)
|
|
|
|
if you haven't already.
|
2015-04-27 10:53:08 -05:00
|
|
|
|
|
|
|
Thanks for making Caddy -- and the Web -- better!
|
|
|
|
|
2015-11-24 13:17:34 -05:00
|
|
|
Special thanks to
|
|
|
|
[![DigitalOcean](http://i.imgur.com/sfGr0eY.png)](https://www.digitalocean.com)
|
|
|
|
for hosting the Caddy project.
|
2015-08-04 19:32:27 -05:00
|
|
|
|
2015-04-27 10:53:08 -05:00
|
|
|
|
2015-01-13 17:45:08 -05:00
|
|
|
|
|
|
|
|
2015-04-27 10:53:08 -05:00
|
|
|
## About the project
|
2015-03-03 13:14:36 -05:00
|
|
|
|
2015-11-24 13:17:34 -05:00
|
|
|
Caddy was born out of the need for a "batteries-included" web server that runs
|
|
|
|
anywhere and doesn't have to take its configuration with it. Caddy took
|
2015-11-24 14:04:15 -05:00
|
|
|
inspiration from [spark](https://github.com/rif/spark),
|
|
|
|
[nginx](https://github.com/nginx/nginx), lighttpd,
|
|
|
|
[Websocketd]()https://github.com/joewalnes/websocketd)
|
|
|
|
and [Vagrant](https://www.vagrantup.com/),
|
|
|
|
which provides a pleasant mixture of features from each of them.
|
2015-03-03 13:14:36 -05:00
|
|
|
|
|
|
|
|
2015-04-27 10:53:08 -05:00
|
|
|
*Twitter: [@mholt6](https://twitter.com/mholt6)*
|