Deployment
Introduction
There are some important details to think about before deploying your Goyave application to production. We are going to cover them in this section of the guide, and make sure your applications are deployed properly.
Application configuration
- Loading the configuration:
- If you are using configuration automatic loading, make sure to deploy your application with a
config.production.json
config file containing the correct values for your production environment and set theGOYAVE_ENV
environment variable toproduction
. - If you are loading your configuration manually, make sure the file that should be loaded is included next to your executable.
- If you are using an
embed
, make sure you are adding the necessary build flags to yougo build
command.
- If you are using configuration automatic loading, make sure to deploy your application with a
- Ensure that the
app.environment
entry isproduction
. - The
server.host
entry should be0.0.0.0
if you want to open access to your service from anywhere. If you're using Apache or Nginx as a proxy on the same machine, keep it at127.0.0.1
so the server will only be accessible through the proxy. - If you are using a proxy, update the
server.proxy
section so generates URLs and redirects will aim at the proxy rather than your application. - Change the
server.domain
entry to your domain name, if you use one. - Update the
server.port
. server.debug
must be set dofalse
so your application outputs JSON structured logs rather than human-readable logs and error messages won't be added to responses.- Change your database connection credentials.
Build
Of course, don't run your application with go run
in production. Build your application using go build
and deploy the executable, alongside the config files and resources directory.
The following Dockerfile is an example of a goyave application called docker-goyave
:
Dockerfile
FROM golang:alpine as builder
WORKDIR /app
COPY . .
# Add "-tags production" if you are using embedded configuration
RUN go build -ldflags "-w -s"
FROM alpine:latest
WORKDIR /app
COPY --from=builder /app/docker-goyave ./docker-goyave
# Not needed if you are using embed resources
COPY resources /app/resources
# Not needed if you are using embed configuration
COPY config.production.json ./config.production.json
RUN useradd -r -U go-exec -M -d /app -s /bin/false
RUN chown -R go-exec /app
USER go-exec
EXPOSE 80
ENV GOYAVE_ENV=production
ENTRYPOINT [ "./docker-goyave" ]