Openshift, Go: Fazendo o deploy de uma aplicação Web

Esse post tem como objetivo mostrar como é feito o deploy deu ma aplicação em Go dentro do Openshift.

A primeira coisa que vou explicar é um framework chamado Beego, que te auxilia no desenvolvimento de aplicações Web em Go.

Antes de iniciar o desenvolvimento de uma aplicação utilizando o Beego, é necessário fazer a instalação de 2 pré requisitos, sendo eles o próprio framework e uma outra chamada Bee, que serve para criar a estrutura inicial da sua aplicação Go.

Estou considerando que você já tem o Go instalado na sua máquina, então para fazer a instalação desses dois itens é necessário digitar os comandos abaixo:

go get -u github.com/astaxie/beego
go get -u github.com/beego/bee

Um ponto importante é que ao instalar o Go na sua máquina, nem sempre é mapeada a variavel GOPATH no seu ambiente, então é importante definir onde o binário Bee por exemplo pode ser encontrado, para isso digite o comando abaixo:

echo 'export PATH="$GOPATH/bin:$PATH"' >> ~/.profile
source ~/.profile

Então entre em:

cd $GOPATH/src
ls

Agora que você já tem o ambiente pronto, crie um novo projeto chamado hello.

bee new blog

Veja que uma estrutura inicial de diretórios já foi criada, já é possível testar o framework utilizando o comando abaixo:

bee run blog

Ao executar esse comando será iniciado um servidor web na porta 8080, que você pode acessar por:

http://localhost:8080

Será aberta uma página parecida com essa:

Será tudo ocorreu bem podemos criar nossa página, para isso edite o arquivo main.go e deixe-o da seguinte forma:

package main
 
import (
	"github.com/astaxie/beego"
)
 
type MainController struct {
	beego.Controller
}
 
func (this *MainController) Get(){
	this.Ctx.WriteString("<h1>Hello Go!</h1>")
}
 
func main() {
	beego.Router("/", &MainController{})
	beego.Run()
}

Salve o arquivo e faça a compilação.

go build -o blog main.go

Ao rodar a compilação será gerado um executável chamado blog, execute da seguinte forma:

./blog

Acesse http://localhost:8080 .

Pronto! Temos o nosso application pronto.

Agora vamos fazer o deploy dessa aplicação no Openshift.

Primeiro vamos criar um arquivo de template, crie um arquivo chamado beego.json com o conteúdo abaixo:

{
  "kind": "Template",
  "apiVersion": "v1",
  "metadata": {
    "name": "beego-openshift",
    "annotations": {
      "description": "An example Beego (http://beego.me/) application written in Golang",
      "tags": "quickstart,golang",
      "iconClass": "icon-golang"
    }
  },
  "labels": {
      "template": "beego-openshift",
      "app": "beego-openshift"
  },
  "objects": [
    {
      "kind": "Service",
      "apiVersion": "v1",
      "metadata": {
        "name": "beego-openshift",
        "annotations": {
          "description": "Exposes and load balances the application pods"
        }
      },
      "spec": {
        "ports": [
          {
            "name": "web",
            "port": 8080,
            "targetPort": 8080
          }
        ],
        "selector": {
          "name": "beego-openshift"
        }
      }
    },
    {
      "kind": "Route",
      "apiVersion": "v1",
      "metadata": {
        "name": "beego-openshift"
      },
      "spec": {
        "host": "${APPLICATION_DOMAIN}",
        "to": {
          "kind": "Service",
          "name": "beego-openshift"
        }
      }
    },
    {
      "kind": "ImageStream",
      "apiVersion": "v1",
      "metadata": {
        "name": "beego-openshift",
        "annotations": {
          "description": "Keeps track of changes in the application image"
        }
      }
    },
    {
      "kind": "BuildConfig",
      "apiVersion": "v1",
      "metadata": {
        "name": "beego-openshift",
        "annotations": {
          "description": "Defines how to build the application"
        }
      },
      "spec": {
        "source": {
          "type": "Git",
          "git": {
            "uri": "${SOURCE_REPOSITORY_URL}",
            "ref": "${SOURCE_REPOSITORY_REF}"
          },
          "contextDir": "${CONTEXT_DIR}"
        },
        "strategy": {
          "type": "Docker"
        },
        "output": {
          "to": {
            "kind": "ImageStreamTag",
            "name": "beego-openshift:latest"
          }
        },
        "triggers": [
          {
            "type": "ConfigChange"
          },
          {
            "type": "GitHub",
            "github": {
              "secret": "${GITHUB_WEBHOOK_SECRET}"
            }
          }
        ]
      }
    },
    {
      "kind": "DeploymentConfig",
      "apiVersion": "v1",
      "metadata": {
        "name": "beego-openshift",
        "annotations": {
          "description": "Defines how to deploy the application server"
        }
      },
      "spec": {
        "strategy": {
          "type": "Recreate"
        },
        "triggers": [
          {
            "type": "ImageChange",
            "imageChangeParams": {
              "automatic": true,
              "containerNames": [
                "beego-openshift"
              ],
              "from": {
                "kind": "ImageStreamTag",
                "name": "beego-openshift:latest"
              }
            }
          },
          {
            "type": "ConfigChange"
          }
        ],
        "replicas": 1,
        "selector": {
          "name": "beego-openshift"
        },
        "template": {
          "metadata": {
            "name": "beego-openshift",
            "labels": {
              "name": "beego-openshift"
            }
          },
          "spec": {
            "containers": [
              {
                "name": "beego-openshift",
                "image": "beego-openshift",
                "ports": [
                  {
                    "containerPort": 8080
                  }
                ]
              }
            ]
          }
        }
      }
    }
  ],
  "parameters": [
    {
      "name": "SOURCE_REPOSITORY_URL",
      "description": "The URL of the repository with your application source code",
      "value": "https://github.com/AlissonMMenezes/go-openshift.git"
    },
    {
      "name": "SOURCE_REPOSITORY_REF",
      "description": "Set this to a branch name, tag or other ref of your repository if you are not using the default branch"
    },
    {
      "name": "CONTEXT_DIR",
      "description": "Set this to the relative path to your project if it is not in the root of your repository"
    },
    {
      "name": "APPLICATION_DOMAIN",
      "description": "The exposed hostname that will route to the Beego service",
      "value": "go.alissonmachado.com.br"
    },
    {
      "name": "GITHUB_WEBHOOK_SECRET",
      "description": "Github trigger secret.  A difficult to guess string encoded as part of the webhook URL.  Not encrypted.",
      "generate": "expression",
      "from": "[a-zA-Z0-9]{40}"
    }
  ]
}

Agora faça o login no seu openshift e crie um projeto.

oc login -u developer
oc new-project alissonmachado

Agora é só fazer o deploy da aplicação:

oc new-app beego.json -p SOURCE_REPOSITORY_URL=https://github.com/AlissonMMenezes/go-openshift

E acompanhe na interface o deploy na interface que deve ficar da seguinte forma:

Qualquer dúvida em como subir o openshift eu tenho esse artigo: Minishift

Qualquer dúvida chama que é nóis!

2
Deixe um comentário

avatar
1 Comment threads
1 Thread replies
0 Followers
 
Most reacted comment
Hottest comment thread
2 Comment authors
Alisson MachadoDanilo Veras Recent comment authors
  Subscribe  
newest oldest most voted
Notify of
Danilo Veras
Visitante
Danilo Veras

Fala Alisson, beleza?

Dúvida, esses arquivos são criados no diretório padrão do beego ou cada um fica em um local diferente?

Obrigado