Deploying Go applications¶
Overview¶
This document is a hands-on guide to deploying a simple Go web application in tsuru.
Creating the app¶
To create an app, you use the command app-create:
$ tsuru app-create <app-name> <app-platform>
For Go, the platform name is go
! Let’s be over creative and develop a hello
world tutorial-app, let’s call it “helloworld”:
$ tsuru app-create helloworld go
To list all available platforms, use the command platform-list.
You can see all your applications using the command app-list:
$ tsuru app-list
+-------------+-------------------------+--------------------------------+
| Application | Units State Summary | Address |
+-------------+-------------------------+--------------------------------+
| helloworld | 0 of 0 units in-service | helloworld.192.168.50.4.nip.io |
+-------------+-------------------------+--------------------------------+
Application code¶
A simple web application in Go main.go:
package main
import (
"fmt"
"net/http"
"os"
)
func main() {
http.HandleFunc("/", hello)
fmt.Println("listening...")
err := http.ListenAndServe(":" + os.Getenv("PORT"), nil)
if err != nil {
panic(err)
}
}
func hello(res http.ResponseWriter, req *http.Request) {
fmt.Fprintln(res, "hello, world!")
}
Git deployment¶
When you create a new app, tsuru will display the Git remote that you should use. You can always get it using the command app-info:
$ tsuru app-info --app helloworld
Application: helloworld
Repository: git@192.168.50.4.nip.io:helloworld.git
Platform: go
Teams: admin
Address: helloworld.192.168.50.4.nip.io
Owner: admin@example.com
Team owner: admin
Deploys: 0
Pool: theonepool
App Plan:
+---------------+--------+------+-----------+---------+
| Name | Memory | Swap | Cpu Share | Default |
+---------------+--------+------+-----------+---------+
| autogenerated | 0 MB | 0 MB | 100 | false |
+---------------+--------+------+-----------+---------+
The git remote will be used to deploy your application using git. You can just push to tsuru remote and your project will be deployed:
$ git push git@192.168.50.4.nip.io:helloworld.git master
Counting objects: 3, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 430 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
remote: tar: Removing leading `/' from member names
remote: /
remote:
remote: ---- Building application image ----
remote: ---> Sending image to repository (5.57MB)
remote: ---> Cleaning up
remote:
remote: ---- Starting 1 new unit ----
remote: ---> Started unit b21298a64e...
remote:
remote: ---- Binding and checking 1 new units ----
remote: ---> Bound and checked unit b21298a64e
remote:
remote: ---- Adding routes to 1 new units ----
remote: ---> Added route to unit b21298a64e
remote:
remote: OK
To git@192.168.50.4.nip.io:helloworld.git
* [new branch] master -> master
If you get a “Permission denied (publickey).”, make sure you’re member of a team and have a public key added to tsuru. To add a key, use the command key-add:
$ tsuru key-add mykey ~/.ssh/id_rsa.pub
You can use git remote add
to avoid typing the entire remote url every time
you want to push:
$ git remote add tsuru git@192.168.50.4.nip.io:helloworld.git
Then you can run:
$ git push tsuru master
Everything up-to-date
And you will be also able to omit the --app
flag from now on:
$ tsuru app-info
Application: helloworld
Repository: git@192.168.50.4.nip.io:helloworld.git
Platform: go
Teams: admin
Address: helloworld.192.168.50.4.nip.io
Owner: admin@example.com
Team owner: admin
Deploys: 1
Pool: theonepool
Units: 1
+------------+---------+
| Unit | State |
+------------+---------+
| b21298a64e | started |
+------------+---------+
App Plan:
+---------------+--------+------+-----------+---------+
| Name | Memory | Swap | Cpu Share | Default |
+---------------+--------+------+-----------+---------+
| autogenerated | 0 MB | 0 MB | 100 | false |
+---------------+--------+------+-----------+---------+
Running the application¶
tsuru will compile and run the application automatically, but it’s possible to customize how tsuru compiles and runs the application. For more details, check the README of the Go platform: https://github.com/tsuru/basebuilder/blob/master/go/README.md.
Now that the app is deployed, you can access it from your browser, getting the
IP or host listed in app-list
and opening it. For example,
in the list below:
$ tsuru app-list
+-------------+-------------------------+--------------------------------+
| Application | Units State Summary | Address |
+-------------+-------------------------+--------------------------------+
| helloworld | 1 of 1 units in-service | helloworld.192.168.50.4.nip.io |
+-------------+-------------------------+--------------------------------+
It’s done! Now we have a simple go project deployed on tsuru.
Now we can access your app in the URL displayed in app-list (“helloworld.192.168.50.4.nip.io” in this case).
Going further¶
For more information, you can dig into tsuru docs, or read complete instructions of use for the tsuru command.