Initial Docker container support.
The container hosting is at https://quay.io/repository/letsencrypt/boulder .
This commit is contained in:
parent
feba209bcb
commit
b662a4c8d0
|
|
@ -0,0 +1,27 @@
|
|||
FROM golang:1.4
|
||||
|
||||
MAINTAINER J.C. Jones "jjones@mozilla.com"
|
||||
|
||||
# Boulder exposes its web application at port TCP 4000
|
||||
EXPOSE 4000
|
||||
|
||||
# Load the dependencies
|
||||
RUN go-wrapper download github.com/bifurcation/gose && \
|
||||
go-wrapper download github.com/codegangsta/cli && \
|
||||
go-wrapper download github.com/streadway/amqp
|
||||
|
||||
# Copy in the Boulder sources
|
||||
RUN mkdir -p /go/src/github.com/letsencrypt/boulder
|
||||
COPY . /go/src/github.com/letsencrypt/boulder
|
||||
|
||||
# Build Boulder
|
||||
RUN cd /go/src/github.com/letsencrypt/boulder && \
|
||||
go build && \
|
||||
cd boulder-start && \
|
||||
go build
|
||||
|
||||
# Simplify run execution
|
||||
WORKDIR /go/src/github.com/letsencrypt/boulder/boulder-start
|
||||
|
||||
# Default run configuration in Monolithic mode without AMQP
|
||||
CMD ["./boulder-start", "monolithic"]
|
||||
17
README.md
17
README.md
|
|
@ -3,7 +3,24 @@ Boulder - An ACME CA
|
|||
|
||||
This is an initial implementation of an ACME-based CA. The [ACME protocol](https://github.com/letsencrypt/acme-spec/) allows the CA to automatically verify that an applicant for a certificate actually controls an identifier, and allows domain holders to issue and revoke certificates for their domains.
|
||||
|
||||
|
||||
[](https://travis-ci.org/letsencrypt/boulder)
|
||||
[](https://quay.io/repository/letsencrypt/boulder)
|
||||
|
||||
Docker
|
||||
------
|
||||
|
||||
Boulder is available as a [Docker image from Quay.io](https://quay.io/repository/letsencrypt/boulder). You can load and run it using in monolithic mode (without AMQP) using the default run command:
|
||||
|
||||
```
|
||||
docker run -p 4000:4000 quay.io/letsencrypt/boulder
|
||||
```
|
||||
|
||||
To run a single module, specifying the AMQP server, you might use something more like:
|
||||
|
||||
```
|
||||
docker run -p 4000:4000 quay.io/letsencrypt/boulder ./boulder-start --amqp 'amqp://guest:guest@amqp-server:15672' wfe
|
||||
```
|
||||
|
||||
Quickstart
|
||||
----------
|
||||
|
|
|
|||
|
|
@ -47,8 +47,15 @@ func main() {
|
|||
app.Usage = "Command-line utility to start Boulder's servers in stand-alone mode"
|
||||
app.Version = "0.0.0"
|
||||
|
||||
// Server URL hard-coded for now
|
||||
amqpServerURL := "amqp://guest:guest@localhost:5672"
|
||||
|
||||
// Specify AMQP Server
|
||||
app.Flags = []cli.Flag{
|
||||
cli.StringFlag{
|
||||
Name: "amqp",
|
||||
Value: "amqp://guest:guest@localhost:5672",
|
||||
Usage: "AMQP Broker String",
|
||||
},
|
||||
}
|
||||
|
||||
// One command per element of the system
|
||||
// * WebFrontEnd
|
||||
|
|
@ -102,7 +109,7 @@ func main() {
|
|||
Usage: "Start the CA in monolithic mode, using AMQP",
|
||||
Action: func(c *cli.Context) {
|
||||
// Create an AMQP channel
|
||||
ch := amqpChannel(amqpServerURL)
|
||||
ch := amqpChannel(c.GlobalString("amqp"))
|
||||
|
||||
// Create AMQP-RPC clients for CA, VA, RA, SA
|
||||
cac, err := boulder.NewCertificateAuthorityClient("CA.client", "CA.server", ch)
|
||||
|
|
@ -157,7 +164,7 @@ func main() {
|
|||
Usage: "Start the WebFrontEnd",
|
||||
Action: func(c *cli.Context) {
|
||||
// Create necessary clients
|
||||
ch := amqpChannel(amqpServerURL)
|
||||
ch := amqpChannel(c.GlobalString("amqp"))
|
||||
|
||||
rac, err := boulder.NewRegistrationAuthorityClient("RA.client", "RA.server", ch)
|
||||
failOnError(err, "Unable to create RA client")
|
||||
|
|
@ -189,7 +196,7 @@ func main() {
|
|||
Name: "ca",
|
||||
Usage: "Start the CertificateAuthority",
|
||||
Action: func(c *cli.Context) {
|
||||
ch := amqpChannel(amqpServerURL)
|
||||
ch := amqpChannel(c.GlobalString("amqp"))
|
||||
|
||||
cas, err := boulder.NewCertificateAuthorityServer("CA.server", ch)
|
||||
failOnError(err, "Unable to create CA server")
|
||||
|
|
@ -200,7 +207,7 @@ func main() {
|
|||
Name: "sa",
|
||||
Usage: "Start the StorageAuthority",
|
||||
Action: func(c *cli.Context) {
|
||||
ch := amqpChannel(amqpServerURL)
|
||||
ch := amqpChannel(c.GlobalString("amqp"))
|
||||
|
||||
sas := boulder.NewStorageAuthorityServer("SA.server", ch)
|
||||
runForever(sas)
|
||||
|
|
@ -210,7 +217,7 @@ func main() {
|
|||
Name: "va",
|
||||
Usage: "Start the ValidationAuthority",
|
||||
Action: func(c *cli.Context) {
|
||||
ch := amqpChannel(amqpServerURL)
|
||||
ch := amqpChannel(c.GlobalString("amqp"))
|
||||
|
||||
rac, err := boulder.NewRegistrationAuthorityClient("RA.client", "RA.server", ch)
|
||||
failOnError(err, "Unable to create RA client")
|
||||
|
|
@ -225,7 +232,7 @@ func main() {
|
|||
Usage: "Start the RegistrationAuthority",
|
||||
Action: func(c *cli.Context) {
|
||||
// TODO
|
||||
ch := amqpChannel(amqpServerURL)
|
||||
ch := amqpChannel(c.GlobalString("amqp"))
|
||||
|
||||
vac, err := boulder.NewValidationAuthorityClient("VA.client", "VA.server", ch)
|
||||
failOnError(err, "Unable to create VA client")
|
||||
|
|
|
|||
Loading…
Reference in New Issue