This document is a hands-on guide to deploying a simple Go web application in tsuru.
To create an app, you use the command `app-create`:
bash
$ 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":
bash
$ 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`:
bash
$ tsuru app-list
+-------------+-------------------------+--------------------------------+
| Application | Units State Summary | Address |
+-------------+-------------------------+--------------------------------+
| helloworld | 0 of 0 units in-service | helloworld.192.168.50.4.nip.io |
+-------------+-------------------------+--------------------------------+
A simple web application in Go `main.go`:
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!")
}
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`:
bash
$ 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 | Router | 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:
console
$ 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`:
bash
$ 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:
bash
$ git remote add tsuru git@192.168.50.4.nip.io:helloworld.git
Then you can run:
bash
$ git push tsuru master
Everything up-to-date
And you will be also able to omit the --app
flag from now on:
bash
$ 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 | Router | Default |
+---------------+--------+------+-----------+--------+---------+
| autogenerated | 0 MB | 0 MB | 100 | | false |
+---------------+--------+------+-----------+--------+---------+
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).
For more information, you can dig into tsuru docs, or read complete instructions of use for the tsuru command.