WordPress, Nginx, Ghost y Telegram con Docker - I Meetup Docker Córdoba - Quaip

23
I Meetup Docker Córdoba @sergiogomez WordPress y Nginx con Docker

description

Presentación de Sergio Gómez sobre la instalación de contenedores Docker de WordPress, Nginx como proxy inverso, Ghost y Telegram (Webogram), dentro del programa del I Meetup Docker Córdoba, celebrado en coSfera el 05/06/2014

Transcript of WordPress, Nginx, Ghost y Telegram con Docker - I Meetup Docker Córdoba - Quaip

Page 1: WordPress, Nginx, Ghost y Telegram con Docker - I Meetup Docker Córdoba - Quaip

I Meetup Docker Córdoba @sergiogomez

WordPress y Nginxcon Docker

Page 2: WordPress, Nginx, Ghost y Telegram con Docker - I Meetup Docker Córdoba - Quaip

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

Page 3: WordPress, Nginx, Ghost y Telegram con Docker - I Meetup Docker Córdoba - Quaip

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

Page 4: WordPress, Nginx, Ghost y Telegram con Docker - I Meetup Docker Córdoba - Quaip

I Meetup Docker Córdoba @sergiogomez

1Generar una imagen

Docker de WordPress

Page 5: WordPress, Nginx, Ghost y Telegram con Docker - I Meetup Docker Córdoba - Quaip

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

Page 6: WordPress, Nginx, Ghost y Telegram con Docker - I Meetup Docker Córdoba - Quaip

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

Page 7: WordPress, Nginx, Ghost y Telegram con Docker - I Meetup Docker Córdoba - Quaip

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

Page 8: WordPress, Nginx, Ghost y Telegram con Docker - I Meetup Docker Córdoba - Quaip

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)

Page 9: WordPress, Nginx, Ghost y Telegram con Docker - I Meetup Docker Córdoba - Quaip

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)

Page 10: WordPress, Nginx, Ghost y Telegram con Docker - I Meetup Docker Córdoba - Quaip

I Meetup Docker Córdoba @sergiogomez

2Instalar un servidor Nginx que actúe

como proxy inverso de cada instancia

Page 11: WordPress, Nginx, Ghost y Telegram con Docker - I Meetup Docker Córdoba - Quaip

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

Page 12: WordPress, Nginx, Ghost y Telegram con Docker - I Meetup Docker Córdoba - Quaip

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"]

Page 13: WordPress, Nginx, Ghost y Telegram con Docker - I Meetup Docker Córdoba - Quaip

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

Page 14: WordPress, Nginx, Ghost y Telegram con Docker - I Meetup Docker Córdoba - Quaip

I Meetup Docker Córdoba @sergiogomez

Demostración

Page 15: WordPress, Nginx, Ghost y Telegram con Docker - I Meetup Docker Córdoba - Quaip

I Meetup Docker Córdoba @sergiogomez

¿Problemas?

Page 16: WordPress, Nginx, Ghost y Telegram con Docker - I Meetup Docker Córdoba - Quaip

I Meetup Docker Córdoba @sergiogomez

Retos pendientes

+ Comprobar el rendimiento

+ Realizar tareas de mantenimiento

+ Depuración de problemas

+ Migración a otro servidor

+ ...

Page 17: WordPress, Nginx, Ghost y Telegram con Docker - I Meetup Docker Córdoba - Quaip

I Meetup Docker Córdoba @sergiogomez

Bonus Track 1Instalar Ghost

Page 18: WordPress, Nginx, Ghost y Telegram con Docker - I Meetup Docker Córdoba - Quaip

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

Page 19: WordPress, Nginx, Ghost y Telegram con Docker - I Meetup Docker Córdoba - Quaip

I Meetup Docker Córdoba @sergiogomez

Bonus Track 2Instalar Telegram

Page 20: WordPress, Nginx, Ghost y Telegram con Docker - I Meetup Docker Córdoba - Quaip

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"]

Page 21: WordPress, Nginx, Ghost y Telegram con Docker - I Meetup Docker Córdoba - Quaip

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

Page 22: WordPress, Nginx, Ghost y Telegram con Docker - I Meetup Docker Córdoba - Quaip

I Meetup Docker Córdoba @sergiogomez

¿Alguna pregunta?

Page 23: WordPress, Nginx, Ghost y Telegram con Docker - I Meetup Docker Córdoba - Quaip

I Meetup Docker Córdoba @sergiogomez

¡¡MUCHÍSIMAS GRACIAS!!