WordPress, Nginx, Ghost y Telegram con Docker - I Meetup Docker Córdoba - Quaip
description
Transcript of WordPress, Nginx, Ghost y Telegram con Docker - I Meetup Docker Córdoba - Quaip
I Meetup Docker Córdoba @sergiogomez
WordPress y Nginxcon Docker
I Meetup Docker Córdoba @sergiogomez
● Socio fundador de QuaiP.com junto al gran @dperilla
● Web Developer Ruby on Rails / HTML / CSS / jQuery
● 15 años de experiencia en aplicaciones web
Sergio Gómez - @sergiogomezUna vida dedicada a la sonrisa, a mis niños, y al rock and roll
I Meetup Docker Córdoba @sergiogomez
● Desarrollo e infraestructuras avanzadas de VoIP
● Servidores de streaming de radio y TV
● Cloud, VPS y servidores avanzados para aplicaciones
I Meetup Docker Córdoba @sergiogomez
1Generar una imagen
Docker de WordPress
I Meetup Docker Córdoba @sergiogomez
¿Qué necesitamos?
+ Un sistema operativo (Ubuntu)
+ Una base de datos (MySQL)
+ Un servidor web (Nginx)
+ Motor de PHP (PHP-FPM)
+ Instalar y configurar WordPress
I Meetup Docker Córdoba @sergiogomez
Dockerfile (1/2)
FROM ubuntu:14.04RUN dpkg-divert --local --rename --add /sbin/initctlRUN ln -sf /bin/true /sbin/initctlRUN apt-get updateRUN apt-get -y upgrade...RUN apt-get -y install mysql-server mysql-client nginx php5-fpm php5-mysql php-apc pwgen python-setuptools curl git unzip...RUN apt-get -y install php5-curl php5-gd php5-intl php-pear php5-imagick php5-imap php5-mcrypt php5-memcache php5-ming php5-ps php5-pspell php5-recode php5-sqlite php5-tidy php5-xmlrpc php5-xsl# mysql config (...)# nginx config (...)# php-fpm config (...)# nginx site conf (...)
Fuente: https://github.com/eugeneware/docker-wordpress-nginx
I Meetup Docker Córdoba @sergiogomez
Dockerfile (2/2)
# Supervisor Config (...)# Install WordpressADD http://wordpress.org/latest.tar.gz /usr/share/nginx/latest.tar.gzRUN cd /usr/share/nginx/ && tar xvf latest.tar.gz && rm latest.tar.gzRUN mv /usr/share/nginx/html/5* /usr/share/nginx/wordpressRUN rm -rf /usr/share/nginx/wwwRUN mv /usr/share/nginx/wordpress /usr/share/nginx/wwwRUN chown -R www-data:www-data /usr/share/nginx/www# Wordpress Initialization and Startup ScriptADD ./start.sh /start.shRUN chmod 755 /start.sh# private exposeEXPOSE 3306EXPOSE 80CMD ["/bin/bash", "/start.sh"]
Fuente: https://github.com/eugeneware/docker-wordpress-nginx
I Meetup Docker Córdoba @sergiogomez
start.sh
La primera vez que se ejecuta:+ Crea una base de datos para WordPress+ Genera una contraseña para la base de datos+ Instalar plugin de Nginx para WordPress+ Configurar enlaces permanentes+ Crear el fichero wp-config.php con los datos generados
Cada vez que se ejecuta:+ Inicia todos los servicios (supervisord)
I Meetup Docker Córdoba @sergiogomez
Creación de la imagen
$ git clone https://github.com/eugeneware/docker-wordpress-nginx.git$ cd docker-wordpress-nginx
# Podemos personalizar el fichero nginx-site.conf
$ docker build -t docker-wordpress-nginx .
Fuente: https://github.com/eugeneware/docker-wordpress-nginx
Al finalizar dispondremos de una imagen que ya podríamos usar para generar tantos contenedores como instancias de WordPress queramos instalar
$ docker run --name blog1 -d docker-wordpress-nginx
Pero aún no vamos a hacerlo, ya que necesitamos acceder a cada instancia desde fuera con su URL (p.e. blog.dominio.com)
I Meetup Docker Córdoba @sergiogomez
2Instalar un servidor Nginx que actúe
como proxy inverso de cada instancia
I Meetup Docker Córdoba @sergiogomez
¿Qué necesitamos?
+ Un sistema operativo (Ubuntu)
+ Un servidor web (Nginx)
+ Configurar Nginx para que enlace con los contenedores Docker que se vayan creando
I Meetup Docker Córdoba @sergiogomez
DockerfileFuente: https://github.com/jwilder/nginx-proxy
FROM ubuntu:12.04# Install Nginx.RUN apt-get updateRUN apt-get install -y python-software-properties wgetRUN add-apt-repository -y ppa:nginx/stableRUN apt-get updateRUN apt-get install -y nginxRUN echo "daemon off;" >> /etc/nginx/nginx.conf(...)
# Install Forego (Foreman in Go)# Install Docker-Gen (Generador de ficheros a partir de metadatos de contenedores Docker)
EXPOSE 80ENV DOCKER_HOST unix:///tmp/docker.sockCMD ["forego", "start", "-r"]
I Meetup Docker Córdoba @sergiogomez
Creación de la imagen
$ git clone https://github.com/jwilder/nginx-proxy.git$ cd nginx-proxy
# Podemos personalizar el fichero nginx.tmpl (plantilla de los virtual host generados)
$ docker build -t nginx-proxy .
Una vez generada la imagen, creamos un contenedor, y ahora sí podemos usar la imagen de WordPress para crear contenedores accesibles con su URL
$ docker run --name proxy -d -p 80:80 -v /var/run/docker.sock:/tmp/docker.sock -t nginx-proxy
$ docker run --name blog1 -e VIRTUAL_HOST=blog.dominio.com -d docker-wordpress-nginx
Fuente: https://github.com/jwilder/nginx-proxy
I Meetup Docker Córdoba @sergiogomez
Demostración
I Meetup Docker Córdoba @sergiogomez
¿Problemas?
I Meetup Docker Córdoba @sergiogomez
Retos pendientes
+ Comprobar el rendimiento
+ Realizar tareas de mantenimiento
+ Depuración de problemas
+ Migración a otro servidor
+ ...
I Meetup Docker Córdoba @sergiogomez
Bonus Track 1Instalar Ghost
I Meetup Docker Córdoba @sergiogomez
Creación del contenedor
$ docker pull dockerfile/ghost$ mkdir ghost$ cd ghost/$ wget https://raw.githubusercontent.com/TryGhost/Ghost/master/config.example.js -O config.js$ mkdir -p content/data$ mkdir -p content/images$ mkdir -p content/themes
# Editamos el fichero config.js y configuramos el entorno de producción# Reemplazamos 127.0.0.1 por 0.0.0.0
$ docker run --name ghost1 -e VIRTUAL_HOST=ghost.dominio.com -v /path/to/ghost:/ghost-override -d dockerfile/ghost
Fuente: https://github.com/dockerfile/ghost
I Meetup Docker Córdoba @sergiogomez
Bonus Track 2Instalar Telegram
I Meetup Docker Córdoba @sergiogomez
Dockerfile
FROM dockerfile/nodejs
RUN mkdir -p /webogram
ADD https://github.com/sergiogomez/webogram/archive/master.zip /webogram/webogram-master.zipRUN cd /webogram && unzip webogram-master.zip && rm -Rf webogram-master.zip
WORKDIR /webogram/webogram-master/app
EXPOSE 80
CMD ["node", "../server.js"]
I Meetup Docker Córdoba @sergiogomez
Creación de la imagen y varios contenedores
$ git clone https://github.com/sergiogomez/docker-webogram.git$ cd docker-webogram
$ docker build -t docker-webogram .
$ docker run --name chat1 -e VIRTUAL_HOST=chat.dominio1.com -d docker-webogram$ docker run --name chat2 -e VIRTUAL_HOST=chat.dominio2.com -d docker-webogram
I Meetup Docker Córdoba @sergiogomez
¿Alguna pregunta?
I Meetup Docker Córdoba @sergiogomez
¡¡MUCHÍSIMAS GRACIAS!!