LesOlivex

Serveis informàtics



WordPress en local con docker

Category : docker, Herramientas, MySql, Wordpress ago 5th, 2019

Vamos a crear una instalación de cero de wordpress con docker.

Se crearán volúmenes tanto de la base de datos como de los ficheros
de wordpress, permitiendo su persistencia y mantener los cambios que
hagamos en el proyecto.

Instalación de docker.

https://docs.docker.com/installation/

Configuración.

Creamos fichero docker-compose.yml

version: '3.7'

services:
  mysql:
    image: mariadb:10
    network_mode: bridge
    container_name: mysql-gm
    volumes:
      - ./gm_db_data:/var/lib/mysql
    restart: on-failure
    environment:
      MYSQL_ROOT_PASSWORD: password # Password MYSQL Root
  adminer:
    image: adminer
    container_name: adminer-gm
    network_mode: bridge
    restart: always
    ports:
      - 8080:8080
    depends_on:
    - mysql
    links:
    - mysql
  web:
    image: wordpress
    network_mode: bridge
    container_name: wordpress-gm
    restart: on-failure
    volumes:
     - ./html:/var/www/html
    environment:
      WORDPRESS_DB_NAME: wordpress
    ports: 
    - 8002:80
    depends_on:
    - mysql
    links:
    - mysql
volumes:
  gm_db_data:

Script run

#!/bin/bash

echo "Iniciamos docker"
sudo service docker start

echo "Levatamos contenedores docker desde docker-compose.yml"
docker-compose up

Permisos de ejecución:

chmod +x run

Ejecutamos script run.

Vamos a http://localhost:8002 y configuramos wordpress.

En este caso nuestros los datos serían:

  • Nombre de la base de datos: wordpress
  • Host: mysql
  • Usuario: root
  • Password: password

Ahora tenemos:

WordPress con dokku

Category : Administración, Dokku, Git, Herramientas, MySql, Wordpress ago 4th, 2019

VPS

Contratamos maquina virtual con OVH.

Al entrar nos muestra mensaje de error:

warning: setlocale: LC_ALL: cannot change locale (es_ES.UTF-8)

Entramos por ssh y configuramos locales.

sudo dpkg-reconfigure locales

Configuramos los DNS para que nuestro dominio apunte al servidor.

Tipo A, Host: @, TUIP, TTL: 900
Tipo CNAME, * www.TUDOMINIO.com 900

Instalación

Seguimos documentación de dokku

wget https://raw.githubusercontent.com/dokku/dokku/v0.17.9/bootstrap.sh
sudo DOKKU_TAG=v0.17.9 bash bootstrap.sh

http://IP_DE_LA_MAQUINA

Copiamos nuestra clave pública desde nuestro local en .ssh/id_rsa.pub en el formulario y guardamos.

Dokku instalado!!!!

Instalación wordpress

Desde maquina virtual

sudo dokku plugin:install https://github.com/dokku/dokku-mysql.git mysql
sudo dokku plugin:install https://github.com/dokku/dokku-letsencrypt.git

dokku apps:create TUDOMINIO
dokku domains:add TUDOMINIO gaiamagrane.com
dokku domains:add TUDOMINIO www.gaiamagrane.com
dokku mysql:create gmdb

Creamos volúmenes:

mkdir -p /var/lib/dokku/data/storage/TUDOMINIO/uploads
mkdir -p /var/lib/dokku/data/storage/TUDOMINIO/plugins
mkdir -p /var/lib/dokku/data/storage/TUDOMINIO/languages

chmod -R 755 /var/lib/dokku/data/storage/

dokku storage:mount TUDOMINIO /var/lib/dokku/data/storage/gaiamagrane/plugins/:/app/wp-content/plugins/
dokku storage:mount TUDOMINIO /var/lib/dokku/data/storage/gaiamagrane/uploads/:/app/wp-content/uploads/
dokku storage:mount TUDOMINIO /var/lib/dokku/data/storage/gaiamagrane/languages/:/app/wp-content/languages

Conexión con base de datos en dokku

dokku mysql:link gmdb TUDOMINIO

Creado el enlace entre la aplicación y el servicio de la base de datos,
tendremos en el fichero .env de la aplicación la información para conectar con
ella en forma de variable de entorno que aprovecharemos más adelante para
recoger y conectar con la base de datos.

Desde local

Debemos tener una instancia de wordpress en local.

Para ello puedes ver el post WordPress en local don docker

Nos situamos en la carpeta donde tenemos nuestro wordpress local, en mi caso la
carpeta html y creamos .gitignore con el siguiente contenido:

.heroku/
.profile.d/
.composer/
.builders_run
.release
*.log
*.swp
*.back
*.bak
*.sql
*.sql.gz
~*
.htaccess
.maintenance
wp-content/blogs.dir/
wp-content/upgrade/
wp-content/backup-db/
wp-content/cache/
wp-content/backups/
wp-content/uploads/
secret/
vendor/
# En mi caso añado.
.magtrabajos

Nota

: En caso de tener problemas de permisos con la carpeta local de wordpress
podeis ejecutar el siguiente comando: sudo chown -R www-data:$USER html/

Creamos compser.json:

{
  "require": {
    "php": "~7",
    "ext-mbstring" : "*",
    "ext-gd": "*"
  },
  "scripts": {
    "post-install-cmd": [
      "chmod -R 777 wp-content"
    ]
  }
}

Creamos fichero nginx_app.conf:

# WordPress permalinks
location / {
  index index.php index.html;
  try_files $uri $uri/ /index.php?$args;
}

# Add trailing slash to */wp-admin requests.
rewrite /wp-admin$ $scheme://$host$uri/ permanent;

# Deny access to any files with a .php extension in the uploads directory
# Works in sub-directory installs and also in multisite network
location ~* /(?:uploads|files)/.*.php$ {
  deny all;
}

#upload
client_max_body_size 100M;

#jetpack connection
fastcgi_buffers 8 32k;
fastcgi_buffer_size 64k;
proxy_buffer_size 128k;
proxy_buffers 4 256k;
proxy_busy_buffers_size 256k;

# enable gzip compression
gzip on;
# Minimum file size in bytes (really small files aren’t worth compressing)
gzip_min_length 1000;
# Compression level, 1-9
gzip_comp_level 2;
gzip_buffers 4 32k;
gzip_types text/plain application/javascript text/xml text/css image/svg+xml;
# Insert Vary: Accept-Encoding header, as specified in HTTP1.1 protocol
gzip_vary on;
# end gzip configuration

# Set time to expire for headers on assets
location ~* .(js|css|png|jpg|jpeg|gif|ico|svg)$ {
  expires 1y;
}

# Sitemap url, for WordPress SEO plugin
#rewrite ^/sitemap_index.xml$ /index.php?sitemap=1 last;
#rewrite ^/([^/]+?)-sitemap([0-9]+)?.xml$ /index.php?sitemap=$1&sitemap_n=$2 last;

Creamos fichero custom_php.ini

upload_max_filesize = 50M
post_max_size = 50M

Creamos fichero Procfile:

web: vendor/bin/heroku-php-nginx -C nginx_app.conf -i custom_php.ini --verbose

Lanzamos composer update para que nos genere el composer.lock.

composer update

Iniciamos git y añadimos repositorio de dokku y subimos proyecto.

git init
git remote add dokku dokku@TUDOMINIO.com:gaiamagrane
git add .
git commit -am 'Init'
git push dokku master

En estos momentos tenemos la aplicación funcionando pero el fichero
wp.config.php de wordpress contiene la configuración local y nos da error de
conexión.

Vamos a modificar el fichero wp-config.php por el del proyecto dokku-wordpress
que nos permite coger la configuración de las variables de entorno y en local
cogerá las que tengamos en el fichero por defecto.

Contenido de wp-config.php:

/**
 * The base configuration for WordPress
 *
 * The wp-config.php creation script uses this file during the
 * installation. You don't have to use the web site, you can
 * copy this file to "wp-config.php" and fill in the values.
 *
 * This file contains the following configurations:
 *
 * * MySQL settings
 * * Secret keys
 * * Database table prefix
 * * ABSPATH
 *
 * @link https://codex.wordpress.org/Editing_wp-config.php
 *
 * @package WordPress
 */

function fromenv($key, $default = null) {
  $value = getenv($key);
  if ($value === false) {
    $value = $default;
  }
  return $value;
}

$DSN = parse_url(fromenv('DATABASE_URL', 'mysql://username_here:password_here@localhost:3306/database_name_here'));

// ** MySQL settings - You can get this info from your web host ** //
/** The name of the database for WordPress */
define('DB_NAME', substr($DSN['path'], 1));

/** MySQL database username */
define('DB_USER', $DSN['user']);

/** MySQL database password */
define('DB_PASSWORD', $DSN['pass']);

/** MySQL hostname */
define('DB_HOST', $DSN['host']);

/** Database Charset to use in creating database tables. */
define('DB_CHARSET', 'utf8');

/** The Database Collate type. Don't change this if in doubt. */
define('DB_COLLATE', '');

/**#@+
 * Authentication Unique Keys and Salts.
 *
 * Change these to different unique phrases!
 * You can generate these using the {@link https://api.wordpress.org/secret-key/1.1/salt/ WordPress.org secret-key service}
 * You can change these at any point in time to invalidate all existing cookies. This will force all users to have to log in again.
 *
 * @since 2.6.0
 */
define('AUTH_KEY',         fromenv('AUTH_KEY', 'put your unique phrase here'));
define('SECURE_AUTH_KEY',  fromenv('SECURE_AUTH_KEY', 'put your unique phrase here'));
define('LOGGED_IN_KEY',    fromenv('LOGGED_IN_KEY', 'put your unique phrase here'));
define('NONCE_KEY',        fromenv('NONCE_KEY', 'put your unique phrase here'));
define('AUTH_SALT',        fromenv('AUTH_SALT', 'put your unique phrase here'));
define('SECURE_AUTH_SALT', fromenv('SECURE_AUTH_SALT', 'put your unique phrase here'));
define('LOGGED_IN_SALT',   fromenv('LOGGED_IN_SALT', 'put your unique phrase here'));
define('NONCE_SALT',       fromenv('NONCE_SALT', 'put your unique phrase here'));

/**#@-*/

/**
 * WordPress Database Table prefix.
 *
 * You can have multiple installations in one database if you give each
 * a unique prefix. Only numbers, letters, and underscores please!
 */
$table_prefix  = fromenv('TABLE_PREFIX', 'wp_');

/**
 * For developers: WordPress debugging mode.
 *
 * Change this to true to enable the display of notices during development.
 * It is strongly recommended that plugin and theme developers use WP_DEBUG
 * in their development environments.
 *
 * For information on other constants that can be used for debugging,
 * visit the Codex.
 *
 * @link https://codex.wordpress.org/Debugging_in_WordPress
 */
define('WP_DEBUG', (bool)fromenv('WP_DEBUG', false));

// If we're behind a proxy server and using HTTPS, we need to alert WordPress of that fact
// see also http://codex.wordpress.org/Administration_Over_SSL#Using_a_Reverse_Proxy
if ( isset($_SERVER['HTTP_X_FORWARDED_PROTO'] )
    && $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https' )
{
    $_SERVER['HTTPS'] = 'on';
}

/* That's all, stop editing! Happy blogging. */

/** Absolute path to the WordPress directory. */
if ( !defined('ABSPATH') )
  define('ABSPATH', dirname(__FILE__) . '/');

/** Sets up WordPress vars and included files. */
require_once(ABSPATH . 'wp-settings.php');

Desde la web

http://TUDOMINIO.com

Y ya podemos hacer la configuración desde el dominio.

Ahora nos faltará como gestionar los cambios que hagamos en local
sobre nuestro tema personalizado o nuestros plugins ya que la idea
es que wordpress se actualice por si solo desde el servidor.

Configurar los keys y salts de seguridad

Vamos a https://api.wordpress.org/secret-key/1.1/salt/ para generar las claves.

Y las añadimos a la configuración del proyecto.

dokku config:set wp AUTH_KEY='...your key...'
dokku config:set wp SECURE_AUTH_KEY='...your key...'
dokku config:set wp LOGGED_IN_KEY='...your key...'
dokku config:set wp NONCE_KEY='...your key...'
dokku config:set wp AUTH_SALT='...your key...'
dokku config:set wp SECURE_AUTH_SALT='...your key...'
dokku config:set wp LOGGED_IN_SALT='...your key...'
dokku config:set wp NONCE_SALT='...your key...'

---------- <PENDIENTE> -----------------

Letsencrypt.

dokku config:set --no-restart TUDOMINIO DOKKU_LETSENCRYPT_EMAIL=TUCORREO@TUCORREO.com
dokku letsencrypt TUDOMINIO
dokku letsencrypt:auto-renew
dokku letsencrypt:cron-job --add

Varios

Importación de la base de datos.

En caso de querer importar nuestra base de datos local dokku.

Podemos crear nuestra copia de la base de datos desde adminer.

Subimos el fichero al servidor y ejecutamos:

cat wordpress.sql | ssh dokku@TUDOMINIO.com mysql:import gmdb < .

Nota: Tener en cuenta que será necesario cambiar las urls del fichero
antes de importar. Ejemplo: localhost:8002 por TUDOMINIO

Entrar a una consola de un container:

dokku run APLICACION bash

Lanzar comandos de dokku desde local:

ssh dokku@TUDOMINIO.com help

Referencias:

Capturar WebCam desde consola

Category : Consola, Herramientas, Linux mai 8th, 2019

Capturamos webcam y mostramos imagen desde consola.

Instalación para debian/ubuntu:

sudo apt install fswebcam qiv

Ejecutar:

fswebcam /tmp/test.png ; qiv /tmp/test.png

Herraminetas para MarkDown en debian/ubuntu

Category : Edición de texto, Herramientas, Linux mai 8th, 2019
Herraminetas para MarkDown en debian/ubuntu

Instalación de herramientas en ubuntu/debian: sudo apt-get install pandoc texlive Ejemplo: pandoc ejemplo.md -o /tmp/ejemplo.pdf Editor gráfico Remarkable: Ejemplo de…

Añadir clave ssh a gnome-keyring

Category : Administración, Linux mai 8th, 2019

Para evitar que nos pregunte el password que acompaña a una clave ssh podemos permitir a gnome-keyring que la gestione.

Para ello solo tenemos que ejecutar este comando:

/usr/lib/seahorse/ssh-askpass  [KEY]

Solucionar /etc/sudoers corrupto

Category : Administración, Linux mai 7th, 2019

Si el sistema de vuestro servidor muestra este mensaje:

GDBus.Error:org.freedesktop.PolicyKit1.Error.Failed: No session for cookie

Lo más probable es que el fichero /etc/sudoers este corrupto y no podáis hacer
ninguna tarea de administración.

La solución:

  1. Abrir una sesión de ssh

  2. Recoger el identificador de sessión:

    echo $$

  3. Abrir otra terminal con ssh al servidor y ejecutar:

    pkttyagent --process (Identificador)

  4. Ejecutar en la primera sesión:

    pkexec visudo

Convertir fichero csv a markdown (csv2md)

Convertir fichero csv a markdown (csv2md)

Instalación Ejemplo de uso En caso de que el separador sea un tabulador. Para definir el tabulador entre comillas tecleamos…

Crear lanzador en unity

Category : Linux, Unity jul 27th, 2015
Crear lanzador en unity

Como ejemplo de como crear un lanzador en unity vamos a hacer uno con la aplicación Faircoin-qt que podemos encontrar…

Mostrar la última columna con awk

Category : awk, bash, Consola, Linux gen 11th, 2015
for x in $(cat ) ; do
echo $(echo $x | awk -v FS="/" '{print $(NF)}')
done

Permisos en servidor apache

Category : apache, Linux, Permisos, Programación gen 3rd, 2015
  • carpeta raiz: 750
  • Otras carpetas: 755
  • archivos: 644