Implementar apps em Go no Ubuntu 16.04 com servidor Apache

O primeiro passo é instalar o Go no servidor, tal e qual como o faria no ambiente local. Basta seguir as instruções do website da linguagem ou procurar algum vídeo que o ajude a instalar no seu ambiente.

Instalar a sua aplicação

De seguida há que instalar a sua aplicação em Go no servidor, caso esteja a utilizar o GitHub como host, pode usar um simples comando go get como no exemplo:

$ go get github.com/oseuuser/asuaapp

Se for necessário, deve exportar para o servidor com ajuda de ftp ou outra tecnologia, mas certifique-se de que está a importar para a pasta $GOPATH/src/asuaap.

Na linha de comandos, através de acesso ssh ao seu servidor, entre na pasta da sua app, que deverá ser a indica a cima, e execute o seguinte comando:

$ go install

Ainda na mesma pasta, execute o comando para correr a sua aplicação. Que por norma não deve afastar-se muito do seguinte exemplo:

$ go run main.go

Pode correr a aplicação no seguinte linkhttp://ip.do.servidor:porta.

Criar um serviço

Neste ponto a nossa aplicação apenas está a correr quando o terminal estiver ligado com esta acção a decorrer. No entanto não é isto o pretendido e para isso temos de recorrer aos serviços para a aplicação correr enquanto o servidor estiver online.

Para criar um serviço para a nossa app, utilizamos o seguinte código:

$ sudo nano /etc/systemd/system/asuaapp.service

Com o seguinte conteúdo:

[Unit]
Description=App description
After=network.target

[Service]
User=root
ExecStart=go/bin/asuaapp
WorkingDirectory=go/src/github.com/
oseuuser/asuaapp
[Install]
WantedBy=multi-user.target

Agora pode iniciar o seu serviço, que por sua vez, vai iniciar a aplicação:

$ sudo systemctl start asuaapp

Para se certificar que a sua aplicação é iniciada de cada vez que o servidor reiniciar, utilize o seguinte comando:

$ sudo systemctl enable asuaapp

Criar um VirtualHost com o Apache

Este passo serve para evitar inserir a porta respectiva no domínio sempre que precisar de abrir a sua aplicação. Execute o seguinte comando, para criar e editar um ficheiro:

$ sudo nano /etc/apache2/sites-available/asuaapp.conf

Insira nesse ficheiro o seguinte conteúdo:

<VirtualHost *:80>
ServerName oseudominio.com
ServerAdmin email@podesergmail.com
DocumentRoot /go/src/github.com/oseuuser/asuaapp
ErrorLog ${APACHE_LOG_DIR}/asuaapp-error.log
CustomLog ${APACHE_LOG_DIR}/asuaapp-access.log combined

ProxyPass "/" "http://localhost:8001/"
</VirtualHost>

Para mais informação e documentação sobre o que significa esta configuração e o que faz este proxy, visite o link.

Para que esta configuração fique activa, é necessário utilizar um certo grupo de comandos:

$ a2ensite asuaapp

Para se certificar que não cometeu um erro algures, corra o seguinte comando:

$ apachectl configtest

Caso tenha recebido indicação de que os mods não estão activos, vai ter de activa-los, e para isso, corra os 3 comandos seguintes:

$ a2enmod proxy
$ a2enmod proxy_http
$ apachectl configtest

No fim basta recarregar o serviço do Apache, com a ajuda do seguinte comando:

$ systemctl reload apache2

Et voilá! Está concluído o processo de implementar uma app programada em Go num servidor Ubuntu que corre o Apache. Para se certificar que tudo está a correr certo, aponte o seu browser para o seu domínio.