Instalación de PHP en servidor Ubuntu

Hay dos opciones para instalar Apache en nuestro servidor Ubuntu, por módulo de apache (la forma normal) o por cgi. La forma preferible es a través de módulo, pero no todos los servidores lo permiten (como me ha pasado a mi hoy debido a que no tenía acceso a los repositorios del apt).

Importante aclarar que la forma ideal es hacerlo a través de apache puesto que por CGI parece ser que el rendimiento es mucho peor.

Pasos para la instalación por módulo de Apache

1º Actualizamos la lista de paquetes.

sudo apt-get update

2º Actualizamos los paquetes.

sudo apt-get upgrade

3º En caso de que ejecutando el comando anterior no se haya actualizado el php es porque posiblemente no hemos añadido el paquete de PHP. Lo haremos de la siguiente forma:

sudo apt-add-repository ppa:ondrej/php

4º Volvemos a ejecutar “sudo apt-get update” y posteriormente instalamos la versión de php que queramos

  • Para PHP 5.5 sudo apt-get install php5.5
  • Para PHP 5.6 sudo apt-get install php5.6
  • Para PHP 7 sudo apt-get install php7.0

Paso para la instalación por CGI de PHP

Descargamos la versión que queramos de PHP (en nuestro caso la 7.06)

2º A través de ftp subimos los archivos a una ruta. En nuestro caso será /usr/local/php706/.

Modificamos el archivo /etc/apache2/sites-available/default

En nuestro caso nos quedó de la siguiente manera:

<VirtualHost *:80>
  ServerAdmin webmaster@localhost
  ServerName blablabla.yises.com
  DocumentRoot /var/www

  <Directory /usr/local/php706/bin>
    AllowOverride None
    Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
    Order allow,deny
    Allow from all
  </Directory>

  ScriptAlias /php706-cgi /usr/local/php706/bin

  <Directory /var/www>
    Action php706-cgi /php706-cgi/php-cgi
    AddHandler php706-cgi .php
    <FilesMatch "\.php$">
      SetHandler php706-cgi
    </FilesMatch>
    Options Indexes FollowSymLinks
    AllowOverride All
    Order allow,deny
    allow from all
  </Directory>

  ErrorLog ${APACHE_LOG_DIR}/error.log

  # Possible values include: debug, info, notice, warn, error, crit,
  # alert, emerg.
  LogLevel warn

  CustomLog ${APACHE_LOG_DIR}/access.log combined

  Alias /doc/ "/usr/share/doc/"
  <Directory "/usr/share/doc/">
    Options Indexes MultiViews FollowSymLinks
    AllowOverride None
    Order deny,allow
    Deny from all
    Allow from 127.0.0.0/255.0.0.0 ::1/128
  </Directory>
</VirtualHost>

4º Reiniciamos el servicio de apache

sudo service apache2 restart

Notas importantes:

  • Puede que sea necesario añadir algunos módulos para que funcione correctamente. Por ejemplo:
sudo a2enmod rewrite
  • Se puede ver los mods disponibles en la ruta /etc/apache2/mods-available y los habilitados en /etc/apache2/mods-enabled
  • Normalmente los errores que nos vayan apareciendo se encontrarán en /var/log/apache2/error.log

Linux vs Windows (recordatorio de un post)

Hoy he recuperado una joya del 2007 (del 14 de diciembre de 2007 para ser más exactos). Un artículo en el que comentaba mis impresiones después de ir a una charla de Linux y en la cual comparaba Linux con Windows. Aquí os la dejo. ¡Qué recuerdos!

Hoy he ido a una charla de Linux (para principiantes) impartida por unos amigos míos que están en la asociación Asturlinux. Pues bien, casi salí convencido de que debía cambiarme a Linux, ya que toooodo son ventajas.

Pero después pensé:

  • ¿Y esas pantallas azules tan famosas en el Windows que nos traen tanta nostalgia con unos numeritos que sólo unos pocos consideramos arte?…. Esas no las tiene.
  • Pero podré meterle el gran y potente Internet Explorer, el cuál se me peta en un puñado de páginas web (en especial en la de vídeos del msn), para de esta forma recordar los momentos en los que tenía que reiniciar el Explorer… No, tampoco podía.
  • Pero al menos ¿podré meterle el Windows Media para que me actualice cada dos días y tenga que validarlo todo? No, tampoco,…..
  • Pero al fin y al cabo, pensé, siempre nos quedarán las actualizaciones de Linux, que supongo que serán como las de Windows, que acaban ocupando en “agregar o quitar programas” varias pantallas. (En ese momento, en el que me dijeron que no sería así renegué totalmente de Linux)

Si es que sólo los aventureros como yo usamos Windows…

(Ahora en serio, Linux tiene muchas ventajas, pero tb bastantes desventajas, como en el caso de que a veces la instalaciones de los paquetes dan problemillas, no hay juegos decentes para este sistema operativo,…)

Linux – Creación de shell scripts

A lo largo de esta semana me ha tocado hacer backups de bases de datos de una forma automática, con lo cual me ha hecho meterme en lo que son los shell scripts.

El problema era el siguiente:
Necesito hacer un backup de sólo una determinada información de la base de datos, almacenarla en el formato más facilmente accesible e inversible (vamos, que si sucede algo pueda dar marcha atrás a todo y subirlo de nuevo). Para complicarlo más, hay información relacionada en otras tablas a las que tengo que acceder haciendo joins…

Pasos que he seguido:
1 – Pedir el id de la compañía (el que quería) y almacenar esa información en una variable:

echo “Dime el id de la compania que quieres hacer backup”
read id_company

2 – Mediante mysqldump solicitar la información con un where por esa compañía y todas las tablas que necesitara e incluir en un archivo toda esta info.

mysqldump -h DIRECCION_IP -u USUARIO -pPASSWORD –where=”id_company=$id_company” –skip-add-drop-table BASEDATOS TABLA1 TABLA2 TABLA3 > /var/www/tmp/backups/company_$id_company.sql

Importante sustituir DIRECCION_IP, USUARIO, PASSWORD, BASEDATOS y las TABLAX por los valores adecuados. PASSWORD va pegado a -p.

3 – Mediante mysqldump solicitar la información que dependa de las tablas intermedias de la siguiente forma:

mysqldump -h DIRECCION_IP -u USUARIO -pPASSWORD –where=”id_user in (select id_user from user where id_company=$id_company)” –skip-add-drop-table –lock-all-tables BASEDATOS TABLADEPENDEUSER1 TABLADEPENDEUSER2 TABLADEPENDEUSER3 > /var/www/tmp/backups/company_user_$id_company.sql

4 – Hacemos un zip de todo.

tar vcf company_$id_company.tar backups

5 – Eliminamos los archivos individuales (dejando solo y únicamente el archivo comprimido .tar)

rm /var/www/tmp/backups/company_$id_company.sql
rm /var/www/tmp/backups/company_user_$id_company.sql

6 – Y ya únicamente queda ejecutarlo!! En mi caso, como se llamaba backup_company.sh simplemente en la línea de comandos tuve que poner: ./backup_company.sh

Linux – Crear un repositorio SVN

Los pasos a seguir para la creación de un repositorio son:

  1. Ir a la carpeta en donde se encuentre instalado el repositorio, normalmente /var/svn/
  2. Crear un nuevo repositorio, sustituyendo REPOS_PATH por el nombre que se le quiere dar: svnadmin create REPOS_PATH (+ información del comando svnadmin).
  3. Crea los usuarios que sean necesarios con la línea htpasswd  /etc/apache2/dav_svn.passwd usuario, te obligará a meter dos veces la password que quieras.
  4. Darle permisos al usuario www-data para que escriba en ese fichero: sudo chown -R www-data:www-data /var/svn/REPOS_PATH
  5. Reiniciar el servidor apache /etc/init.d/apache2 restart.

Espero que os haya servido!

Como hacer un cron que se ejecute cada minuto en linux

De una forma muy sencilla
*/1 * * * * cd /var/www/ && php este_seria_el_php_a_ejecutar

En el caso de tener instalado yii y querer ejecutar un comando que esté almacenado en la carpeta protected/commands/ (dicho comando tiene que extender de la clase CConsoleCommand). Imaginemos que se llama EmailsCommand la clase en cuestión
*/1 * * * * cd /var/www/ && php console.php emails

Recordar que los valores corresponden a:

  • Minutos (al poner */1 indico que se ejecutará cada minuto)
  • Horas
  • Día del mes
  • Mes
  • Día de la semana
  • Comando

Para más información podéis visitar http://www.linuxtotal.com.mx/?cont=info_admon_006