.. Copyright 2016 tsuru authors. All rights reserved. Use of this source code is governed by a BSD-style license that can be found in the LICENSE file. ++++++++++++++++++++++++++++++++++ Deploying Go applications in tsuru ++++++++++++++++++++++++++++++++++ Overview ======== This document is a hands-on guide to deploying a simple Go web application in tsuru. Creating the app within tsuru ============================= To create an app, you use the command `app-create`: .. highlight:: bash :: $ tsuru app-create For Go, the platform name is ``go``! Let's be over creative and develop a hello world tutorial-app, let's call it "helloworld": .. highlight:: 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`: .. highlight:: bash :: $ 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`: .. highlight:: 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`: .. highlight:: 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: .. highlight:: 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`: .. highlight:: 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: .. highlight:: bash :: $ git remote add tsuru git@192.168.50.4.nip.io:helloworld.git Then you can run: .. highlight:: bash :: $ git push tsuru master Everything up-to-date And you will be also able to omit the ``--app`` flag from now on: .. highlight:: 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 | +---------------+--------+------+-----------+--------+---------+ 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 `_.