Solucionado (ver solução)
Solucionado
(ver solução)
12
respostas

Subindo para produção

Bom dia,

Eu desenvolvi uma aplicação baseada nos curso do Laravel II. Subi ela em um Ubuntu 16.04.6 LTS.

Quando eu executo a aplicação com o php artisan serve consigo acessar e navegar pela aplicação normalmente, porém quando eu tento acessar em produção fica me apresentando:

Not Found The requested URL was not found on this server.

Apache/2.4.18 (Ubuntu) Server at 192.168.1.55 Port 80

O que posso não estar fazendo em produção para o acesso a aplicação não funcionar? Existe alguma forma no laravel de eu ativar logs para debugar esse tipo de erro?

Grato.

12 respostas

Olá Allan,

Você configurou o Apache para redirecionar as requisição para o arquivo public/index.php?

Olá Marcos,

Olha eu configurei o arquivo /etc/apache2/sites-available/000-default.conf.

Ele está com a seguinte configuração: <VirtualHost *:80> ServerAdmin webmaster@localhost DocumentRoot /var/www/sgi/public ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined

No entanto quando eu digito o ip do servidor do browser, ele me redireciona até para o link de login http://IPDOSERVIDOR/login

Olá Alan,

Que página de login é essa? É a página de login do seu sistema em laravel?

O laravel já deve estar gerando os logs, olha em storage/logs dentro da pasta do seu laravel.

Lucas,

É sim a pagina de login do meu sistema em Laravel.

No meu routes/web.php tenho as seguintes rotas de login:

/*Login*/
Auth::routes();

Route::get('/login', 'LoginController@index')->name('login');
Route::post('/login', 'LoginController@entrar')->name('entrar');
Route::get('/sair', 'LoginController@sair')->name('sair');
Route::get('/registrar', 'RegistroController@create')->name('registrar');
Route::post('/registrar', 'RegistroController@store');
Route::get('/recuperar-senha', 'RegistroController@recuperarsenha');
Route::post('/recuperar-senha', 'RegistroController@envio');

No meu LoginController.php tenho:

class LoginController extends Controller
{
    public function index(Request $request)
    {
        $mensagem = $request->session()->get('mensagem');
        return view('login.entrar', compact('mensagem'));
    }

    public function entrar(Request $request)
    {
        if(Auth::attempt(['email'=>$request->email, 'password'=>$request->password, 'status' => 1])){
            return redirect()->route('dash');
        } elseif (Auth::attempt(['email'=>$request->email, 'password'=>$request->password, 'status' => 0])){
            Auth::logout();
            return redirect()->back()->withErrors('Usuário desativado');
        }

        return redirect()->back()->withErrors('Usuário e/ou senha incorretos');
    }

    public function sair()
    {
        Auth::logout();
        return redirect('/login');
    }

}

Essas são todas as rotas que você tem?

Como está agora, se acessar apenas ip do servidor é para retornar o 404 do laravel, pois não está definida a rota /

E é para redirecionar automaticamente para o /login apenas se você acessar uma página protegida.

Pode explicar qual é o problema exatamente de novo, não entendi muito bem? O problema da pergunta inicial foi resolvido né (já que está acessando o sistema agora)?

Na verdade ainda estou com o problema.

A aplicação não carrega. Até montei um novo servidor linux Ubuntu 18 de testes para subir a aplicação e mesmo assim o problema persiste.

Quando eu acesso o ip do servidor http://192.168.1.131/ ele me redireciona para http://192.168.1.131/login, porém eu recebo:

Not Found The requested URL was not found on this server. Apache/2.4.29 (Ubuntu) Server at 192.168.1.131 Port 80

Se eu rodar o comando php artisan serve --host=192.168.1.131 a aplicação funciona normalmente.

Segue nos próximos posts o meu arquivo completo de rotas.

<?php

/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/

#Route::get('/', function () {
#    return view('welcome');
#});

/*Login*/
Auth::routes();

Route::get('/login', 'LoginController@index')->name('login');
Route::post('/login', 'LoginController@entrar')->name('entrar');
Route::get('/sair', 'LoginController@sair')->name('sair');
Route::get('/registrar', 'RegistroController@create')->name('registrar');
Route::post('/registrar', 'RegistroController@store');
Route::get('/recuperar-senha', 'RegistroController@recuperarsenha');
Route::post('/recuperar-senha', 'RegistroController@envio');

/*Dashboard*/
Route::get('/', 'DashboardController@index')->name('dash')->middleware('autenticador');

/*Administração*/
Route::get('/admin', 'AdministracaoController@index')->name('lista_users')->middleware('autenticador');
Route::get('/admin/{id}/edit', 'AdministracaoController@edit')->middleware('autenticador');
Route::post('/admin/{id}/edit', 'AdministracaoController@store')->middleware('autenticador');
Route::get('/admin/{id}/pwd', 'AdministracaoController@editPwd')->middleware('autenticador');
Route::post('/admin/{id}/pwd', 'AdministracaoController@storePwd')->middleware('autenticador');
Route::delete('/admin/{id}', 'AdministracaoController@destroy')->middleware('autenticador');

/*Configurações*/
Route::get('/config', 'ConfiguracaoController@index')->name('config')->middleware('autenticador');

/*Fornecedores*/
Route::get('/fornecedors', 'FornecedorsController@index')->name('fornecedores')->middleware('autenticador');
Route::get('/fornecedors/criar', 'FornecedorsController@create')->name('form_criar_fornecedor')->middleware('autenticador');
Route::post('/fornecedors/criar', 'FornecedorsController@store')->middleware('autenticador');
Route::delete('/fornecedors/{id}', 'FornecedorsController@destroy')->middleware('autenticador');
Route::get('/fornecedors/{id}/edit', 'FornecedorsController@edit')->name('edit_fornecedor')->middleware('autenticador');
Route::post('/fornecedors/{id}/edit', 'FornecedorsController@update')->middleware('autenticador');

/*Contatos*/
Route::get('/contatos/index/{nome}', 'ContatosController@index')->name('lista_contatos')->middleware('autenticador');
Route::get('/contatos/criar/{fornecedor}', 'ContatosController@create')->middleware('autenticador');
Route::post('/contatos/criar/{fornecedor}', 'ContatosController@store')->middleware('autenticador');
Route::delete('/contatos/{id}', 'ContatosController@destroy')->middleware('autenticador');
Route::get('/contatos/{id}/edit/', 'ContatosController@edit')->middleware('autenticador');
Route::post('/contatos/{id}/edit/', 'ContatosController@update')->middleware('autenticador');

/*Banco de Dados*/
Route::get('/bdsinternos', 'BdinternosController@index')->name('bdsinternos')->middleware('autenticador');
Route::get('/bdsinternos/{id}/edit', 'BdinternosController@edit')->middleware('autenticador');
Route::post('/bdsinternos/{id}/edit', 'BdinternosController@update')->middleware('autenticador');
Route::get('/bdsinternos/{rotina}/listar', 'BdinternosController@show')->middleware('autenticador');

/*Backup Semanal*/
Route::get('/backupsemanals', 'BackupsemanalsController@index')->name('backupsemanals')->middleware('autenticador');
Route::post('/backupsemanals', 'BackupsemanalsController@view')->middleware('autenticador');

/*Coletors*/
Route::get('/coletors/proprios', 'ColetorsController@indexProprios')->name('proprios')->middleware('autenticador');
Route::get('/coletors/alugados', 'ColetorsController@indexAlugados')->name('alugados')->middleware('autenticador');
Route::get('/coletors/{patrimonio}/{modelo}/view', 'ColetorsController@view')->name('coletor_view')->middleware('autenticador');
Route::get('/coletors/criar/alugados', 'ColetorsController@create')->middleware('autenticador');
Route::post('/coletors/criar/alugados', 'ColetorsController@store')->middleware('autenticador');
Route::get('/coletors/criar/proprios', 'ColetorsController@createProprios')->middleware('autenticador');
Route::post('/coletors/criar/proprios', 'ColetorsController@store')->middleware('autenticador');
Route::delete('/coletors/{patrimonio}', 'ColetorsController@destroy')->middleware('autenticador');
Route::delete('/coletors/info/{id}', 'ColetorsController@destroyInfo')->middleware('autenticador');
Route::get('/coletors/criarinfo', 'ColetorsController@createInfo')->middleware('autenticador');
Route::post('/coletors/criarinfo', 'ColetorsController@storeInfo')->middleware('autenticador');
/*Rotinas*/
Route::get('/rotinas', 'RotinasController@index')->middleware('autenticador');
Route::get('/rotinas/{banco}', 'RotinasController@view')->middleware('autenticador');

/*Tarefas*/
Route::get('/tarefas', 'TarefasController@index')->middleware('autenticador');
Route::get('/tarefas/{host}', 'TarefasController@view')->middleware('autenticador');

/*Sistemas*/
Route::get('/sistemas/tipo/{tiposistema}', 'SistemasController@index')->name('lista_sistema')->middleware('autenticador');
Route::get('/sistemas/criar', 'SistemasController@create')->name('form_criar_sistema')->middleware('autenticador');
Route::post('/sistemas/criar', 'SistemasController@store')->middleware('autenticador');
Route::get('/sistemas/view/{nome}', 'SistemasController@view')->name('sistemas_view')->middleware('autenticador');
Route::get('/sistemas/{id}/edit', 'SistemasController@edit')->middleware('autenticador');
Route::post('/sistemas/{id}/edit', 'SistemasController@update')->middleware('autenticador');
Route::delete('/sistemas/{id}', 'SistemasController@destroy')->middleware('autenticador');

/*Dominios*/
Route::get('/dominios', 'DominiosController@index')->name('lista_dominios')->middleware('autenticador');
Route::get('/dominios/criar', 'DominiosController@create')->middleware('autenticador');
Route::post('/dominios/criar', 'DominiosController@store')->middleware('autenticador');
Route::delete('/dominios/{id}', 'DominiosController@destroy')->middleware('autenticador');
Route::get('/dominios/{id}/edit', 'DominiosController@edit')->middleware('autenticador');
Route::post('/dominios/{id}/edit', 'DominiosController@update')->middleware('autenticador');

/*Upload*/
Route::get('/upload/{tela}/{id}', 'UploadController@index')->middleware('autenticador');
Route::post('/upload/arquivo', 'UploadController@update')->name('upload')->middleware('autenticador');
Route::get('/download/{id}/{tela}', 'UploadController@download')->middleware('autenticador');
Route::delete('/delete/{id}/{tela}', 'UploadController@destroy')->middleware('autenticador');

Lucas,

Só mais uma observação, efetuei dois testes agora. Um é subindo um projeto zerado do Laravel e a pagina carregou.

E o outro foi remover todos os middleware('autenticador') do arquivo de rotas web.php. Nesse caso, não funcionou nenhuma rota. Qualquer uma que eu tentei entrar retornou o mesmo Not Found The requested URL was not found on this server. Apache/2.4.29 (Ubuntu) Server at 192.168.1.131 Port 80.

solução!

Ah, com essas informações já tenho uma suspeita do que seja o problema.

O mod_rewrite foi ativado no apache? Caso não você pode ativar com o comando: sudo a2enmod rewrite

Mais uma dica é no seu arquivo 000-default.conf você fazer as seguintes mudanças:

<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/sgi/public

    <Directory /var/www/sgi>
        AllowOverride All
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

Depois dessas mudanças você reinicia o apache: sudo service apache2 restart e testa novamente.

Para tentar explicar melhor, o rewrite mais a alteração no arquivo de hosts são para permitir que o .htaccess do laravel tenha efeito.

Minha suspeita foi essa porque o seu sistema parece estar executando corretamente quando você acessa apenas o ip (já que acontece o redirecionamento) e acontece o erro ao abrir a página com o /login, ou qualquer texto extra na URL na verdade, porque as configurações do .htaccess é que tratam a URL com esse conteúdo extra.

Lucas,

Sensacional!!!

Funcionou!!!

Muito obrigado!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software