Deploy Rookout on a Go container
This short tutorial will walk you through the perfect Rookout deployment for containerized Go applications in four quick steps.
Get Your Application
First things first, choose an application. If you don't have one readily available, use our sample application.
Start by:
git clone https://github.com/Rookout/go-tutorial-2022
cd go-tutorial-2022
1. Add the GoSDK Package
Add The Rookout package:
go get -d github.com/Rookout/GoSDK
2. Start Rookout
Import and start the package to connect to your Rookout account (if you haven't signed up, do that here).
The best place to do that is at the beginning of your main function (in our case - main.go
):
import (
// ...
rookout "github.com/Rookout/GoSDK"
// ...
)
func main() {
rookout.Start(rookout.RookOptions{
Token: "[Your Rookout Token]",
Labels: map[string]string{"env": "dev"},
})
// ...
}
Configuration is where you can get fancy. You have got additional options up your sleeve:
- Move options from environment variables to secret or configuration managers.
- If you are using a Rookout Controller, set up the remote host and port configuration.
- Dig deeper into other options available right here.
3. Build the Application
Make sure you have the CGO build dependencies:
- Debian
- Alpine
- Photon
apt update && apt install -y libffi-dev zlib1g-dev libedit-dev libc++-11-dev libc++abi-11-dev
apk add —-no-cache gcc musl-dev zlib-static build-base
tdnf install -y git gcc glibc-devel binutils zlib-devel openssl-devel linux-api-headers
Add the following flags to your build command:
- General
- Alpine
go build -gcflags="all=-dwarflocationlists=true"
go build -gcflags="all=-dwarflocationlists=true" -tags=alpine
4. Embed Source Information
Rookout offers the smoothest debugging experience by fetching up-to-date source code for each server.
Set this up for containerized applications by adding a handful of files from your .git
folder to the container image.
Edit (or add) your .dockerignore
file and adapt the traditional .git
exclude:
# Keep ignoring .git
.git
# Allow specific files with !
!.git/HEAD
!.git/config
!.git/refs
Add a final COPY
command to the Dockerfile
.
COPY .git /.git
Note: in multi-stage builds like ours, make this change in the final stage.
Test
One second! if you are not using our demo app, please commit and push your changes to a new branch.
Build and run your Docker image:
docker build . -t rookout-go-todo
docker run -it -p 8080:8080 rookout-go-todo
As your Go application spins up, search for this output at the top:
Interact with your application at http://localhost:8080
and use Rookout to debug it on the fly!
Questions?
- Check out this reference implementation.
- Dig into the full Go SDK docs.
- Reach out to us via chat or email.