Como configurar o Symfony 4 no servidor Debian 9
Nesta página
- Criar um servidor DigitalOcean
- Endereço IP do servidor
- Nome de usuário
- 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-upgradeAssim 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.