Instalar un Servidor LAMP en Ubuntu 16.04


Instalar MariaDB

Vamos a la página de MariaDB luego a Download, otra vez a Download y ahora a repository configuration tool.

Seleccionamos la versión de nuestra distro, en mi caso 16.04 LTS "xenial".

El código que me da en este momento es:

sudo apt-get install software-properties-common
sudo apt-key adv --recv-keys --keyserver hkp:// 0xF1656F24C74CD1D8
sudo add-apt-repository 'deb [arch=amd64,i386] xenial main'

sudo apt-get update
sudo apt-get install mariadb-server mariadb-client

Ten cuidado que en el futuro el mismo puede ser otro...

Asegurar MySQL

Para asegurar nuestra instalación al igual que con MySQL hacemos:

sudo mysql_secure_installation

Comandos Útiles para MySQL

Iniciar el servicio:

sudo systemctl start mysql

Reiniciar el servicio

sudo systemctl restart mysql

Ver el estado del servicio:

sudo systemctl status mysql.service

Para salir presiona Ctrl+C

Optimizar MySQL para InnoDB

Detener el servicio

sudo systemctl stop mysql

Ser Super Usuario

sudo su

Crear una copia de seguridad de nuestros archivos:

tar czf /home/USER/Documentos/respaldo_mysql.tar.gz /var/lib/mysql/

Remplaza "USER" con tu usuario

Ir al directorio donde se encuentran los archivos

cd /var/lub/mysql

Borrar los archivos existentes

rm ib*

Crear una copia de seguridad del archivo de configuración de MySQL

cp /etc/mysql/my.cnf /etc/mysql/my.cnf_bkp

Si descargas el archivo que yo proveo a tu directorio raíz has:

cp /home/USER/my.cnf /etc/mysql

Cambia "USER" por tu usuario, no necesitamos sudo porque ya somos super usuario.

Mi archivo de configuración de my.cnf es:

# MariaDB database server configuration file.
# You can copy this file to one of:
# - "/etc/mysql/my.cnf" to set global options,
# - "~/.my.cnf" to set user-specific options.
# One can use all long options that the program supports.
# Run program with --help to get a list of available options and with
# --print-defaults to see which it would actually understand and use.
# For explanations see

# This will be passed to all mysql clients
# It has been reported that passwords should be enclosed with ticks/quotes
# escpecially if they contain "#" chars...
# Remember to edit /etc/mysql/debian.cnf when changing the socket location.
port = 3306
socket = /var/run/mysqld/mysqld.sock

# Here is entries for some specific programs
# The following values assume you have at least 32M ram

# This was formally known as [safe_mysqld]. Both versions are currently parsed.
socket = /var/run/mysqld/mysqld.sock
nice = 0

# * Basic Settings
user = mysql
pid-file = /var/run/mysqld/
socket = /var/run/mysqld/mysqld.sock
port = 3306
basedir = /usr
datadir = /var/lib/mysql
tmpdir = /tmp
lc_messages_dir = /usr/share/mysql
lc_messages = en_US
# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
bind-address =
# * Fine Tuning
#max_connections = 100
#connect_timeout = 5
#wait_timeout = 600
max_allowed_packet = 512M
#thread_cache_size       = 128
#sort_buffer_size = 4M
#bulk_insert_buffer_size = 16M
#tmp_table_size = 32M
#max_heap_table_size = 32M
# * MyISAM
# This replaces the startup script and checks MyISAM tables if needed
# the first time they are touched. On error, make copy and try a repair.
myisam_recover_options = BACKUP
#key_buffer_size = 128M
#open-files-limit = 2000
#table_open_cache = 400
#myisam_sort_buffer_size = 512M
#concurrent_insert = 2
#read_buffer_size = 2M
#read_rnd_buffer_size = 1M
# * Query Cache Configuration
# Cache only tiny result sets, so we can fit more in the query cache.
#query_cache_limit = 128K
#query_cache_size = 64M
# for more write intensive setups, set to DEMAND or OFF
#query_cache_type = DEMAND
# * Logging and Replication
# Both location gets rotated by the cronjob.
# Be aware that this log type is a performance killer.
# As of 5.1 you can enable the log at runtime!
#general_log_file        = /var/log/mysql/mysql.log
#general_log             = 1
# Error logging goes to syslog due to /etc/mysql/conf.d/mysqld_safe_syslog.cnf.
# we do want to know about network errors and such
log_warnings = 2
# Enable the slow query log to see queries with especially long duration
slow_query_log_file = /var/log/mysql/mariadb-slow.log
long_query_time = 10
#log_slow_rate_limit = 1000
log_slow_verbosity = query_plan

# The following can be used as easy to replay backup logs or for replication.
# note: if you are setting up a replication slave, see README.Debian about
#       other settings you may need to change.
#server-id = 1
#report_host = master1
#auto_increment_increment = 2
#auto_increment_offset = 1
log_bin = /var/log/mysql/mariadb-bin
log_bin_index = /var/log/mysql/mariadb-bin.index
# not fab for performance, but safer
#sync_binlog = 1
#expire_logs_days = 10
#max_binlog_size         = 100M
# slaves
#relay_log = /var/log/mysql/relay-bin
#relay_log_index = /var/log/mysql/relay-bin.index
#relay_log_info_file = /var/log/mysql/
# If applications support it, this stricter sql_mode prevents some
# mistakes like inserting invalid dates etc.
# * InnoDB
# InnoDB is enabled by default with a 10MB datafile in /var/lib/mysql/.
# Read the manual for more InnoDB related options. There are many!
default_storage_engine = InnoDB
# you can't just change log file size, requires special procedure
#innodb_log_file_size = 50M
#innodb_buffer_pool_size = 256M
#innodb_log_buffer_size = 8M
#innodb_file_per_table = 1
#innodb_open_files = 400
#innodb_io_capacity = 400
#innodb_flush_method = O_DIRECT
innodb_buffer_pool_size = 512M
innodb_additional_mem_pool_size = 50M
innodb_log_file_size = 128M
innodb_log_buffer_size = 8M
innodb_flush_log_at_trx_commit = 2
innodb_lock_wait_timeout = 60
# * Security Features
# Read the manual, too, if you want chroot!
# chroot = /var/lib/mysql/
# For generating SSL certificates I recommend the OpenSSL GUI "tinyca".
# ssl-ca=/etc/mysql/cacert.pem
# ssl-cert=/etc/mysql/server-cert.pem
# ssl-key=/etc/mysql/server-key.pem

# * Galera-related settings
# Mandatory settings
# Allow server to accept connections on all interfaces.
# Optional setting

#max_allowed_packet = 16M

#no-auto-rehash # faster start of mysql but no tab completion

#key_buffer = 16M

# * IMPORTANT: Additional settings that can override those from this file!
#   The files must end with '.cnf', otherwise they'll be ignored.
!includedir /etc/mysql/conf.d/

Iniciar el servicio

systemctl start mysql

Dejar de ser super usuario


Instalar Apache2 en Ubuntu 16.04

Para instalar Apache2 hacemos en la consola:

sudo apt-get install apache2 -y

Instalar PHP7 en Ubuntu 16.04

Para instalar PHP7 y el módulo que conecta PHP con Apache2 hacemos:

sudo apt-get install php7.0 libapache2-mod-php7.0 -y

Tenemos que reiniciar el servidor para que los cambios surjan efecto.

sudo systemctl restart apache2

Instalar los módulos de PHP

Para poder correr Drupal necesitamos algunos módulos de PHP.

Puedes ver los requisitos de Drupal haciendo clic aquí.

Puedes ver los requisitos específicos de Drupal 7 haciendo clic aquí.

Yo voy a instalar los siguientes:

sudo apt-get install php7.0-mysql php7.0-mcrypt php7.0-curl php-all-dev php7.0-gd php-pear php-imagick php7.0-pspell php7.0-xmlrpc php7.0-mbstring -y

Una vez finalizada las descargas de los módulos tenemos que volver a reiniciar el servidor.

sudo systemctl restart apache2

Optimizar PHP para Drupal

Vamos ahora a optimizar PHP7, pero antes vamos a hacer una copia:

sudo nano /etc/php/7.0/apache2/php.ini

Ahora si editamos el archivo php.ini y modificamos los siguientes valores:

sudo nano /etc/php/7.0/apache2/php.ini
realpath_cache_ttl = 36000
max_execution_time = 300
max_input_time = 60
memory_limit = 512M
post_max_size = 128M
upload_max_filesize = 128M
default_socket_timeout = 60

Tenemos que volver a reiniciar Apache2

sudo systemctl restart apache2

Instalar phpMyAdmin en Ubuntu 16.04

sudo apt-get install phpmyadmin php-mbstring php-gettext -y

Crear el VirtualHost

Este es mi archivo para el VirtualHost en Ubuntu 16.04

sudo su
cd /etc/apache2/sites-available
cp 000-default.conf server.conf
cd ../site-enabled
ln -s ../site-available/server.conf
nano /etc/apache2/sites-enabled/server.conf

Mi archivo de VirtualHost

<VirtualHost server:80>
ServerName server
        DocumentRoot /home/charly/www

        <Directory />
        Options FollowSymLinks
        AllowOverride All

        <Directory /home/charly/www/>
        Options Indexes FollowSymLinks MultiViews
        AllowOverride All
        Require all granted
        allow from all

        ErrorLog ${APACHE_LOG_DIR}/server.error.log
        CustomLog ${APACHE_LOG_DIR}/server.access.log combined


Recuerda cambiar la ruta por la que corresponda en tu caso.

Ahora probamos que la configuración sea válida con:

sudo a2ensite nuevo_nombre
sudo a2enmod rewrite

No te olvides de crear el directorio www.

Añadir la IP al archivo hosts

Editamos el archivo hosts y especificamos una IP, la misma que le hayas asignado a tu equipo.

sudo nano /etc/hosts
Y luego: server

Tenemos que volver a reiniciar el servidor.

sudo systemctl restart apache2

Instalar Composer

Composer es útil para instalar Drush, si tu no deseas Drush no necesitas instalar Composer.

sudo apt-get install curl git -y
curl -sS | php
sudo mv composer.phar /usr/local/bin/composer

Ahora tenemos que añadir a nuestro Bashrc los cambios.

sudo nano ~/.bashrc

Y ponemos:

# Composer

Tenemos que crear un alías para cuando descargamos Drush, así que hacemos:

sudo ln -s /home/carlos/.config/composer/vendor/drush/drush/drush /usr/local/bin

Actualizamos el bash

source  ~/.bashrc

Instalar Drush vía Composer

La parte difícil ya pasó, ahora podemos instalar Drush vía Composer haciendo:

composer global require drush/drush:8.x

Descargar Drupal 7 con Drush

drush dl --default-major=7

Instalar Drupal 7 vía Drush

Para instalar Drupal tenemos que primero encontrarnos dentro del directorio del sitio.

Luego en la consola hacemos:

drush si --db-url=mysql://root:[email protected]/d7 --account-name=drupal --account-pass=drupal [email protected] --site-name="Drupal" -y

Donde root:root es el usuario y la contraseña de MySQL.

d7 es el nombre que le quiero dar a la base de datos del sitio Drupal.

Los demás valores son el nombre de usuario, la contraseña y el correo para el usuario 1 de Drupal, el más importante ya que es el que instala el sitio.

Modificar los permisos del sitio

Para poder descargar módulos, temas y demás archivos tenemos que fijar los permisos correctamente.

Para eso hacemos:

sudo chown -R www-data:USER sites/default
sudo chmod 755 -R sites/default/files
mkdir sites/all/translations
sudo chown www-data:USER sites/all/translations

Recuerda cambiar USER por tu nombre de usuario.

Solución a Database 4 byte UTF-8-Support

Drupal 7.50 ahora añade soporte para emojis, símbolos Asiáticos y matemáticos.

Puedes saber más visitando este enlace:

Para convertir nuestra base de datos a UTF8MB4 puedes informarte en:

Ya tenemos hecho la primera parte, que correspondía a añadir estás líneas a nuestro archivo my.cnf:


Ahora tenemos que descargar un complemento de Drush el cual nos permite hacer esto.

drush @none dl utf8mb4_convert-7.x

Esto tenemos que hacerlo una sola vez.

Ahora limpiamos la cache de Drush haciendo:

drush cc drush

Ahora dentro de nuestro directorio en Drush hacemos:

drush utf8mb4-convert-databases

Es muy importante hacer una copia de seguridad primero

La última parte para poder tener utf8mb4 funcionando sería la de editar nuestro archivo settings.php el cual se encuentra en sites/default

Y añadir al final de la configuración de MySQL las siguientes líneas:

  'charset' => 'utf8mb4',
  'collation' => 'utf8mb4_general_ci',

Quedando de la siguiente manera:

$databases['default']['default'] = array(
  'driver' => 'mysql',
  'database' => 'databasename',
  'username' => 'username',
  'password' => 'password',
  'host' => 'localhost',
  'charset' => 'utf8mb4',
  'collation' => 'utf8mb4_general_ci',

Sistema Operativo


Landing Page con Bootstrap

Landing Page con Bootstrap y Gulp

En Youtube

Suscríbete a mi canal

Suscríbete a las noticias

* requerido

Inicio de sesión