En esta guía vamos a hacer una instalación de Apache, PHP y MySQL donde podremos instalar software hecho en PHP (nuestros sitios en PHP) usando un servidor Ubuntu server 12.04 x64. Algunos pasos serán válidos en otras distribuciones. En Debian, por ejemplo debemos ser root para ejecutar algunas cosas en lugar de hacerlo con sudo, en SUSE, debemos usar yast en lugar de apt-get…
Contents
- 1 Instalación básica
- 2 Almacenar todas las páginas dentro del home de nuestro usuario principal
- 3 Módulos útiles para Apach2
- 4 Instalando phpMyAdmin
- 5 Proteger con contraseña una carpeta (por ejemplo la carpeta pma)
- 6 Hacer que phpMyAdmin se identifique automáticamente como un usuario (por ejemplo, root)
Instalación básica
Para instalar Apache escribimos:
$ sudo apt-get install apache
# Confirmamos que queremos instalar y esperamos.
En unos segundos, tendremos el servidor instalado, y si accedemos a la IP del servidor desde nuestro navegador:
Apache creará el usuario www-data y el grupo con el mismo nombre. Los ficheros y los scripts serán accedidos desde esos grupo y usuario.
Aunque cuando queremos reiniciar nuestro servidor:
$ sudo service apache2 restart
vemos el siguiente mensaje:
apache2: Could not reliably determine the server’s fully qualified domain name, using 127.0.1.1 for ServerName
Para arreglarlo, debemos incluir la directiva ServerName en /etc/apache2/httpd.conf con un FQDN (Fully Qualified Domain Name), es decir, el nombre del ordenador, punto, nombre de dominio; como argumento. Si, por ejemplo nuestro FQDN es vps.mydomain.com debemos incluir la siguiente línea en /etc/apache2/httpd.conf:
ServerName vps.mydomain.com
Cuando salvemos el archivo y reiniciemos el servidor, no volveremos a ver el mensaje.
Ahora, instalaremos PHP e instalaremos algunos módulos tanto para Apache como para PHP. Comenzaremos por los de PHP:
$ sudo apt-get install php5 libapache2-mod-php5 php-pear php5-gd php5-mcrypt php-apc php5-intl php5-curl
Aunque puede ser que algunos scripts en PHP requieran otros módulos. Para ver los que están disponibles en nuestra distribución:
$ aptitude search php
Ahora instalaremos el servidor MySQL:
$ sudo apt-get install mysql-server
Aceptamos la confirmación de la instalación y tras unos segundos veremos una pantalla como esta:
Donde debemos escribir la contraseña para nuestro servidor MySQL (usuario root), debemos escoger una contraseña segura y deberemos escribirla dos veces.
Almacenar todas las páginas dentro del home de nuestro usuario principal
Esto lo podemos hacer de muchas formas, depende de cómo queramos organizarnos, y aquí describo la manera que utilizo en algunos de mis servidores. Mi home está en /home/cloud, allí creo un directorio llamado www
~ $ mkdir www
Dentro de ese directorio, creo tantos directorios como sitios web quiera alojar, imaginemos que quiero alojar totaki.com, gaspar.totaki.com y admin.totaki.com (también puedo alojar webs en otros dominios, ya tendremos que comprarlos y hacer que apunten a la ip de nuestro servidor):
~ $ cd www
www $ mkdir totaki.com
www $ mkdir gaspar.totaki.com
www $ mkdir admin.totaki.com
Por supuesto que puedo crear gaspar.totaki.com y admin.totaki.com dentro de totaki.com, pero bueno, eso depende de cada uno de nosotros. Dentro de cada directorio crearé dos directorios más: www, donde pondré los archivos que conformarán la web y logs donde almacenaremos los informes del servidor. (Prefiero almacenar los informes de cada web por separado).
www $ mkdir totaki.com/{www,logs}
www $ mkdir gaspar.totaki.com/{www,logs}
www $ mkdir admin.totaki.com/{www,logs}
Entonces, copiamos los archivos de las diferentes webs en totaki.com/www, gaspar.totaki.com/www, más adelante copiaremos algo en admin.totaki.com/www con algunas herramientas
Tras copiar estos ficheros, debemos crear los sitios en Apache. Para esto, creamos los archivos /etc/apache2/sites-available/totaki.com, /etc/apache2/sites-available/gaspar.totaki.com y /etc/apache2/sites-available/admin.totaki.com ; para cada nuevo sitio que vayamos a crear, debemos crear un nuevo archivo en /etc/apache2/sites-available/ y estos archivos contendrán algo como esto: (ejemplo con totaki.com)
<VirtualHost *:80> ServerAdmin info@totaki.com ServerName totaki.com ServerAlias www.totaki.com DocumentRoot /home/cloud/www/totaki.com/www <Directory /> Options FollowSymLinks AllowOverride All </Directory> <Directory /home/cloud/www/totaki.com/www/> Options FollowSymLinks MultiViews AllowOverride All Order allow,deny allow from all </Directory> ErrorLog "/home/cloud/www/totaki.com/logs/error.log" LogLevel warn CustomLog "/home/cloud/www/totaki.com/logs/access.log" combined </VirtualHost>
Fácilmente podremos crear un script que cree este archivo para cada uno de los sitios que hospedemos. En ServerName podremos colocar admin.totaki.com y gaspar.totaki.com y también alias en ServerAlias para, como en el ejemplo, utilizar también la dirección con www. delante.
Ahora activamos los sitios que acabamos de crear:
$ sudo a2ensite totaki.com
$ sudo a2ensite gaspar.totaki.com
$ sudo a2ensite admin.totaki.com
No os preocupéis si no tenemos nada en admin.totaki.com por el momento. Para hacer que los sitios funcionen debemos recargar la configuración del servidor.
$ sudo service apache2 reload
Podemos utilizar restart, pero es más lento cuando tenemos muchos sitios activos y el servidor se apagará por completo antes de reiniciar por lo que los usuarios que vengan en ese momento se perderán (o recibirán un error del servidor).
Incluso después de activar un sitio, es posible cambiar su configuración editando /etc/apache2/sites-available/[nombre_del_sitio], la activación del sitio simplemente crea un enlace a este fichero en /etc/apache2/sites-enabled/[nombre_del_sitio].
Módulos útiles para Apach2
Activar módulos es similar a activar sitios, en lugar de a2ensite utilizaremos a2enmod. En primer módulo, y uno de mis favoritos es mod_rewrite. Permite que los sitios utilicen URLs amigables para el usuario haciendo una redirección interna a la hora de llamar al archivo dentro del servidor. Muchísimas webs lo usan. Para activarlo debemos escribir:
$ sudo a2enmod rewrite
$ sudo service apache2 restart
Y para utilizar este módulo debemos, además, escribir algo en el archivo de configuración del sitio /etc/apache2/sites-available/[nombre_del_sitio], dentro de la etiqueta <Directory>, algo como esto:
<Directory /home/cloud/www/site_name/www> ... AllowOverride All .... </Directory>
(esto ya lo tenemos en el ejemplo de configuración de sitio un poco más arriba).
También podemos añadir el módulo SSL para sitios https:
$ sudo a2enmod ssl
Podemos ver los módulos disponibles en el directorio /etc/apache2/mods-available.
Instalando phpMyAdmin
Para administrar de forma sencilla las bases de datos MySQL, podemos instalar phpMyAdmin en nuestro servidor, por supuesto, protegido con contraseña. Debemos crear un nuevo directorio (por ejemplo tarbalss) para el archivo comprimido de phpMyadmin (y procederemos así para los archivos comprimidos que vayamos a instalar, a mí me gusta tenerlos a mano para el futuro).
www $ mkdir admin.totaki.com/tarballs
Ahora, descargamos el programa, para ello, nos dirigimos a la página oficial y bajamos la última versión. En el momento en el que escribo esta guía, vamos por la versión 4.0.2, podemos descargar la versión para todos los idiomas (all-languages) o la versión en inglés en formato .tar.bz2 (por ejemplo). Intentamos descargar el fichero y copiamos el enlace al archivo de descarga. Lo pegaremos en la sesión ssh con nuestro servidor (wget delante, para descargar):
www $ cd admin.totaki.com/tarballs
www/admin.totaki.com/tarballs $ wget [download_file].tar.bz2
En mi caso,
www/admin.totaki.com/tarballs $ wget http://sourceforge.net/projects/phpmyadmin/files/phpMyAdmin/4.0.2/phpMyAdmin-4.0.2-all-languages.tar.bz2/download
Ahora extraemos el archivo en nuestro directorio www:
www/admin.totaki.com/tarballs $cd ../www
www/admin.totaki.com/www/ $ tar xvjf ../tarballs/phpMyAdmin-4.0.2-all-languages.tar.bz2
Esto creará otro directorio (phpMyAdmin-4.0.2-all-languages/) podemos renonbrarlo a pma o phpMyAdmin (es decir, un directorio un poco más sencillo de escribir):
www/admin.totaki.com/www $ mv phpMyAdmin-4.0.2-all-languages pma
En este punto, podemos borrar el directorio setup, para evitar que algún intruso cargue estos scripts. Ya tenemos phpMyAdmin instalado, nos preguntará el usuario y password de la base de datos cuando entremos en http://admin.totaki.com/pma . Podemos dar otro par de pasos más para hacer más segura la entrada con un password extra, lo que nos ayudará para ejecutar herramientas futuras en nuestro servidor a través de admin.totaki.com; así como para hacer que phpMyAdmin entre directamente como root (o como cualquier usuario).
Proteger con contraseña una carpeta (por ejemplo la carpeta pma)
Para hacer que Apache pida usuario y contraseña antes de entrar en una carpeta de la web, primero debemos crear un fichero .htaccess (punto htaccess), eso es, un archivo oculto de UNIX; también debemos almacenar las contraseñas fuera del raíz de la web, por ejemplo en www/admin.totaki.com/passwords.
Las contraseñas debemos crearlas con el programa htpasswd, para ello (el usuario se llamará gaspar):
$ cd www/admin.totaki.com
www/admin.totaki.com $ mkdir passwords
www/admin.totaki.com $ htpasswd -c passwords/www gaspar
New password:
Re-type new password
Adding password for user Gaspar
En este ejemplo hemos creado el archivo www dentro de www/admin.totaki.com/passwords y allí, hemos creado el usuario gaspar. El programa nos pedirá la contraseña dos veces. Entonces editaremos el archivo www/admin.totaki.com/www/.htaccess añadiendo la siguiente información:
AuthUserFile /home/cloud/www/admin.totaki.com/passwords/www
AuthType Basic
AuthName “Zona privada”
Require valid-user
Ahora, cuando un usuario entre en la web, verá un mensaje como este:
Hacer que phpMyAdmin se identifique automáticamente como un usuario (por ejemplo, root)
No es recomendable hacer que nos identifiquemos con privilegios de superusuario (root), pero es útil si tenemos varios usuarios en nuestro sistema y queremos que se identifiquen automáticamente en sus bases de datos. Sólo mostraré una configuración básica de phpMyAdmin.
Activaremos algunas características de phpMyAdmin que requieren una base de datos, entonces, primero, crearemos la base de datos y las tablas que phpMyAdmin necesita gracias a un archivo sql incluido con el programa:
$ mysql -u root -p < /home/cloud/www/admin.totaki.com/www/pma/scripts/create-tables.sql
Una vez hayamos instalado esto, vamos a crear un usuario en MySQL y le entregaremos privilegios sobre la base de datos phpmyadmin:
$ mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 104mysql> CREATE USER ‘pma’@’localhost’ IDENTIFIED BY ‘axK12jMf’ [clave para el usuario pma]
Query OK, 0 rows affected (0.03 sec)mysql> GRANT SELECT, INSERT, DELETE, UPDATE ON `phpmyadmin`.* TO ‘pma’@’localhost’;
mysql> exit
Ya está creado, ahora debemos hacer que phpMyAdmin utilice el usuario pma para acceder a la base de datos phpmyadmin. Ahora crearemos el archivo de configuración basado en el archivo de configuración de ejemplo:
www/admin.totaki.com/www/pma/ $ cp config.sample.inc.php config.inc.php
Ahora generamos una clave aleatoria, utilizada para las cookies en phpmyadmin:
pwgen -yns 46 1
Y, por último, editamos el archivo config.inc.php cambiando lo siguiente:
$cfg[‘blowfish_secret’] = ”Generated random key’; /* YOU MUST FILL IN THIS FOR COOKIE AUTH! */…..…..$i++;$cfg[‘Servers’][$i][‘verbose’] = ‘Servidor Local’;
$cfg[‘Servers’][$i][‘host’] = ‘localhost’;
$cfg[‘Servers’][$i][‘port’] = ”;
$cfg[‘Servers’][$i][‘socket’] = ”;
$cfg[‘Servers’][$i][‘connect_type’] = ‘tcp’;
$cfg[‘Servers’][$i][‘extension’] = ‘mysqli’;
$cfg[‘Servers’][$i][‘auth_type’] = ‘config’;
$cfg[‘Servers’][$i][‘user’] = ‘root’;
$cfg[‘Servers’][$i][‘password’] = ‘NUESTRA CLAVE DE ROOT DE MYSQL’;
$cfg[‘Servers’][$i][‘controluser’] = ‘pma’;
$cfg[‘Servers’][$i][‘controlpass’] = ‘axK12jMf”;/* 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][‘tracking’] = ‘pma_tracking’;
$cfg[‘Servers’][$i][‘designer_coords’] = ‘pma_designer_coords’;
$cfg[‘Servers’][$i][‘userconfig’] = ‘pma_userconfig’;….…./* Select mysqli if your server has it */
$cfg[‘Servers’][$i][‘extension’] = ‘mysqli’;
Pingback: ownCloud un 2015. Instalación básica (I) - Poesía Binaria