Deploy em Docker

Saudações pessoal,

Esses dias precisei instalar uma nova instância do Openredu e como a última release (versão 1.2) esta disponível somente em Docker, precisei elaborar um novo tutorial de instação, inicialmente para meu uso particular, mas acredito que também seja útil a outras pessoas, vou compartilhar com vocês.

O foco da instalação é para usuário final, e foi totalmente baseado nas instruções que o @hscs publicou na postagem Setup para Desenvolvimento com Docker.


Todo o procedimento de instalação foi realizada em uma Máquina Virtual (VM) criada pelo Virtual Box. Caso deseje, você pode baixar essa VM (formato .OVA), importar no Virtual Box ou outra plataforma de virtualização e já começar a utilizar:

Resumo da Instalação:
● Debian GNU/Linux 9.1 (stretch)
● Disco: 50 GB
● Memória: 2 GB (expansível pelo Gerenciador de Máquina Virtual)
● Tamanho da VM: 3,88 GB
● Credenciais de acesso:
Usuário: ROOT - Senha: openredu.123

Download by Mega.nz

PROCESSO DE INSTALAÇÃO EM UM NOVO SERVIDOR:

O tutorial a seguir foi feito em um sistema Linux Debian 9.1 (stretch) by Appliance TurnKey Core e deve funcionar em outras versões derivadas do Debian ou qualquer outra distribuição que seja possível instalar o Docker e o Docker-Compose.

##SUMÁRIO:


1º Passo - Configurações Iniciais do Servidor


# apt-get update
# apt-get upgrade

ALTERANDO O NOME DO SERVIDOR

# vim /etc/hostname --/ altere para o novo nome do servidor
# vim /etc/hosts
      127.0.0.1   localhost
      127.0.1.1   localhost  openredu_srv

CONFIGURANDO O TIMEZONE DO SERVIDOR

# date --/para verificar o timezone atual
# dpkg-reconfigure tzdata --/escolha o timezone correspondente

2º Passo - Instalando o Docker e Docker-Compose


INSTALANDO O DOCKER

# apt-get -y remove docker docker-engine docker.io --/ remover versões antigas
# apt-get install - apt-transport-https ca-certificates curl gnupg2 software-properties-common

Se estiver utilizando Debian, rode o comando abaixo para pegar a chave gpg
# wget https://download.docker.com/linux/debian/gpg

Se estiver utilizando Ubuntu, rode o comando abaixo para pegar a chave gpg
# wget https://download.docker.com/linux/ubuntu/gpg

# apt-key add gpg
# rm gpg

Se estiver utilizando Debian, rode o comando abaixo para adicionar a linha no apt
# echo "deb [arch=amd64] https://download.docker.com/linux/debian $(lsb_release -cs) stable" | tee -a /etc/apt/sources.list.d/docker.list

Se estiver utilizando Ubuntu, rode o comando abaixo para adicionar a linha no apt
# sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"

# apt-get update
# apt-get -y install docker-ce
# systemctl start docker --/startando o docker
# systemctl enable docker --/ativando o docker para iniciar automaticamente

INSTALANDO O DOCKER-COMPOSE

O pacote de instalação do Docker Compose está disponível nos repositórios oficiais do Debian 9, mas nem sempre é a versão mais recente. A abordagem recomendada é instalar sempre a última versão a partir do repositório do GitHub. Para Descobrir a última versão é só verificar a tag_name - Ex.: “tag_name”: “1.24.1”) da seguinte url:
https://api.github.com/repos/docker/compose/releases/latest

# apt-get remove docker-compose --/ remover versões antigas
# curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
# chmod +x /usr/local/bin/docker-compose
# ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

Observação
Se por algum motivo, você tiver dificuldades em instalar o Docker Compose pelo procedimento acima, utilize o comando abaixo:

# curl -fsSL https://get.docker.com | bash
# apt install -y docker-compose 

3º Passo - Criando e configurando o ambiente Docker


Usaremos um usuário não-root, vamos criá-lo agora:

# useradd -m -s /bin/bash openredu
# usermod -a -G docker openredu
# systemctl restart docker
# su - openredu --/ deve ser movido para o home do openredu - /home/openredu

CLONANDO O REPOSITÓRIO DO OPENREDU

Agora, precisamos clonar o Openredu dockerizado diretamente do GiT, que no caso é branch master do repositório oficial.

# git clone https://github.com/Openredu/Openredu

CONSTRUINDO O CONTAINER OPENREDU:

# cd /home/openredu/Openredu --/ home/openredu/Openredu
# cp .env.example .env
# sudo docker-compose build

CRIAÇÃO MANUAL DAS REDES EXTERNAS DO DOCKER

No arquivo YAML do docker-compose do Openredu é feito referências a 3 redes externas que devem ser criadas manualmente, antes do próximo passo.

# docker network create vis_default
# docker network create livredoc_default
# docker network create fayeopenredu_default

# docker-compose run --rm app bundle exec rake db:setup

Esse último comando cuidará de subir temporariamente os containers construídos, executar “rake db:setup” para criar todos os databases e rodar os migrates em development e em test, e depois, como fornecemos a flag --rm, os containers serão removidos.

OBSERVAÇÃO
Pode ser que o comando acima não consiga criar o database. Caso apresente algum erro em tela, execute o comando abaixo:

# docker-compose run --rm app bundle exec rake db:setup RAILS_ENV=test

SUBINDO O CONTAINER

Finalmente, no seu terminal digite:

# docker-compose up

ACESSANDO
Por último vamos conferir se as páginas estão funcionando corretamente. Para isso, acesse pelo seu navegador o ip/nome da máquina virtual.


4º Passo Opcional - Clonando os repositórios VIS e LIVREDOC


Embora o Openredu já se encontre instalado nesse momento, para o completo funcionamento da plataforma é interessante também instalar dois pacotes extras que são responsáveis pela criação de gráficos semânticos, relatórios e conversão de arquivos em PDF.

Se não desejar instalar é possível apenas apontar para os endereços externos dessas APIs no arquivo /home/openredu/Openredu/.env, alterando a linhas do VIS e LIVREDOC, para que apontem para esses endereços:

VIS_HOST: vis.openredu.org
LIVREDOC_IP: livredoc.openredu.org

Caso opte por instalar, basta seguir os procedimentos seguintes e editar o arquivo /home/openredu/Openredu/.env colocando o IP/DNS definitivos do servidor, nas variáveis VIS_HOST e LIVREDOC_IP conforme informados acima.

CLONANDO O REPOSITÓRIO E CONSTRUINDO O CONTAINER OPENREDU/VIS

# cd /home/openredu/

OPENREDU/VIS
Projeto de visualização do openredu, para criação de gráficos semânticos e relatórios.
https://github.com/Openredu/vis

# git clone https://github.com/Openredu/vis
# cd vis
# git checkout deploy-docker
# docker-compose build
# docker-compose run --rm vis bundle exec rake db:setup
# docker-compose up 
--/ esse comando vai iniciar o VIS

ACESSANDO
Para teste, acesse o pelo seu navegador o ip/nome da máquina virtual com a porta 4002:

vis_1       | * Listening on tcp://0.0.0.0:4002
vis_1       | Use Ctrl-C to stop 

Se estiver tudo certo, será exibido uma página web como essa:

43

OPENREDU/LIVREDOC
O livredoc é uma API que utiliza a arquitetura REST que converte qualquer extensão aceita pelo LibreOffice/OpenOffice em pdf.
https://github.com/Openredu/livredoc

# cd /home/openredu/
# git clone https://github.com/Openredu/livredoc
# cd livredoc
# git checkout deploy-docker
# docker-compose build
# docker-compose run --rm livredoc bundle exec rake db:setup
# docker-compose up
--/ esse comando vai iniciar o livredoc

Obs: se apresentar erro quando tentar executar o docker-compose run, execute os passos em destaque desse commit:
https://github.com/Openredu/livredoc/pull/3/files

ACESSANDO
Acesse o pelo seu navegador o ip/nome da máquina virtual com a porta 4000 (para que esse teste funcione, a variável RAILS_ENV do arquivo livredoc/.env tem que estar definido como: development e não como: production):

livredoc_1          | * Listening on tcp://0.0.0.0:4000
livredoc_1          | Use Ctrl-C to stop

Se estiver tudo certo, será exibido uma página web com esse splash:
20


5º Passo - Definindo a inicialização automática dos containers ao ligar o servidor


Obs: Executar os comandos abaixo como ROOT e não com o usuário OPENREDU

AUTOMATIZANDO O CONTAINER DO OPENREDU

Crie o arquivo docker-openredu.app:

vim /etc/systemd/system/docker-openredu-app.service

E insira o conteúdo abaixo. Atente-se para a linha WorkingDirectory que é onde é informado o caminho da aplicação:

[Unit]
Description=Docker Openredu
Requires=docker.service
After=docker.service

[Service]
WorkingDirectory=/home/openredu/Openredu
ExecStart=/usr/local/bin/docker-compose up
ExecStop=/usr/local/bin/docker-compose down
TimeoutStartSec=0
Restart=on-failure
StartLimitIntervalSec=60
StartLimitBurst=3

[Install]
WantedBy=multi-user.target

Após salvar, execute o comando abaixo para ativar o script na inicialização do sistema.

systemctl enable docker-openredu-app

OBS: Caso tenha optado por instalar também o VIS e o LIVREDOC, crie os scripts para que esses iniciem automaticamente também:

AUTOMATIZANDO O CONTAINER DO VIS

Crie o arquivo docker-vis.app:

vim /etc/systemd/system/docker-vis-app.service

E insira o conteúdo abaixo. Atente-se para a linha WorkingDirectory que é onde é informado o caminho da aplicação:

[Unit]
Description=Docker VIS
Requires=docker.service
After=docker.service

[Service]
WorkingDirectory=/home/openredu/vis
ExecStart=/usr/local/bin/docker-compose up
ExecStop=/usr/local/bin/docker-compose down
TimeoutStartSec=0
Restart=on-failure
StartLimitIntervalSec=60
StartLimitBurst=3

[Install]
WantedBy=multi-user.target

Após salvar, execute o comando abaixo para ativar o script na inicialização do sistema.

systemctl enable docker-vis-app

AUTOMATIZANDO O CONTAINER DO LIVREDOC

Crie o arquivo docker-livredoc.app:

vim /etc/systemd/system/docker-livredoc-app.service

E insira o conteúdo abaixo. Atente-se para a linha WorkingDirectory que é onde é informado o caminho da aplicação:

[Unit]
Description=Docker LIVREDOC
Requires=docker.service
After=docker.service

[Service]
WorkingDirectory=/home/openredu/livredoc
ExecStart=/usr/local/bin/docker-compose up
ExecStop=/usr/local/bin/docker-compose down
TimeoutStartSec=0
Restart=on-failure
StartLimitIntervalSec=60
StartLimitBurst=3

[Install]
WantedBy=multi-user.target

Após salvar, execute o comando abaixo para ativar o script na inicialização do sistema.

systemctl enable docker-livredoc-app

*6º Passo - Procedimento para configurar o SMTP da aplicação.


Edite o arquivo development.rb

vim /home/openredu/Openredu/config/environments/development.rb

Adicione o bloco SMTP abaixo, antes de Footnotes.run! e edite os campos correspondentes.

# Configuração de email
# Exemplo utilizando o SMTP do Google, mas pode ser outro. Altere as linhas:

# config.email (colocando o email remetente. Ex: openredu@dominio.com)
# user_name (email de autenticação do SMTP)
# password (senha do email de autenticacao)
# Remover ou comentar com # =begin e =end para que o SMTP passe a responder.

=begin
 config.email = "email_de_retorno@gmail.com"
 config.action_mailer.delivery_method = :smtp
 config.action_mailer.raise_delivery_errors = true
 config.action_mailer.smtp_settings = {
     address: "smtp.gmail.com",
     port: 465,
     domain: "smtp.gmail.com",
     authentication: "plain",
     enable_starttls_auto: true,
     user_name: "conta_de_email@gmail.com",
     password: "senha_conta_de_email",
     openssl_verify_mode: 'none'
}
=end

*7º Passo - Procedimento para configurar a URL da aplicação.


Edite o arquivo .env:

vim /home/openredu/Openredu/.env

Trocar ‘localhost’ pela URL da instância, informando o endereço reservado em seu DNS ou o IP fixo que Openredu rodará como no exemplo abaixo:

API_URL=openredu.dominio.com
APP_URL=openredu.dominio.com
APP_CFG_URL=openredu.dominio.com
APP_DOMAIN=openredu.dominio.com
COURSE_PATH=openredu.dominio.com