Convertir una web con wordpress a estática con httrack

Hace unos días llegó a mí una de aquellas tareas que en teoría tenía que ser poquitas horas, las poquitas horas han terminado siendo casi un mes entero de trabajo.

La tarea encomendada era la de arreglar la portada de la página web del periódico digital de contrainformación kaosenlared.net.

La web estaba usando el tema publisher y la portada estaba construida con gutenberg, además para cachear la web se estaba usando el plugin W3 total cache. Una combinación del tema y los dos plugins mencionados hacían que se descuadrase toda la página. Por suerte se disponía de una copia de seguridad de un día anterior a que se rompiese la portada. Mi tarea fue pues reestablecer la configuración del tema desde las opciones de exportación y cargar el contenido de la página de la portada. Al arreglarlo y volver a poner la página en producción, a las pocas horas, la portada se volvía a descuadrar. El cliente pidió simplemente dar de baja esta web, hacer algo con los archivos y aprovechar para crear otra nueva que ya estaban usando como web de emergencia.

Así que mi propuesta fue arreglar de nuevo el wordpress y convertir la página web a estática, ya que la página web tenía un pequeño detallito de nada, la friolera de 407.000 entradas, cosa que hacía que el consumo de recursos de la web fuese espectacular, por la gran cantidad de páginas y usuarios que visitaban diariamente el sitio.

Lo primero pues fue copiar todo el …

WordPress + apache + varnish + frontal nginx

Hoy os traigo un post completito sobre la parte de sistemas de WordPress.

Hace ya demasiados días que tenía pendiente la actualización de las debian que alojaban mi wordpress multisite y la base de datos mysql (que las tengo en dos contenedores separados). No digo las versiones porqué se me cae la cara de vergüenza :P

El wordpress que tengo en La Mar de Bits tiene por delante 2 frontales haciendo de proxy http con nginx (donde además hago la gestión de los certificados de letsencrypt y redirección de puerto 80 a 443). Éstos apuntan al puerto expuesto de Varnish (servicio de cache) dentro del contenedor donde está el wordpress (puerto 6081). El varnish apunta en el apache y el apache sirve en el puerto 80 las páginas web de wordpress.

Vamos un cristo para llegar al wordpress que no veas :)

Voy a ir detallando las configuraciones que tengo en cada una de las partes de esta máquina

nginx (frontales)

Estas dos maquinas son las que están expuestas a internet y comparten el directorio de configuración gracias a glusterfs.

Para exponer ambas maquinas en internet en bind lo hago así:

@                               IN      A       109.69.10.251
@                               IN      A       109.69.10.241
@                               IN      AAAA    2a00:1508:6000:501::a1
@                               IN      AAAA    2a00:1508:6000:501::a2

frontal                 1H      IN      A       109.69.10.241
frontal                 1H      IN      A       109.69.10.251
frontal                 1H      IN      AAAA    2a00:1508:6000:501::a1
frontal                 1H      IN      AAAA    2a00:1508:6000:501::a2

www                     1H      IN      CNAME   frontal

A continuación, en nginx para cada sitio del wordpress tengo un fichero de configuración similar a éste …

Instalar asterisk con odbc + configurar odbc mariadb

Debido a una de las migraciones de servidores de un proxmox a otro, me he encontrado que la vieja debian 8 donde tenía instalado el servidor de telefonía, no arrancaba, así que he instalado asterisk en una debian 10, dentro de un contenedor lxc y con nesting activado.

Lo primero de todo será instalar asterisk

root@asterisk:~# cd /usr/src/
root@asterisk:/usr/src# wget http://downloads.asterisk.org/pub/telephony/certified-asterisk/asterisk-certified-16.8-current.tar.gz
root@asterisk:/usr/src# tar xvzf asterisk-certified-16.8-current.tar.gz
root@asterisk:/usr/src# cd asterisk-certified-16.8-cert3/contrib/scripts
root@asterisk:/usr/src/asterisk-certified-16.8-cert3/contrib/scripts# ./install_prereq
root@asterisk:/usr/src/asterisk-certified-16.8-cert3/contrib/scripts# ./get_mp3_source.sh
root@asterisk:/usr/src/asterisk-certified-16.8-cert3/contrib/scripts# cd ../../
root@asterisk:/usr/src/asterisk-certified-16.8-cert3# ./configure
root@asterisk:/usr/src/asterisk-certified-16.8-cert3# make menuselect
root@asterisk:/usr/src/asterisk-certified-16.8-cert3# make
root@asterisk:/usr/src/asterisk-certified-16.8-cert3# make install
root@asterisk:/usr/src/asterisk-certified-16.8-cert3# make config
root@asterisk:/usr/src/asterisk-certified-16.8-cert3# make samples

En el make menuselect activar chan_inunavailable, chan_sip, func_odbc

y con asterisk -vcccccccccccccc vemos como arranca asterisk y los errores

[Jul 21 00:14:03] WARNING[615]: res_odbc.c:1067 odbc_obj_connect: res_odbc: Error SQLConnect=-1 errno=0 [unixODBC][Driver Manager]Data source name not found, and no default driver specified

Para solucionar éste error, ahora configuraremos el odbc

root@asterisk:~# apt -y install unixodbc odbcinst

Ahora nos descargamos las librerías ya compiladas para debian buster

root@asterisk:~# wget https://downloads.mariadb.com/Connectors/odbc/connector-odbc-3.1.9/mariadb-connector-odbc-3.1.9-debian-buster-amd64.tar.gz
root@asterisk:~# tar xvzf mariadb-connector-odbc-3.1.9-debian-buster-amd64.tar.gz
root@asterisk:~# cd mariadb-connector-odbc-3.1.9-debian-buster-amd64
root@asterisk:~# cp lib/mariadb/lib*.so /usr/lib/x86_64-linux-gnu/odbc/

Ahora configuramos los ficheros odbc.ini y odbcinst.ini

root@asterisk:~# vi /etc/odbcinst.ini
[MySQL]
Description = ODBC para MySQL
Driver = /usr/lib/x86_64-linux-gnu/odbc/libmaodbc.so
FileUsage = 1
root@asterisk:~# vi /etc/odbc.ini
[asterisk]
Description = MySQL Asterisk
Driver = MySQL
Database = asterisk
Server = localhost
User = xxxxx
Password = xxxxx
Port = 3306
Option = 3
Socket=/var/run/mysqld/mysqld.sock

[asterisk_users]
Description = MySQL Asterisk
Driver = MySQL
Database = users
Server = localhost
User = xxxxx
Password = xxxxx
Port = 3306
Option = 3
Socket=/var/run/mysqld/mysqld.sock

Es importante …

Exportar consulta SQL a un fichero csv

select callrates.id, users.usr, callrates.extension, callrates.destination, callrates.calldate, callrates.duration, callrates.description, callrates.stablishment, callrates.rate INTO OUTFILE '/tmp/export_201603.csv' FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' ESCAPED BY '\\' LINES TERMINATED BY '\n' FROM callrates, users WHERE users.id=callrates.user and year(calldate) = 2016 AND month(calldate) = 03;

No hay opción de exportar la cabecera.…

Dump MySQL a través de PHP

Tengo un servidor al que sacarle una copia de la bbdd pero no me deja usar exec y como consecuencia mysqldump… así que un script para hacerlo de otra forma:

backup_tables('localhost','username','password','blog');

/* backup the db OR just a table */
function backup_tables($host,$user,$pass,$name,$tables = '*')
{
	
	$link = mysql_connect($host,$user,$pass);
	mysql_select_db($name,$link);
	
	//get all of the tables
	if($tables == '*')
	{
		$tables = array();
		$result = mysql_query('SHOW TABLES');
		while($row = mysql_fetch_row($result))
		{
			$tables[] = $row[0];
		}
	}
	else
	{
		$tables = is_array($tables) ? $tables : explode(',',$tables);
	}
	
	//cycle through
	foreach($tables as $table)
	{
		$result = mysql_query('SELECT * FROM '.$table);
		$num_fields = mysql_num_fields($result);
		
		$return.= 'DROP TABLE '.$table.';';
		$row2 = mysql_fetch_row(mysql_query('SHOW CREATE TABLE '.$table));
		$return.= "\n\n".$row2[1].";\n\n";
		
		for ($i = 0; $i < $num_fields; $i++) 
		{
			while($row = mysql_fetch_row($result))
			{
				$return.= 'INSERT INTO '.$table.' VALUES(';
				for($j=0; $j < $num_fields; $j++) 
				{
					$row[$j] = addslashes($row[$j]);
					$row[$j] = ereg_replace("\n","\\n",$row[$j]);
					if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
					if ($j < ($num_fields-1)) { $return.= ','; }
				}
				$return.= ");\n";
			}
		}
		$return.="\n\n\n";
	}
	
	//save file
	$handle = fopen('db-backup-'.time().'-'.(md5(implode(',',$tables))).'.sql','w+');
	fwrite($handle,$return);
	fclose($handle);
}

Te guarda el dump en la raiz del script.…

Multiplicar por 1.5 campo en MySQL

Me encuentro que tengo que multiplicar por 1.5 los registros de una tabla MySQL pero tengo 75.000 registros a actualizar… en su momento hice un programa para exportar los datos en formato csv y luego poder importarlos de nuevo… pero es que se me cansa el dedo al tener que hacerlo a mano :P así que he buscado otra forma un poquito mas elegante para hacerlo. Por supuesto necesitas acceso a la base de datos!…

Instalación de Centreon

Centreon es un gestor via web de alertas, graficas y estados de servidor. Su base es un nagios y acepta peticiones nrpe y traps snmp.

Este “pequeño” manual explica los pasos seguidos para instalarlo, ya que me llevó varios días, básicamente por un atasco mental con ndoutils que era preciso generar el ndomod.o pero para la versión estable no funcionaba, así que hemos tirado de la versión que viene en el sistema que curiosamente es la beta. El sistema usado es una debian squeeze 6.0.0.…

mysql: debian-sys-maint

Una de las maquinas me está soltando este error:

/etc/cron.daily/logrotate:
error: error running shared postrotate script for ‘/var/log/mysql.log /var/log/mysql/mysql.log /var/log/mysql/mysql-slow.log ‘
run-parts: /etc/cron.daily/logrotate exited with return code 1

también veremos que si queremos reiniciar el mysql nos saca este error:

# /etc/init.d/mysql stop
Stopping MySQL database server: mysqld failed!
# /etc/init.d/mysql start
Starting MySQL database server: mysqld already running.
/usr/bin/mysqladmin: connect to server at ‘localhost’ failed
error: ‘Access denied for user ‘debian-sys-maint’@’localhost’ (using password: YES)’…

mysqldump compatible

Cuando estamos generando un mysqldump de una base de datos mysql en una versión específica, es posible que si la importación de este dump se hace en una versión de base de datos distinta a la de origen, esta importación de errores.
Para ello usaremos la opción no documentada –compatible

mysqldump -uroot -p –opt databasename –compatible=mysql323 > dumpfilename…

ADRCI

[purge_adrci.sh]

ADRCI es un programa que sirve para gestionar logs, incidencias, alertas y trazas de aplicaciones de ORACLE, como por ejemplo las bases de datos. Es una herramienta útil para identificar y empaquetar las incidencias que nos puedan dar las bases de daos en algún momento y mandarlas fácilmente a Oracle para analizarlas.

purge_ADRCI.sh es un script que busca cuales son los homes de las bases de datos ORACLE instaladas en nuestro servidor y limpia los ficheros generados, como logs, incidencias, alertas y trazas mas antiguos de x dias (en este script definido en 30 dias).…