Zico Zico - 2 months ago 11x
Git Question

Deploy and build my go app on my server

I'm totaly new to go (it looks fabulous btw).

So I want to build a "web-"app in go with the revel framework. The problem is I code on my mac (os : darwin, arch : amd64) and I want to deploy the app on my server (os : ubuntu 12.04, arch : amd64).
I "go get" revel in local (so

it's a: Mach-O 64-bit executable) which is non executable on my server.

For now when I push (with git), I've got a post-receive script to build the app (
revel build myapp /path/to/deploy
). Before I've tried to "go get" revel on my server, but it failed too.

It's not working, I could understand why, but I don't have any idea how to get a workable workflow :

  1. Code on my mac
  2. Push my code (with git)
  3. Build the app on the server

PS: I've read http://blog.gopheracademy.com/auto-deploy-revel-site, http://revel.github.io/manual/deployment.html as well as articles about cross-compilation)


I'm not sure if this helps.. but here goes..

Your exact situation is what I am currently doing daily whilst I develop my first proper web app in Go. I develop on both a Windows laptop (whilst bored at work.. I'm a .NET developer at my workplace!) and my Mac at home. I then deploy it to an Ubuntu server hosted on Digital Ocean.

My workflow is:

  • Make any changes.
  • Commit to repository (BitBucket)
  • Pull from repo (wherever that may be - e.g, on my Ubuntu server)
  • go build the code in place on the server
  • go get any libraries that it complains about which I don't have on the server (for example, gorilla/mux wasn't on the server today so I just ran that)
  • go build again (if applicable)

..then just run it on the server.

When starting with this workflow (which I am still trying to perfect with bash scripts, etc ...) I found that a consistent GOPATH across environments really helps.

For example, my GOPATH on each machine is:

  • Windows: C:\GOPATH
  • Mac: ~/go-code/
  • Linux: /home/simon/go-code/

Each of them have exactly the same structure:

    • src
      • github.com/
        • gorilla/
        • revel/
        • etc.../
      • Simon
        • WebApp1 <--- git repo
          • .git
          • src
        • WebAPp2
        • WebApp3

...etc. This greatly simplifies the entire thing and is what allows me to develop across 3 environments seamlessly.

I am still getting used to Go and this setup (being a .NET developer at my core) - but it seems to be doing the trick for now.