https://github.com/gin-gonic/autotls
Support Let's Encrypt for a Go server application.
https://github.com/gin-gonic/autotls
golang letsencrypt tls
Last synced: 9 months ago
JSON representation
Support Let's Encrypt for a Go server application.
- Host: GitHub
- URL: https://github.com/gin-gonic/autotls
- Owner: gin-gonic
- License: mit
- Created: 2017-04-16T08:58:27.000Z (almost 9 years ago)
- Default Branch: master
- Last Pushed: 2025-04-07T04:26:38.000Z (10 months ago)
- Last Synced: 2025-04-11T19:56:02.160Z (10 months ago)
- Topics: golang, letsencrypt, tls
- Language: Go
- Size: 80.1 KB
- Stars: 393
- Watchers: 12
- Forks: 40
- Open Issues: 11
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# autotls
[](https://github.com/gin-gonic/autotls/actions/workflows/go.yml)
[](https://goreportcard.com/report/github.com/gin-gonic/autotls)
[](https://pkg.go.dev/github.com/gin-gonic/autotls)
Support Let's Encrypt for a Go server application.
## example
example for 1-line LetsEncrypt HTTPS servers.
```go
package main
import (
"log"
"net/http"
"github.com/gin-gonic/autotls"
"github.com/gin-gonic/gin"
)
func main() {
r := gin.Default()
// Ping handler
r.GET("/ping", func(c *gin.Context) {
c.String(http.StatusOK, "pong")
})
log.Fatal(autotls.Run(r, "example1.com", "example2.com"))
}
```
example for custom autocert manager.
```go
package main
import (
"log"
"net/http"
"github.com/gin-gonic/autotls"
"github.com/gin-gonic/gin"
"golang.org/x/crypto/acme/autocert"
)
func main() {
r := gin.Default()
// Ping handler
r.GET("/ping", func(c *gin.Context) {
c.String(http.StatusOK, "pong")
})
m := autocert.Manager{
Prompt: autocert.AcceptTOS,
HostPolicy: autocert.HostWhitelist("example1.com", "example2.com"),
Cache: autocert.DirCache("/var/www/.cache"),
}
log.Fatal(autotls.RunWithManager(r, &m))
}
```
example usage for graceful shutdown with custom context.
```go
package main
import (
"context"
"log"
"net/http"
"os/signal"
"syscall"
"github.com/gin-gonic/autotls"
"github.com/gin-gonic/gin"
)
func main() {
// Create context that listens for the interrupt signal from the OS.
ctx, stop := signal.NotifyContext(
context.Background(),
syscall.SIGINT,
syscall.SIGTERM,
)
defer stop()
r := gin.Default()
// Ping handler
r.GET("/ping", func(c *gin.Context) {
c.String(http.StatusOK, "pong")
})
log.Fatal(autotls.RunWithContext(ctx, r, "example1.com", "example2.com"))
}
```