Pesquisa de site

Como configurar o Symfony 4 no servidor Debian 9


Nesta página

  1. Criar um servidor DigitalOcean
    1. Endereço IP do servidor
    2. Nome de usuário
    3. Senha ou chave SSH

    Symfony é a escolha favorita do desenvolvedor PHP para construir aplicações de pequena a grande escala. A cada novo lançamento, o Symfony evolui para um kit de ferramentas melhor para desenvolvedores. O Symfony permite processos rápidos de desenvolvimento de aplicativos para que os desenvolvedores possam criar APIs em grande escala, plataformas de comércio eletrônico, fintech e aplicativos de contabilidade, etc. Do outro lado do espectro, os desenvolvedores podem criar sites simples com a ajuda do mecanismo de modelagem Twig.

    O Symfony 4 possui um sistema de receita inteligente e estrutura de diretório simplificada que não sobrecarrega os arquivos de código em seu projeto. O Symfony Flex existe para instalar bibliotecas com nomes alternativos e registrá-los automaticamente nas configurações do bundle. A nova versão também apresenta um sistema de roteamento mais rápido usando pesquisas de mapa de hash para rotas estáticas e expressões regulares combinadas para rotas com espaços reservados.

    Dada a popularidade do Symfony 4, decidi configurar e configurar esta versão em uma máquina Debian 9. Neste artigo, mostrarei como você pode configurar um Symfony Stack completo para executar aplicativos Symfony. O processo inclui etapas relacionadas a permissões, webroots e servidor web.

    Crie um servidor DigitalOcean

    Hoje, você pode encontrar vários provedores de hospedagem em nuvem no mercado hoje e a escolha realmente se resume à sua combinação de requisitos de desempenho e orçamento.

    Para o propósito deste artigo, irei com o DigitalOcean, um provedor de hospedagem em nuvem que é muito amado pelos desenvolvedores. Você pode se inscrever facilmente em uma conta da DigitalOcean e escolher sua distribuição, tamanho e data center do seu servidor, conforme mostrado no GIF a seguir:

    Agora, o próximo passo é lançar o terminal SSH. Se você é um usuário Linux ou Mac, você o obtém por padrão em sua máquina. Se você é um usuário do Windows, você precisa baixar o PuTTY. A boa notícia é que o Windows 10 vem com seu próprio PowerShell que você pode usar para os propósitos deste artigo.

    Depois de iniciar o droplet, você precisa dos três itens a seguir para fazer login no terminal SSH:

    Endereço IP do servidor Nome de usuário Senha ou chave SSH

    Como estou usando o Windows, usarei o PuTTY para todas as atividades relacionadas ao SSH. Anote os itens acima do droplet e faça login no terminal SSH. No PuTTY, quando você insere o endereço IP e pressiona Enter, o servidor pergunta sobre como armazenar a chave em cache. Golpe simples Sim.

    Em seguida, insira as credenciais e você fará login no seu droplet da DigitalOcean com acesso root.

    A pilha LAMP do Symfony

    O Symfony depende de uma pilha LAMP típica composta por PHP, Apache/Nginx, MySQL e uma distribuição Linux. Você precisa primeiro instalar todos esses componentes de software e depois configurar o Apache/Nginx de acordo com os requisitos do Symfony. Felizmente, todos os componentes para criar a pilha do Symfony são de código aberto, então você só precisa executar os comandos e instalá-los via SSH em seu servidor.

    O Symfony também definiu a configuração do servidor da web para Nginx e Apache em sua documentação, portanto abordarei as principais configurações aqui  e você pode ler o resto lá.

    Atualize os pacotes no Debian

    O primeiro item de ação na lista é atualizar os pacotes na máquina Debian.

    Comece verificando a versão do Debian no servidor executando o seguinte comando:

    cat /etc/debian_version

    Portanto, tenho o Debian 9.4 no meu servidor DigitalOcean.

    Em seguida, execute os seguintes comandos para atualizar os pacotes via SSH:

    apt-get update
    apt-get upgrade
    apt-get dist-upgrade

    Assim que tudo estiver atualizado, estou pronto para instalar o servidor web.

    Instale o Apache2 para Symfony 4

    Vá para o terminal SSH e instale o Apache2 primeiro com o seguinte comando:

    apt-get install apache2 -y

    Assim que o comando terminar, acesse o IP do seu servidor e você verá a página de boas-vindas do Apache:

    Próximo. entre na estrutura de subdiretórios com o comando:

    cd /etc/apache2/sites-available/

    Ative rapidamente a opção mod_rewrite primeiro com este comando:

    a2enmod rewrite

    Agora abra o arquivo 000-default.conf e adicione o seguinte para configurar o host da web no Apache 2:

    <VirtualHost *:80>
       ServerName domain.tld
       ServerAlias www.domain.tld
     
       DocumentRoot /var/www/html/symfony4/public
       <Directory /var/www/html/symfony4/public>
           Options FollowSymLinks MultiViews
    AllowOverride All
    Order allow,deny
           Allow from All
       </Directory>
     
       # uncomment the following lines if you install assets as symlinks
       # or run into problems when compiling LESS/Sass/CoffeeScript assets
       # <Directory /var/www/html>
       #  Options FollowSymlinks
       # </Directory>
     
       ErrorLog /var/log/apache2/project_error.log
       CustomLog /var/log/apache2/projec_access.log combined
    </VirtualHost>

    Agora, o Apache2 está configurado para executar o projeto a partir da pasta /var/www/html. Mas você também pode estender a configuração com mais algumas opções que melhor se adequam ao Symfony 4. Aqui está um exemplo:

    <VirtualHost *:80>
       ServerName domain.tld
       ServerAlias www.domain.tld
     
       DocumentRoot /var/www/html/symfony4/public
       <Directory /var/www/html/symfony4/public>
           AllowOverride None
           Require all granted
           Allow from All
     
           <IfModule mod_rewrite.c>
               Options -MultiViews
               RewriteEngine On
               RewriteCond %{REQUEST_FILENAME} !-f
               RewriteRule ^(.*)$ index.php [QSA,L]
           </IfModule>
       </Directory>
     
       # uncomment the following lines if you install assets as symlinks
       # or run into problems when compiling LESS/Sass/CoffeeScript assets
       # <Directory /var/www/crvfakeexample.com>
       #  Options FollowSymlinks
       # </Directory>
     
       # optionally disable the RewriteEngine for the asset directories
       # which will allow apache to simply reply with a 404 when files are
       # not found instead of passing the request into the full symfony stack
       <Directory /var/www/crvfakeexample.com/public/bundles>
           <IfModule mod_rewrite.c>
               RewriteEngine Off
           </IfModule>
       </Directory>
       ErrorLog /var/log/apache2/crvfakeexample.com_error.log
       CustomLog /var/log/apache2/crvfakeexample.com_access.log combined
     
       # optionally set the value of the environment variables used in the application
       #SetEnv APP_ENV prod
       #SetEnv APP_SECRET <app-secret-id>
       #SetEnv DATABASE_URL "mysql://db_user::3306/db_name"
    </VirtualHost>

    Você também pode usar as opções mais recentes do Apache, como Exigir tudo concedido e configurar variáveis de ambiente nas configurações acima. Agora recarregue o servidor Apache com o seguinte comando para que as novas configurações entrem em vigor:

    service apache2 reload

    Instale o Nginx para Symfony 4

    Se você não deseja usar o Apache, o Nginx é uma ótima opção para um servidor web. O processo é bem parecido.

    Comece instalando o Nginx com o seguinte comando:

    apt-get update
    apt-get install nginx -y

    Agora execute cd /etc/nginx/conf.d e configure o arquivo como:

    server {
       server_name domain.tld www.domain.tld;
       root /var/www/html/symfony4/public;
     
       location / {
           # try to serve file directly, fallback to index.php
           try_files $uri /index.php$is_args$args;
       }
       location ~ ^/index\.php(/|$) {
           fastcgi_pass unix:/var/run/php7.1-fpm.sock;
           fastcgi_split_path_info ^(.+\.php)(/.*)$;
           include fastcgi_params;
     
           # optionally set the value of the environment variables used in the application
           # fastcgi_param APP_ENV prod;
           # fastcgi_param APP_SECRET <app-secret-id>;
           # fastcgi_param DATABASE_URL "mysql://db_user::3306/db_name";
     
           # When you are using symlinks to link the document root to the
           # current version of your application, you should pass the real
           # application path instead of the path to the symlink to PHP
           # FPM.
           # Otherwise, PHP's OPcache may not properly detect changes to
           # your PHP files (see https://github.com/zendtech/ZendOptimizerPlus/issues/126
           # for more information).
           fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
           fastcgi_param DOCUMENT_ROOT $realpath_root;
           # Prevents URIs that include the front controller. This will 404:
           # http://domain.tld/index.php/some-path
           # Remove the internal directive to allow URIs like this
           internal;
       }
       # return 404 for all other php files not matching the front controller
       # this prevents access to other php files you don't want to be accessible.
       location ~ \.php$ {
           return 404;
       }
       error_log /var/log/nginx/project_error.log;
       access_log /var/log/nginx/project_access.log;
    }

    Agora recarregue o servidor executando o seguinte comando:

    service nginx reload

    Instale o PHP 7.2 para Symfony 4

    Uma dependência importante do Symfony 4 é o PHP 7.1.3 (ou superior) no servidor. Para instalar a versão necessária, preciso atualizar/instalar alguns pacotes no Debian 9 para instalar o PHP 7.2. Acesse o terminal SSH (e certifique-se de estar na raiz)  e execute os seguintes comandos:

    sudo apt install ca-certificates apt-transport-https
    wget -q https://packages.sury.org/php/apt.gpg -O- | sudo apt-key add -
    sudo echo "deb https://packages.sury.org/php/ stretch main" | tee /etc/apt/sources.list.d/php.list

    Agora, na próxima etapa, execute estes comandos:

    sudo apt update
    sudo apt install php7.2

    Após a instalação bem-sucedida, verifique a versão do PHP:

    php -v

    Também preciso instalar mais algumas bibliotecas para garantir que o PHP 7.2 funcione corretamente no servidor. Execute o seguinte comando para instalar as bibliotecas necessárias:

    sudo apt install php7.2-cli php7.2-common php7.2-curl php7.2-gd php7.2-json php7.2-mbstring php7.2-mysql php7.2-xml libapache2-mod-php7.2

    As bibliotecas serão instaladas e o PHP 7.2 devidamente configurado para o Symfony 4.

    Instale o MySQL para configurar bancos de dados

    Vamos instalar rapidamente o banco de dados MySQL.

    Comece executando o seguinte comando:

    apt-get install mysql-server

    O processo fará uma pausa para pedir sua permissão. Digite (y) e pressione Enter. Na próxima janela, defina a senha para o usuário root do MySQL.

    O processo termina em questão de minutos.

    Em seguida, configurarei o MySQL de acordo com os requisitos da pilha LAMP. Para isso digite o seguinte comando:

    mysql_secure_installation

    Neste ponto, a configuração do servidor está completa de acordo com os requisitos do Symfony 4. Vou me concentrar agora na instalação do próprio framework.

    Instale o Composer no Debian 9

    Instalar o Composer globalmente é uma boa ideia porque, dessa forma, todos os usuários podem usá-lo facilmente. Então, vou instalá-lo no diretório /user/local/bin.

    Vamos primeiro copiar o instalador para o diretório /tmp:

    php -r "copy('https://getcomposer.org/installer', '/tmp/composer-setup.php');"

    Em seguida, execute o seguinte comando para executar o arquivo Composer e instalá-lo globalmente:

    sudo php /tmp/composer-setup.php --install-dir=/usr/local/bin --filename=composer

    Agora que o Composer está instalado, prosseguirei com a instalação real do Symfony 4.

    Por fim, instale o Symfony 4 no servidor Debian 9

    Neste ponto, configurei o servidor Apache para o webroot fornecendo a URL: /var/www/html/symfony4/public.

    Vá para a pasta html e execute o seguinte comando do Composer para instalar o Symfony 4:

    composer create-project symfony/skeleton symfony4

    A estrutura será instalada em alguns segundos. Como o Symfony 4 é muito otimizado com uma pequena base de código e dependências, ele não solicitará nenhuma credencial durante a instalação. Feito isso, você precisa configurar o banco de dados.

    Assim que o processo terminar, acesse o IP do seu servidor e você verá a página de boas-vindas:

    Em seguida, adicionarei as credenciais do banco de dados ao arquivo .env do Symfony.

    ###> doctrine/doctrine-bundle ###
    APP_ENV=dev
    APP_DEBUG=1
    APP_SECRET=bd4d4fxxxx035a97fxxxed13f18646f
     
    # customize this line!
    DATABASE_URL="mysql://db_user::3306/db_name"
    ###< doctrine/doctrine-bundle ###

    Palavras Finais

    Symfony 4 foi amplamente adotado e apreciado por desenvolvedores PHP e já foi baixado em milhões. Você também pode usar as versões padrão do Symfony 3.x (basta atualizar o comando para instalar a versão específica):

    Para Symfony 3.0:

    composer create-project symfony/framework-standard-edition your_project_name "3.0.*"

    Para Symfony 3.1:

    composer create-project symfony/framework-standard-edition your_project_name "3.1.*"

    Se precisar de ajuda para instalar e configurar o Symfony 4 na máquina Debian 9, deixe-me saber nos comentários.

Artigos relacionados: