Ghost es una poderosa plataforma de publicación y blog de código abierto basada en nodejs. Está bien diseñado y es fácil de usar. La plataforma fantasma está escrita en JavaScript y utiliza node.js como entorno de ejecución. La primera versión de Ghost lanzada en 2013 bajo la licencia MIT.
Traefik es un proxy inverso HTTP moderno y un equilibrador de carga para microservicios. Traefik facilita la implementación de todos los microservicios, integrados con componentes de infraestructura existentes como Docker, Swarm Mode, Kubernetes, Amazon ECS, Rancher, Etcd, Consul, etc.
En este tutorial, mostraremos paso a paso cómo instalar y configurar Ghost como contenedor Docker. Instalaremos y configuraremos Ghost con la última versión de Docker CE, usaremos MySQL como base de datos y Traefik como proxy inverso.
Requisitos
- Ubuntu 18.04 LTS
- Privilegios de raíz
Lo que haremos
- Instalar Docker CE en Ubuntu 18.04 LTS
- Configurar Docker para usuarios no root
- Instalar Docker Compose
- Configurar pila fantasma
- Cree una red personalizada
- Crear un directorio de proyectos
- Crear y configurar contenedor MySQL
- Crear y configurar proxy inverso de Traefik
- Crear y configurar un contenedor fantasma
- Implementar Ghost con MySQL y Traefik
- Pruebas
Paso 1:instalar Docker CE en Ubuntu 18.04 LTS
El primer paso que haremos en este tutorial es instalar la última versión de docker-ce del sistema. La versión docker-ce se puede instalar desde el repositorio oficial de docker.
Agregue la clave docker y el repositorio docker-ce.
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"
El comando actualizará automáticamente todos los repositorios en el sistema.
Ahora instale docker usando el comando apt a continuación.
sudo apt install docker-ce -y
Una vez completada la instalación, inicie el servicio docker y habilítelo para que se inicie cada vez que se inicie el sistema.
systemctl start docker
systemctl enable docker
La última versión de docker-ce se ha instalado en el sistema Ubuntu 18.04.
Paso 2:configurar Docker para usuarios no root
En esta guía, todos los microservicios de contenedores se ejecutarán bajo el usuario normal/no root. Por lo tanto, debemos configurar el usuario para que pueda ejecutar el contenedor Docker y ejecutar el comando sudo para obtener privilegios de root.
Cree un nuevo usuario llamado 'hakase' y cree la contraseña.
useradd -m -s /bin/bash hakase
passwd hakase
Ahora asigne el usuario 'hakase' a los grupos 'sudo' y 'docker'.
usermod -a -G root hakase
usermod -a -G docker hakase
Y reinicie el servicio docker.
systemctl restart docker
El 'hakase' ahora puede ejecutar el contenedor docker y ejecutar el comando sudo para obtener privilegios de root.
Inicie sesión como usuario 'hakase' y ejecute el contenedor docker hello-world.
su - hakase
docker run -it hello-world
Y el siguiente es el resultado.
Paso 3:instalar Docker Compose
En este tutorial, instalaremos docker compose 1.21 desde un archivo binario en el repositorio de Github.
Descargue el binario docker-compose en el directorio '/usr/local/bin'.
sudo curl -L https://github.com/docker/compose/releases/download/1.21.2/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose
Y haga que el archivo 'docker-compose' sea ejecutable cambiando el permiso del archivo.
sudo chmod +x /usr/local/bin/docker-compose
Se instaló docker compose; verifíquelo con el siguiente comando.
docker-compose version
docker version
Se ha instalado Docker-compose 1.21 con Docker-ce 1.18.
Paso 4:configurar la pila fantasma
En este paso, configuraremos la ventana acoplable y crearemos un nuevo archivo docker-compose para la instalación fantasma.
Crearemos una nueva red personalizada de docker y crearemos un nuevo archivo yml compuesto por docker que contiene tres servicios principales, incluida la base de datos MySQL, el proxy inverso Traefik y el propio blog Ghost.
Crea una red personalizada
Muestre la red docker disponible usando el comando de red docker a continuación.
docker network ls
Cree una nueva red acoplable personalizada para el proxy inverso traefik denominada 'traefiknet'.
docker network create traefiknet
Ahora verifique nuevamente la red disponible en el sistema docker.
docker network ls
Se ha creado la red personalizada para Treafik llamada 'traefiknet'.
Crear un directorio de proyectos
Después de crear la red personalizada de docker, crearemos un nuevo directorio de proyecto llamado 'ghost' y crearemos un nuevo archivo docker-compose.yml.
Inicie sesión con el usuario 'hakase'.
su - hakase
Cree un nuevo directorio 'fantasma' y cambie el directorio de trabajo a él.
mkdir ghost/
cd ghost/
Y cree un nuevo archivo docker-compose.
touch docker-compose.yml
Crear y configurar el servicio MySQL
MySQL es el primer servicio que queremos crear y queremos crear el contenedor de MySQL con las configuraciones a continuación.
- Usaremos la imagen acoplable de MySQL 5.7.
- Monte el directorio de datos de MySQL en el directorio de host de la ventana acoplable local.
- Ejecutar el servicio MySQL en la red interna local.
- Configure el usuario y la contraseña de MySQL.
- Contraseña raíz de MySQL:mypassword
- Base de datos para el fantasma llamado 'ghostdb' con el usuario 'ghost' y la contraseña es 'ghostdbpass'
- El contenedor de MySQL se llamará 'mysql'.
Dentro del directorio 'fantasma', cree un nuevo directorio llamado 'datos' y edite el archivo 'docker-compose.yml'.
mkdir -p data/
vim docker-compose.yml
Pegue la configuración a continuación.
version: '3.3' services: mysql: image: mysql:5.7 restart: always volumes: - ./data:/var/lib/mysql labels: - "traefik.enable=false" networks: - internal environment: MYSQL_ROOT_PASSWORD: mypassword MYSQL_USER: ghost MYSQL_PASSWORD: ghostdbpass MYSQL_DATABASE: ghostdb container_name: mysql
Guardar y salir.
Crear y configurar Traefik Reverse Proxy
Después de crear el servicio MySQL, crearemos y configuraremos el contenedor de proxy inverso traefik.
Antes de editar el script 'docker-compose.yml', necesitamos crear una nueva configuración de traefik llamada 'traefik.toml'.
vim traefik.toml
Pegue la configuración de la regla traefik a continuación.
#Traefik Global Configuration debug = false checkNewVersion = true logLevel = "ERROR" #Define the EntryPoint for HTTP and HTTPS defaultEntryPoints = ["https","http"] #Define the HTTP port 80 and #HTTPS port 443 EntryPoint #Enable automatically redirect HTTP to HTTPS [entryPoints] [entryPoints.http] address = ":80" [entryPoints.http.redirect] entryPoint = "https" [entryPoints.https] address = ":443" [entryPoints.https.tls] #Enable Traefik Dashboard on port 8080 #with basic authentication method #hakase and password [entryPoints.dash] address=":8080" [entryPoints.dash.auth] [entryPoints.dash.auth.basic] users = [ "hakase:$apr1$hEgpZUN2$OYG3KwpzI3T1FqIg9LIbi.", ] [api] entrypoint="dash" dashboard = true #Enable retry sending a request if the network error [retry] #Define Docker Backend Configuration [docker] endpoint = "unix:///var/run/docker.sock" domain = "hakase-labs.io" watch = true exposedbydefault = false #Letsencrypt Registration #Define the Letsencrypt ACME HTTP challenge [acme] email = "[email protected]" storage = "acme.json" entryPoint = "https" OnHostRule = true [acme.httpChallenge] entryPoint = "http"
Guardar y salir.
Ahora necesitamos crear un nuevo archivo para la configuración SSL Letsencrypt 'acme.json'. Se utiliza para almacenar todos los que letsencrypt genere un registro.
Cree el archivo 'acme.json' en blanco y cambie el permiso a 600.
touch acme.json
chmod 600 acme.json
A continuación, editaremos el script 'docker-compose.yml' y agregaremos la configuración del servicio traefik.
- Usaremos la última imagen de la ventana acoplable traefik.
- El contenedor se llamará 'traefik'
- Utiliza la red personalizada 'traefiknet' y expone los puertos HTTP y HTTPS.
- Monte el archivo docker sock y la configuración traefik 'traefik.toml' y 'acme.json'
- Definimos la URL del panel de control de traefik y el backend a través de las etiquetas de la ventana acoplable.
Edite 'docker-compose.yml'.
vim docker-compose.yml
Pegue la configuración del servicio traefik a continuación.
traefik: image: traefik:latest command: --docker ports: - 80:80 - 443:443 labels: - "traefik.enable=true" - "traefik.backend=dashboard" - "traefik.frontend.rule=Host:traef.hakase-labs.io" - "traefik.port=8080" networks: - traefiknet volumes: - /var/run/docker.sock:/var/run/docker.sock - ./traefik.toml:/traefik.toml - ./acme.json:/acme.json container_name: traefik restart: always
Guardar y salir.
Crear y configurar el servicio fantasma
Después de configurar el proxy inverso traefik, crearemos la configuración principal del servicio fantasma.
Detalles de configuración que queremos crear.
- Usaremos el fantasma v1 y la versión alpina de la ventana acoplable pequeña.
- Montaremos el directorio de contenido fantasma en el directorio local llamado 'blog'.
- El servicio fantasma se ejecutará en el puerto predeterminado con el nombre de dominio 'gho.hakase-labs.io', la configuración a través de etiquetas acoplables.
- El servicio fantasma usará dos redes docker, interna y traefiknet.
- Estamos configurando los detalles de la base de datos MySQL desde la configuración del contenedor mysql.
- Y el fantasma se iniciará cuando el contenedor traefik y MySQL esté en funcionamiento.
Cree un nuevo directorio llamado 'blog' y edite el archivo 'docker-compose.yml'.
mkdir -p blog/
vim docker-compose.yml
Pegue la configuración a continuación.
ghost: image: ghost:1-alpine restart: always ports: - 2368 volumes: - ./blog:/var/lib/ghost/content labels: - "traefik.enabled=true" - "traefik.backend=ghost" - "traefik.frontend.rule=Host:gho.hakase-labs.io" - "traefik.docker.network=traefiknet" - "traefik.port=2368" networks: - internal - traefiknet environment: database__client: mysql database__connection__host: mysql database__connection__user: ghost database__connection__password: ghostdbpass database__connection__database: ghostdb container_name: ghost depends_on: - mysql - traefik
networks: traefiknet: external: true internal: external: false
Guardar y salir.
Y ahora tenemos todo el directorio y la configuración como se muestra a continuación.
tree
Paso 5:implementar Ghost con MySQL y Traefik
Para compilar y ejecutar todo nuestro servicio de pila fantasma, podemos usar el siguiente comando.
docker-compose up -d
Cuando esté completo, verifique todos los servicios en ejecución.
docker-compose ps
Y el siguiente es el resultado.
Si tiene un error, verifique el registro del contenedor usando los comandos a continuación.
docker-compose logs mysql
docker-compose logs traefik
docker-compose logs ghost
La pila fantasma con MySQL y el proxy inverso Traefik está funcionando.
Paso 6 - Prueba
Abra el panel de Traefik con su URL, la mía es http://traef.hakase-labs.io/
Inicie sesión con el usuario y la contraseña en el archivo 'traefik.toml'.
Y el siguiente es el tablero de Traefik.
Para la instalación de Ghost, escriba la URL fantasma en la barra de direcciones, la mía es http://gho.hakase-labs.io/
Y obtendrás la página de inicio fantasma.
Ahora visite la página de administración para instalar y configurar un nuevo usuario administrador. Mi URL es: http://gho.hakase-labs.io/admin/
Haga clic en el botón verde para crear un nuevo usuario administrador.
Escriba detalles de usuario, contraseña, correo electrónico y haga clic nuevamente en el botón verde.
Para invitar a un nuevo miembro o usuario, haga clic en el enlace 'Haré esto más tarde...'.
Ahora obtendrá el panel de Ghost.
Y después de crear la publicación de muestra, el siguiente es el resultado.
La instalación del blog fantasma con la base de datos MySQL y Traefik Reverse Proxy en el entorno Docker se completó con éxito.
Referencias
- https://hub.docker.com/_/ghost/
- https://docs.traefik.io/