ToDoVel [Parte 25] Deploy Shared Host

Observação: Este tutorial refere-se ao Laravel-4-BETA, estando totalmente DESATUALIZADO para a versão atual. Muita coisa mudou no framework…

Nosso aplicativo está pronto.
Todo multi usuário, com segurança, com a beleza que só o Twitter Bootstrap pode nos fornecer.
Resta-nos colocá-lo no servidor para que todos os nossos amiguinhos possam utilizar a poderosa ferramenta que desenvolvemos.

Acredito que inicialmente ninguém vai desejar colocar o simples ToDoVel em uma mega máquina AWS.
Por isso, vou dar a dica de como colocar o nosso projeto em um simples servidor Shared.

Lembre-se dos requerimentos

Se você não lembra quais são os requerimentos para um servidor rodar Laravel, leia Iniciando o Projeto.
Vale ressaltar que durante o desenvolvimento desse projeto, em vários momentos, utilizei uma inovação da versão 5.4 do PHP chamada array short syntax.
Isso implica dizer que para criar um array existe uma forma mais simples e elegante.
Ao invés da maneira velha e feia:

$temp = array('santa cruz', 'sport', 'nautico');

A nova forma funciona mais legal assim:
$temp = ['santa cruz', 'sport', 'nautico'];

Por causa disso, seu servidor precisará rodar na versão 5.4 do PHP, ou você irá precisar fazer algumas alterações no seu código.

Disponibilizando no Servidor

Como foi dito em ToDoVel [Parte 02], a pasta public do nosso projeto deve ser a raíz do site.
Devemos disponibilizar nosso aplicativo no servidor de forma que satisfaçamos esse requisito.
De acordo com esse guia de como colocar o Laravel em um servidor shared, existem três formas de fazermos isso.
A melhor opção é a segunda, colocarmos os arquivos do projeto no servidor, como faríamos normamente e criar um arquivo .htaccess que redirecione todas as requisições feitas no servidor para a pasta public.

<IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteCond %{REQUEST_URI} !^public
    RewriteRule ^(.*)$ public/$1 [L]
</IfModule>

Nota: você pode precisar conceder permissão de escrita e leitura na pasta app/storage.

Configurando o Aplicativo

Já dei uma leve pincelada no começo do projeto no quesito configuração.
Vale ressaltar a necessidade de configurar o arquiv app.php e o database.php.

ATENÇÃO: É extremamente importante que vocês configurem a diretiva key no arquivo de configuração app.php.
Na falta de criatividade, antes de enviar os arquivos para o servidor, execute o comando.

php artisan key:generate

O Laravel irá preencher essa diretiva para você aleatoriamente.

Banco de Dados

Se seu servidor fornece acesso via SSH, basta acessá-lo e executar as migrações.
Porém, se seu servidor não fornece essa facilidade, é bronca.
Por hora, não há como executar as migrations em um servidor shared (bom, não que eu saiba).
Mas, se tratando de uma instalação, fazer isso funcionar é bem simples:
Crie um banco de dados local e execute as migrações nele.
Exporte o SQL gerado e utilize-o para criar o banco de dados no seu servidor.

Se der preguiça, segue o banco de dados do projeto:

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
SET time_zone = "+00:00";

CREATE TABLE IF NOT EXISTS `listas` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `titulo` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
  `created_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
  `updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
  `user_id` int(10) unsigned DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `listas_user_id_foreign` (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;

CREATE TABLE IF NOT EXISTS `migrations` (
  `migration` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `batch` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

INSERT INTO `migrations` (`migration`, `batch`) VALUES
('2013_04_23_211542_tasks', 1),
('2013_04_25_195933_add_lists', 1),
('2013_04_29_212248_create_user_table', 1);

CREATE TABLE IF NOT EXISTS `tasks` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `titulo` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
  `status` tinyint(4) NOT NULL DEFAULT '0',
  `created_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
  `updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
  `list_id` int(10) unsigned DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `tasks_list_id_foreign` (`list_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;

CREATE TABLE IF NOT EXISTS `users` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `email` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `password` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `created_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
  `updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
  PRIMARY KEY (`id`),
  UNIQUE KEY `users_email_unique` (`email`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;


ALTER TABLE `listas`
  ADD CONSTRAINT `listas_user_id_foreign` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE ON UPDATE CASCADE;

ALTER TABLE `tasks`
  ADD CONSTRAINT `tasks_list_id_foreign` FOREIGN KEY (`list_id`) REFERENCES `listas` (`id`) ON DELETE CASCADE ON UPDATE CASCADE;

Você pode ver o resultado do meu deplou em http://todovel.frenetic.com.br além de poder ver todo o código-fonte do projeto no GitHub:
https://github.com/frenetic/todovel

7 thoughts on “ToDoVel [Parte 25] Deploy Shared Host

  1. Olá,
    coloquei o mod_rewrite, dei Allowoveride All no diretorio do site, e utilizei o script que está descrito na página no .htaccess, porém quando abro com o navegador aparece erros como esse:

    Redirecionamento incorreto
    O Firefox detectou que o pedido para este endereço não será concluído devido à forma que o servidor o está redirecionando.

    1. Acho que você não precisava ter dado ALLOWOVERIDE ALL nas pastas do teu projeto.
      tenta remover isto para ver o que acontece.

      Apache é um mistério pra mim.
      Se não resolver, pergunta lá no forum do Laravel Brasil, que a galera lá manja mais que eu (forum.laravel.com.br)

    1. Esse script você executa no seu MySQL.
      Caso você utilize PHPMyAdmin no seu shared host, só jogar lá.
      Depois de utilizado uma única vez, você pode esquecê-lo.

  2. Não entendi muito bem essa parte de colocar a pasta app dentro de public. A pasta bootstrap e vendor também deve ser colocada. No mais fiz as devidas configurações porém quando executo no hostinger me retorna esse erro:
    There was an error with your request.500

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *