Ghost, Schedule it for later, let's encrypt & Apache / Nginx

Ghost, Schedule it for later, let's encrypt & Apache / Nginx

Après les articles sur l'installation et la mise à jour de Ghost sans le Cli, j'ai rencontré un problème avec la partie programmation des publications.  N'étant pas un rédacteur assidu, je souhaitais pouvoir programmer mes publications à l'avance. Le but étant d'avoir un flow plus constant.

Cependant après plusieurs essais, impossible de le faire fonctionner. En creusant le sujet, il s'agit souvent d'un problème de requête. Il s'avère que Ghost requête sa propre API au moment souhaité. Seulement pour ce faire, il faut que votre configuration Ghost, et Apache/Nginx soit les bonnes.

Afin de le vérifier, il suffit de checker les logs Apache / Nginx :

tail -500 /var/log/apache2/ghost/access.log | grep schedules

Les requêtes doivent être des PUT :

00.00.00.00 - - [12/Oct/2018:13:10:40 +0200] "PUT /ghost/api/v0.1/schedules/posts/XXXXXXXX?client_id=XXXXX&client_secret=XXXXXX HTTP/1.1" 200 5331 "-" "node-superagent/3.8.3"

Si ce n'est pas le cas, le Schedule ne pourra pas fonctionner. Pour certain il s'agit d'un POST, d'autres d'un GET.

Voici des exemples de configurations permettant de régler le problème :

Apache  (edit : 25.10.2018)

les erreurs étaient :

ServerName ghost.me:443
RequestHeader set X-Forwarded-Proto "https"
<IfModule mod_ssl.c>
<VirtualHost *:443>
    ServerAdmin mail@me.com
    ServerName ghost.me:443
    ServerAlias www.ghost.me:443
    DocumentRoot /var/www/ghost/

    # LogFiles
    ErrorLog /var/logs/ghost/error.log
    CustomLog /var/logs/ghost/access.log combined

    RequestHeader set X-Forwarded-Proto "https"

    Include /etc/letsencrypt/options-ssl-apache.conf
    SSLCertificateFile /etc/letsencrypt/live/ghost.me-0001/fullchain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/ghost.me-0001/privkey.pem

    <Location "/">
        ProxyPreserveHost On
        ProxyPass http://127.0.0.1:2368/
        ProxyPassReverse http://127.0.0.1:2368/
    </Location>
</VirtualHost>
</IfModule>

Ghost

l'erreur était la non-précision de l'https dans la définition de l'url. On commence souvent par faire l'installation en http avant d'ajouter LetsEncrypt. Ce qui n'empêche absolument pas le fonctionnement, mais peu bloquer la programmation d'articles suivant la configuration Apache / Nginx.

{
    "url": "https://ghost.me",
    "server": {
        "host": "127.0.0.1",
        "port": 2368
    },
    "database": {
        "client": "",
        "connection": {
            "host"     : "127.0.0.1",
            "user"     : "ghost",
            "password" : "ghost",
            "database" : "ghost"
        }
    },
    "auth": {
        "type": "password"
    },
    "paths": {
        "contentPath": "content"
    },
    "logging": {
        "level": "info",
        "rotation": {
            "enabled": true
        },
        "transports": ["file", "stdout"]
    }
}

N'oubliez pas de redémarrer Ghost et Apache après vos modifications :).