La odisea de tener datos móviles fuera de Europa

Viajar a Estados Unidos es algo de conocido por muchos que me gusta hacer de tanto en tanto, principalmente a Miami donde tuve la oportunidad de vivir medio año y que me abrió los ojos en muchos sentidos. En aquella época directamente me pillé una línea de (creo recordar) T-Mobile por lo que tenía mi número de US. En mis siguientes visitas ha sido bastante fracaso el asunto, ya que he intentado comprar algún SIM allí mismo, de prepago, pero o porque mi teléfono no lo soportaba o por cualquier razón no acababa de funcionar.

Con el paso del tiempo esto ha cambiado y existen muchas empresas que han lanzado sus sistemas de SIM prepago enfocadas a datos, y voy a comentar algunas de ellas, siempre desde el planteamiento de alguien que vive en la UE y se va a US, y con una cifra de datos de 1 GB (que creo que es bastante aceptable para 1 semana fuera de la eurozona).

Primeras opciones:

  • Flexiroam: Tienen un SIM que compras por 30 dólares e incluye 1 GB de datos, que has de consumir en 3 meses. A partir de ahí puedes recargar otro giga por 30 dólares que te durará otros 90 días.
  • WorldSIM: Aunque su foco es el de pago-por-uso, tienen un paquete para América (US y PR) que te da 1 GB durante 30 días por 54 dólares.
  • GO-SIM: Este pack para Estados Unidos te ofrece 1 GB durante 30 días por 49 dólares.
  • GigSky: Por 50 dólares durante 30 días tienes 1 GB de datos.

Más opciones:

  • T-Mobile Tourist plan: Es una opción interesante en la que durante 21 días tienes un SIM funciona para todo (llamadas, sms, datos…). Incluye 2 GB de datos, 1000 minutos a US por unos 30 dólares. A las 3 semanas el SIM “se autodestruye”.

La decisión:

Finalmente mi decisión ha sido la de utilizar el servicio de AlwaysOnlineWireless. Para comenzar compras el SIM (con envío incluido) por 15 dólares. Una vez lo tienes, lo activas y eliges uno de los planes que quieras utilizar, que siguiendo con la línea que llevaba, sería el de 1 GB durante 15 días por 8 dólares (o 3 GB por 23 dólares). No sé si será el mejor servicio, pero es el que cuadra más con mis necesidades, una SIM extra (mi teléfono tiene 2 slot de nanoSIM, así que me va perfecto) que usar cuando lo necesitas y por muy bajo precio.

¿Qué ofrecen las operadoras españolas?

Toda esta búsqueda se ha basado en una decisión de que la operadora que uso, Movistar, tiene unas tarifas bastante malas en cuestión de roaming por Estados Unidos, ya que te da 10 MB al día por 2,5 euros, algo que considero fuera de lo que debería, teniendo en cuenta que por ejemplo Vodafone trata US como Europa, tanto en voz como en datos. Orange, en este caso te da 100 MB por 5 euros/día.

Herramientas para Open Data

Ayer tuve la oportunidad de asistir a una charla de Marc Torres (del Institut Cartogràfic i Geològic de Catalunya) en el que hizo un pequeño taller explicando algunas fuentes de datos y sobre todo herramientas para tratarlos.

Los que me conocéis un poco sabéis que me encanta jugar con APIs y por tanto con datos, y esta charla era un lugar plerfecto para aprender de alguna herramienta que desconociera; obviamente el objetivo estuvo más que superado.

Para comenzar, voy a dejar una serie de sitios desde los cuáles conseguir extraer datos abiertos. Algunos son conocidos y otros no tanto:

Aunque hay cientos de lugares en España (y el resto del mundo) de donde sacar datos, estas fueron las fuentes que usamos en el taller, y la verdad es que hay información muy interesante sobre nuestro entorno y que permiten hacer muchísimas cosas.

Pero quizá lo más interesante para mi (y seuramente para vosotros) son algunas de las herramientas que se trataon y explicaron. Voy a intentar hacer un pequeño resumen de ellas:

  • Tabula is a tool for liberating data tables locked inside PDF files.
    Como bien dice su explicación, esta herramienta lo que permite es subir un fichero PDF, seleccionar un contenido o zona y te lo convierte a datos estructurados (más o menos es 100% fiable, pero depende del PDF).
  • OpenRefine (formerly Google Refine) is a powerful tool for working with messy data: cleaning it; transforming it from one format into another; and extending it with web services and external data.
    Esta herramienta, que como se indica anteriormente era un producto Google, permite subit datos estructurados y filtrarlos y generar un subset más refinado de elementos. Creo que se va a convertir en una de mis herramientas de referencia a partir de ahora.
  • InstaMaps, fes un mapa amb les teves dades fàcilment.
    Con esta herramienta se pueden crear mapas usando como fuente datos abiertos (entre otras cosas). Es una herramienta similar a Google MyMaps o a BatchGeo.
  • import.io: Extract data from almost any website
    Esta herramienta ya la conocía, me parece útil pero creo que sólo para cosas pequeñas, porque si necesitas hacer algo grande se queda corta (la parte gratis, y la de pago me parece cara).
  • Overview Search, visualize, and review your documents. Up to hundreds of thousands of them, in any format.
    Esta es seguramente la herramienta que menos utilizaría, pero es muy interesante para extraer datos de documentos, ya sean metadatos como un extracto de conceptos y temas en los que se hablan en él.
  • vizydrop Data visualization software
    me parece una herramienta increíble para generar gráficos a partir de datos estructurados. Incluso se hizo un ejemplo de datos geográficos que acabana haciendo una especie de mapa virtual de la ciudad de barcelona en los que añadiendo volúmenes en los pntos generaba un para interactivo muy interesante.

Y para acabar, como bonus track del que seguro que con tiempo saco muchas herramientas interesantes, es el Keshif (Data made explorable), una galería de herramientas y datos que te pueden ayudar a encontrar lo que necesitas para visualizar tus datos de la mejor forma. Hay centenares de herramientas y te puedes perder horas viendo ejemplos y galerías.

Consejos básicos de seguridad para WordPress

WordPress es seguro. Esa es una máxima que normalmente los seres humanos rompemos y convertimos el software en algo menos seguro de lo que debería.

En la presentación que hice ayer tuve la oportunidad de presentar algunas cosas que todo el mundo explica sobre seguridad, otras que se dicen pero no se hacen y otras tantas que son más desconocidas o que deberían hacerse y no se hacen.

Además, como tema máximo, comenté sobre el uso del 2FA (segunda autenticación) que ayuda a bloquear intrusos aunque te roben tus claves.

Aquí os dejo la descarga del PDF de mi parte de la presentación (Consejos de Seguridad para WordPress), en la que hay bastantes códigos para el wp-config.php, además de algunos plugins que te pueden ayudar a proteger un poco más el sistema.

Reseña sobre el Pinebook

Hace unos días que cayó (vamos, me lo compré) en mis manos un Pinebook, ese pequeño ordenador basado en PINE64 que por 100 dólares te ofrece una máquina bastante razonables. Y digo bastante porque obviamente no es una máquina excepcional, aunque sí por su relación calidad/precio.

Este dispositivo está basado en hardware open source, y vienen con una CPU Quad-Core ARM Cortex A53 64-Bit, junto a 2 GB de memoria RAM y una pantalla de 11 o 14 pulgadas, en mi caso esta última. Un detalle curioso es que el dispositivo sólo tiene 30 días de garantía y que viene con la batería completamente vacía, lo que significa que antes de poderte poner a jugar tendrás que cargarla, algo que al menos la primera vez no fue extremadamente rápido que digamos (tranquilamente estuvo 6 horas…).

A nivel de memoria de disco se nota que los 16GB son pocos, porque ya de buenas a primeras te encuentras prácticamente sin tan siquiera poder actualizar el Linux (Ubuntu Mate) que viene de serie. Además viene en un pequeño maletín de plástico que se agradece, al menos para no tenerlo en casa “encima de cosas”.

Una cosa curiosa que me ha pasado es que si echas la pantalla para atrás al máximo, pesa más la pantalla que el teclado y se llega a levantar ligeramente (ni un dedo). No pasa nada porque las gomas que lo sujetan a la base están muy bien, pero es bastante curioso (vamos, le pesa la cabeza). Otro detalle importante es que el teclado que lleva es inglés estadounidense, por lo que es probable que las teclas (si cambias el idioma a español) no estén en su sitio -en general no es muy problemático-.

El dispositivo no es una máquina como para ponerse a hacer CAD, pero funciona correctamente. Lo primero que me planteé era si instalarle Android 7.1 o dejarle el Linux, y tras varios pensamientos creo que es un dispositivo Linux más que Android (aunque intuyo que funcionará perfectamente y que algún día puede que haga el cambio por probar, y que incluso se quedará con él puesto).

La batería es de 10.000 mAH, lo que de saque da pie a pensar que va a durar bastante, y aún sin haber descargado la batería por completo, tranquilamente podría estar cerca de las 6 horas, ya que consume muy poco. Obviamente esto dependerá del uso que se le de, que no es lo mismo tenerlo con vídeos que con un editor de texto.

A nivel de velocidad, potencia o como queráis llamarlo, no es el ordenador más rápido del mundo… todo lo contrario, cuando abres una aplicación que requiere unos pocos recursos, automáticamente se queda un poco tonto y se nota que no es todo lo que puedes esperar de un portátil “normal y corriente”. Eso no quita que para aplicaciones como LibreOffice o Firefox no funcione bien, que lo hace, lo que lo convierte en un buen ordenador para los más pequeños. Además, viene de serie con Scratch, para que comiencen a aprender a programar (y qué menos en una máquina preparada para ello).

A nivel de conectividad viene con Bluetooth y WiFi, esta última muy correcta y que no ha dado problemas en ningún momento. A nivel físico es una máquina de plástico, como es de esperar. Se calienta un poco en la zona donde está principalmente el procesador, pero tampoco de una forma exagerada.

Seguramente la utilidad que le voy a dar es la de meterle un LAMP y tenerlo como máquina local para poder jugar con proyectos o cosas que necesite tener en local. Seguramente no es para lo que está pensado, pero al menos seguro que lo usaré con frecuencia.

A partir de aquí poco más a decir; si quieres una máquina sencilla, no muy potente pero muy aceptable para trabajos de navegación o de edición de texto, y sobre todo para los más pequeños, es la máquina ideal, barata y útil.

European Union Public Licence

A mediados de mayo de 2017 se actualizó la licencia EUPL [European Union Public Licence] ahora a su versión 1.2, una licencia para proyectos de código abierto (Open Source) y que tiene algunas ventajas con su uso con respecto a otras opciones del mercado, además de su gran compatibilidad con las licencias habituales de este tipo de código.

Lo primero de todo es que la licencia está disponible en todos los idiomas de la Unión Europea, y descargables, lo que ayuda a su comprensión. La licencia de por sí es bastante sencilla, e incluye un detalle importante, creo, que es la problemática judicial cuando no se aplica la misma y la resolución de conflictos, ya que establece un Tribunal Europeo para estos casos, lo que significa disponer de un lugar en el que se conoce bien la legislación en materia de software y código abierto, con su uso y mal uso. Hay que recordar que todos los programas desarrollados por la Administración Pública en Europa deberían incorporar esta licencia.

Documento en formato PDF y HTML.

Me gustaría hacer mención a algunos fragmentos que creo importantes, en lo que corresponde a la aprobación d ela versión 1.2:

A fin de seguir facilitando el intercambio y la reutilización de los programas informáticos desarrollados por las administraciones públicas en relación con el uso de una licencia de programas informáticos de fuente abierta, debe adoptarse una nueva versión de la licencia EUPL, la EUPL v. 1.2.

Este elemento es importante ya que si las Administraciones Públicas desarrollan código abierto estaría disponible para todos los ciudadanos, que incluso podrían llegar a colaborar en ellos.

Resultan necesarios algunos ajustes en la redacción y simplificaciones para adaptarla a las denominaciones oficiales, a fin de que su ámbito de aplicación sea más amplio, las partes tengan cierta flexibilidad en lo que respecta al Derecho aplicable y se aclare la competencia del Tribunal de Justicia de conformidad con lo dispuesto en el Tratado de Funcionamiento de la Unión Europea.

Como decía antes, está bien que la UE haya puesto a disposición de todos un tribunal que contemple la aplicación y conocimiento de esta licencia.

LICENCIA PÚBLICA DE LA UNIÓN EUROPEA v. 1.2

EUPL © Unión Europea 2007, 2016

La presente Licencia Pública de la Unión Europea (EUPL, por su sigla en inglés), se aplica a la obra (según se define más adelante) suministrada en las condiciones fijadas en la presente licencia. Queda prohibido cualquier uso de la obra distinto del autorizado por la presente licencia (en la medida en que tal uso esté protegido por un derecho del titular de los derechos de autor de la obra).

La obra se suministra en las condiciones fijadas en la presente licencia cuando el licenciante (según se define más adelante) haya colocado la siguiente advertencia inmediatamente después de la mención a los derechos de autor de la obra:

Licencia cedida con arreglo a la EUPL

o haya expresado por cualquier otro medio su voluntad de conceder una licencia con arreglo a la EUPL.

1. Definiciones

En la presente licencia, se entenderá por:

- «licencia»: la presente licencia,

- «obra original»: la obra o el programa de ordenador distribuido o comunicado por el licenciante con arreglo a la presente licencia en forma de código fuente o, en su caso, de código ejecutable,

- «obras derivadas»: las obras o programas de ordenador que pudiera crear el licenciatario sobre la base de la obra original o de alguna de las modificaciones de esta. La presente licencia no define el grado de modificación o dependencia de la obra original necesario para clasificar una obra como derivada; dicho grado se determinará de acuerdo con la legislación sobre derechos de autor aplicable con arreglo al artículo 15,

- «obra»: la obra original o sus obras derivadas,

- «código fuente»: la forma de la obra legible por seres humanos que pueda ser estudiada y modificada más fácilmente,

- «código ejecutable»: cualquier código, en general compilado, destinado a ser interpretado como programa por un ordenador,

- «licenciante»: la persona física o jurídica que distribuye o comunica la obra con arreglo a la licencia,

- «colaborador»: la persona física o jurídica que modifica la obra con arreglo a la licencia o contribuye de cualquier otra manera a crear una obra derivada,

- «licenciatario»: la persona física o jurídica que hace un uso cualquiera de la obra en las condiciones fijadas en la licencia,

- «distribución» o «comunicación»: cualquier acto de venta, donación, préstamo, alquiler, distribución, comunicación, transmisión o cualquier otro acto de puesta a disposición, en línea o fuera de línea, de copias de la obra o de acceso a sus funcionalidades esenciales a otra persona física o jurídica.

2. Ámbito de los derechos otorgados por la Licencia

El licenciante concede al licenciatario una licencia de ámbito mundial, a título gratuito, no exclusiva y que el licenciatario puede subcontratar mientras sigan vigentes los derechos de autor sobre la obra original, y lo autoriza a:

- utilizar la obra en cualquier circunstancia y para cualquier uso,

- reproducir la obra,

- modificar la obra y realizar obras derivadas de la misma,

- comunicar al público la obra o copias de la misma, poner a su disposición o exhibir la obra o las copias y, en su caso, ejecutar públicamente la obra,

- distribuir la obra o copias de la misma,

- prestar y alquilar la obra o copias de la misma,

- subcontratar los derechos relativos a la obra o a las copias de la misma.

Dichos derechos se podrán ejercer a través de cualquier medio, soporte y formato, conocido en el presente o que pueda inventarse en el futuro, en la medida en que así lo permita la legislación aplicable.

En los países cuyo ordenamiento contemple los derechos morales, el licenciante renunciará al ejercicio de los mismos en la medida en que lo permita la legislación, a fin de hacer efectiva la licencia de los derechos patrimoniales anteriormente enumerados.

El licenciante cede al licenciatario, libre de cánones, los derechos de uso no exclusivos sobre cualquier patente de que sea titular, en la medida necesaria para que el licenciatario haga uso de los derechos sobre la obra otorgados por la presente licencia.

3. Comunicación del código fuente

El licenciante podrá suministrar la obra en forma de código fuente o código ejecutable. Si la suministrara en forma de código ejecutable, deberá facilitar además una copia legible automáticamente del código fuente de la obra junto con cada copia de la obra que distribuya, o bien indicar, en una advertencia inserta a continuación de la mención a los derechos de autor adjunta a la obra, un repositorio en el que se pueda acceder al código fuente fácilmente y de manera gratuita durante el período en que el licenciante siga distribuyendo o comunicando la obra.

4. Limitaciones a los derechos de autor

En ningún caso podrá interpretarse la presente licencia de modo que prive al licenciatario de los beneficios de los que pudiera disfrutar como consecuencia de las excepciones o limitaciones a los derechos exclusivos de los titulares de los derechos de la obra, de la extinción de dichos derechos o de cualquier otra limitación aplicable.

5. Obligaciones del licenciatario

La cesión de los derechos en virtud de la presente licencia queda supeditada a ciertas restricciones u obligaciones que habrá de respetar el licenciatario. Dichas obligaciones son:

- Derecho de atribución: El licenciatario deberá mantener íntegramente todas las advertencias y menciones a los derechos de autor, patentes o marcas registradas, así como las que se refieran a la licencia y a la exención de responsabilidad. El licenciatario deberá adjuntar copias de dichas advertencias y menciones y de la licencia con cada copia de la obra que distribuya o comunique. El licenciatario se responsabilizará de que cualquier obra derivada incluya una advertencia bien destacada declarando que se ha modificado la obra, y la fecha de modificación.

- Cláusula de «izquierdo de copia» (copyleft): Si el licenciatario distribuyera o comunicara copias de la obra original o de obras derivadas basadas en la obra original, dicha distribución o comunicación deberá hacerse en las condiciones fijadas en la presente licencia o una versión posterior de la presente licencia, salvo si la obra original se distribuye expresamente solo bajo la presente versión de la licencia (por ejemplo, comunicando «EUPL v. 1.2 solamente». El licenciatario (ahora en su calidad de licenciante) no podrá ofrecer ni imponer condiciones adicionales sobre la obra o las obras derivadas que modifiquen o limiten las condiciones de la licencia.

- Cláusula de compatibilidad: Si el licenciatario distribuyera o comunicara obras derivadas o copias de estas últimas basadas a su vez en la obra y en otra obra licenciada bajo una licencia compatible, la distribución o comunicación podrán efectuarse con arreglo a las condiciones de dicha licencia compatible. A efectos de la presente cláusula, se entenderá por «licencia compatible» cualquiera de las licencias enumeradas en el apéndice adjunto a la presente licencia. En caso de que las obligaciones del licenciatario con arreglo a la licencia compatible estén en colisión con las derivadas de la presente licencia, prevalecerán las obligaciones de la licencia compatible.

- Suministro del código fuente: Cuando distribuya o comunique copias de la obra, el licenciatario deberá facilitar una copia del código fuente legible automáticamente o indicar un repositorio en que se pueda acceder al código fuente fácilmente y de manera gratuita durante el período en que siga distribuyendo o comunicando la obra.

- Salvaguardia de otros derechos: La presente licencia no faculta para utilizar los nombres comerciales, marcas de producto o de servicio o nombres del licenciante, excepto cuando ello, realizado en la medida de lo razonable y conforme a los usos habituales, sea necesario para indicar el origen de la obra y reproducir el contenido de la mención a los derechos de autor.

6. Secuencia de autoría

El licenciante original garantiza ser titular originario de los derechos de autor sobre la obra original objeto de la presente licencia o haberlos adquirido mediante la licencia correspondiente y estar facultado para otorgar licencias sobre tales derechos.

Cada colaborador garantiza ser titular de los derechos de autor sobre las modificaciones que aporta a la obra o haberlos adquirido mediante la correspondiente licencia y estar facultado para otorgar licencias sobre tales derechos.

Cada vez que el licenciatario acepta la licencia, el licenciante original y los colaboradores posteriores le otorgan una licencia sobre sus propias contribuciones a la obra en las condiciones fijadas en la presente licencia.

7. Exclusión de garantía

La obra se encuentra en proceso de elaboración, siendo objeto de continuas mejoras por parte de numerosos colaboradores. No es una obra acabada y, por tanto, puede contener defectos o fallos inherentes a este tipo de desarrollo.

Por este motivo, la obra, en virtud de la licencia, se suministra «tal cual», sin garantías de ningún tipo, en particular, en una enumeración no exhaustiva, en cuanto a su comercialización, adecuación a un propósito determinado, ausencia de defectos o errores, exactitud y ausencia de infracción de los derechos de propiedad intelectual distintos de los derechos de autor según se afirma en el artículo 6 de la presente licencia.

Esta exclusión de garantía forma parte esencial de la licencia y es condición para la cesión de cualquier derecho con respecto a la obra.

8. Exclusión de responsabilidad

Excepto en casos de dolo o de daños ocasionados directamente a personas físicas, el licenciante no será responsable de los daños y perjuicios de cualquier clase, directos o indirectos, materiales o morales, que pudieran derivarse de la licencia o del uso de la obra, en particular, en una enumeración no exhaustiva, de los daños y perjuicios por pérdida de buena reputación, paro técnico, avería o mal funcionamiento de equipos informáticos, pérdida de datos o cualquier perjuicio comercial, incluso si el licenciante conocía la posibilidad de dichos daños. No obstante, el licenciante será responsable, de acuerdo con las normas legales que regulen la responsabilidad por los daños causados por productos, en la medida en que dichas normas sean aplicables a la obra.

9. Acuerdos adicionales

Al distribuir la obra, el licenciatario podrá suscribir un acuerdo adicional que defina obligaciones o servicios compatibles con la presente licencia. No obstante, al aceptar tales obligaciones, el licenciatario actuará únicamente en nombre propio y bajo su exclusiva responsabilidad, y nunca en nombre del licenciante original ni de ningún otro colaborador, y ello a condición de que acceda a indemnizar, defender y amparar a todo colaborador frente a cualquier responsabilidad en que este pudiera incurrir y frente a las reclamaciones que pudieran presentarse contra él por haber aceptado el licenciatario la mencionada garantía o responsabilidad adicional.

10. Aceptación de la licencia

Lo dispuesto en la presente licencia puede aceptarse haciendo clic en el icono «Aceptar» situado en la parte inferior de la ventana en que aparece el texto de la presente licencia o manifestando el consentimiento de cualquier otra forma similar, de conformidad con lo previsto en la legislación aplicable. Haciendo clic en dicho icono, se expresa la aceptación inequívoca e irrevocable de la presente licencia y de todo su contenido.

Asimismo, el licenciatario acepta irrevocablemente la presente licencia y todas sus condiciones por el mero hecho de ejercer cualquiera de los derechos que le otorga el artículo 2 de la presente licencia, tales como el uso de la obra, la creación de una obra derivada o la distribución o comunicación de la obra o de copias de la misma.

11. Información al público

En caso de que el licenciatario proceda a la distribución o comunicación de la obra por medios electrónicos (por ejemplo, ofreciendo la descarga de la obra a distancia), el canal o medio de distribución (por ejemplo, un sitio web) deberá facilitar al público, como mínimo, la información exigida por la legislación aplicable acerca del licenciante, la licencia y la manera en que el licenciatario puede acceder a dichos datos, aceptarlos, conservarlos y reproducirlos.

12. Extinción de la licencia

La licencia y los derechos otorgados a su amparo se extinguirán automáticamente si el licenciatario incumple alguna de las condiciones de la licencia.

Tal extinción no supondrá, sin embargo, la de las licencias de que disfruten las personas que hayan recibido la obra del licenciatario en virtud de la licencia, siempre que dichas personas sigan cumpliendo plenamente las condiciones de la licencia.

13. Varios

No obstante lo dispuesto en el artículo 9, la licencia representará la totalidad del acuerdo entre las partes en cuanto a la obra.

La eventual invalidez o ineficacia de alguna disposición de la presente licencia con arreglo a la legislación vigente no afectará a la validez o eficacia general de la licencia. En tales casos, la disposición se interpretará o reformulará según proceda para hacerla válida y eficaz.

La Comisión Europea podrá publicar otras versiones lingüísticas o nuevas versiones de la presente licencia o versiones actualizadas del apéndice en la medida en que resulte necesario y razonable y sin reducir el ámbito de los derechos concedidos por la licencia. Las nuevas versiones de la licencia se publicarán con un número de versión único.

Todas las versiones lingüísticas de la presente licencia aprobadas por la Comisión Europea tienen idéntico valor. Las partes pueden utilizar la versión lingüística de su preferencia.

14. Tribunales competentes

Sin perjuicio de lo dispuesto en un acuerdo específico entre las partes,

- los litigios relativos a la interpretación de la presente licencia que se planteen entre las instituciones, órganos y organismos de la Unión Europea, en calidad de licenciante, y un licenciatario, se someterán a la jurisdicción del Tribunal de Justicia de la Unión Europea, con arreglo al artículo 272 del Tratado de Funcionamiento de la Unión Europea;
- los litigios relativos la interpretación de la presente licencia que se planteen entre otras partes se someterán a la jurisdicción exclusiva del tribunal que sea competente en el lugar en que resida o ejerza su actividad principal el licenciante.

15. Legislación aplicable

Sin perjuicio de lo dispuesto en un acuerdo específico entre las partes,

- la presente licencia se regirá por la legislación del Estado miembro de la Unión Europea en el que tenga su sede, resida o tenga su domicilio social el licenciante;
- la presente licencia se regirá por el Derecho belga si el licenciante no tiene sede, residencia ni domicilio social en un Estado miembro de la Unión Europea.

Apéndice

Son «licencias compatibles» con arreglo al artículo 5 de la EUPL:

- GNU General Public License (GPL) v. 2, v. 3
- GNU Affero General Public License (AGPL) v. 3
- Open Software License (OSL) v. 2.1, v. 3.0
- Eclipse Public License (EPL) v. 1.0
- CeCILL v. 2.0, v. 2.1
- Mozilla Public Licence (MPL) v. 2
- GNU Lesser General Public Licence (LGPL) v. 2.1, v. 3
- Creative Commons Attribution-ShareAlike v. 3.0 Unported (CC BY-SA 3.0) para obras que no sean programas informáticos
- European Union Public Licence (EUPL) v. 1.1, v. 1.2
- Québec Free and Open-Source Licence — Reciprocity (LiLiQ-R) or Strong Reciprocity (LiLiQ-R+)

La Comisión Europea podrá actualizar el presente apéndice a versiones posteriores de las licencias mencionadas sin presentar una nueva versión de la EUPL, siempre que contemplen los derechos reconocidos en el artículo 2 de la presente licencia y protejan de la apropiación exclusiva el código fuente cubierto.

Cualquier otra modificación o adición al presente apéndice exigirá la presentación de una nueva versión de la EUPL.

Servidores DNS públicos

Los servidorss DNS dan mucha información a sus propietarios (principalmente ahora que las operadoras pueden vender información personal tuya si lo quisieran en Estados Unidos, o de forma agregada en la Unión Europea), de forma que quizá es interesante que te plantees usar sistemas alternativos.

Aquí dejo una lista de algunos proveedores, en algunos casos con IPv4 y otros de IPv6.

ProveedorIPv4IPv6
Alternate DNS*198.101.242.72
23.253.163.53
Comodo Secure DNS8.26.56.26
8.20.247.20
DNS.WATCH84.200.69.80
84.200.70.40
2001:1608:10:25::1c04:b12f
2001:1608:10:25::9249:d69b
Dyn216.146.35.35
216.146.36.36
FreeDNS37.235.1.174
37.235.1.177
Google8.8.8.8
8.8.4.4
2001:4860:4860::8888
2001:4860:4860::8844
GreenTeamDNS*81.218.119.11
209.88.198.133
Hurricane Electric74.82.42.42001:470:20::2
Level3209.244.0.3
209.244.0.4
4.2.2.1
4.2.2.2
4.2.2.3
4.2.2.4
4.2.2.5
4.2.2.6
Norton ConnectSafe*199.85.126.10
199.85.127.10
OpenDNS Home208.67.222.222
208.67.220.220
208.67.222.123
208.67.220.123
OpenNIC96.90.175.167
193.183.98.154
puntCAT109.69.8.512a00:1508:0:4::9
SafeDNS*195.46.39.39
195.46.39.40
SmartViper208.76.50.50
208.76.51.51
UncensoredDNS91.239.100.100
89.233.43.71
2001:67c:28a4::
2a01:3a0:53:53::
Verisign64.6.64.6
64.6.65.6
2620:74:1b::1:1
2620:74:1c::2:2
Yandex.DNS*77.88.8.8
77.88.8.1
2a02:6b8::feed:0ff
2a02:6b8:0:1::feed:0ff

Los que tienen un * es porque filtran algunos sitios web de malware, adultos, etc…

Personalmente, si he de quedarme con algunos, elijo primero el de puntCAT (al estar en España) y después buscaría alguno más en España de OpenNIC y posteriormente los de Hurricane Electric. Pero esto va sobre gustos.

Ley de protección de datos europea (General Data Protection Regulation)

A partir de las empresas europeas, que trabajen en europa o aquellos usuarios que lo hagan van a estar sometidos a la nueva regulación de protección de datos aprobada a . Esta nueva regulación, que sustituye la de 1995 y que viene dada principamente por el terrorismo y todos los cambios digitales de estas dos últimas décadas, va a ser aplicada “tal cual”, sin que los países tengan que adaptarla a su legislación propia (creo que es de las pocas vece que esto ocurre).

Esta nueva legislación afecta, por ejemplo, a todas aquellas empresas exteriores a la UE que poeren con usuarios europeos, además, obviamente, de estandarizar la legislación de datos a todos los países miembros. El incumplimiento de esta legislación puede alcanzar un 4%-5% de la facturación mundial de las compañías que la incumplan.

¿A quién afecta?

Este reglamento afecta a todo aquel que recopile datos de residentes en la UE, ya sea el responsable del tratamiento, el procesador de ellos o el titular de los datos, sea de donde sea (o sea, tiene aplicación internacional si afecta a un europeo)

Según la Comisión Europea:

Datos personales son cualquier información relativa a una persona, ya se trate de su vida privada, profesional o pública, que puede ser cualquier cosa, desde un nombre, una dirección de casa, una foto, una dirección de correo electrónico, un banco, información sobre los sitios web de redes sociales, información médica o dirección IP de un ordenador.

Aplicación estatal

Cada estado miembro creará una Autoridad de Supervisión independiente (SA) para conocer e investigar las quejas, sancionar los delitos administrativos… Estos organismos, obviamente, cruzarán datos internamente. En el caso de que una empresa tenga varias sedes, se definirá la SA principal en uno de los países (en principio el principal de la compañía).

Responsabilidad

A la hora de informar, se tendrá que hacer con más datos. Por ejemplo cuánto tiempo se van a almacenar los datos de la persona, la persona responsable del tratamiento de datos y de la protección de datos (que deberá registrarse).

Además, la personalización (o toma de decisiones individualizada automatizada) como podría ser la elaboración de perfiles podrá ser rebatida por los ciudadanos, pudiendo cuestionar las decisiones automatizadas.

Las empresas y organismos deberán tener documentado las medidas que cumplen los principios de protección de datos por diseño y protección de datos por defecto, quedando en manos del responsable del tratamiento. Esto implicará la pseudonimización de datos personales, por parte del responsable del tratamiento.

Consentimiento

La recoipilación de datos deberá ser explícita, lo que significa que en todo momento habrá que informar al usuario de qué datos se disponen. En el caso de los niños, deberá quedar registrado los datos de los padres o tutor legal de manera demostrable y verificable, ya que los controladores de datos deben ser capaces de probar el “consentimiento” (opt-in), pudiendo este ser retirado.

Data Protection Officer – DPO (Director de Protección de Datos)

En el caso de empresas privadas, si la gestión de datos es un elemento principal, se deberá disponer de un director de Protección de Datos que se haga responsable de los mismos. Deberá ser una persona con conocimientos especializados en materia de legislación y prácticas de protección de datos y debería ayudar al responsable del tratamiento o del procesador a supervisar el cumplimiento interno del presente Reglamento.

Además, encontramos la figura del Compliance Officer, que será la persona técnica competente en la gestión de procesos de TI, seguridad de datos (incluyendo el tratamiento de ataques) y otros asuntos críticos de continuidad de negocio alrededor del procesamiento de datos sensibles o personales.

Pseudonimización

Los datos deberán almacenarse de tal manera que no se puedan atribuir a un sujeto en concreto sin información adicional. Un sistema podría ser el cifrado de la información, que requiera una clave externa, y que impida incluso a los propios responsables de los ficheros de su acceso sin ella y de forma controlada.

En caso de que los datos sean pseudonimizados con políticas y medidas internas adecuadas, entonces se considera anonimizado y no sujeto a controles y sanciones del GDPR. Un ejemplo de ello es que los datos deberán pseudonimizarse lo antes posible, encriptar los datos localmente y mantener de forma separada las claves de cifrado.

Hackeos

En caso de que alguien externo consiga hacerse con una fuga de datos, se deberá comunicar en un plazo de 72 horas a la Autoridad Supervisora. En caso de que pueda afectar a los usuarios, también se les tendrá que comunicar. Esto sólo es en caso de datos personalizados, pero no afectaría a los datos anónimos (analítica).

Derecho al olvido

El sistema de derecho al olvido (o borrado) queda sustituido por este reglamento. Un usuario puede solicitar toda su información de la plataforma, ya sea por incumplimiento legal o por uso que sobrepasa los derechos y libertades fundamentales. EJEMPLO: Google Spain v AEPD and Mario Costeja González.

Portabilidad de datos

Una persona puede transferir todos sus datos de una plataforma a otra mediante sistemas de Estándar Abierto estructurados.

Aquí supongo que iremos viendo lo que se consideran estándar, ya que cada sistema, software o concepto puede tener unos requisitos propios.

Privacidad, de facto

Toda plataforma deberá estar diseñada e implementada con la privacidad como punto báse y clave, desde su inicio. Además, sólo se deberá hacer uso de los datos personales en los momentos en los que sea necesario para un propósito específico.

Registro de actividad

Cada vez que se haga un tratamiento en el procesamiento de datos se deberá almacenar un registro que indique qué actividad se ha realizado, con qué fin y qué plazos se han utilizado. En caso de que la Autoridad Supervisora lo solicite, se les deberá entregar.

Si bien es cierto que esta regulación estaba muy pensado para el “cloud”, las “redes sociales” y todo eso, va a generar una serie de problemáticas en muchas empresas, principalmente PYME. Las empresas grandes ya suelen tener a una persona responsable de los datos, pero las empresas pequeñas no. Además, tampoco queda muy claro cuando se habla de la pseudonimización y encriptación de datos si simplemente es mantener la base de datos encriptada (como tener un MySQL con SSL/TLS) o directamente hay que encriptar la información, lo que generaría una complejidad excesida en los sistemas.

La Comisión Europea ha lanzado un sitio web en el que se trata este tema, eugdpr.org, que, como curiosidad, no funciona sobre HTTPS. También la Agencia de Protección de Datos ha lanzado una sección en la que publican bastantes documentos para explicar cada uno de los detalles a cumplir.

Mis canciones favoritas (bueno, quizá no todas)

Hay canciones en las que simplemente escuchar la primera nota sabes cuál es, sabes lo que significa, sabes que recuerdos te van a aparecer en ese momento, a dónde te van a transportar, con quién, cuándo… La mayoría de estas canciones tienen una historia detrás, otras simplemente me gustan, otras pueden no pegar, pero deben tener algo, un ritmo, una nota que hacen que me guste… Y ha sido complejo elegir esta recopilación de más de 800 canciones de mis listas de Spotify.

  1. L’Amour Toujours – Gigi D’Agostino [youtube]
    Es MI canción. Y punto 😀
    [youtube https://www.youtube.com/watch?v=wD0Mm6WIcYs]
  2. Take On Me – a-ha [youtube]
    Canción genial, que da buen rollo, y un vídeo muy chulo teniendo en cuenta cuándo se hizo…
    [youtube https://www.youtube.com/watch?v=djV11Xbc914]

  3. Walking On Sunshine – Katrina & The Waves [youtube]
    Fry (de Futurama) de tanto en tanto va silbando esta canción. Como yo.
    [youtube https://www.youtube.com/watch?v=iPUmE-tne5U]

  4. Like A G6 – Far East Movement ft. The Cataracs, DEV [youtube]
    Esta canción fue la que seguramente más escuché cuando estuve viviendo en Miami (US).
    [youtube https://www.youtube.com/watch?v=w4s6H4ku6ZY]

  5. Video Killed The Radio Star – The Buggles [youtube]
    La primera canción que se emitió en la MTV, y que también me da rollito.
    [youtube https://www.youtube.com/watch?v=W8r-tXRLazs]

  6. Come With Me – Special D [youtube]
    [youtube https://www.youtube.com/watch?v=aUyFZ0nL4TY]

A partir de aquí no hay ningún orden en concreto, simplemente están fuera del TOP, pero son canciones que me gustan, mucho…

Sleep When We’re Dead – ItaloBrothers [youtube]
[youtube https://www.youtube.com/watch?v=6MReeYAcEUM]

Without You (perdue sans toi) – Ocean Drive ft. DJ Oriska [youtube]
[youtube https://www.youtube.com/watch?v=rrze9d3zIFg]

Al amanecer – LOS FRESONES REBELDES [youtube]
[youtube https://www.youtube.com/watch?v=65Lo5eesLG0]

The Ocean – Mike Perry ft. Shy Martin [youtube]
[youtube https://www.youtube.com/watch?v=5JxgDJvqGmM]

Lean On – Major Lazer & DJ Snake (feat. MØ) [youtube]
[youtube https://www.youtube.com/watch?v=YqeW9_5kURI]

Firestone – Kygo ft. Conrad Sewell [youtube]
[youtube https://www.youtube.com/watch?v=9Sc-ir2UwGU]

Kiss You – Sasha Lopez & Ale Blake feat. Broono [youtube]
[youtube https://www.youtube.com/watch?v=qLp1zYHclnU]

Drop In The Ocean – OMI feat. AronChupa [youtube]
[youtube https://www.youtube.com/watch?v=IlyVdjEQQRY]

Are You With Me – Lost Frequencies [youtube]
[youtube https://www.youtube.com/watch?v=VjHMDlAPMUw]

All I Wanna Do – Martin Jensen [youtube]
[youtube https://www.youtube.com/watch?v=zXHZIuJW97o]

(I Can’t Get No) Satisfaction – The Rolling Stones [youtube]
[youtube https://www.youtube.com/watch?v=nrIPxlFzDi0]

Wicked Wonderland – Martin Tungevaag [youtube]
[youtube https://www.youtube.com/watch?v=egtI2xqg75E]

Making Luv – BBX [youtube]
[youtube https://www.youtube.com/watch?v=ZJ2St2-vLSo]

Ice Ice Baby – Vanilla Ice [youtube]
[youtube https://www.youtube.com/watch?v=rog8ou-ZepE]

Flying Free – Pont Aeri [youtube]
[youtube https://www.youtube.com/watch?v=g7E5gp7F1ac]

My Way – Calvin Harris [youtube]
[youtube https://www.youtube.com/watch?v=b4Bj7Zb-YD4]

Shake It Off – Taylor Swift [youtube]
[youtube https://www.youtube.com/watch?v=nfWlot6h_JM]

Handzup Motherfuckers – Crystal Lake [youtube]
[youtube https://www.youtube.com/watch?v=iHNKroqw2qQ]

Fly on the wings of love – XTM feat. Annia [youtube]
[youtube https://www.youtube.com/watch?v=Z8X2y0SbQS0]

El Secreto de las Tortugas – Maldita Nerea [youtube]
[youtube https://www.youtube.com/watch?v=5juCY0S10o0]

Wake Me Up – Avicii [youtube]
[youtube https://www.youtube.com/watch?v=IcrbM1l_BoI]

I Get Around – The Beach Boys [youtube]
[youtube https://www.youtube.com/watch?v=fbywM1PDORA]

I Gotta Feeling – The Black Eyed Peas [youtube]
[youtube https://www.youtube.com/watch?v=uSD4vsh1zDA]

On My Body – Carles Pérez & Tannit Wilson [youtube]
[youtube https://www.youtube.com/watch?v=lPiw2Mvvktc]

Voglio Vederti Danzare – Prezioso Feat. Marvin [youtube]
[youtube https://www.youtube.com/watch?v=9kFGwbgU6xY]

Call Me Maybe – Carly Rae Jepsen [youtube]
[youtube https://www.youtube.com/watch?v=fWNaR-rxAic]

Top Of The World – The Cataracs ft. DEV [youtube]
[youtube https://www.youtube.com/watch?v=33lLpK2KPCQ]

Don’t Let Me Down – The Chainsmokers ft. Daya [youtube]
[youtube https://www.youtube.com/watch?v=Io0fBr1XBUA]

EVERYBODY – DJ BoBo [youtube]
[youtube https://www.youtube.com/watch?v=_0JrmT3FjBE]

Giulia – Dj Lhasa [youtube]
[youtube https://www.youtube.com/watch?v=HjuzUGW_6XU]

Black Betty – Ram Jam [youtube]
[youtube https://www.youtube.com/watch?v=4cn_woPvjQI]

Shape of You – Ed Sheeran [youtube]
[youtube https://www.youtube.com/watch?v=JGwWNGJdvx8]

Pan y Mantequilla – Efecto Pasillo [youtube]
[youtube https://www.youtube.com/watch?v=a5Hp4K0PwRQ]

My Heart Goes Boom (La Di Da Da) – French Affair [youtube]
[youtube https://www.youtube.com/watch?v=JcaTbyUkacA]

La Passion – Gigi D’Agostino [youtube]
[youtube https://www.youtube.com/watch?v=SzT0dvNrFc4]

This is my DJ – Hard in Tango [youtube]
[youtube https://www.youtube.com/watch?v=_Tt14QMxlI8]

Love You – Timati feat. Busta Rhymes & Mariya [youtube]
[youtube https://www.youtube.com/watch?v=JasLx-7-1Jw]

Lady (Say Hey) – Jordi MB Feat. Jason Rene [youtube]
[youtube https://www.youtube.com/watch?v=A8YhBC2bLZU]

Smile – New Limit [youtube]
[youtube https://www.youtube.com/watch?v=sfuS3TgYwYY]

Instalar WordPress desde cero en Ubuntu 16 (para torpes como yo)

Uso WordPress desde 2005 y en todos estos años he pasado por todo tipo de alojamiento web: hosting compartidos, dedicados, VPS, gestionados, sin gestionar… Normalmente depende de la cantidad de sitios que he de gestionar para tomar una decisión u otra.

Ahora que estoy volviendo a hacer mis cosas a mi manera, me ha dado por volver a montarme yo mismo los WordPress, de una forma que sea escalable, o al menos que en un futuro me permita crecer. Y para eso he decidido pasar de un hosting compartidos a un VPS. Esto me ha llevado a algunos problemas a la hora de realizar las migraciones, pero al fin y al cabo, hay que empezar por algún sitio.

Este manual está creado y funcionando en un VPS de 5$/mes de DigitalOcean (los de 512MB de RAM). Obviamente está organizado para poder escalar si es necesario, aunque con una máquina de estas, para un blog “normalito” hay más que suficiente, y 60 dólares al año es un precio razonable para tener tu sitio con un control del 100%.

NOTA 1: En esta documentación las IP que usaré son rangos de IP privada (por supuesto hay que sustituirlas por la IP pública que os de vuestro alojamiento) y como dominio usaré siempre example.com (que por supuesto tenéis que cambiar por vuestro dominio).

NOTA 2: Seguro que hay mil formas de hacer esto que os voy a explicar yo. Esta es una de ellas, que a mi me funciona, mejorable, seguro (y si alguien quiere, que comente y lo mejoramos)

Lo primero que recomiendo hacer es tener la máquina creada, y pedir la IPv6. Puestos ya, configurémoslo todo al 100%. Esto implica que una vez tengamos la IPv4 y la IPv6 lo que hay que hacer es configurar las DNS con las entradas siguientes:

@    A      172.16.0.0
www  A      172.16.0.0
@    AAAA   fd12:3456:789a:1::1
www  AAAA   fd12:3456:789a:1::1

Si habéis elegido DigitalOcean como proveedor, lo primero es instalar su sistema interno de estadísticas (esto se puede obviar en cualquier otro hosting):

$ curl -sSL https://agent.digitalocean.com/install.sh | sh

Lo siguiente es poner en hora la máquina:

$ timedatectl set-timezone UTC
$ timedatectl set-ntp on

Y actualizar el sistema:

$ apt-get -y update
$ apt-get -y upgrade
$ apt-get -y dist-upgrade
$ apt-get -y autoremove

Comencemos instalando algo de software base:

$ apt-get -y install software-properties-common curl vim unzip

Lo primero que vamos a montar es la base de datos. Para ello usaremos MariaDB 10.2

$ apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xF1656F24C74CD1D8
$ add-apt-repository 'deb [arch=amd64,i386,ppc64el] http://ams2.mirrors.digitalocean.com/mariadb/repo/10.2/ubuntu xenial main'
$ apt-get -y install mariadb-server
$ mysql_secure_installation

Lo primero que se hace es descargar e instalar, y posteriormente configurar. Es muy recomendable poner contraseña a la base de datos y eliminar todo aquello que no se vaya a utilizar.

Lo siguiente es la instalación del servidor web. Aunque he utilizado durante muchos años Apache HTTPD, en este caso propongo el uso de nginx.

$ apt-get -y install nginx

Y finalmente vamos a instalar PHP, en este caso la versión 7.

$ apt-get -y install php php-fpm
$ apt-get -y install php-common php-curl php-gd php-iconv php-json php-mbstring php-mcrypt php-mysqli php-xml php-xmlrpc

La instalación la hago en 2 pasos; primero la instalación base, del PHP-FPM y posteriormente algunas bibliotecas añadidas para que WordPress funcione sin problema.

Ahora que tenemos todo instalado, activamos los servicios

$ systemctl enable nginx.service
$ systemctl enable mysql.service
$ systemctl enable php7.0-fpm.service

En este punto podríamos tener un sitio web funcionando, pero hoy en día lo interesante es tener un sitio web segcurizado con certificados SSL/TLS, así que vamos a usar Let’s Encrypt para ello, y que actualice y haga todo sólo. Comenzamos generando una clave segura:

$ openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048

E instalamos el software de gestión de los certificados

$ add-apt-repository ppa:certbot/certbot
$ apt-get -y update
$ apt-get -y install python-certbot-nginx

Aunque aún no tenemos ningún certificado, os recomiendo dejar ya el cron puesto para que se autorenueven 8se ejecuta una vez al día a las 0645 UTC; podéis cambiarlo, por supuesto):

$ crontab -e

Contenido a añadir:

45 6 * * * certbot renew --dry-run

Lo siguiente es activar los Firewall (por ahora abrimos el nginx 80/443 y el SSH 22):

$ ufw app list
$ ufw allow 'Nginx Full'
$ ufw allow 'OpenSSH'
$ ufw enable

Vamos a montar un servidor de correo que permita el envío de correo sólo interno, para los correos que se manden desde el propio WordPress. Este sistema estará cerrado a correos externos o cualquier otra cosa.

$ apt -y install mailutils
$ ufw allow 'Postfix'
$ ufw reload

Ahora que está instalado, vamos a configurarlo

$ vim /etc/postfix/main.cf

Contenido a modificar:

inet_interfaces = loopback-only
mydestination = $myhostname, localhost.$mydomain, $mydomain

Iniciaremos el servicio de correo

$ systemctl enable postfix

Ahora configuraremos el sistema para que tenga nuestra cuenta de correo como base:

$ vim /etc/aliases

Contenido a modificar/añadir:

postmaster:    root
root:          mi.correo@example.com

Y para aplicar la configuración, ejecutaremos:

$ newaliases

Para acabar la parte de configuración del servidor, lo que queda por hacer es limpiar la web por defecto:

$ rm /var/www/html/index.*

Y sustituirla por otra cosa que “no moleste mucho”:

$ vim /var/www/html/index.html

Contenido a crear:

<!DOCTYPE html>
<p>Hello World!</p>

En este momento, si visitas la web desde la IP, deberías ver un mensaje por pantalla que diga: Hello World!. A partir de aquí podríamos utilizar este sistema para todas las webs distintas que queramos.

Para comenzar lo que haremos es crear la base de datos:

$ mysql -u root -p

Accederemos con la contraseña que configuramos en su momento, y crearemos la base de datos:

CREATE DATABASE example CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci;

Porteriormente crearemos un usuario que tenga permisos para controlar la base de datos:

GRANT ALL ON example.* TO 'exampleuser'@'localhost' IDENTIFIED BY 'examplepassword';

Y antes de salir, lo que haremos es refrescar los permisos:

FLUSH PRIVILEGES;

Recuerda que para salir del servidor de base de datos puedes escribir “quit”.

El siguiente bloque es el de subir el propio WordPress, el software; el objetivo es crear el lugar donde subiremos el software y dejarlo de forma ordenada.

$ mkdir /var/www/example.com/
$ cd /var/www/example.com/
$ wget https://wordpress.org/latest.tar.gz
$ tar xzvf latest.tar.gz
$ rm latest.tar.gz
$ mv ./wordpress/* ./
$ rm -rf ./wordpress/

Y posteriormente configuraremos los permisos de los ficheros y de su sistema:

$ chown -R www-data:www-data ./
$ find /var/www/example.com/ -type d -exec chmod 755 {} \;
$ find /var/www/example.com/ -type f -exec chmod 644 {} \;

El primero de estos comandos lo que hace es dar permisos a los ficheros como el nginx genera; el segundo da permisos a las carpetas y el tercero a los ficheros. En principio con estos permisos se debería poder trabajar sin problema.

Comenzaremos a configurar el WordPress con su fichero de configuración. Aunque el software de instalación permite generarlo, he preferido crear una plantilla base con ciertas configuraciones:

$ cp wp-config-sample.php wp-config.php
$ vim wp-config.php

Contenido:

<?php
define('DB_NAME', 'example');
define('DB_USER', 'exampleuser');
define('DB_PASSWORD', 'examplepassword');
define('DB_HOST', 'localhost');
define('DB_CHARSET', 'utf8mb4');
define('DB_COLLATE', 'utf8mb4_unicode_ci');
// Crear esto con https://api.wordpress.org/secret-key/1.1/salt/
define('AUTH_KEY', 'xxxxx');
define('SECURE_AUTH_KEY', 'xxxxx');
define('LOGGED_IN_KEY', 'xxxxx');
define('NONCE_KEY', 'xxxxx');
define('AUTH_SALT', 'xxxxx');
define('SECURE_AUTH_SALT', 'xxxxx');
define('LOGGED_IN_SALT', 'xxxxx');
define('NONCE_SALT', 'xxxxx');
//
$table_prefix = 'example_';
define('WPLANG', 'es_ES');
define('WP_DEBUG', false);
define('WP_DEBUG_DISPLAY', false);
define('SCRIPT_DEBUG', false);
define('WP_CACHE', true);
define('WP_SITEURL', 'https://www.example.com');
define('WP_HOME', 'https://www.example.com');
define('COOKIE_DOMAIN', 'www.example.com');
define('AUTOSAVE_INTERVAL', 30);
define('EMPTY_TRASH_DAYS', 7);
define('WP_POST_REVISIONS', false);
define('DISALLOW_FILE_EDIT', true);
define('FORCE_SSL_ADMIN', true);
define('WP_AUTO_UPDATE_CORE', true);
define('IMAGE_EDIT_OVERWRITE', true);
//
if(!defined('ABSPATH')) define('ABSPATH', dirname(__FILE__) . '/');
require_once(ABSPATH . 'wp-settings.php');
?>

He puesto como configuración de “CHARSET / COLLATE” la de “utf8mb4” que permitiría una gestión avanzada de idiomas “raros” (no occidentales, como el chino, japonés, cirílico, árabe…) sin problema. Obviamente aquí cada uno que configure los detalles como le parezca mejor. Esto es una plantilla que yo uso.

Ahora que tenemos el fichero, vamos a quitar permisos para que no pueda ser modificado o leído por terceros:

$ chown www-data:www-data wp-config.php
$ chmod 600 wp-config.php

El siguiente bloque es el que va a permitirnos tener sitios webs distintos. La primera vez hemos de reconfigurar el sitio web por defecto, que se supone que sólo será para cuando se acceda a las IP (o cuando haya algo configurado apuntando a esas IP pero no sea algo que tengamos en marcha).

$ cd /etc/nginx/sites-enabled/
$ rm default
$ cd /etc/nginx/sites-available/
$ rm default
$ vim default.conf

Contenido:

server {
  listen 80 default_server;
  #listen 443 ssl http2 default_server;
  server_name _;
  root /var/www/html;
  index index.html index.php;
  location = /favicon.ico {
    log_not_found off;
    access_log off;
  }
  location = /robots.txt {
    allow all;
    log_not_found off;
    access_log off;
  }
  location ~ \.php$ {
    include snippets/fastcgi-php.conf;
    fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
  }
  location ~ /.well-known {
    allow all;
  }
  location ~ /\.ht {
    deny all;
  }
}

Activaremos el sitio web, para que funcione y posteriormente comprobaremos que el nginx dice que está todo correcto:

$ ln -s /etc/nginx/sites-available/default.conf /etc/nginx/sites-enabled/
$ nginx -t

Lo que nos debería mostrar por pantalla un mensaje tal que:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Si todo va correctamente, ahora sí que crearemos un sitio web para el WordPress; lo crearemos en dos fases. La primera simplemente haremos que responda el sitio y que se puedan generar los certificados de seguridad. Posteriormente los activaremos.

$ vim example.com.conf

Contenido:

server {
  listen 80;
    listen [::]:80;
  server_name untor.com www.untor.com;
    root /var/www/untor.com;
  location ~ /.well-known {
    allow all;
  }
}

Activaremos el sitio y comprobaremos que la configuración es correcta y reiniciaremos el servicio:

$ ln -s /etc/nginx/sites-available/untor.com.conf /etc/nginx/sites-enabled/
$ nginx -t
$ systemctl restart nginx.service

Ahora crearemos el certificado y los ficheros necesarios para que vaya el HTTPS:

$ certbot --nginx certonly

Elegiremos las opciones y los certificados que se requieran, y una vez que estén creados, los añadiremos al fichero de configuración. Sustituiremos el que acabamos de crear por uno mucho más detallado:

$ vim example.com.conf

Contenido:

server {
  listen 80;
  listen [::]:80;
  server_name example.com www.example.com;
  return 301 https://www.example.com$request_uri;
}
server {
  listen 443 ssl http2;
  listen [::]:443 ssl http2;
  #ssl on;
  ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
  ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
  ssl_prefer_server_ciphers on;
  ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH";
  ssl_ecdh_curve secp384r1;
  ssl_session_cache shared:SSL:10m;
  ssl_session_tickets off;
  ssl_session_timeout 1d;
  ssl_stapling on;
  ssl_stapling_verify on;
  ssl_trusted_certificate /etc/letsencrypt/live/example.com/chain.pem;
  resolver 208.67.222.222 valid=300s;
  resolver_timeout 5s;
  add_header X-Frame-Options DENY;
  add_header X-Content-Type-Options nosniff;
  add_header Strict-Transport-Security max-age=15768000;
  ssl_dhparam /etc/ssl/certs/dhparam.pem;
  server_name example.com;
  return 301 https://www.example.com$request_uri;
}
server {
  listen 443 ssl http2;
  listen [::]:443 ssl http2;
  #ssl on;
  ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
  ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
  ssl_prefer_server_ciphers on;
  ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH";
  ssl_ecdh_curve secp384r1;
  ssl_session_cache shared:SSL:10m;
  ssl_session_tickets off;
  ssl_session_timeout 1d;
  ssl_stapling on;
  ssl_stapling_verify on;
  ssl_trusted_certificate /etc/letsencrypt/live/example.com/chain.pem;
  resolver 208.67.222.222 valid=300s;
  resolver_timeout 5s;
  add_header X-Frame-Options DENY;
  add_header X-Content-Type-Options nosniff;
  add_header Strict-Transport-Security max-age=15768000;
  ssl_dhparam /etc/ssl/certs/dhparam.pem;
  server_name www.example.com;
  root /var/www/example.com;
  index index.php;
  location / {
    try_files $uri $uri/ /index.php?$args;
  }
  location = /favicon.ico {
    log_not_found off;
    access_log off;
  }
  location = /robots.txt {
    allow all;
    log_not_found off;
    access_log off;
  }
  location ~ \.php$ {
    include snippets/fastcgi-php.conf;
    fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
  }
  location ~* \.(bmp|bz2|cur|doc|docx|exe|gif|eot|gz|htc|ico|jpeg|jpg|mid|midi|mp3|mp4|ogg|ogv|otf|png|ppt|pptx|rar|rtf|svg|svgz|tar|tgz|ttf|wav|webm|woff|woff2|xls|xlsx|zip)$ {
    expires max;
    add_header Cache-Control "public";
    log_not_found off;
  }
  location ~* \.(atom|css|js|rss)$ {
    expires 1d;
    add_header Cache-Control "public";
  }
  location ~ /.well-known {
    allow all;
  }
  location ~ /\.ht {
    deny all;
  }
  location ~* wp-config.php {
    deny all;
  }
}

Si todo va bien, ahora deberíamos probar este fichero, y si nos da correcto, reiniciar el servidor web:

$ nginx -t
$ systemctl restart nginx.service

Ahora es el momento de irte a tu navegador web, y visitar https://www.example.com/ (el dominio que hayas configurado), y debería aparecerte el instalador de WordPress que te pedirá el nombre de tu sitio, tu usuario y contraseña, etcétera.

En principio el sistema ya está funcionando correctamente, y permitiría, usando estos últimos bloques, disponer de varios sitios web funcionando en paralelo. pero antes de acabar quiero hacer unos pequeños cambios a la configuración del PHP.

$ cd /etc/php/7.0/fpm/
$ vim php.ini

Sustituir:

error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT

Por:

error_reporting = E_ALL

Este cambio no debe afectar en principio a nada, ya que el muestreo de errores seguirá apagado, pero si en un momento determinado se ha de activar, lo mejor es que muestre absolutamente todos los errores habidos y por haber.

Sustituir:

upload_max_filesize = 2M

Por:

upload_max_filesize = 32M

Este cambio es bastante útil para el WordPress, ya que permitirá que se puedan subir ficheros (imágenes, adjuntos, etc…) -los llamados Media- de ese tamaño que pongamos. Por norma general si sólo usas imágenes 2 Megas puede ser una cifra correcta, pero si realmente trabajas con imágenes de calidad, ficheros PDF o similares, seguro que se queda corto, por lo que puedes subirlo a 32 Megas, 128 Megas, e incluso si tienes vídeos y los quieres subir así, a 1 Giga (o más). Tampoco recomiendo pasarse.

Sustituir:

;date.timezone =

Por:

date.timezone = UTC

Y ya mi TOC me lleva a configurar algo que genera a veces problemas en muchos sistemas, que es la hora. Al principio pusimos la máquina en hora UTC, y ahora configuramos el PHP para que siga también esa regla. Finalmente lo único que queda es aplicar los cambios, reiniciando el propio PHP.

$ systemctl restart php7.0-fpm.service

Y hasta aquí el sistema que configura una máquina Ubuntu 16 para uno o más WordPress, con sus certificados HTTPS, con un sistema integrado de caché (activando además la propia de WordPress), con una base de datos de última generación, con un PHP a su última versión… Comod ecía, seguro que hay más trucos, configuraciones y demás, pero esto ha de servir de base para una instalación de uno o varios WordPress, y que funciona.

Desinstalar paquetes problemáticos de un Synology

Desde hace varios años que trabajo en casa con un par de Synology DiskStation DS216se. Es una buena manera de tener backups en casa con un gran panel de gestión y de forma sencilla. Seguramente ahora tomaría la decisión de hacer algunos cambios (y probablemente los haga) como añadirle discos SSD que he tenido la posibilidad de comprobar con clientes y amigos, pero es lo que hay.

Uno de los problemas que me he encontrado en uno de los que tengo es la imposibilidad de desinstalar un paquete desde el propio panel. El problema estaba (seguramente) en que en una primera desinstalación algo falló y se quedó colgado y a medias. Al intentar desinstalarlo me decís que no podía acceder al MariaDB, pero si accedía por CLI ya no existían las bases de datos ni nada. Estaba corrupto el sistema.

Tras probar y probar finalmente decidí que la mejor solución era desinstalar los paquetes manualmente por bash, así que activé el SSH y me metí en el sistema. Para esto, lo primero que hay que tener es acceso SSH, que está en el Panel de Control -> Terminal y SNMP. Allí se activa la opción SSH y se aplican los filtros del Firewall. Si dejáis el puerto 22 por defecto la cosa será muy compatible con todo.

Una vez esté activado el SSH, lo siguiente es entrar por un terminal (tipo el Putty), entrar en vuestra IP por el puerto 22, con vuestro usuario (y teniendo permisos de root, que os hará falta).

Lo siguiente es ir a estas carpetas y erradicar todo su contenido:

  • cd /volume1/@appstore
  • sudo rm -rf nombredelpaqueteaeliminar
  • cd /var/packages
  • sudo rm -rf nombredelpaqueteaeliminar
  • cd /usr/local
  • sudo rm -rf nombredelpaqueteaeliminar

Una vez hecho esto, podéis volver al panel del Synology, entrar en la zona de paquetes y ya os habrá desaparecido el paquete por completo.