Cómo implementar Ghost v0.11 LTS en Ubuntu 16.04

Ghost es una plataforma de blogs de código abierto que ha ganado popularidad entre los desarrolladores y usuarios comunes desde su lanzamiento en 2013. Se centra en el contenido y los blogs. Lo más atractivo de Ghost es su diseño simple, limpio y receptivo. Puede escribir sus publicaciones de blog desde un teléfono móvil. El contenido para Ghost está escrito usando el lenguaje Markdown. Ghost es perfecto para individuos o pequeños grupos de escritores.

En esta guía vamos a configurar e implementar un blog seguro Ghost v0.11.x LTS en un Ubuntu 16.04 LTS VPS usando Let's Encrypt , Certbot , Node.js , NPM , NGINX y MySQL .

Requisitos

  • Registre (compre) un nombre de dominio.
  • Servidor Ubuntu 16.04 instancia de servidor con un mínimo de 1 GB de RAM .
  • Usuario de sudo.

Antes de que empieces

  1. Cree una nueva cuenta de usuario no root :

    adduser johndoe --gecos "John Doe"
    
  2. Conviértalo en superusuario agregándolo al sudogrupo:

    usermod -aG sudo johndoe
    
  3. Cambiar a nuevo usuario:

    su - johndoe
    
  4. Actualice el software de su sistema operativo:

    sudo apt update && sudo apt upgrade -y
    
  5. Configure la zona horaria:

    sudo dpkg-reconfigure tzdata
    
  6. Instale las herramientas requeridas:

    sudo apt install -y build-essential zip unzip vim nano openssl wget curl git apt-transport-https
    
  7. Reinicie el sistema si es necesario:

    sudo shutdown -r now
    

Instalar Certbot

NOTA : Antes de comenzar este paso, asegúrese de haber establecido registros DNS para su dominio.

Vamos a utilizar Let's Encrypt CA y el cliente Certbot de EFF para obtener el certificado SSL / TLS para nuestro blog Ghost. No olvide reemplazar todas las instancias de blog.domain.tldcon su nombre de dominio.

  1. Instale el software de administración de certificados Certbot (anteriormente cliente Let's Encrypt ) hecho con Python:

    sudo apt update
    sudo apt install -y software-properties-common
    sudo add-apt-repository -y ppa:certbot/certbot
    sudo apt update
    sudo apt install -y certbot
    
  2. Verifique la versión de Certbot:

    certbot --version
    # certbot 0.14.2
    
  3. Obtenga el certificado RSA utilizando el método de autenticación independiente (complemento):

    sudo certbot certonly --standalone --domains blog.domain.tld --rsa-key-size 2048 --must-staple --email [email protected] --no-eff-email --agree-tos
    
    # IMPORTANT NOTES:
    #  - Congratulations! Your certificate and chain have been saved at 
       /etc/letsencrypt/live/blog.domain.tld/fullchain.pem. 
    #  Your cert will expire on YYYY-MM-DD. . . .
    #  . . .
    

    Después de seguir los pasos anteriores, su certificado y clave privada estarán en el /etc/letsencrypt/live/blog.domain.tlddirectorio.

Instalar Node.js y NPM

NOTA : Ghost es compatible actualmente con versiones Node.js 4.5+ y 6.9+ solamente.

Ghost está construido sobre Node.js. Vamos a instalar la versión recomendada para Ghost que se encuentra v6 Boron LTSal momento de escribir esto.

  1. Descargue e instale Node.js v6 LTS:

    curl -sL https://deb.nodesource.com/setup_6.x | sudo -E bash -
    sudo apt install -y nodejs
    
  2. Verifique las versiones Node.js y NPM:

    node -v && npm -v
    # v6.11.1
    # 3.10.10
    

Instalar MySQL

De forma predeterminada, Ghost viene configurado para usar una base de datos SQLite, que no requiere configuración.

Alternativamente, Ghost también se puede usar con una base de datos MySQL cambiando la configuración de la base de datos. Primero debe crear una base de datos y un usuario, luego puede cambiar la configuración de sqlite3 existente.

  1. Descargue e instale MySQL:

    sudo apt install -y mysql-server
    

    NOTA : Durante la instalación, se le solicitará la contraseña de usuario "root" de MySQL. Debe establecer una contraseña segura para el usuario "root" de MySQL.

  2. Verifique la versión de MySQL:

    mysql --version
    # mysql  Ver 14.14 Distrib 5.7.18, for Linux (x86_64) using  EditLine wrapper
    
  3. Compruebe si MySQL daemon se ha iniciado y se está ejecutando:

    sudo systemctl status mysql.service
    sudo systemctl is-enabled mysql.service
    
  4. Ejecute el mysql_secure_installationscript para asegurar un poco su base de datos:

    sudo mysql_secure_installation
    
  5. Inicie sesión en MySQL como usuario root:

    mysql -u root -p
    # Enter password:
    
  6. Cree una nueva base de datos MySQL y usuario:

    create database dbname;
    grant all on dbname.* to 'user' identified by 'password';
    
  7. Salga de MySQL:

    exit
    

Instalar NGINX

  1. Descargue e instale la última versión principal de NGINX del repositorio oficial de NGINX:

    wget https://nginx.org/keys/nginx_signing.key
    sudo apt-key add nginx_signing.key
    rm nginx_signing.key
    sudo -s
    printf "deb https://nginx.org/packages/mainline/ubuntu/ `lsb_release -sc` nginx \ndeb-src https://nginx.org/packages/mainline/ubuntu/ `lsb_release -sc` nginx \n" >> /etc/apt/sources.list.d/nginx_mainline.list
    exit
    sudo apt update
    sudo apt install -y nginx nginx-module-geoip nginx-module-image-filter nginx-module-njs nginx-module-perl nginx-module-xslt nginx-nr-agent
    
  2. Verifique que esté instalado comprobando la versión de NGINX:

    sudo nginx -v
    # nginx version: nginx/1.13.3
    
  3. Verifique el estado, habilite e inicie el servicio NGINX (daemon):

    sudo systemctl status nginx.service # inactive (dead)
    sudo systemctl enable nginx.service
    sudo systemctl start nginx.service
    
  4. Cree un /etc/nginx/ssldirectorio y genere un nuevo grupo Diffie-Hellman ( DH ):

    sudo mkdir -p /etc/nginx/ssl
    sudo openssl dhparam -out /etc/nginx/ssl/dhparams-2048.pem 2048
    
  5. Crear directorio de registro para blog.domain.tldhost virtual:

    sudo mkdir -p /var/log/nginx/blog.domain.tld
    
  6. Configure NGINX como un servidor proxy inverso HTTP ( S ):

    sudo vim /etc/nginx/conf.d/ghost.conf
    
  7. Pegue lo siguiente en /etc/nginx/conf.d/ghost.conf:

    # domain: blog.domain.tld
    # public: /var/www/ghost
    
    upstream ghost_app {
        server 127.0.0.1:2368;
        keepalive 32;
    }
    
    server {
        listen [::]:80 default_server;
        listen 80 default_server;
        listen [::]:443 ssl http2 default_server;
        listen 443 ssl http2 default_server;
    
        server_name blog.domain.tld;
        root /var/www/ghost;
    
        error_log /var/log/nginx/blog.domain.tld/error.log;
        access_log /var/log/nginx/blog.domain.tld/access.log;
    
        client_max_body_size 100M;
    
        ssl_certificate /etc/letsencrypt/live/blog.domain.tld/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/blog.domain.tld/privkey.pem;
        ssl_dhparam ssl/dhparams-2048.pem;
    
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
        ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS';
        ssl_prefer_server_ciphers on;
    
        ssl_buffer_size 4K;
    
        ssl_session_timeout 1d;
        ssl_session_cache shared:SSL:50M;
        ssl_session_tickets off;
    
        ssl_stapling on;
        ssl_stapling_verify on;
        ssl_trusted_certificate /etc/letsencrypt/live/blog.domain.tld/chain.pem;
    
        resolver 8.8.8.8 8.8.4.4 valid=300s;
    
        location / {
            proxy_pass http://ghost_app;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header Host $http_host;
            proxy_set_header X-Forwarded-Proto $scheme;
            proxy_hide_header X-Powered-By;
    
            proxy_http_version 1.1;
            proxy_set_header Connection "";
    
        }
    }
    
  8. Guarde y pruebe la configuración de NGINX para errores de sintaxis:

    sudo nginx -t
    
  9. Recargue la configuración de NGINX:

    sudo systemctl reload nginx.service
    

Instalar fantasma

NOTA : Si desea alojar varios blogs de Ghost en el mismo VPS, cada instancia de Ghost debe ejecutarse en un puerto separado.

  1. Crear directorio raíz de documentos:

    sudo mkdir -p /var/www/
    
  2. Crea un nuevo ghostusuario:

    sudo adduser --shell /bin/bash --gecos 'Ghost application' --disabled-password ghost
    
  3. Descargar Ghost:

    curl -L https://github.com/TryGhost/Ghost/releases/download/0.11.10/Ghost-0.11.10.zip -o ghost.zip
    
  4. Descomprima Ghost en el /var/www/ghostdirectorio (ubicación de instalación recomendada):

    sudo unzip -uo ghost.zip -d /var/www/ghost
    rm ghost.zip
    
  5. Mover al nuevo ghostdirectorio:

    cd /var/www/ghost
    
  6. Cambiar la propiedad del /var/www/ghostdirectorio:

    sudo chown -R ghost:ghost .
    
  7. Cambiar a nuevo ghostusuario:

    sudo su - ghost
    
  8. Navegue a la raíz del documento /var/www/ghost:

    cd /var/www/ghost
    
  9. Instale Ghost solo con dependencias de producción. Cuando esto se completa, se instala Ghost:

    npm install --production
    
  10. Santo Configurar cambiando url, maily databasepropiedad del productioninterior de objetos de config.jsarchivo:

    cp config.example.js config.js
    vim /var/www/ghost/config.js
    
    
    var path = require('path'),
        config;
    
    config = {
        // ### Production
        // When running Ghost in the wild, use the production environment.
        // Configure your URL and mail settings here
        production: {
            url: 'https://blog.domain.tld',
            mail: {
                transport: 'SMTP',
                options: {
                    service: 'Mailgun',
                    auth: {
                        user: '',
                        pass: ''
                    }
                }
            },
            database: {
                client: 'mysql',
                connection: {
                    host: '127.0.0.1',
                    user: 'your_database_user',
                    password: 'your_database_password',
                    database: 'your_database_name',
                    charset: 'utf8'
                },
                debug: false
            },
            // . . .
            // . . .
    

    NOTA : también debe configurar los mailajustes. Consulte la documentación oficial de Ghost sobre cómo hacerlo.

  11. Iniciar Ghost en entorno de producción:

    npm start --production
    

    Ghost ahora estará corriendo. Tanto la interfaz de usuario como la interfaz de administración del blog están protegidas con HTTPS y HTTP / 2 también funciona. Puede abrir su navegador y visitar el sitio en https://blog.domain.tld. No olvide reemplazar blog.domain.tldcon su nombre de dominio.

  12. Cierre el proceso Ghost presionando CTRL+ Cy salga del usuario fantasma de nuevo al usuario raíz

    exit
    

Ejecutando Ghost como un servicio del sistema

Si cierra su sesión de terminal con su VPS, su blog también se cerrará. Eso no es bueno. Para evitar esto, vamos a usar systemd. Mantendrá nuestro blog activo las 24 horas, los 7 días de la semana.

  1. Crear ghost.servicearchivo de unidad systemd. Ejecute sudo vim /etc/systemd/system/ghost.servicey copie / pegue el contenido a continuación:

    [Unit]
    Description=Ghost - the professional publishing platform
    Documentation=https://docs.ghost.org/v0.11.9
    After=network.target
    
    [Service]
    Type=simple
    # Edit WorkingDirectory, User and Group as needed
    WorkingDirectory=/var/www/ghost
    User=ghost
    Group=ghost
    ExecStart=/usr/bin/npm start --production
    ExecStop=/usr/bin/npm stop --production
    Restart=always
    SyslogIdentifier=Ghost
    
    [Install]
    WantedBy=multi-user.target
    
  2. Habilitar y comenzar ghost.service:

    sudo systemctl enable ghost.service && sudo systemctl start ghost.service
    
  3. Verificar ghost.serviceestado:

    sudo systemctl status ghost.service && sudo systemctl is-enabled ghost.service
    
  4. Navega https://blog.domain.tld/ghost/y crea un usuario administrador de Ghost. ¡Haz esto tan pronto como sea posible!

Conclusión

Eso es. Ahora tenemos un blog de Ghost totalmente funcional. Su servidor está entregando contenido a través de HTTP / 2 cuando el cliente lo admite. Si desea cambiar el tema predeterminado de Ghost llamado Casper a uno personalizado, simplemente puede descargar y descomprimir el tema en la /var/www/ghost/content/themescarpeta y seleccionarlo a través de la interfaz de administrador de Ghost, ubicada en https://blog.domain.tld/ghost.



Cómo instalar MODX Revolution en un CentOS 7 LAMP VPS

Cómo instalar MODX Revolution en un CentOS 7 LAMP VPS

¿Usando un sistema diferente? MODX Revolution es un sistema de gestión de contenido (CMS) de nivel empresarial rápido, flexible, escalable, gratuito y de código abierto escrito i

Instalación de Fork CMS en CentOS 7

Instalación de Fork CMS en CentOS 7

¿Usando un sistema diferente? Fork es un CMS de código abierto escrito en PHP. El código fuente de Forks está alojado en GitHub. Esta guía le mostrará cómo instalar Fork CM

Cómo instalar Typesetter CMS en CentOS 7

Cómo instalar Typesetter CMS en CentOS 7

Typesetter es un CMS de código abierto escrito en PHP enfocado en la facilidad de uso con la edición True WYSIWYG y el almacenamiento de archivos planos. En este artículo, estaremos instalando

Cómo instalar MODX Revolution en un Fedora 26 LAMP VPS

Cómo instalar MODX Revolution en un Fedora 26 LAMP VPS

¿Usando un sistema diferente? MODX Revolution es un sistema de gestión de contenido (CMS) de nivel empresarial rápido, flexible, escalable, gratuito y de código abierto escrito i

Configurar WordPress con WooCommerce en CentOS 6

Configurar WordPress con WooCommerce en CentOS 6

Las instancias de Vultr son una excelente manera de ejecutar su blog de WordPress, pero una extensión más notable de WordPress es WooCommerce, un complemento de comercio electrónico que extiende

Running WordPress on OpenBSD 6.5 with OpenBSDs HTTPD

Running WordPress on OpenBSD 6.5 with OpenBSDs HTTPD

Introduction The closer you keep your OpenBSD install to the default and without as many added packages, the more secure it will be. While the more commo

Instalar WordPress en OpenBSD 6.2

Instalar WordPress en OpenBSD 6.2

Introducción WordPress es el sistema de gestión de contenido dominante en Internet. Potencia todo, desde blogs hasta sitios web complejos con contenido dinámico.

Instalar y configurar un blog Ghost v1.0.0 en Ubuntu 16.04

Instalar y configurar un blog Ghost v1.0.0 en Ubuntu 16.04

Ghost es una plataforma de publicación moderna y de código abierto construida en Node.js con un cliente de administración Ember.js, una API JSON y una API de tema impulsada por Handlebars.js. Ghos

Cómo implementar Ghost v0.11 LTS en CentOS 7.3

Cómo implementar Ghost v0.11 LTS en CentOS 7.3

¿Usando un sistema diferente? Ghost es una plataforma de blogs de código abierto que ha estado ganando popularidad entre los desarrolladores y usuarios comunes desde su 201

Cómo implementar Ghost v0.11 LTS en Debian 8

Cómo implementar Ghost v0.11 LTS en Debian 8

¿Usando un sistema diferente? Ghost es una plataforma de blogs de código abierto que ha estado ganando popularidad entre los desarrolladores y usuarios comunes desde su 201

How to Install Dotclear on Debian 9 (Stretch)

How to Install Dotclear on Debian 9 (Stretch)

Using a Different System? Dotclear is a very simple blogging engine. It is open-source and easy to use. This tutorial will go through the installation on

Cómo implementar múltiples sitios de Wordpress usando Virtualmin y Ansible en Ubuntu 16.04

Cómo implementar múltiples sitios de Wordpress usando Virtualmin y Ansible en Ubuntu 16.04

Un uso común de un servidor virtual Vultr es alojar sitios web de Wordpress. Esta guía le muestra cómo automatizar la configuración de un servidor virtual desde cero

Configuración de la plataforma de publicación Ghost Professional en OpenBSD 6

Configuración de la plataforma de publicación Ghost Professional en OpenBSD 6

Ghost es el último y más grande advenedizo para rivalizar con WordPress. El desarrollo de temas es rápido y fácil de aprender porque los desarrolladores de Ghost decidieron usar ambos

Cómo instalar MODX Revolution en un Ubuntu 16.04 LAMP VPS

Cómo instalar MODX Revolution en un Ubuntu 16.04 LAMP VPS

¿Usando un sistema diferente? MODX Revolution es un sistema de gestión de contenido (CMS) de nivel empresarial rápido, flexible, escalable, gratuito y de código abierto escrito i

Cómo instalar MODX Revolution en un FreeBSD 11 FAMP VPS

Cómo instalar MODX Revolution en un FreeBSD 11 FAMP VPS

¿Usando un sistema diferente? MODX Revolution es un sistema de gestión de contenido (CMS) de nivel empresarial rápido, flexible, escalable y de código abierto escrito en PHP. Es yo

Cómo instalar MODX Revolution en un Debian 9 LAMP VPS

Cómo instalar MODX Revolution en un Debian 9 LAMP VPS

¿Usando un sistema diferente? MODX Revolution es un sistema de gestión de contenido (CMS) de nivel empresarial rápido, flexible, escalable, gratuito y de código abierto escrito i

Cómo instalar Neos CMS en CentOS 7

Cómo instalar Neos CMS en CentOS 7

Neos es un innovador sistema de gestión de contenido de código abierto que es excelente para crear y editar contenido en línea. Con autores y editores en mente, Neo

Cómo implementar Ghost v0.11 LTS en Fedora 25

Cómo implementar Ghost v0.11 LTS en Fedora 25

¿Usando un sistema diferente? Ghost es una plataforma de blogs de código abierto que ha estado ganando popularidad entre los desarrolladores y usuarios comunes desde su 201

Instalación de Fork CMS en Ubuntu 16.04 LTS

Instalación de Fork CMS en Ubuntu 16.04 LTS

¿Usando un sistema diferente? Fork es un CMS de código abierto escrito en PHP. El código fuente de Forks está alojado en GitHub. Esta guía le mostrará cómo instalar Fork CM

¿Puede la IA luchar con un número cada vez mayor de ataques de ransomware?

¿Puede la IA luchar con un número cada vez mayor de ataques de ransomware?

Los ataques de ransomware van en aumento, pero ¿puede la IA ayudar a lidiar con el último virus informático? ¿Es la IA la respuesta? Lea aquí, sepa que la IA es una bendición o una perdición

ReactOS: ¿Es este el futuro de Windows?

ReactOS: ¿Es este el futuro de Windows?

ReactOS, un sistema operativo de código abierto y gratuito, está aquí con la última versión. ¿Puede satisfacer las necesidades de los usuarios de Windows de hoy en día y acabar con Microsoft? Averigüemos más sobre este estilo antiguo, pero una experiencia de sistema operativo más nueva.

Manténgase conectado a través de la aplicación de escritorio WhatsApp 24 * 7

Manténgase conectado a través de la aplicación de escritorio WhatsApp 24 * 7

Whatsapp finalmente lanzó la aplicación de escritorio para usuarios de Mac y Windows. Ahora puede acceder a Whatsapp desde Windows o Mac fácilmente. Disponible para Windows 8+ y Mac OS 10.9+

¿Cómo puede la IA llevar la automatización de procesos al siguiente nivel?

¿Cómo puede la IA llevar la automatización de procesos al siguiente nivel?

Lea esto para saber cómo la Inteligencia Artificial se está volviendo popular entre las empresas de pequeña escala y cómo está aumentando las probabilidades de hacerlas crecer y dar ventaja a sus competidores.

La actualización complementaria de macOS Catalina 10.15.4 está causando más problemas que resolver

La actualización complementaria de macOS Catalina 10.15.4 está causando más problemas que resolver

Recientemente, Apple lanzó macOS Catalina 10.15.4, una actualización complementaria para solucionar problemas, pero parece que la actualización está causando más problemas que conducen al bloqueo de las máquinas Mac. Lee este artículo para obtener más información

13 Herramientas comerciales de extracción de datos de Big Data

13 Herramientas comerciales de extracción de datos de Big Data

13 Herramientas comerciales de extracción de datos de Big Data

¿Qué es un sistema de archivos de diario y cómo funciona?

¿Qué es un sistema de archivos de diario y cómo funciona?

Nuestra computadora almacena todos los datos de una manera organizada conocida como sistema de archivos de diario. Es un método eficiente que permite a la computadora buscar y mostrar archivos tan pronto como presiona buscar.

Singularidad tecnológica: ¿un futuro lejano de la civilización humana?

Singularidad tecnológica: ¿un futuro lejano de la civilización humana?

A medida que la ciencia evoluciona a un ritmo rápido, asumiendo muchos de nuestros esfuerzos, también aumentan los riesgos de someternos a una singularidad inexplicable. Lea, lo que la singularidad podría significar para nosotros.

Una mirada a 26 técnicas analíticas de Big Data: Parte 1

Una mirada a 26 técnicas analíticas de Big Data: Parte 1

Una mirada a 26 técnicas analíticas de Big Data: Parte 1

El impacto de la inteligencia artificial en la atención médica 2021

El impacto de la inteligencia artificial en la atención médica 2021

La IA en la salud ha dado grandes pasos desde las últimas décadas. Por tanto, el futuro de la IA en el sector sanitario sigue creciendo día a día.