Symfony je oblíbenou volbou vývojářů PHP pro vytváření malých i velkých aplikací. S každou novou verzí se Symfony vyvíjí v lepší sadu nástrojů pro vývojáře. Symfony umožňuje rychlé procesy vývoje aplikací, takže vývojáři mohou vytvářet plnohodnotné API, platformy pro e-commerce, fintech a účetní aplikace atd. Na druhé straně spektra mohou vývojáři vytvářet jednoduché webové stránky s pomocí Twig šablonovacího enginu.
Symfony 4 má systém chytrých receptů a zjednodušenou adresářovou strukturu, která nepřetěžuje soubory kódu ve vašem projektu. Symfony Flex je tu pro instalaci knihoven s názvy aliasů a jejich automatickou registraci v konfiguracích balíčku. Nová verze také zavádí odlehčující systém rychlého směrování pomocí vyhledávání hash-map pro statické cesty a kombinované regulární výrazy pro cesty se zástupnými symboly.
Vzhledem k popularitě Symfony 4 jsem se rozhodl nakonfigurovat a nastavit tuto verzi na počítači Debian 9. V tomto článku vám ukážu, jak můžete nastavit kompletní Symfony Stack pro spouštění aplikací Symfony. Tento proces zahrnuje kroky týkající se oprávnění, webrootů a webového serveru.
Vytvoření serveru DigitalOcean
Dnes můžete na trhu najít řadu poskytovatelů cloudového hostingu a výběr skutečně závisí na vaší kombinaci požadavků na výkon a rozpočtu.
Pro účely tohoto článku budu používat DigitalOcean, poskytovatele cloudového hostingu, kterého vývojáři velmi milují. Můžete si snadno zaregistrovat účet DigitalOcean a vybrat si distribuci, velikost a datové centrum vašeho serveru, jak je znázorněno na následujícím obrázku GIF:
Nyní je dalším krokem spuštění terminálu SSH. Pokud jste uživatelem systému Linux nebo Mac, získáte jej ve výchozím nastavení na svém počítači. Pokud jste uživatelem Windows, musíte si stáhnout PuTTY. Dobrou zprávou je, že Windows 10 přichází s vlastním prostředím PowerShell, které můžete použít pro účely tohoto článku.
Po spuštění dropletu potřebujete k přihlášení do SSH terminálu následující tři položky:
-
IP adresa serveru
-
Uživatelské jméno
-
Heslo nebo klíč SSH
Protože používám Windows, budu používat PuTTY pro všechny aktivity související s SSH. Poznamenejte si výše uvedené položky z dropletu a přihlaste se k terminálu SSH. Když v PuTTY zadáte IP adresu a stisknete Enter, server se vás zeptá na uložení klíče do mezipaměti. Jednoduchý zásah Ano.
Dále zadejte přihlašovací údaje a přihlásíte se ke svému dropletu DigitalOcean s přístupem root.
Symfony LAMP Stack
Symfony spoléhá na typický zásobník LAMP obsahující PHP, Apache/Nginx, MySQL a distribuci Linuxu. Nejprve musíte nainstalovat všechny tyto softwarové komponenty a poté nakonfigurovat Apache/Nginx podle požadavků Symfony. Naštěstí jsou všechny komponenty pro vytvoření Symfony stacku open source, takže stačí spustit příkazy a nainstalovat je přes SSH na váš server.
Symfony také definovala konfiguraci webového serveru pro Nginx a Apache ve své dokumentaci, takže zde popíšu hlavní nastavení a zbytek si můžete přečíst tam.
Aktualizace balíčků v Debianu
První akcí na seznamu je aktualizace balíčků na počítači Debian.
Začněte kontrolou verze Debianu na serveru spuštěním následujícího příkazu:
cat /etc/debian_version
Takže mám na svém serveru DigitalOcean Debian 9.4.
Dále spusťte následující příkazy pro aktualizaci balíčků přes SSH:
apt-get update
apt-get upgrade
apt-get dist-upgrade
Jakmile bude vše aktualizováno, jsem připraven nainstalovat webový server.
Instalovat Apache2 pro Symfony 4
Přejděte na terminál SSH a nejprve nainstalujte Apache2 pomocí následujícího příkazu:
apt-get install apache2 -y
Po dokončení příkazu přejděte na IP svého serveru a uvidíte uvítací stránku Apache:
Další. přejděte do struktury podadresářů pomocí příkazu:
cd /etc/apache2/sites-available/
Nejprve rychle povolte možnost mod_rewrite tímto příkazem:
a2enmod rewrite
Nyní otevřete 000-default.conf a přidejte následující pro konfiguraci webového hostitele v 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>
Nyní je Apache2 nakonfigurován tak, aby spouštěl projekt z /var/www/html složka. Ale můžete také rozšířit konfiguraci o několik dalších možností, které nejlépe vyhovují Symfony 4. Zde je příklad:
<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:[email protected]:3306/db_name"
</VirtualHost>
Můžete také použít nejnovější možnosti Apache, jako je Vyžadovat vše uděleno a nakonfigurujte proměnné prostředí ve výše uvedených nastaveních. Nyní znovu načtěte server Apache pomocí následujícího příkazu, aby se nové nastavení projevilo:
service apache2 reload
Instalovat Nginx pro Symfony 4
Pokud nechcete používat Apache, Nginx je skvělá volba pro webový server. Proces je velmi podobný.
Začněte instalací Nginx pomocí následujícího příkazu:
apt-get update
apt-get install nginx -y
Nyní spusťte cd /etc/nginx/conf.d a nakonfigurujte soubor jako :
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:[email protected]:3306/db_name";
# When you are using symlinks to link the document root to thepoužíváte symbolické odkazy
# 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;
}
Nyní znovu načtěte server spuštěním následujícího příkazu:
service nginx reload
Instalovat PHP 7.2 pro Symfony 4
Důležitou závislostí Symfony 4 je PHP 7.1.3 (nebo vyšší) na serveru. Pro instalaci požadované verze potřebuji aktualizovat/instalovat několik balíčků na Debian 9 pro instalaci PHP 7.2. Přejděte na terminál SSH (a ujistěte se, že jste v kořenovém adresáři) a spusťte následující příkazy:
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
Nyní v dalším kroku spusťte tyto příkazy:
sudo apt update
sudo apt install php7.2
Po úspěšné instalaci zkontrolujte verzi PHP:
php -v
Potřebuji také nainstalovat několik dalších knihoven, abych se ujistil, že PHP 7.2 na serveru funguje správně. Spuštěním následujícího příkazu nainstalujte požadované knihovny:
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
Knihovny budou nainstalovány a PHP 7.2 je správně nakonfigurováno pro Symfony 4.
Instalace MySQL pro konfiguraci databází
Pojďme rychle nainstalovat databázi MySQL.
Začněte spuštěním následujícího příkazu:
apt-get install mysql-server
Proces se pozastaví, aby vás požádal o povolení. Napište (y ) a stiskněte Enter. V dalším okně nastavte heslo pro uživatele root MySQL.
Proces skončí během několika minut.
Dále nakonfiguruji MySQL podle požadavků LAMP stacku. Za tímto účelem zadejte následující příkaz:
mysql_secure_installation
V tuto chvíli je nastavení serveru dokončeno podle požadavků Symfony 4. Nyní se zaměřím na instalaci samotného rámce.
Instalovat Composer na Debian 9
Instalace Composer globálně je dobrý nápad, protože tímto způsobem jej může snadno používat každý uživatel. Takže jej nainstaluji do /user/local/bin adresář.
Nejprve zkopírujeme instalační program do /tmp adresář:
php -r "copy('https://getcomposer.org/installer', '/tmp/composer-setup.php');"
Dále spusťte následující příkaz pro spuštění souboru Composer a jeho globální instalaci:
sudo php /tmp/composer-setup.php --install-dir=/usr/local/bin --filename=composer
Nyní, když je Composer nainstalován, budu pokračovat ve skutečné instalaci Symfony 4.
Nakonec nainstalujte Symfony 4 na server Debian 9
V tuto chvíli jsem nakonfiguroval server Apache pro webroot zadáním adresy URL:/var/www/html/symfony4/public.
Přejděte do html a spusťte následující příkaz Composer pro instalaci Symfony 4:
composer create-project symfony/skeleton symfony4
Rámec bude nainstalován během několika sekund. Protože je Symfony 4 velmi optimalizované s malou kódovou základnou a závislostmi, nebude během instalace vyžadovat žádné přihlašovací údaje. Po dokončení je třeba nakonfigurovat databázi.
Jakmile proces skončí, přejděte na IP svého serveru a uvidíte uvítací stránku:
Dále přidám přihlašovací údaje k databázi do .env soubor Symfony.
###> doctrine/doctrine-bundle ###
APP_ENV=dev
APP_DEBUG=1
APP_SECRET=bd4d4fxxxx035a97fxxxed13f18646f
# customize this line!
DATABASE_URL="mysql://db_user:[email protected]:3306/db_name"
###< doctrine/doctrine-bundle ###
Poslední slova
Symfony 4 bylo široce přijato a oceněno vývojáři PHP a již bylo staženo v milionech. Můžete také použít standardní verze Symfony 3.x (k instalaci konkrétní verze stačí aktualizovat příkaz):
Pro Symfony 3.0:
composer create-project symfony/framework-standard-edition your_project_name "3.0.*"
Pro Symfony 3.1:
composer create-project symfony/framework-standard-edition your_project_name "3.1.*"
Pokud potřebujete pomoc s instalací a nastavením Symfony 4 na počítači Debian 9, dejte mi vědět v komentářích.