2016-06-22 01:28:38 +08:00
< a href = "https://caddyserver.com" > < img src = "https://caddyserver.com/resources/images/caddy-lower.png" alt = "Caddy" width = "350" > < / a >
2015-01-14 04:24:43 +08:00
2016-06-22 01:28:38 +08:00
[![community ](https://img.shields.io/badge/community-forum-ff69b4.svg?style=flat-square )](https://forum.caddyserver.com) [![twitter ](https://img.shields.io/badge/twitter-@caddyserver-55acee.svg?style=flat-square )](https://twitter.com/caddyserver) [![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)
2016-10-05 03:11:09 +08:00
[![Go Report Card ](https://goreportcard.com/badge/github.com/mholt/caddy?style=flat-square )](https://goreportcard.com/report/mholt/caddy)
2015-01-14 04:24:43 +08:00
2016-06-22 01:28:38 +08:00
Caddy is a general-purpose web server for Windows, Mac, Linux, BSD, and
[Android ](https://github.com/mholt/caddy/wiki/Running-Caddy-on-Android ). It is
2016-06-22 09:21:45 +08:00
a capable but easier alternative to other popular web servers.
2015-01-14 04:24:43 +08:00
2016-06-27 02:40:13 +08:00
[Releases ](https://github.com/mholt/caddy/releases ) ·
[User Guide ](https://caddyserver.com/docs ) ·
2016-06-22 01:28:38 +08:00
[Community ](https://forum.caddyserver.com )
2015-01-22 10:16:31 +08:00
2015-01-14 04:24:43 +08:00
2016-06-22 01:28:38 +08:00
## Menu
2015-01-22 10:16:31 +08:00
2016-06-22 01:28:38 +08:00
- [Features ](#features )
2015-04-27 23:53:08 +08:00
- [Quick Start ](#quick-start )
2015-11-04 03:39:25 +08:00
- [Running from Source ](#running-from-source )
2016-06-22 01:28:38 +08:00
- [Running in Production ](#running-in-production )
2015-04-27 23:53:08 +08:00
- [Contributing ](#contributing )
- [About the Project ](#about-the-project )
2016-06-22 01:28:38 +08:00
## Features
2015-04-27 23:53:08 +08:00
2016-06-22 01:28:38 +08:00
- **Easy configuration** with Caddyfile
- **Automatic HTTPS** via [Let's Encrypt ](https://letsencrypt.org ); Caddy
obtains and manages all cryptographic assets for you
- **HTTP/2** enabled by default (powered by Go standard library)
- **Virtual hosting** for hundreds of sites per server instance, including TLS
SNI
- Experimental **QUIC support** for those that like speed
- TLS session ticket **key rotation** for more secure connections
- **Brilliant extensibility** so Caddy can be customized for your needs
- **Runs anywhere** with **no external dependencies** (not even libc)
2015-04-27 23:53:08 +08:00
2016-06-22 01:28:38 +08:00
## Quick Start
2015-04-27 23:53:08 +08:00
2016-06-22 01:28:38 +08:00
Caddy binaries have no dependencies and are available for every platform.
Install Caddy any one of these ways:
2015-05-01 22:55:34 +08:00
2016-06-22 09:21:45 +08:00
- **[Download page](https://caddyserver.com/download)** allows you to
customize your build in the browser
- **[Latest release](https://github.com/mholt/caddy/releases/latest)** for
pre-built binaries
- **curl [getcaddy.com ](https://getcaddy.com )** for auto install:
2016-06-22 01:28:38 +08:00
`curl https://getcaddy.com | bash`
2015-01-14 04:24:43 +08:00
2016-06-22 01:28:38 +08:00
Once `caddy` is in your PATH, you can `cd` to your website's folder and run
2016-06-27 02:40:13 +08:00
`caddy` to serve it. By default, Caddy serves the current directory at
2016-06-22 01:28:38 +08:00
[localhost:2015 ](http://localhost:2015 ).
2015-01-14 04:24:43 +08:00
2016-06-22 01:28:38 +08:00
To customize how your site is served, create a file named Caddyfile by your
site and paste this into it:
2015-01-14 04:24:43 +08:00
2016-06-22 01:28:38 +08:00
```plain
2015-04-27 23:53:08 +08:00
localhost
2015-01-14 04:24:43 +08:00
gzip
2015-04-27 23:53:08 +08:00
browse
websocket /echo cat
2016-06-22 01:28:38 +08:00
ext .html
log /var/log/access.log
proxy /api 127.0.0.1:7005
2015-01-14 04:24:43 +08:00
header /api Access-Control-Allow-Origin *
```
2016-06-22 01:28:38 +08:00
When you run `caddy` in that directory, it will automatically find and use
that Caddyfile to configure itself.
2015-04-27 23:53:08 +08:00
2016-06-27 02:40:13 +08:00
This simple file enables compression, allows directory browsing (for folders
2016-06-22 01:28:38 +08:00
without an index file), hosts a WebSocket echo server at /echo, serves clean
URLs, logs requests to access.log, proxies all API requests to a backend on
port 7005, and adds the coveted `Access-Control-Allow-Origin: *` header for
all responses from the API.
2015-04-27 23:53:08 +08:00
Wow! Caddy can do a lot with just a few lines.
2015-01-14 04:24:43 +08:00
2016-06-22 01:28:38 +08:00
To host multiple sites and do more with the Caddyfile, please see the
[Caddyfile documentation ](https://caddyserver.com/docs/caddyfile ).
2015-11-04 03:39:25 +08:00
2016-07-19 04:32:12 +08:00
Note that production sites are served over
2016-06-22 01:28:38 +08:00
[HTTPS by default ](https://caddyserver.com/docs/automatic-https ).
2015-04-27 23:53:08 +08:00
2016-06-22 01:28:38 +08:00
Caddy has a command line interface. Run `caddy -h` to view basic help or see
the [CLI documentation ](https://caddyserver.com/docs/cli ) for details.
2015-04-27 23:53:08 +08:00
2016-06-22 01:28:38 +08:00
**Running as root:** We advise against this. You can still listen on ports
< 1024 using setcap like so: `sudo setcap cap_net_bind_service=+ep ./caddy`
2015-04-27 23:53:08 +08:00
2015-11-04 03:39:25 +08:00
## Running from Source
2016-10-25 23:28:53 +08:00
Note: You will need ** [Go 1.7 ](https://golang.org/dl/ )** or newer.
2015-11-04 03:39:25 +08:00
2016-06-27 02:40:13 +08:00
1. `go get github.com/mholt/caddy/caddy`
2015-11-04 03:39:25 +08:00
2. `cd` into your website's directory
2016-08-24 05:47:23 +08:00
3. Run `caddy` (assuming `$GOPATH/bin` is in your `$PATH` )
2015-11-04 03:39:25 +08:00
2016-06-22 01:28:38 +08:00
Caddy's `main()` is in the caddy subfolder. To recompile Caddy, use
`build.bash` found in that folder.
2015-11-04 03:39:25 +08:00
2016-06-22 01:28:38 +08:00
## Running in Production
2015-11-04 03:39:25 +08:00
2016-06-22 01:28:38 +08:00
The Caddy project does not officially maintain any system-specific
integrations, but your download file includes
[unofficial resources ](https://github.com/mholt/caddy/tree/master/dist/init )
contributed by the community that you may find helpful for running Caddy in
production.
2015-11-04 03:39:25 +08:00
2016-06-22 01:28:38 +08:00
How you choose to run Caddy is up to you. Many users are satisfied with
`nohup caddy &` . Others use `screen` . Users who need Caddy to come back up
after reboots either do so in the script that caused the reboot, add a command
to an init script, or configure a service with their OS.
2015-11-04 03:39:25 +08:00
2015-04-27 23:53:08 +08:00
## Contributing
2016-06-22 01:28:38 +08:00
**[Join our community](https://forum.caddyserver.com) where you can chat with
other Caddy users and developers!**
2015-05-07 06:39:58 +08:00
2016-06-22 01:28:38 +08:00
Please see our [contributing guidelines ](https://github.com/mholt/caddy/blob/master/CONTRIBUTING.md )
and check out the [developer wiki ](https://github.com/mholt/caddy/wiki ).
2016-05-27 23:15:06 +08:00
2016-06-22 01:28:38 +08:00
We use GitHub issues and pull requests only for discussing bug reports and
the development of specific changes. We welcome all other topics on the
[forum ](https://forum.caddyserver.com )!
2015-04-27 23:53:08 +08:00
2016-07-19 21:41:54 +08:00
If you want to contribute to the documentation, please submit pull requests to [caddyserver/caddyserver.com ](https://github.com/caddyserver/caddyserver.com ).
2015-04-27 23:53:08 +08:00
Thanks for making Caddy -- and the Web -- better!
2015-11-25 03:16:05 +08:00
Special thanks to
2016-05-15 20:25:59 +08:00
[![DigitalOcean ](https://i.imgur.com/sfGr0eY.png )](https://www.digitalocean.com)
2015-11-25 02:17:34 +08:00
for hosting the Caddy project.
2015-08-05 08:32:27 +08:00
2015-04-27 23:53:08 +08:00
2015-01-14 06:45:08 +08:00
2016-06-22 01:28:38 +08:00
## About the Project
2015-03-04 02:14:36 +08:00
2015-11-25 03:16:05 +08: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
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/ ),
2015-11-25 03:04:15 +08:00
which provides a pleasant mixture of features from each of them.
2015-03-04 02:14:36 +08:00
2016-06-22 01:28:38 +08:00
**The name "Caddy":** The name of the software is "Caddy", not "Caddy Server"
or "CaddyServer". Please call it "Caddy" or, if you wish to clarify, "the
Caddy web server". See [brand guidelines ](https://caddyserver.com/brand ).
2015-03-04 02:14:36 +08:00
2016-06-22 01:28:38 +08:00
*Author on Twitter: [@mholt6 ](https://twitter.com/mholt6 )*