Heroku facilita el despliegue de aplicaciones. Es una plataforma perfecta para pequeñas aplicaciones web de mediano tamaño que están dispuestas a sacrificar un poco de flexibilidad en infraestructura, para ganar un entorno bastante indoloro para desplegar y mantener las aplicaciones web.
Elegí desplegar nuestra aplicación web en Heroku en beneficio de este tutorial porque en mi experiencia, esta ha sido la forma más rápida de tener una aplicación web en marcha y funcionando en poco tiempo. Recuerda que el objetivo de este tutorial es cómo construir aplicaciones web en Go y no quedar atrapados en toda la distracción del aprovisionamiento, configuración, implementación y mantenimiento de las máquinas que ejecutan nuestro código Go.
Si aún no tienes una cuenta Heroku, crea una en id.heroku.com/signup. Es rápido, fácil y gratuito.
La gestión y configuración de aplicaciones se realiza a través del cinturón de herramientas de Heroku, que es una herramienta de línea de órdenes libre mantenida por Heroku. La usaremos para crear nuestra aplicación en Heroku. Lo puedes conseguir desde toolbelt.heroku.com.
Para asegurarte de que la aplicación del capítulo anterior trabajará en
Heroku, tendremos que hacer algunos cambios. Heroku nos da una variable
de entorno llamada PORT
y espera que nuestra aplicación web se vincule a
ella. Empezaremos importando el paquete "os
" para que podamos enganchar
esa variable de entorno PORT
:
import (
"net/http"
"os"
"github.com/russross/blackfriday"
)
A continuación, tenemos que enganchar la variable de entorno, comprobando
si se ha definido, y si es que deberíamos vincurlanos a ella en lugar de a
nuestro puerto definido en el código (8080
).
puerto := os.getenv("PORT")
if puerto == "" {
puerto = "8080"
}
Por último, queremos vincular ese puerto en nuestra llamada a
http.ListenAndServe
:
http.ListenAndServe(":" + puerto, nil)
El código final debe ser similar a este:
package main
import (
"net/http"
"os"
"github.com/russross/blackfriday"
)
func main () {
puerto: = os.getenv("PORT")
if puerto == "" {
puerto = "8080"
}
http.HandleFunc("/markdown" , GeneraDesdeMarkdown)
http.Handle("/", http.FileServer(http.Dir("publico")))
http.ListenAndServe(":" + puerto, nil)
}
func GeneraDesdeMarkdown (rw http.ResponseWriter, r *http.Request) {
html := blackfriday.MarkdownCommon([]byte (r.FormValue("cuerpo")))
rw.Write(html)
}
Necesitamos un par de pequeños ficheros de configuración para decirle a
Heroku cómo debe ejecutar nuestra aplicación. El primero de ellos es
Procfile
, el cual nos permite definir qué procesos deben funcionar para
nuestra aplicación. De manera predeterminada, Go nombrará el ejecutable
después del directorio que contiene tu paquete principal. Por ejemplo,
si mi aplicación web vive en
GOPATH/github.com/codegangsta/bwag/despliegue
, mi Procfile
se ve así:
web: despliegue
Específicamente para ejecutar aplicaciones Go, también necesitamos
especificar un fichero .godir
para decirle a Heroku cual carpeta de
hecho es el directorio base de nuestro paquete.
despliegue
Una vez que todas estas cosas están en su lugar, Heroku facilita la implementación.
Inicia el proyecto como un repositorio Git:
git init
git add -A
git commit -m " inicial"
Crea tu aplicación Heroku (especificando el paquete de construcción Go):
heroku create -b https://github.com/kr/heroku-buildpack-go.git
Súbelo a Heroku y ¡ve cómo se despliega tu aplicación!
git push heroku master
Ve tu aplicación en todo su esplendor en tu navegador:
heroku open