Creazione ambiente LEMP su Debian Buster (Testing)

10 Ottobre 2017

In questo articolo spiegherò come creare un ambiente LEMP su Debian Buster (Testing)

Nginx

apt-get install nginx php7.1-fpm php7.1 php7.1-cli php7.1-xmlphp7.1-zip

A questo punto, chiamando localhost da browser nging dovrebbe già rispondere con la pagina di default. Ora modifichiamo la conf di base. La seguente modifica sarà da riportare sia su /etc/php/7.1/cli/php.ini che /etc/php/7.1/fpm/php.ini:

cgi.fix_pathinfo=0

Ora modifichiamo il virtualhost di default modificando il file /etc/nginx/sites-available/default così da abilitare php:

server {
        listen 80 default_server;
        listen [::]:80 default_server;

        root /var/www/html;

        # Add index.php to the list if you are using PHP
        index index.php index.html index.htm index.nginx-debian.html;

        server_name _;

        location / {
                # First attempt to serve request as file, then
                # as directory, then fall back to displaying a 404.
                try_files $uri $uri/ =404;
        }

        # pass PHP scripts to FastCGI server
        location ~ \.php$ {
                include snippets/fastcgi-php.conf;
        #       # With php-fpm (or other unix sockets):
                fastcgi_pass unix:/var/run/php/php7.1-fpm.sock;
        #       # With php-cgi (or other tcp sockets):
        #       fastcgi_pass 127.0.0.1:9000;
        }

        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        location ~ /\.ht {
                deny all;
        }
}

Poi dentro /var/www/html create il file index.php con il seguente contenuto:

<?php
phpinfo();

Riavviare nginx e php-fpm:

service nginx restart
service php7.1-fpm restart

Ora, chiamando l’indirizzo localhost da browser vedrete la pagina con le informazioni su php 7.1.

MySql / MariaDb

TODO

Xdebug

Adesso abilitiamo xdebug che purtroppo almeno a oggi, su debian Buster (Testing) non funziona da repository se non portandosi dietro dipendenze di php 7.0:

apt-get install php7.1-dev build-essential pkg-config make git g++ gcc
git clone https://github.com/xdebug/xdebug.git
cd xdebug
phpize
./configure --enable-xdebug
make
mv modules/ /usr/local/xdebug
touch /etc/php/7.1/mods-available/xdebug.ini

Inserire all’interno del file xdebug.ini:

zend_extension = /usr/local/xdebug/xdebug.so
xdebug.remote_enable = On
xdebug.remote_host = "localhost"
xdebug.remote_port=9000
xdebug.remote_handler=dbgp
xdebug.max_nesting_level=5000

Poi abilitare il modulo

ln -s /etc/php/7.1/mods-available/xdebug.ini /etc/php/7.1/cli/conf.d/20-xdebug.ini
ln -s /etc/php/7.1/mods-available/xdebug.ini /etc/php/7.1/fpm/conf.d/20-xdebug.ini
service nginx restart
service php7.1-fpm restart

Memcached

Come per xdebug, installiamo memcached:

apt-get install libmemcached-dev libmsgpack-dev libmsgpackc2
git clone --depth 1 https://github.com/php-memcached-dev/php-memcached.git
cd php-memcached
phpize
./configure
make
mv modules/ /usr/local/memcached/
touch/etc/php/7.1/mods-available/memcached.ini

Inseriamo all’interno del file memcached.ini:

extension=/usr/local/memcached/memcached.so

Abilitiamo il modulo:

ln -s /etc/php/7.1/mods-available/memcached.ini /etc/php/7.1/cli/conf.d/20-memcached.ini
ln -s /etc/php/7.1/mods-available/memcached.ini /etc/php/7.1/fpm/conf.d/20-memcached.ini
service nginx restart
service php7.1-fpm restart

A questo punto tramite la pagina di phpinfo potrete vedere i moduli installati, mentre da shell con il comando php –version vedrete:

PHP 7.1.8-1 (cli) (built: Aug  3 2017 18:35:23) ( NTS )
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.1.0, Copyright (c) 1998-2017 Zend Technologies
    with Zend OPcache v7.1.8-1, Copyright (c) 1999-2017, by Zend Technologies
    with Xdebug v2.6.0-dev, Copyright (c) 2002-2017, by Derick Rethans

PhpMyAdmin

Installare phpMyAdmin

cd /usr/share
git clone https://github.com/phpmyadmin/phpmyadmin.git
cd phpmyadmin
composer install --no-dev
mkdir tmp
chmod -R 777 tmp
ln -s /usr/share/phpmyadmin /var/www/html
cp config.sample.inc.php config.inc.php

Usare la seguente config:

<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
 * phpMyAdmin sample configuration, you can use it as base for
 * manual configuration. For easier setup you can use setup/
 *
 * All directives are explained in documentation in the doc/ folder
 * or at <https://docs.phpmyadmin.net/>.
 *
 * @package PhpMyAdmin
 */

/**
 * This is needed for cookie based authentication to encrypt password in
 * cookie. Needs to be 32 chars long.
 */
//$cfg['blowfish_secret'] = '3278y(&&///((dsnksdiusnd'; /* YOU MUST FILL IN THIS FOR COOKIE AUTH! */
$cfg['blowfish_secret'] = '';

/**
 * Servers configuration
 */
$i = 0;

/**
 * First server
 */
$i++;
/* Authentication type */
$cfg['Servers'][$i]['auth_type'] = 'cookie';
/* Server parameters */
$cfg['Servers'][$i]['host'] = 'localhost';
$cfg['Servers'][$i]['connect_type'] = 'tcp';
$cfg['Servers'][$i]['compress'] = false;
$cfg['Servers'][$i]['AllowNoPassword'] = false;

/**
 * phpMyAdmin configuration storage settings.
 */

/* User used to manipulate with storage */
// $cfg['Servers'][$i]['controlhost'] = '';
// $cfg['Servers'][$i]['controlport'] = '';
// $cfg['Servers'][$i]['controluser'] = 'pma';
// $cfg['Servers'][$i]['controlpass'] = 'pmapass';

/* Storage database and tables */
// $cfg['Servers'][$i]['pmadb'] = 'phpmyadmin';
// $cfg['Servers'][$i]['bookmarktable'] = 'pma__bookmark';
// $cfg['Servers'][$i]['relation'] = 'pma__relation';
// $cfg['Servers'][$i]['table_info'] = 'pma__table_info';
// $cfg['Servers'][$i]['table_coords'] = 'pma__table_coords';
// $cfg['Servers'][$i]['pdf_pages'] = 'pma__pdf_pages';
// $cfg['Servers'][$i]['column_info'] = 'pma__column_info';
// $cfg['Servers'][$i]['history'] = 'pma__history';
// $cfg['Servers'][$i]['table_uiprefs'] = 'pma__table_uiprefs';
// $cfg['Servers'][$i]['tracking'] = 'pma__tracking';
// $cfg['Servers'][$i]['userconfig'] = 'pma__userconfig';
// $cfg['Servers'][$i]['recent'] = 'pma__recent';
// $cfg['Servers'][$i]['favorite'] = 'pma__favorite';
// $cfg['Servers'][$i]['users'] = 'pma__users';
// $cfg['Servers'][$i]['usergroups'] = 'pma__usergroups';
// $cfg['Servers'][$i]['navigationhiding'] = 'pma__navigationhiding';
// $cfg['Servers'][$i]['savedsearches'] = 'pma__savedsearches';
// $cfg['Servers'][$i]['central_columns'] = 'pma__central_columns';
// $cfg['Servers'][$i]['designer_settings'] = 'pma__designer_settings';
// $cfg['Servers'][$i]['export_templates'] = 'pma__export_templates';

/**
 * End of servers configuration
 */

/**
 * Directories for saving/loading files from server
 */
$cfg['UploadDir'] = '';
$cfg['SaveDir'] = '';

/**
 * Whether to display icons or text or both icons and text in table row
 * action segment. Value can be either of 'icons', 'text' or 'both'.
 * default = 'both'
 */
//$cfg['RowActionType'] = 'icons';

/**
 * Defines whether a user should be displayed a "show all (records)"
 * button in browse mode or not.
 * default = false
 */
//$cfg['ShowAll'] = true;

/**
 * Number of rows displayed when browsing a result set. If the result
 * set contains more rows, "Previous" and "Next".
 * Possible values: 25, 50, 100, 250, 500
 * default = 25
 */
//$cfg['MaxRows'] = 50;

/**
 * Disallow editing of binary fields
 * valid values are:
 *   false    allow editing
 *   'blob'   allow editing except for BLOB fields
 *   'noblob' disallow editing except for BLOB fields
 *   'all'    disallow editing
 * default = 'blob'
 */
//$cfg['ProtectBinary'] = false;

/**
 * Default language to use, if not browser-defined or user-defined
 * (you find all languages in the locale folder)
 * uncomment the desired line:
 * default = 'en'
 */
//$cfg['DefaultLang'] = 'en';
//$cfg['DefaultLang'] = 'de';

/**
 * How many columns should be used for table display of a database?
 * (a value larger than 1 results in some information being hidden)
 * default = 1
 */
//$cfg['PropertiesNumColumns'] = 2;

/**
 * Set to true if you want DB-based query history.If false, this utilizes
 * JS-routines to display query history (lost by window close)
 *
 * This requires configuration storage enabled, see above.
 * default = false
 */
//$cfg['QueryHistoryDB'] = true;

/**
 * When using DB-based query history, how many entries should be kept?
 * default = 25
 */
//$cfg['QueryHistoryMax'] = 100;

/**
 * Whether or not to query the user before sending the error report to
 * the phpMyAdmin team when a JavaScript error occurs
 *
 * Available options
 * ('ask' | 'always' | 'never')
 * default = 'ask'
 */
//$cfg['SendErrorReports'] = 'always';

/**
 * You can find more configuration options in the documentation
 * in the doc/ folder or at <https://docs.phpmyadmin.net/>.
 */

$cfg['TempDir'] = 'tmp';

Creare il virtualhost per nginx in /etc/nginx/sites-available/phpmyadmin

server {

     listen 80;
     listen [::]:80;

    # Server name being used (exact name, wildcards or regular expression)
    # server_name phpmyadmin.my;

    root /usr/share/phpmyadmin;

    # Logging
    error_log /var/log/phpmyadmin.error_log;
    access_log /var/log/phpmyadmin.access_log;


   location / {
           index  index.php;
       }

       ## Images and static content is treated different
       location ~* ^.+.(jpg|jpeg|gif|css|png|js|ico|xml)$ {
           access_log        off;
           expires           360d;
       }

       location ~ /\.ht {
           deny  all;
       }

       location ~ /(libraries|setup/frames|setup/libs) {
           deny all;
           return 404;
}

    # Pass the PHP scripts to FastCGI server
    location ~ \.php$ {

        fastcgi_pass unix:/var/run/php/php7.1-fpm.sock;
        fastcgi_split_path_info ^(.+\.php)(/.*)$;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME /usr/share/phpmyadmin$fastcgi_script_name;
        fastcgi_param  HTTPS off;
    }
}

Abilitare il vhost

ln -s /etc/nginx/sites-available/phpmyadmin /etc/nginx/sites-enabled/
service nginx restart
service php7.1-fpm restart

Mailparse

Vediamo come installare l’estensione mailparse per php cercando come sopra di non portarci dietro dipendenze di php 7.0

pecl download mailparse
tar -xvf mailparse-3.0.2.tgz 
cd mailparse-3.0.2/
phpize
./configure
sed -i 's/#if\s!HAVE_MBSTRING/#ifndef MBFL_MBFILTER_H/' ./mailparse.c 
make
mv modules/ /usr/local/mailparse/ 
touch /etc/php/7.1/mods-available/mailparse.ini

Il replace fatto con sed ci serve in quando c’è un bug noto che impedisce a mailparse di rilevare l’estensione mbstring (dalla quale dipende) anche se effettivamente installata.

Inseriamo all’interno del file mailparse.ini:

extension=/usr/local/mailparse/mailparse.so

Abilitiamo il modulo:

ln -s /etc/php/7.1/mods-available/mailparse.ini /etc/php/7.1/cli/conf.d/20-mailparse.ini
ln -s /etc/php/7.1/mods-available/mailparse.ini /etc/php/7.1/fpm/conf.d/20-mailparse.ini
service nginx restart
service php7.1-fpm restart

 


Comments

  1. olidev - 20 Febbraio 2018 at 20:17 - Rispondi

    Non penso sia necessario installare e configurare apc e mariadb per stack LEMP su Debian. Può essere fatto senza di esso, come qui: https://www.cloudways.com/blog/how-to-create-a-lemp-stack-on-debian-server/ I pacchetti principali da installare sono nginx, php, mysql e phpfpm.


Lascia un commento

Il tuo indirizzo email non sarà pubblicato.