Linux, Apache, MariaDB, PHP (LAMP)

Linux

  • apt update && apt upgrade -y && apt full-upgrade -y && apt autoremove -y

Apache

  • apt install apache2
  • apache2 -v
  • Test
    Richiama 127.0.0.1 nel browser.
    ifconfig

Attiva mod_rewrite

  • a2enmod rewrite
  • systemctl restart apache2
  • nano /etc/apache2/apache2.conf
  • Modificare quanto segue nelle righe seguenti
    ‹Directory /var/www/›
        Options Indexes FollowSymLinks
        AllowOverride None (Cambia None in All)
        Require all granted
        DirectoryIndex index.php index.html (Aggiungi una riga in modo che index.php venga caricato per primo)
    ‹/Directory›
  • Riavvia Apache
    systemctl restart apache2
  • Cambia utente e gruppo Apache
    nano /etc/apache2/envvars
    Cambia utente e gruppo www-data
    systemctl restart apache2

Aumentare il timeout in modo che gli script non vengano interrotti prematuramente

  • nano /etc/apache2/apache2.conf (in altre configurazioni httpd.conf)
  • Modificare quanto segue nelle righe seguenti
    Timeout 3600 (Standard 600)
    ProxyTimeout 600 (in altre configurazioni questo aumento può aiutare)
  • systemctl restart apache2

MariaDB

  • apt install mariadb-server (O il pacchetto default-mysql-server, a seconda del sistema, questo porta a MariaDB tramite dipendenza)
  • Proteggi MariaDB
    mysql_secure_installation
    5x Yes
  • Test
    mysql -u root -p
    SHOW databases;
    EXIT;
  • Cambia la password
    USE mysql;
    UPDATE user SET password=[PASSWORD] WHERE user='root';
    FLUSH PRIVILEGES;
    EXIT;

MariaDB Upgrade

  • systemctl stop mysql
  • Crea backup
    cp -R /etc/mysql/ /etc/mysql-[VERSIONE]_[DATA]
    cp -R /var/lib/mysql/ /var/lib/mysql-[VERSIONE]_[DATA]
  • Lo script viene scaricato ed eseguito.
    Crea '/etc/apt/sources.list.d/mariadb.list', '/etc/apt/preferences.d/mariadb-enterprise.pref' e 'GPG Keys'.
    curl -LsS https://downloads.mariadb.com/MariaDB/mariadb_repo_setup | sudo bash
  • Aggiornamento del sistema
    apt update && apt upgrade -y && apt full-upgrade -y && apt autoremove -y
  • Disinstallare la vecchia installazione e gli elementi correlati
    apt remove mariadb-*
  • Installa il nuovo MariaDB
    apt-get install mariadb-server
  • Upgrade banche dati
    mysql_upgrade

Variabili di sistema

MariaDB in Debian

character_set_server utf8mb4
collation_server  utf8mb4_general_ci

Standard MariaDB

character_set_server latin1
collation_server  latin1_swedish_ci

Modifica le variabili di sistema

Per questa sessione
  • mysql
    SHOW VARIABLES LIKE 'character%';
    SET character_set_server = 'utf8mb4';
    SHOW VARIABLES LIKE 'collation%';
    SET collation_server = 'utf8mb4_general_ci';
    exit
  • systemctl restart mariadb.service
  • systemctl restart apache2
Tramite file di configurazione (riavvio richiesto)
  1. Rinomina il link simbolico 'my.cnf' in 'my.cnf.backup'
  2. Poiché il collegamento '/etc/mysql/my.cnf' punta a 'my.cnf.fallback' fino alla fine, copiamo questo file e salviamo la copia in '/etc/mysql/my.cnf'.
  3. Alla fine del file '/etc/mysql/my.cnf' aggiungiamo quanto segue.
    [mysqld]
    character-set-server  = utf8mb4
    collation-server      = utf8mb4_general_ci
  4. Riavvia. Test. Test. Test.

PHP

  • Esegui query sulla versione standard di PHP
    apt show php
  • Installa la versione standard di PHP
    apt install php
  • Installa importanti moduli PHP
    apt install php7.0-[MODULO] (Costruzione)
    apt install php7.0-mysql (per MariaDB)
    apt install php7.0-gd (per Grafica)
    apt install php7.0-opcache (per ottimizzare la velocità dello script; imposta opcache.save_comments=1 in php.ini)
    apt install php7.0-mcrypt
    apt install php7.0-intl
    apt install php7.0-soap
    apt install php7.0-bcmath
  • Mostra i moduli installati
    php -m
  • Impostazioni PHP
    nano /etc/php/7.0/apache2/php.ini
    systemctl restart apache2

Abilita/disabilita l'estensione PHP

Questi comandi creano o rimuovono il collegamento simbolico '20-xdebug.ini' in '/etc/php/7.1/cli/conf.d' e '/etc/php/7.1/fpm/conf.d'.

  • Attivare
    php5enmod xdebug (per PHP 5)
    phpenmod xdebug (per la versione PHP standard)
  • Disattivare
    php5dismod xdebug (per PHP 5)
    phpdismod xdebug (per la versione PHP standard)
  • Riavvia
    systemctl restart php5.6-fpm.service
    systemctl restart apache2

phpMyAdmin

  • apt install phpmyadmin
  • Test
    Chiama localhost/phpmyadmin nel browser.
  • Se non seleziona (= barra spaziatrice) la configurazione automatica per apache2
    nano /etc/apache2/apache2.conf
    Include /etc/phpmyadmin/apache.conf (Inserisci una linea in basso)
  • Crea un nuovo utente per MariaDB
    Per motivi di sicurezza, non puoi più accedere al server MariaDB direttamente come utente root utilizzando la normale autenticazione con password (per esempio con phpMyAdmin).
    USE mysql;
    CREATE USER '[UTENTE]'@'localhost' IDENTIFIED BY '[PASSWORD]';
    GRANT ALL PRIVILEGES ON *.* TO '[UTENTE]'@'localhost' WITH GRANT OPTION;
    GRANT ALL PRIVILEGES ON [BANCA DATI].* TO '[UTENTE]'@'localhost'; (Crea utente per una banca dati specifico)
    FLUSH PRIVILEGES;
    EXIT;

Xdebug

  • apt install php-xdebug
  • Aggiungi quanto segue al file '/etc/php/7.0/mods-available/xdebug.ini'
    xdebug.remote_enable=1
    xdebug.remote_handler=dbgp
    xdebug.remote_mode=req
    xdebug.remote_host=localhost
    xdebug.remote_port=9000
    timeout 300 seconds
  • systemctl restart apache2

ImageMagick

  • apt install imagemagick
  • apt install php7.0-imagick
  • systemctl restart apache2

Invio di e-mail

sendmail

Il modulo sendmail è impostato come standard in php.ini ed è già installato su Debian, devi solo avviare Thunderbird.

  • Crea un account Thunderbird per leggere i messaggi
    Nome account: [NOME UTENTE]@debian.com
    Il tuo nome: [NOME]
    Indirizzo e-mail: [E-MAIL]
    Server di posta in uscita (SMTP): [SMTP-SERVER]
    Impostazioni del server
    Tipo di server: Unix Movemail
    Server: localhost
    Nome utente:[NOME UTENTE]
  • Posizione di archiviazione della posta elettronica
    /var/spool/mail/
  • Coda di posta elettronica in uscita
    ATTENZIONE: la cartella non esisteva sul mio sistema.
    /var/spool/mqueue/
  • Ecco tutti i file di configurazione
    /etc/mail/
    per esempio /etc/mail/access/
  • Informazioni
    Solo i file *.db vengono utilizzati da sendmail.
    Dopo le modifiche ai file di configurazione, i rispettivi file *.db vengono rigenerati dal Makefile.
    ATTENZIONE: Se non è disponibile alcun Makefile: cat ./Filename | makemap hash Filename
    ATTENZIONE: Anche qui le eccezioni confermano la regola. L'aliases.db è l'unico generato con il comando newaliases. makemap crea anche un aliases.db, ma può rendere inutilizzabile sendmail.

sSMTP

Invia e-mail con sSMTP tramite la console.

  • apt install ssmtp
  • nano /etc/ssmtp/ssmtp.conf
    Modificare quanto segue nelle righe seguenti
    root=[E-MAIL]
    mailhub=[SMTP-SERVER]:[SMTP-PORT]
    hostname= (Non è necessario. Se è stata inserita la variabile, l'invio dell'e-mail viene accelerato.)
    rewriteDomain=
    AuthUser=[E-MAIL]
    AuthPass=[PASSWORD]
    UseSTARTTLS=yes
    UseTLS=yes
    FromLineOverride=yes
  • nano /etc/ssmtp/revaliases
    Aggiungi quanto segue
    [UTENTE]:[E-MAIL]:[SMTP-SERVER]:[SMTP-PORT]
    root:mail@dreadyhead.com:smtp.dreadyhead.com:465
  • Test
    echo "This is a test message" | mailx -s 'Test Message' [E-MAIL]

Aggiungi tipi MIME

  • nano /etc/mime.types

Crea host

  • nano /etc/hosts

Crea Apache VirtualHost e configura SSL

  • Creare una cartella
    mkdir /etc/apache2/ssl
    cd /etc/apache2/ssl
  • Crea chiave privata
    openssl genrsa -out sslcert.key 2048
  • Genera file CSR dalla chiave privata
    Il file CSR contiene le informazioni sul certificato
    openssl req -new -key sslcert.key -out sslcert.csr
  • Genera certificato dal file CSR
    openssl x509 -req -days 365 -in sslcert.csr -signkey sslcert.key -out sslcert.crt
  • Attiva il modulo SSL Apache2
    a2enmod ssl
  • Verificare se la porta 443 è in ascolto
    cat /etc/apache2/ports.conf
    Dovrebbero apparire le seguenti righe
    Listen 80
    ‹IfModule ssl_module›
        Listen 443
    ‹/IfModule›
    ‹IfModule mod_gnutls.c›
        Listen 443
    ‹/IfModule›
  • Crea una nuova configurazione VirtualHost per la porta SSL
    nano /etc/apache2/sites-available/[DOMINIO].conf
    Inserisci le seguenti righe nella nuova configurazione di VirtualHost
    ‹VirtualHost *:80›
        ServerAdmin info@[DOMINIO]
        ServerName [DOMINIO]
        ServerAlias www.[DOMINIO]
        DocumentRoot /var/www/[PERCORSO]
        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
    ‹/VirtualHost›
    ‹VirtualHost *:443›
        ServerAdmin info@[DOMINIO]
        ServerName [DOMINIO]
        ServerAlias www.[DOMINIO]
        DocumentRoot /var/www/[PERCORSO]
        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
        SSLEngine on
        SSLCertificateFile /etc/apache2/ssl/sslcert.crt
        SSLCertificateKeyFile /etc/apache2/ssl/sslcert.key
    ‹/VirtualHost›
  • Attiva la pagina
    a2ensite [DOMINIO].conf
    systemctl restart apache2
  • Disattiva la pagina
    a2dissite [DOMINIO].conf
    systemctl restart apache2

File di registro importanti

  • Errori di Apache e PHP
    nano /var/log/apache2/error.log
  • Errori di MariaDB
    nano /var/log/mysql/error.log

Configura più versioni PHP in Apache

Disattiva PHP 5.6, attiva PHP 7.1

  • a2dismod php5.6
  • a2enmod php7.1
  • systemctl restart apache2

PHP, FPM e FastCGI

  1. Aggiungi elenco di fonti
    apt install ca-certificates apt-transport-https
    wget -q https://packages.sury.org/php/apt.gpg -O- | sudo apt-key add -
    echo "deb https://packages.sury.org/php/ stretch main" | sudo tee /etc/apt/sources.list.d/php.list
  2. Installa PHP e FPM
    apt update && apt upgrade -y && apt full-upgrade -y && apt autoremove -y
    apt install php5.6 php5.6-fpm
    apt install php7.4 php7.4-fpm
  3. Test
    systemctl status php5.6-fpm
    systemctl status php7.4-fpm
  4. Installa Apache FastCGI
    apt update && apt upgrade -y && apt full-upgrade -y && apt autoremove -y
    apt install apache2 libapache2-mod-fcgid
  5. Configurazione di Apache
    a2enmod actions fcgid alias proxy_fcgi
    systemctl restart apache2
  6. Modifica la configurazione di VirtualHost
    nano /etc/apache2/sites-available/[DOMAIN].conf
    Aggiungi le seguenti righe alla configurazione di VirtualHost
    ‹VirtualHost *:[PORT]›
        ...
        ‹FilesMatch \.php$›
            # Apache 2.4.10+ can proxy to unix socket
            SetHandler "proxy:unix:/var/run/php/php7.2-fpm.sock|fcgi://localhost/"
        ‹/FilesMatch›
    ‹/VirtualHost›
    Riavvia Apache
    systemctl restart apache2
  7. Regola le impostazioni PHP
    ATTENZIONE: i moduli installati vengono aggiunti automaticamente durante l'installazione.
    nano /etc/php/7.0/fpm/php.ini
  8. Cambia utente www-data se necessario
    nano /etc/php/7.0/fpm/pool.d/www.conf
    Cambia tutti gli utenti www-data con il tuo nome utente (ad esempio dreadyhead)
    systemctl restart php7.0-fpm.service
  9. File importanti
    /var/log/php7.0-fpm.log
    /etc/php/7.0/fpm/php-fpm.conf

Se manca la cartella apache2 in '/etc/php/7.3/'

  • Installa quanto segue
    apt install libapache2-mod-php7.3

Disattiva versione PHP

  • systemctl disable php5.6-fpm.service

Configura più versioni PHP nella console

  • Verificare la configurazione corrente
    which php
    Il file '/usr/bin/php' si riferisce a '/etc/alternatives/php'.
    Il file '/etc/alternatives/php' si riferisce a '/usr/bin/php7.3'.
  • Cambia alternatives
    update-alternatives --set php /usr/bin/php7.1
    update-alternatives --set phar /usr/bin/phar7.1
    update-alternatives --set phar.phar /usr/bin/phar.phar7.1
    ATTENZIONE: il comando phpize e php-config è disponibile nel pacchetto php[VERSIONE PHP]-dev. Questo è più utile per compilare moduli PHP usando pecl.
    update-alternatives --set phpize /usr/bin/phpize7.1
    update-alternatives --set php-config /usr/bin/php-config7.1

Composer

Installa System Composer (potrebbe non essere aggiornato)

  • apt install composer
  • Test
    composer
    Se tutto è andato bene, verranno visualizzati tutti i comandi.

Installa Composer da getcomposer.org

  • Aggiungi elenco di fonti
    php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
    php -r "if (hash_file('sha384', 'composer-setup.php') === '8a6138e2a05a8c28539c9f0fb361159823655d7ad2deecb371b04a83966c61223adc522b0189079e3e9e277cd72b8897') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
    php composer-setup.php
    php -r "unlink('composer-setup.php');"
  • Rendi disponibile a livello globale
    mv composer.phar /usr/bin/composer

Comandi del Composer

  • Upgrade versione
    composer require [PRODUTTORE]/[PACCHETTO]
    composer require friendsofphp/php-cs-fixer

Configura più versioni PHP nel Composer

Status

  • Informazioni sul Composer
    composer -vvv about
  • which php
    /usr/bin/php
  • /usr/bin/php -v
    PHP 7.1.33
  • php -v
    PHP 7.2.24
  • type -a php
    php is aliased to '/usr/bin/php7.2'
    php is /usr/bin/php
  • which composer
    /usr/bin/composer

Soluzione

  • Modifica il file .bash_aliases
    alias php="/usr/bin/php7.2"
    alias composer="/usr/bin/php7.2 /usr/bin/composer"
  • Riavvia la console
  • Controlla le impostazioni
    type -a composer
    composer is aliased to '/usr/bin/php7.2 /usr/bin/composer'
    composer is /usr/bin/composer
  • Il Composer ora sta usando la versione php corretta.

elasticsearch

  • Aggiungi elenco di fonti
    Scarica e installa la chiave di firma pubblica
    wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
    apt install apt-transport-https
    Salva la definizione del repository in '/etc/apt/sources.list.d/elastic-7.x.list'
    echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee /etc/apt/sources.list.d/elastic-7.x.list
    apt update && apt upgrade -y && apt full-upgrade -y && apt autoremove -y
    apt install elasticsearch
  • Impostazioni
    nano /etc/elasticsearch/elasticsearch.yml
  • Rapporto di errore
    /var/log/elasticsearch/

Configurare l'avvio automatico di SysVInit

  • Aggiungi elasticsearch
    update-rc.d elasticsearch defaults 95 10
  • Avvia il servizio
    service elasticsearch start
  • Test
    curl -X GET http://127.0.0.1:9200

Configurare l'avvio automatico di SystemD

  • Ricarica il processo SystemD
    systemctl daemon-reload
  • Avvia il servizio
    systemctl start elasticsearch
    systemctl enable elasticsearch
  • Test
    curl -X GET http://127.0.0.1:9200