Índice.
1- Introdução
2- Preparação do ambiente
2.1 – Criação de uma nova instância no Vultr
3- Instalando o Apache + Passenger
4- Configurando o ambiente OpenRedu
5- Implantado um aplicativo Ruby
Introdução.
Este manual foi planejado para servir como guia para criar e colocar uma instância do OpenRedu em produção utilizando o cloud server da Vultr. Ele pretende explicar de forma básica os passos a serem seguidos para sucesso no deploy, sendo comentado durante o conteúdo alguns erros comuns e a configuração básica do ambiente.
Openredu
O Openredu é um ambiente de aprendizagem open source, idealizado para proporcionar formas de colaboração entre estudantes e professores utilizando diferentes mídias e tipos de interação virtual. O Openredu é uma plataforma em nuvem, seguindo as tendências do casamento entre tecnologia da informação e educação.
Uma vez devidamente cadastrado, um usuário dentro da plataforma do Openredu pode ser estudante ou professor. É possível cadastrar cursos, módulos, disciplinas e, consequentemente, se matricular nesse tipo de entidade. Os alunos podem ser avaliados através de questionários criados pelos professores, que por sua vez podem observar os resultados através de gráficos informativos que facilitam a percepção da evolução da turma diante de determinados tipos de atividade.
O Openredu é desenvolvido na linguagem Ruby 1.9.3, utilizando o framework Rails 3.1.0, seguindo o paradigma MVC. Desde que se tornou open source, passou a receber contribuições de estudantes de graduação do Centro de Informática, na disciplina de Engenharia de Software Educativo, como projeto da disciplina.
O sistema é orientado a serviços, o que lhe confere boa escalabilidade. O sistema suporta dezenas de milhares de usuários com apenas uma instância rodando em um servidor (testado com mais de 30.000 usuários, com estimativas de capacidade para até 100.000).
O código e a documentação do OpenRedu encontram-se no GitHub, disponível no seguinte endereço: Openredu · GitHub
Vultr
É um provedor de serviços Tecnologia da Informação - TI. Hospedagem de servidor em nuvem (Cloud Computing), disponível em 15 locais em todo mundo, abrangendo a América do Norte, Europa, Ásia e Austrália e permite que você implemente facilmente uma infraestrutura em nuvem com alguns cliques de botão. Uma característica que não podemos deixar de fora é seu preço que é bastante competitivo.
Você pode criar a sua conta no Vultr no seguinte endereço: https://www.vultr.com
Preparação do ambiente.
2.1 – Criação de uma nova instância no Vultr.
O que é uma instância de computação em nuvem?
Quando se fala em computação nas nuvens, fala-se na possibilidade de acessar arquivos e executar diferentes tarefas pela internet. Quer dizer, você não precisa instalar aplicativos no seu computador para tudo, pois pode acessar diferentes serviços online para fazer o que precisa, já que os dados não se encontram em um computador específico, mas sim em uma rede.
A computação em nuvem está substituindo o modelo atual de hospedagem compartilhada.
O primeiro passo é criar uma conta na Vultr e acessar sua conta em seguida estaremos na seguinte tela de Servers, onde iremos criar nossa nova instância nas nuvens. Clique no sinal de “+” o local onde tem a seta apontando, para adicionar um novo Server a nossa conta.
Agora em Server Type, escolha o tipo de servidor: Desempenho ou armazenamento de grande capacidade, olhando as informações você exatamente saberá qual é a diferença entre eles.
O próximo passo é escolher o local onde você irá implantar o seu servidor.
Nessa etapa da criação de nossa instância devemos escolher o sistema operacional, que será executado em nosso servidor. O recomendado para rodar o OpenRedu é o Ubuntu 14.04 (Trusty).
Em Server Size é o lugar onde você pode escolher o quão poderosa será a configuração de hardware de seu servidor. Após esse passo, aperte o botão azul para implantar.
Você será redirecionado para a página Servers e verá a mensagem de sucesso sendo exibida, observe a aba actions, nela é exibida o status de seu servidor. O servidor deve ser criado dentro de um minuto.
Ao atualizar a página deverá ser exibido em status “Running” em verde. Isso significa que o seu servidor está pronto para usar.
A seta preta indica o nome do servidor, no local onde a seta azul está apontando será informado o ip e na seta laranja será aberta uma lista com outras opções onde a que nos interessa é a details, devemos clicar nela e na próxima tela teremos senha de root para acessar o terminal de nosso servidor. Caso você esteja utilizando uma máquina física com o Linux instalado é possível utilizar o terminal de seu computador para acessar remoto a nossa instância, para isso abra o seu terminal da sua máquina física (ctrl+t), digite o seguinte comando: ssh root@IpDoSeuServidorCloud -Após digitar esse comando será solicitada a senha de root do seu servidor Cloud, pronto feito isso a partir de sua máquina local, você estará administrando remotamente o seu servidor nas nuvens.
→ Vamos atualizar o servidor:
$sudo apt-get update
$sudo apt-get upgrade
->Vamos criar um novo usuário:
Para adicionar um novo usuário no Ubuntu, use o comando adduser, substituindo o “novo_usuario” com o seu nome preferido.
$sudo adduser novo_usuario
Assim que você digitar este comando, o Ubuntu irá iniciar automaticamente o processo onde você deverá:
Digitar e confirmar sua senha.
Digitar as informações do usuário. Isso não é necessário, pressionando ENTER irá preencher automaticamente o campo com as informações padrão.
Pressionar Y (ou ENTER) quando o Ubuntu perguntar se as informações estão corretas.
Parabéns, você acabou de adicionar um novo usuário. Você poderá encerrar a sessão do usuário root. Utilizando o comando exit, será feito o logout e, em seguida, será solicitado um novo login, entre com os dados no novo usuário
→ Vamos conceder privilégios de root:
Execute o seguinte comando: $sudo nano visudo
Agora edite o arquivo que foi aberto da seguinte maneira, substituindo o nome “novo_usuario” pelo nome do usuário que será concedido o privilégio de root:
User privilege specification
root ALL=(ALL:ALL) ALL
novo_usuario ALL=(ALL:ALL) ALL
Pressione ‘CTRL + X’ para sair do arquivo e, em seguida, ‘Y’ para salvá-lo.
Observação: Faça toda a instalação com o novo usuário que foi criado, para evitar erros durante o processo e não se esqueça de sempre verificar no terminal se está com o mesmo usuário que foi começada a instalação.
Instalando o Apache + Passenger.
Phusion Passenger
Informalmente conhecido como mod_rails e mod_rack entre a comunidade, é um servidor web e de aplicação opensource, com suporte para Ruby, Phython e Node.js, ele é projetado para integrar o Apache HTTP ou Nginx servidor web.
Apache
Para acessar qualquer site na web, devemos saber que por trás daquela URL precisamos de um servidor que é responsável por disponibilizar essas páginas e demais recursos que serão acessados. Assim podemos perceber que um e-mail enviado através de um formulário, fazer compras on-line, quem processa todas essas informações é o servidor web, em nosso caso o Apache que irá processar as solicitações HTTP (Hypertext Transfer Protocol), este é o protocolo padrão da web.
Quando estamos usando o navegador de internet para acessar um site, estas solicitações são feitas ao servidor web do site através do protocolo HTTP e então recebe o conteúdo correspondente.
O Apache Server é um software livre, o que significa que qualquer um pode estudar ou alterar seu código-fonte, além de poder utilizá-lo gratuitamente. É graças a essa característica que o software foi (e continua sendo) melhorado ao passar dos anos. Graças ao trabalho muitas vezes voluntário de vários desenvolvedores, o Apache continua sendo o servidor Web mais usado no mundo.
Passos para a instalação
Passo um: Instalar os pacotes do Passenger.
Estes comandos instalarão o módulo Passenger + Apache através do repositório APT da Phusion.
#Instalando a chave PGP e adicionando suporte HTTPS para APT
$sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 561F9B9CAC40B2F7
$sudo apt-get install -y apt-transport-https ca-certificates
#Adicionando o repositório APT
$sudo sh -c ‘echo deb Index of / trusty main > /etc/apt/sources.list.d/passenger.list’
#Instalando o Passenger + Apache módulo
$sudo apt-get install -y libapache2-mod-passenger
Passo dois: Checar a instalação.
Após a instalação, precisamos validá-la, executando $sudo /usr/bin/passenger-config validate-install
Serão retornadas as seguintes mensagens:
- Checking whether this Phusion Passenger install is in PATH… ✓
- Checking whether there are no other Phusion Passenger installations… ✓
Caso essas mensagens não apareçam, os erros serão relatados informando os comandos para resolvê-los. Esses são os erros que geralmente aparecem durante a checagem da instalação, essas informações são mostradas no terminal, relatando o erro e forma de solucioná-los.
Erro 1)
This program requires the apxs2 tool in order to be able to validate your
Apache installation. This tool is currently not installed. You can solve this
as follows:
Please install it with apt-get install apache2-dev (Execute: apt-get install apache2-dev)
Erro 2)
Your Apache installation might be broken
You are about to validate Phusion Passenger against the following
Apache installation:
Não rode:. apxs2: /usr/bin/apxs2
However, this Apache installation appears to be broken, so this program
cannot continue. To find out why this program thinks the above Apache
installation is broken, run:
$ export ORIG_PATH="$PATH" (Execute: export ORIG_PATH="$PATH")
$ sudo -s –E (Execute: sudo -s –E)
$ export PATH="$ORIG_PATH" (Execute: export PATH="$ORIG_PATH")
$ /usr/bin/ruby1.9.1 /usr/bin/passenger-config --detect-apache2 (Execute: /usr/bin/ruby1.9.1 /usr/bin/passenger-config --detect-apache2)
Erro 3)
Cannot find a usable Apache installation using /usr/bin/apxs (Execute: /usr/bin/apxs)
Final autodetection results
Vamos tentar validar novamente a instalação e se as mensagens de sucesso são exibidas.
Execute $sudo /usr/bin/passenger-config validate-install
Serão retornadas as seguintes mensagens:
- Checking whether this Phusion Passenger install is in PATH… ✓
- Checking whether there are no other Phusion Passenger installations… ✓
Observação: Caso não consiga validar a instalação observe as mensagens que serão exibidas em seu terminal, elas irão guiá-lo para a solução dos erros apresentados.
Passo três: Habilitar o módulo Apache do Passenger e reiniciar o Apache.
$ sudo a2enmod passenger
$ sudo apache2ctl restart
Caso ocorra o seguinte erro:
AH00558: apache2: Could not reliably determine the server’s fully qualified domain name, using ::1. Set the ‘ServerName’ directive globally to suppress this message
Podemos corrigir executando $sudo nano /etc/apache2/apache2.conf e adicionando a seguinte linha no início do arquivo: ServerName localhost
Passo quatro: Finalmente vamos verificar se o Apache iniciou os processos principais do Passenger, execute: $ sudo /usr/sbin/passenger-memory-stats -Será exibida a seguinte mensagem:
Version: 5.0.8
Date : 2015-05-28 08:46:20 +0200
---------- Apache processes ----------
PID PPID VMSize Private Name
3918 1 190.1 MB 0.1 MB /usr/sbin/apache2
…
----- Passenger processes ------
PID VMSize Private Name
12517 83.2 MB 0.6 MB Passenger watchdog
12520 266.0 MB 3.4 MB Passenger core
12531 149.5 MB 1.4 MB Passenger ust-router
…
Se você não ver quaisquer processos do Apache ou processos do Passenger, então provavelmente você terá algum tipo de problema de instalação ou problema de configuração. Consulte a guia de solução de problemas Phusionpassenger no seguinte endereço: Troubleshooting - Apache - Passenger Library
Configurando o ambiente do OpenRedu.
Passo um: Instalar cURL e dependências
$ sudo apt-get install libssl-dev libreadline6-dev zlib1g-dev curl
Passo dois: Instalar RVM
Neste processo é importante que não seja utilizado o usuário ROOT diretamente, em virtude que parte deste processo necessitar do usuário local para acesso dos arquivos.
$ gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3
$ \curl -sSL https://get.rvm.io | bash -s stable
$ echo “source $HOME/.rvm/scripts/rvm” >> ~/.bash_profile
$ source ~/.rvm/scripts/rvm
Verifique se o RVM está sendo carregado como função do bash
$ type rvm | head -n 1
Deve retornar: rvm is a function
Caso contrario, você pode editar manualmente o arquivo ~/.profile acrescentando ao final:
export PATH="$PATH:$HOME/.rvm/bin" # Add RVM to PATH for scripting
[[ -s “$HOME/.rvm/scripts/rvm” ]] && source “$HOME/.rvm/scripts/rvm” # Load RVM into a shell session as a function
Passo três: Instalar a versão 1.9.3 do ruby
$ rvm install 1.9.3
$ rvm use 1.9.3
Crie uma Gemset para o OpenRedu
$ rvm gemset create OpenRedu
$ rvm gemset use OpenRedu
Lembre sempre de verificar se está trabalhando no ambiente correto
$ rvm current
Deve retornar: ruby-1.9.3-p551@OpenRedu
Passo quatro: Instalar o MySql
$ sudo apt-get install mysql-client mysql-server libmysqlclient-dev
Passo cinco: Instalar o Rails
$ gem install rails --version 3.1.0
Passo seis: Instalar o git
$ sudo apt-get install git-core
Passo sete: Instalar o MongoDB
$ sudo apt-key adv --keyserver keyserver.ubuntu.com --recv 7F0CEB10
$ echo “deb Index of ubuntu “$(lsb_release -sc)”/mongodb-org/3.0 multiverse” | sudo tee /etc/apt/sources.list.d/mongodb-org-3.0.list
$ sudo apt-get update
$ sudo apt-get install -y mongodb-org
Passo oito: Baixando o código do OpenRedu
Navegue até o diretório /var/www
E dentro desse diretório execute: $ git clone GitHub - Openredu/Openredu: Openredu - A Rede Social Educacional
Passo nove: Criar o arquivo database.yml
Inicialmente você deve criar uma base de dados para o OpenRedu. Em seguida, escrever o database.yml, segundo as configurações do seu Banco de Dados. O arquivo database.yml.example, localizado na pasta OpenRedu/config, pode ser usado como base. Copie-o, e renomeie para database.yml. Então, basta adicionar as credenciais de conexão com o banco de dados previamente instalado, cuidado com as informações editadas nesse arquivo, pois qualquer erro, inclusive um espaço a mais irá ocasionar erro na criação das tabelas e defina a senha do seu banco entre aspas.
Instalando as Gems necessárias ao OpenRedu
Esta tarefa é feita pelo Gem Bundler. Portanto, basta navegar para o diretório raiz do projeto e executar o seguinte comando:
$ bundle install
Se aparecer a mensagem “bundler: command not found.”
$ gem install bundler
Obs: Caso a instalação do nokogiri retorne erro na libxml2 and libxslt
$ sudo apt-get install libxslt-dev libxml2-dev
Obs: Caso retorne erro na instalação do debugger-ruby_core_source
$ gem update debugger-ruby_core_source
Obs: Caso retorne erro na instalação:
An error occurred while installing json (1.8.0), and Bundler cannot continue.
Make sure that gem install json -v '1.8.0'
succeeds before bundling.
Execute: $ sudo apt-get install ruby-dev
Execute novamente o $ bundle install
Passo dez: Criar as tabelas.
Executar a rake task create para criar os bancos de dados.
$ rake db:create
Executar a rake task schema load para que todas as tabelas sejam criadas.
$ rake db:schema:load
Executar a rake task migrate para rodar alguma modificação ainda pendente.
$ rake db:migrate
Você pode executar a rake task migrate antes da rake task schema load caso você tenha problemas com seu load.
Inicializando os submodules
O OpenRedu ainda utiliza alguns plugins que estão como submodules do git (has_friends por exemplo), então precisamos executar dois comandos:
$ git submodule init
$ git submodule update
Inserindo dados essenciais no BD
Executar a rake task all para que todos os dados necessários sejam inseridos no Banco de Dados.
$ rake bootstrap:all
Iniciando o servidor
Inicie o MySQL: $sudo /etc/init.d/mysql start
Iniciando o servidor de busca solr: rake sunspot:solr:start
Obs: A execução do servidor de busca necessita da instalação do JAVA, que pode ser verificada pelos comandos
$ dpkg -l | grep jre
$ java -version
Caso não esteja instalado:
$ sudo apt-get install default-jre
Implantando um aplicativo Ruby.
Este guia ensina como você pode implantar seu aplicativo em um servidor. Este guia assume que você já realizou as seguintes etapas:
Passageiro e Apache já estão instalados no servidor.
Você já transferiu o código do aplicativo para o servidor.
Você já instalou o Ruby.
Você já instalou todas as dependências necessárias que seu aplicativo precisa.
Determine o comando Ruby que o Passenger deve usar
$ passenger-config about ruby-command
*Tome nota do caminho depois de “Command”
Exemplo: PassengerRuby /usr/bin/ruby
Configurando um hostVirtual
sudo nano /etc/apache2/apache2.conf
Edite a seguinte linha, está localizado quase no final do seu arquivo apache2.conf
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html mude para(/var/www/OpenRedu/public)
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
Edite agora seus arquivos de hosts virtuais
sudo nano /etc/apache2/sites-available/000-default.conf
Deixe da seguinte forma:
<VirtualHost *:80>
# The ServerName directive sets the request scheme, hostname and port that
# the server uses to identify itself. This is used when creating
# redirection URLs. In the context of virtual hosts, the ServerName
# specifies what hostname must appear in the request’s Host: header to
# match this virtual host. For the default virtual host (this file) this
# value is not decisive as it is used as a last resort host regardless.
# However, you must set it for any further virtual host explicitly.
ServerName 45.63.29.51:80 (IP_DO_SEU_SERVIDOR)
#ServerAdmin webmaster@localhost
DocumentRoot /var/www/OpenRedu/public
PassengerRuby /usr/bin/ruby (CAMINHO_QUE_TOMOU_NOTA)
RailsEnv development
<Directory /var/www/OpenRedu/public>
Allow from all
Options -MultiViews
# Uncomment this if you’re on Apache > 2.4:
#Require all granted
# Available loglevels: trace8, ..., trace1, debug, info, notice, warn,
# error, crit, alert, emerg.
# It is also possible to configure the loglevel for particular
# modules, e.g.
#LogLevel info ssl:warn
#ErrorLog ${APACHE_LOG_DIR}/error.log
#CustomLog ${APACHE_LOG_DIR}/access.log combined
# For most configuration files from conf-available/, which are
# enabled or disabled at a global level, it is possible to
# include a line for only one particular virtual host. For example the
# following line enables the CGI configuration for this host only
# after it has been globally disabled with "a2disconf".
#Include conf-available/serve-cgi-bin.conf
vim: syntax=apache ts=4 sw=4 sts=4 sr noet
Obs: Não esqueça das devidas permissões na pasta OpenRedu, para que os usuários possam acessar os arquivos na web.
Configurando URL padrão da aplicação:
Acessar via SSH (pode-se utilizar o Web Shell da página inicial) com as credenciais:
Usuário: root
Senha: Openredu.
Edite o arquivo:
/home/openredu/OpenRedu/config/environments/development.rb
Modifique as linhas, informando o IP ou URL que o Openredu esta rodando.
config.url = “0.0.0.0:3000”
config.representer.default_url_options = {:host => “127.0.0.1:3000”}
Edite o arquivo:
/home/openredu/OpenRedu/config/application.rb
Modifique a linha abaixo, informando o IP ou URL que o Openredu esta rodando.
config.representer.default_url_options = {:host => “127.0.0.1:3000”}
Esperamos ter ajudado, #Sinergia
Autor: Ricardo Cavalcanti
@Ricardo
Co-Autor: Cloves Rocha
@clovesrocha
Doc. Fonte: OpenRedu em Cloud Vultr.docx - Documentos Google
REFERÊNCIAS:
Wikipedia:
https://translate.google.com.br/translate?hl=ptBR&sl=en&u=https://en.wikipedia.org/wiki/Phusion_Passenger&prev=search
Phusionpassenger:
https://www.phusionpassenger.com/library/install/apache/install/oss/trusty/
https://www.phusionpassenger.com/library/deploy/apache/deploy/ruby/
https://www.phusionpassenger.com/library/install/apache/working_with_the_apache_config_file.html
Dicas Alojamento Web:
http://www.dicasalojamentoweb.com/analise-vultr-alojamento-cloud-ssd-vps.html
Conhecendo o servidor apache (HTTP Server Project)
http://www.infowester.com/servapach.php
Máquina virtual com instalação padrão do Openredu
OpenRedu Setup (Ubuntu)