Web Hosting GRATIS en Google Cloud Platform
En la Nube de Google tenemos la posibilidad de instalar varios programas y tecnologías para poder experimentar y aprender. Entre las cosas que nos ofrecen está WordPress hasta agotar la cuota mensual gratuita. Pero ya tenemos instalado y funcionando un VPS GRATIS mensual como lo explicamos en este Apunte IT. Entonces, por qué limitarnos a una cuota mensual si podemos tener nuestro propio web hosting gratis donde podemos montar cualquier página web, incluso un blog personal potenciado por WordPress? En el presente artículo explico como instalar un entorno LAMP optimizado para este VPS FREE.
Índice de artículo
Prerequisitos
Antes de continuar debemos contar con lo siguiente:
- Un VPS Linux.
- De preferencia tener instalada una distribución Ubuntu.
- Tener una IP pública fija.
- Contar con un dominio en internet. U obtener un Dominio Gratis como se explica en este Apunte IT.
Instalar entorno LAMP
Para montar un webhosting es necesario tener instalado un entorno LAMP, que significa Linux Apache MySQL PHP.
Apache es el servidor web que vamos a utilizar. MySQL es el motor de base de datos para poder gestionar los datos que se muestren en el sitio web y PHP es el motor de este lenguaje de programación utilizado por varios motores de sitios web.
Es posible instalar estos programas por separado. Pero en nuestro caso vamos a utilizar el programa Tasksel que es un administrador de entornos desarrollado por la comunidad Debian y que instala todo el entorno LAMP-Server por nosotros con las últimas versiones de cada programa y sus dependencias. Para eso hay que seguir los pasos detallados debajo.
- Asegurarse de tener instalado en modo correcto el programa dialog.
$ sudo apt install dialog
- Instalar el paquete tasksel.
$ sudo apt install tasksel
- Instalar la suite de LAMP.
$ sudo tasksel install lamp-server
Verificar el webserver y configurar el dominio
En este punto ya tenemos el servidor web gratis funcionando y listo para alojar páginas web. Para poder verificar el funcionamiento de Apache trae una página de prueba para ser presentada al acceder al sitio web.
Para poder acceder debemos colocar en un navegador web la IP externa del VPS. Para obtener la IP del servidor podemos ejecutar el siguiente comando.
$ curl ifconfig.me
La Consola de Google Cloud nos permite reclamar una IP fija externa para el VPS GRATIS mensual del que estamos haciendo uso.
Ingresamos al menú principal y nos deslizamos hasta la opción de «Red de VPC» y luego en la sección «Direcciones IP externas».
Una vez allí debemos desplegar en la columna «Tipo» y pasar de «Efímera» a «Estática».
Luego de que nos aseguramos tener una IP fija en nuestro VPS debemos ingresar al servicio DNS que administra nuestro dominio e ingresar la IP externa a nuestro dominio de internet. Si deseas conocer como funcionan los servicios DNS puedes enterarte en este Apunte IT. También puede enterarse el modo en el que puede obtener un Dominio Web GRATIS en este otro Apunte IT.
Es posible que el acceso al nuevo dominio demore desde algunos minutos hasta algunas horas en propagarse por toda la internet. Para evitar esta demora es posible editar nuestra lista de hosts para poder resolver el dominio en modo local.
- En Linux editar el archivo /etc/hosts y agregar la siguiente línea. Recuerda reemplazar la IP y el nombre del dominio por el tuyo.
TIP: En Windows debes editar el archivo hosts que generalmente se encuentra en la ruta C:\Windows\System32\drivers\etc\hosts
Configurar Apache
Una vez funcionando el servidor web vamos a personalizar la configuración para nuestro sitio web.
- Acceder a /etc/apache2/sites-available.
$ cd /etc/apache2/sites-available
- Copiar 000-default.conf a apuntesit.ml.conf
$ sudo cp 000-default.conf apuntesit.ml.conf
- Editar el nuevo archivo y configurar el nuevo dominio.
<Directory /var/www/html> Options Indexes FollowSymLinks AllowOverride All Require all granted </Directory> <VirtualHost *:80> ... ServerName apuntesit.ml ServerAlias www.apuntesit.ml ... </VirtualHost>
- Desactivar el dominio default.
$ sudo a2dissite 000-default.conf
- Activar el nuevo dominio.
$ sudo a2ensite apuntesit.ml.conf
- Activar los módulos necesarios para que funcionen en el modo correcto la mayoría de los CMS.
$ sudo a2enmod rewrite headers cgi
- Utilizar el comando indicado para verificar la configuración de Apache.
$ sudo apache2ctl configtest
- Recargar la nueva configuración.
$ sudo systemctl reload apache2
- Verificar en el navegador que la pagina por defecto de Apache funciona con el dominio nuevo.
Securizar MySQL
La instalación básica de MySQL no trae contraseñas para el usuario root que es el administrador del motor de base de datos y trae configurada una base de datos de pruebas y acceso para usuarios anónimos y en modo remoto. Para poder contrarestar esas brechas de seguridad la comunidad creó una herramienta que nos permite realizar una serie de pasos que nos permita colocer una contraseña al usuario root y determinar por nosotros mismos si deseamos asegurar aún más el sistema DB. Para eso debemos ejecutar el comando mostrado a continuación y realizar las configuraciones indicadas.
$ sudo mysql_secure_installation Securing the MySQL server deployment. Connecting to MySQL using a blank password. VALIDATE PASSWORD COMPONENT can be used to test passwords and improve security. It checks the strength of password and allows the users to set only those passwords which are secure enough. Would you like to setup VALIDATE PASSWORD component? Press y|Y for Yes, any other key for No: y There are three levels of password validation policy: LOW Length >= 8 MEDIUM Length >= 8, numeric, mixed case, and special characters STRONG Length >= 8, numeric, mixed case, special characters and dictionary file Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 1 <---- En ambientes productivos elegir "2". Please set the password for root here. New password: Re-enter new password: Estimated strength of the password: 50 Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : y By default, a MySQL installation has an anonymous user, allowing anyone to log into MySQL without having to have a user account created for them. This is intended only for testing, and to make the installation go a bit smoother. You should remove them before moving into a production environment. Remove anonymous users? (Press y|Y for Yes, any other key for No) : y Success. Normally, root should only be allowed to connect from 'localhost'. This ensures that someone cannot guess at the root password from the network. Disallow root login remotely? (Press y|Y for Yes, any other key for No) : y Success. By default, MySQL comes with a database named 'test' that anyone can access. This is also intended only for testing, and should be removed before moving into a production environment. Remove test database and access to it? (Press y|Y for Yes, any other key for No) : y - Dropping test database... Success. - Removing privileges on test database... Success. Reloading the privilege tables will ensure that all changes made so far will take effect immediately. Reload privilege tables now? (Press y|Y for Yes, any other key for No) : y Success. All done!
Configurar PHP
Para cumplir con los requerimientos de la mayoría de los CMS es necesario instalar algunas librerías extras para el manejo de compresión de archivos, optimización de imágenes u otras funcionalidades.
$ sudo apt install php-curl php-gd php-mbstring php-xml php-xmlrpc php-intl php-zip php-imagick
- Editar el archivo php.ini para apache que se encuentra en la ruta /etc/php/7.4/apache2/php.ini.
- En el archivo php.ini editar los valores indicados a continuación «max_input_time=30», «upload_max_filesize=20M» y «post_max_size=21M».
- Recargar la nueva configuración.
$ sudo systemctl reload apache2
Crear la Base de Datos para WordPress
- Acceder a MySQL por consola.
sudo mysql -u root
- Crear la DB de wordpress que en este ejemplo vamos a llamarla del mismo modo.
mysql> CREATE DATABASE wordpress;
- Crear el usuario para la base de datos creada y asignarle la contraseña.
mysql> CREATE USER 'wordpressuser' IDENTIFIED BY '123Access!';
- Asignar los permisos de administración de la base de datos al usuario creado.
mysql> GRANT ALL ON wordpress.* TO 'wordpressuser';
- Salir de MySQL con «quit«.
Instalar WordPress
- Ingresar a la ruta /var/www/html y renombrar el archivo index.html.
$ cd /var/www/html $ sudo mv index.html index.html.bak
- Descargar la última versión de WordPress.
$ sudo wget https://wordpress.org/latest.tar.gz
- Descomprimir el archivo descargado.
$ sudo tar xvf latest.tar.gz
- Mover todos los archivos del directorio wordpress al directorio superior y luego eliminar el directorio wordpress y el archivo descargado.
$ cd wordpress $ sudo mv * .. $ cd .. $ sudo rmdir wordpress $ sudo rm latest.tar.gz
- Renombrar el archivo wp-config-sample.php a wp-config.php.
$ sudo mv wp-config-sample.php wp-config.php
- Editar wp-config.php con los accesos a la base de datos.
... // ** MySQL settings - You can get this info from your web host ** // /** The name of the database for WordPress */ define( 'DB_NAME', 'wordpress' ); /** MySQL database username */ define( 'DB_USER', 'wordpressuser' ); /** MySQL database password */ define( 'DB_PASSWORD', '123Access!' ); /** MySQL hostname */ define( 'DB_HOST', 'localhost' ); ...
- Eliminar todos los AuthKeys y generar nuevos en el sitio https://api.wordpress.org/secret-key/1.1/salt/.
... /**#@+ * Authentication Unique Keys and Salts. * * Change these to different unique phrases! * You can generate these using the {@link https://api.wordpress.org/secret-key/1.1/salt/ WordPress.org secret-key service} * You can change these at any point in time to invalidate all existing cookies. This will force all users to have to log in again. * * @since 2.6.0 */ define('AUTH_KEY', 'CHANGEME'); define('SECURE_AUTH_KEY', 'CHANGEME'); define('LOGGED_IN_KEY', 'CHANGEME'); define('NONCE_KEY', 'CHANGEME'); define('AUTH_SALT', 'CHANGEME'); define('SECURE_AUTH_SALT', 'CHANGEME'); define('LOGGED_IN_SALT', 'CHANGEME'); define('NONCE_SALT', 'CHANGEME'); /**#@-*/ ...
- Crear el archivo vacío .htaccess para que WordPress pueda realizar las configuraciones necesarias en las configuraciones posteriores cuando utilicemos el nuevo blog.
$ sudo touch .htaccess
- Cambiar los permisos en los archivos de wordpress para que Apache pueda escribir en la estructura de directorio cuando instalemos nuevos plugins o subamos imágenes al crear artículos en el blog.
$ sudo chown -R www-data:www-data * && sudo chown www-data:www-data .htaccess
- Instalar el sitio de WordPress accediendo por el navegador web al dominio del sitio.
Optimizar Apache
Apache tiene varios módulos y configuraciones que se pueden activar y configurar a nuestro entorno para poder obtener el mejor rendimiento del servidor web. Uno de los módulos ee MPM Prefork que viene por defecto. La configuración mostrada debajo es la sugerida para un blog personal con poco tráfico de visitantes y para un VPS de pocos recursos como el que utilizamos. Editar el archivo indicado con la configuración detallada.
$ sudo vim /etc/apache2/mods-enabled/mpm_prefork.conf
# prefork MPM # StartServers: number of server processes to start # MinSpareServers: minimum number of server processes which are kept spare # MaxSpareServers: maximum number of server processes which are kept spare # MaxRequestWorkers: maximum number of server processes allowed to start # MaxConnectionsPerChild: maximum number of requests a server process serves <IfModule mpm_prefork_module> StartServers 1 MinSpareServers 2 MaxSpareServers 5 MaxRequestWorkers 10 MaxConnectionsPerChild 1000 </IfModule> # vim: syntax=apache ts=4 sw=4 sts=4 sr noet
Existe un pequeño script con el cual podemos realizar un análisis del rendimiento de esta configuración con sugerencias de mejoras según el uso que le demos a nuestro webhosting grtuito.
- Posicionarnos en el directorio home de nuestro usuario.
$ cd ~
- Descargar el script como se muestra.
$ wget https://raw.githubusercontent.com/richardforth/apache2buddy/master/apache2buddy.pl
- Otorogar el permiso de ejecución al script descargado.
$ chmod +x apache2buddy.pl
- Ejecutar el script y definir si es necesaria alguna acción sugerida.
$ sudo ./apache2buddy.pl
Resúmen
Para terminar este artículo es necesario recordar que el servidor VPS es de muy bajo rendimiento y este artículo está destinado a la implementación de un webhosting gratuito para realizar pruebas y que tengan un bajo tráfico de visitantes o procesos. Como muestra de que esto funciona es este mismo blog.
Si! Apuntes IT está funcionando en un webhosting gratis montado en un vps gratis en la nube de Google!
Como siempre dejo el video realizado para el presente artículo y los invito a que sigan la cuenta @ApuntesIT en Twitter y que se suscriban al canal de Youtube para seguir compartiendo conocimiento.
Trabajando desde el año 1990 en el mercado de la tecnología. Técnico en Electrónica. Administrador de Sistemas. Administrador de Redes. Técnico en telecomunicaciones. Técnico de plataforma satelital. Incursiono en el Software Libre desde mediados del 1997. Desde entonces utilicé varias distribuciones GNU/Linux comenzando con un RedHat 5.0
Formé parte del Core Team y miembro del grupo de desarrollo del Proyecto UTUTO.