Objetivo
Desplegar en un servidor corriendo Ubuntu 16.04* una aplicación de Symfony 4.Requisitos
- git
- PHP => 7.1.3
- composer
- nginx
Instalación
PHP
La versión de PHP mantenida en Ubuntu 16.04 es 7.0 y no está previsto que se actualice. Estos son los pasos para instalarla: Como siempre, antes que nada debemos actualizar Ubuntu: $ sudo apt-get update && sudo apt-get upgrade Lo siguiente es añadir un repositorio de terceros para instalar la última versión de PHP. Usaremos el de Ondřej Surý. Primero vamos a comprobar que tenemos el siguiente paquete instalado para poder añadir repositorios: $ sudo apt-get install software-properties-common A continuación añadimos el repositorio de Ondřej: $ sudo add-apt-repository ppa:ondrej/php Le damos al intro para continuar y actualizamos la lista de paquetes: $ sudo apt-get update Ahora ya podemos instalar la última versión de PHP: $ sudo apt-get install php7.2 Además este comando instalará los siguientes módulos:- libapache2-mod-php7.2
- libargon2-0
- libsodium23
- libssl1.1
- php7.2-cli
- php7.2-common
- php7.2-json
- php7.2-opcache
- php7.2-readline
Git, composer y nginx
Git lo utilizaremos para descargar el código y composer para la gestión de paquetes de terceros. $ sudo apt-get install curl php-cli php-mbstring git unzip Composer dispone de un instalador en PHP. Asegúrate que estás en tu home y descarga el instalador usando curl: $ cd ~ $ curl -sS https://getcomposer.org/installer -o composer-setup.php A continuación verifica el hash SHA-384 del instalador con el siguiente script: $ php -r "if (hash_file('SHA384', 'composer-setup.php') === '<span class="text-danger">93b54496392c062774670ac18b134c3b3a95e5a5e5c8f1a9f115f203b75bf9a129d5daa8ba6a13e2cc8a1da0806388a8</span>') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;" Asegúrate de cambiar el hash (resaltado en rojo) con el último publicado. Tras correr el script deberías mostrarse el mensaje siguiente: Installer verified Para instalar Composer globalmente: $ sudo php composer-setup.php --install-dir=/usr/local/bin --filename=composer Se descargará e instalará Composer como un comando del sistema bajo /usr/local/bin. Confirma que funciona con: $ composer Por último instalamos nginx:Si tenemos instalado apache, antes de instalar nginx hay que parar el servidor: $ sudo service apache2 stop$ sudo apt-get install nginx
Despliegue
Vamos a utilizar el directorio ~/app para desplegar la aplicación y el dominio symfony.technoage.net: $ cd ~$ mkdir app$ cd app Instalamos la demo de Symfony 4 con este comando: $ composer create-project symfony/symfony-demo Ahora ya podríamos arrancar la aplicación usando el servidor nativo de php y acceder a ella por el puerto 8000: $ cd symfony-demo/$ php bin/console server:run symfony.technoage.com:8000 Y ya podríamos acceder a ella en http://symfony.technoage.net:8000Configuración de un servidor web
Si aspiramos a un despliegue más robusto y con más funcionalidades, lo suyo es utilizar un servidor web. En este caso vamos a ver cómo se haría con nginx. Creamos el siguiente fichero de configuración en /etc/nginx/conf.d/symfony.conf
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
server { server_name symfony.techonage.net; root /home/marcos/app/symfony-demo/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/php/php7.2-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:db_pass@host: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; } |