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.



Leave a Comment

ZPanel y Sentora en CentOS 6 x64

ZPanel y Sentora en CentOS 6 x64

ZPanel, un panel de control de alojamiento web popular, se bifurcó en 2014 a un nuevo proyecto llamado Sentora. Aprende a instalar Sentora en tu servidor con este tutorial.

Cómo instalar Vtiger CRM Open Source Edition en CentOS 7

Cómo instalar Vtiger CRM Open Source Edition en CentOS 7

Aprende cómo instalar Vtiger CRM, una aplicación de gestión de relaciones con el cliente, en CentOS 7 para aumentar tus ventas y mejorar el servicio al cliente.

Cómo instalar el servidor Counter-Strike 1.6 en Linux

Cómo instalar el servidor Counter-Strike 1.6 en Linux

Esta guía completa le mostrará cómo configurar un servidor Counter-Strike 1.6 en Linux, optimizando el rendimiento y la seguridad para el mejor juego. Aprende los pasos más recientes aquí.

¿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.