Ubuntu LAMP Apache + MySQL + PHP 7.4

PorErik Guerrero V.

Ubuntu LAMP Apache + MySQL + PHP 7.4

Vamos detallar cómo hemos configurado nuestro servidor con Ubuntu LAMP (Linux Apache Mysql y PHP) 7.4. Al aprovisionar una imagen básica de Ubuntu Focal y seguir estos pasos exactamente, podrá duplicar la imagen de nuestro servidor.

Instale fail2ban y habilite el firewall

$ apt-get update; apt-get upgrade -y; apt-get install -y fail2ban ufw;
# SSH, HTTP and HTTPS
$ ufw allow 22
$ ufw allow 80
$ ufw allow 443
# Omita las siguientes 3 líneas si no planea usar FTP
$ ufw allow 21 
$ ufw allow 50000:50099/tcp 
$ ufw allow out 20/tcp
# Y por último activamos UFW
$ ufw --force enable

Agregue algunos PPA para mantenerse actualizado

$ apt-get install -y software-properties-common
$ apt-add-repository ppa:ondrej/apache2 -y
$ apt-add-repository ppa:ondrej/php -y
# Configurar repositorios MariaDB
$ apt-key adv --fetch-keys 'https://mariadb.org/mariadb_release_signing_key.asc'
$ add-apt-repository 'deb [arch=amd64,arm64,ppc64el]

Instalación de los paquetes base

$ apt-get update; apt-get install -y build-essential curl nano wget lftp unzip bzip2 arj nomarch lzop htop openssl gcc git binutils libmcrypt4 libpcre3-dev make python3 python3-pip supervisor unattended-upgrades whois zsh imagemagick uuid-runtime net-tools zip

Establecemos el timezone to UTC

$ ln -sf /usr/share/zoneinfo/UTC /etc/localtime

Conexión SSH activas configuramos el SSH to KeepAlive

Si desea que SSH Daemon mantenga activas sus conexiones, puede ejecutar lo siguiente

$ sed -i "s/#TCPKeepAlive yes/TCPKeepAlive yes/" /etc/ssh/sshd_config
$ sed -i "s/#ClientAliveInterval 0/ClientAliveInterval 60/" /etc/ssh/sshd_config
$ sed -i "s/#ClientAliveCountMax 3/ClientAliveCountMax 3/" /etc/ssh/sshd_config

Instalación de PHP 7.4 y common PHP packages

$ apt-get install -y php7.4-cli php7.4-dev php7.4-pgsql php7.4-sqlite3 php7.4-gd php7.4-curl php7.4-memcached php7.4-imap php7.4-mysql php7.4-mbstring php7.4-xml php7.4-imagick php7.4-zip php7.4-bcmath php7.4-soap php7.4-intl php7.4-readline php7.4-common php7.4-pspell php7.4-tidy php7.4-xmlrpc php7.4-xsl php7.4-opcache php7.4-apcu

Instalación de Composer

$ curl -sS https://getcomposer.org/installer | php
$ mv composer.phar /usr/local/bin/composer

Instalación y configuración de Memcached

$ apt-get install -y memcached
$ sed -i 's/-l 0.0.0.0/-l 127.0.0.1/' /etc/memcached.conf
$ systemctl restart memcached

Actualizar configuración de PHP CLI

$ sed -i "s/error_reporting = .*/error_reporting = E_ALL/" /etc/php/7.4/cli/php.ini
$ sed -i "s/display_errors = .*/display_errors = On/" /etc/php/7.4/cli/php.ini
$ sed -i "s/memory_limit = .*/memory_limit = 512M/" /etc/php/7.4/cli/php.ini
$ sed -i "s/;date.timezone.*/date.timezone = UTC/" /etc/php/7.4/cli/php.ini

 Configurar  permisos al directorio de sesiones

$ chmod 733 /var/lib/php/sessions
$ chmod +t /var/lib/php/sessions

 Instalación de Apache y PHP-FPM

$ apt-get install -y apache2 apache2-utils php7.4-fpm

Tweak (Retocar o Tunear) PHP-FPM settings

Tenga en cuenta: aquí estamos suprimiendo la salida de error de PHP al configurar estas opciones en valores de producción

$ sed -i "s/error_reporting = .*/error_reporting = E_ALL \& ~E_NOTICE \& ~E_STRICT \& ~E_DEPRECATED/" /etc/php/7.4/fpm/php.ini
$ sed -i "s/display_errors = .*/display_errors = Off/" /etc/php/7.4/fpm/php.ini
$ sed -i "s/memory_limit = .*/memory_limit = 512M/" /etc/php/7.4/fpm/php.ini
$ sed -i "s/upload_max_filesize = .*/upload_max_filesize = 256M/" /etc/php/7.4/fpm/php.ini
$ sed -i "s/post_max_size = .*/post_max_size = 256M/" /etc/php/7.4/fpm/php.ini
$ sed -i "s/;date.timezone.*/date.timezone = UTC/" /etc/php/7.4/fpm/php.ini

# Tune PHP-FPM pool settings

$ sed -i "s/;listen\.mode =.*/listen.mode = 0666/" /etc/php/7.4/fpm/pool.d/www.conf
$ sed -i "s/;request_terminate_timeout =.*/request_terminate_timeout = 60/" /etc/php/7.4/fpm/pool.d/www.conf
$ sed -i "s/pm\.max_children =.*/pm.max_children = 70/" /etc/php/7.4/fpm/pool.d/www.conf
$ sed -i "s/pm\.start_servers =.*/pm.start_servers = 20/" /etc/php/7.4/fpm/pool.d/www.conf
$ sed -i "s/pm\.min_spare_servers =.*/pm.min_spare_servers = 20/" /etc/php/7.4/fpm/pool.d/www.conf
$ sed -i "s/pm\.max_spare_servers =.*/pm.max_spare_servers = 35/" /etc/php/7.4/fpm/pool.d/www.conf
$ sed -i "s/;pm\.max_requests =.*/pm.max_requests = 500/" /etc/php/7.4/fpm/pool.d/www.conf

Tweak (Retocar o Tunear) Apache settings

Modifique la configuración de Apache: ocultemos qué sistema operativo y servidor web está ejecutando este servidor

$ sed -i "s/ServerTokens OS/ServerTokens Prod/" /etc/apache2/conf-available/security.conf
$ sed -i "s/ServerSignature On/ServerSignature Off/" /etc/apache2/conf-available/security.conf

 Instalación latest NodeJS LTS

$ curl -sL https://deb.nodesource.com/setup_14.x | sudo -E bash -
$ apt-get install -y nodejs

Instalación de MariaDB (MySQL) y establezca una contraseña de root segura

$ apt-get install -y mariadb-server

Secure your MariaDB installation

$ mysql_secure_installation

 Instalación phpMyAdmin

$ cd /home/root/
$ wget https://files.phpmyadmin.net/phpMyAdmin/5.1.1/phpMyAdmin-5.1.1-all-languages.tar.xz
$ sudo tar xf phpMyAdmin-5.1.1-all-languages.tar.xz -C /var/www/
$ sudo ln -s /var/www/phpMyAdmin-5.1.1-all-languages/ /var/www/phpmyadmin
$ sudo mkdir /var/www/phpmyadmin/tmp
$ sudo chown www-data: /var/www/phpmyadmin/tmp/
$ sudo cp /var/www/phpmyadmin/config.sample.inc.php /var/www/phpmyadmin/config.inc.php
$ sudo nano /var/www/phpmyadmin/config.inc.php
…
...
$cfg['blowfish_secret'] = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX';
...
/* User used to manipulate with storage */
// $cfg['Servers'][$i]['controlhost'] = '';
// $cfg['Servers'][$i]['controlport'] = '';
$cfg['Servers'][$i]['controluser'] = 'pma';
$cfg['Servers'][$i]['controlpass'] = 'pmapass';
…

 

$ mysql -u root -p
Mysql> create user pma@localhost identified by 'pmapass';
Mysql> create user pma@localhost identified with mysql_native_password by 'pmapass';
Mysql> grant all privileges on phpmyadmin.* to pma@localhost;
Mysql> flush priviligies;
Mysql> > exit;

$ mysql -u pma -p < /var/www/phpmyadmin/sql/create_tables.sql

$ ln -s /var/www/phpmyadmin/ /var/www/html/phpmyadmin;  mkdir /var/www/logs;  chown www-data:www-data /var/www/html; chown www-data:www-data /var/www/logs; chown www-data:www-data /var/www; chmod -R g+rw /var/www;

$ sudo a2ensite phpmyadmin.conf
$ sudo systemctl reload apache2

 

Instalación de Mongodb

MongoDB está instalado pero deshabilitado de forma predeterminada. Haga clic aquí para aprender cómo habilitar MongoDB.

$ apt-get install -y libcurl4-openssl-dev pkg-config libssl-dev mongodb
$ pecl install mongodb

# Agregar extension=mongodb.so a la configuración de PHP-fpm y PHP-cli:

$ echo "extension=mongodb.so" > /etc/php/7.4/fpm/conf.d/30-mongodb.ini
$ echo "extension=mongodb.so" > /etc/php/7.4/cli/conf.d/30-mongodb.ini

 Instalación de Redis

 

 

$ apt install redis-server -y;

# Establecer supervidor systemd y reiniciar Redis

$ sed -i "s/supervised.*/supervised systemd/" /etc/redis/redis.conf; systemctl restart redis.service;

 Crear  configuración Apache virtual host

Editar el archivo /etc/apache2/sites-available/web.conf and set the following

$ nano /etc/apache2/sites-available/web.conf

y agregar las siguientes lineas:

<VirtualHost *:80>

        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/html
        
        # Deny access to any git repository
        RedirectMatch 404 /\.git        

    <FilesMatch \.php$>
        # 2.4.10+ can proxy to unix socket
         SetHandler "proxy:unix:/run/php/php7.4-fpm.sock|fcgi://localhost"
    </FilesMatch>

    <Directory /var/www/>
        Options FollowSymLinks Includes ExecCGI
        AllowOverride All
        Require all granted
    </Directory>

        # Available loglevels: trace8, ..., trace1, debug, info, notice, warn,
        # error, crit, alert, emerg.
        # It is also possible to configure the loglevel for particular
        # modules, e.g.
        #LogLevel alert rewrite:trace3 alias:debug

        CustomLog /var/www/logs/access.log combined
        ErrorLog /var/www/logs/error.log

</VirtualHost>

#D isallow access to xmlrpc
<Files ~ "xmlrpc.php">
        Require all denied
</Files>


<Directory /usr/share/phpMyAdmin>
Options FollowSymlinks
AllowOverride all
Require all granted
</Directory>

Ahora deshabilite el enlace simbólico y predeterminado en su configuración:

$ rm /etc/apache2/sites-enabled/000-default.conf
$ ln -s /etc/apache2/sites-available/web.conf /etc/apache2/sites-enabled/web.conf

Asegúrese de que los módulos de Apache estén habilitados

$ a2enmod suexec rewrite ssl actions include cgi actions proxy_fcgi alias headers;

Instalación de Letsencrypt Certbot

Para ello puede seguir los siguientes pasos descritos en su web oficial:

https://certbot.eff.org/lets-encrypt/ubuntufocal-apache

Reinicar PHP-FPM and Apache

$ systemctl restart php7.4-fpm; systemctl restart apache2;

 

Facebook Comments

About the author

Erik Guerrero V. administrator

Mas de 10 años de experiencia como analista programador, tanto backend como frontend, muchos proyectos tanto intranet, extranets, redes sociales, publicitarios, comercio electrónicos, ERP, CRM, BI, SIst. de Gestion, Email Marketing, Sist. Financieros, Contables, también me desempeño como freelance en mis tiempos libres, como también me dedico a la investigación en cuanto a nuevas tecnologías.

Deja un comentario