Skip to content

alexbakers/ghost-ipfs

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

12 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Ghost IPFS Storage Adapter

ghost-ipfs

IPFS (Filebase, Pinata, Fleek, Web3, Lighthouse) storage adapter for Ghost.

Installation

Install using yarn/npm/git

  • Go into Ghost root directory
  • Download the adapter:
# using yarn
yarn add ghost-ipfs

# or using npm
npm install ghost-ipfs --save

# create dir
mkdir -p content/adapters/storage

# move
mv node_modules/ghost-ipfs content/adapters/storage/ghost-ipfs

# or using git
git clone \
    https://github.com/alexbakers/ghost-ipfs \
    content/adapters/storage/ghost-ipfs
  • Done, go configure

Install on Docker

Here's an example of using this adapter with a containerized Ghost:

FROM ghost:5-alpine as ipfs
RUN apk add g++ make python3
RUN su-exec node yarn add ghost-ipfs

FROM ghost:5-alpine
COPY --chown=node:node --from=ipfs $GHOST_INSTALL/node_modules $GHOST_INSTALL/node_modules
COPY --chown=node:node --from=ipfs $GHOST_INSTALL/node_modules/ghost-ipfs $GHOST_INSTALL/content/adapters/storage/ghost-ipfs

# Here, we use the Ghost CLI to set some pre-defined values.
RUN set -ex; \
    su-exec node ghost config storage.active ghost-ipfs; \
    su-exec node ghost config storage.ghost-ipfs.defaultStorage "filebase"; \

    # https://console.filebase.com/keys
    su-exec node ghost config storage.ghost-ipfs.filebase.key "FILEBASE_KEY"; \
    su-exec node ghost config storage.ghost-ipfs.filebase.secret "FILEBASE_SECRET"; \
    su-exec node ghost config storage.ghost-ipfs.filebase.bucket "FILEBASE_BUCKET"; \

    # https://app.pinata.cloud/keys
    su-exec node ghost config storage.ghost-ipfs.pinata.jwt "PINATA_JWT"; \

    # https://app.fleek.co/#/settings/general/profile
    su-exec node ghost config storage.ghost-ipfs.fleek.key "FLEEK_KEY"; \
    su-exec node ghost config storage.ghost-ipfs.fleek.secret "FLEEK_SECRET"; \
    su-exec node ghost config storage.ghost-ipfs.fleek.bucket "FLEEK_BUCKET"; \

    # https://web3.storage/tokens/
    su-exec node ghost config storage.ghost-ipfs.web3.token "WEB3_TOKEN";

    # https://files.lighthouse.storage/dashboard/apikey
    su-exec node ghost config storage.ghost-ipfs.lighthouse.token "LIGHTHOUSE_TOKEN";

Make sure to set the content path right in the Ghost config as well:

"paths": {
    "contentPath": "/var/lib/ghost/content/"
}

Configuration

  • tokens/keys on ./config.production.json
{
  // ...
  "storage": {
    "active": "ghost-ipfs",
    "ghost-ipfs": {
      "defaultStorage": "filebase",
      "filebase": {
        "key": "FILEBASE_KEY",
        "secret": "FILEBASE_SECRET",
        "bucket": "FILEBASE_BUCKET"
      },
      "pinata": {
        "jwt": "PINATA_JWT"
      },
      "fleek": {
        "key": "FLEEK_KEY",
        "secret": "FLEEK_SECRET",
        "bucket": "FLEEK_BUCKET"
      },
      "web3": {
        "token": "WEB3_TOKEN"
      },
      "lighthouse": {
        "token": "LIGHTHOUSE_TOKEN"
      }
    }
  }
  // ...
}
  • or tokens/keys on .env
FILEBASE_KEY=""
FILEBASE_SECRET=""
FILEBASE_BUCKET=""

PINATA_JWT=""

FLEEK_KEY=""
FLEEK_SECRET=""
FLEEK_BUCKET=""

WEB3_TOKEN=""

LIGHTHOUSE_TOKEN=""

./config.production.json

{
  // ...
  "storage": {
    "active": "ghost-ipfs",
    "ghost-ipfs": {
      "defaultStorage": "filebase"
    }
  }
  // ...
}

Configuration Ghost + Filebase

Configuration Ghost + Filebase

Variable Type Description Required
key string Filebase access key yes
secret string Filebase access secret yes
bucket string Filebase bucket name yes
{
  // ...
  "storage": {
    "active": "ghost-ipfs",
    "ghost-ipfs": {
      "defaultStorage": "filebase",
      "filebase": {
        "key": "FILEBASE_KEY",
        "secret": "FILEBASE_SECRET",
        "bucket": "FILEBASE_BUCKET"
      }
    }
  }
  // ...
}

Configuration Ghost + Pinata

Configuration Ghost + Pinata

Variable Type Description Required
jwt string Pinata JWT (Secret access token) yes
{
  // ...
  "storage": {
    "active": "ghost-ipfs",
    "ghost-ipfs": {
      "defaultStorage": "pinata",
      "pinata": {
        "jwt": "PINATA_JWT"
      }
    }
  }
  // ...
}

Configuration Ghost + Fleek

Configuration Ghost + Fleek

Variable Type Description Required
key string Fleek Storage API key yes
secret string Fleek Storage API secret yes
bucket string Fleek bucket name (e.g. 71a...-bucket) yes
{
  // ...
  "storage": {
    "active": "ghost-ipfs",
    "ghost-ipfs": {
      "defaultStorage": "fleek",
      "fleek": {
        "key": "FLEEK_KEY",
        "secret": "FLEEK_SECRET",
        "bucket": "FLEEK_BUCKET"
      }
    }
  }
  // ...
}

Configuration Ghost + Web3

Configuration Ghost + Web3

Variable Type Description Required
token string Web3 Storage API Token yes
{
  // ...
  "storage": {
    "active": "ghost-ipfs",
    "ghost-ipfs": {
      "defaultStorage": "web3",
      "web3": {
        "token": "WEB3_TOKEN"
      }
    }
  }
  // ...
}

Configuration Ghost + Lighthouse

Configuration Ghost + Lighthouse

Variable Type Description Required
token string Lghthouse Storage API Token yes
{
  // ...
  "storage": {
    "active": "ghost-ipfs",
    "ghost-ipfs": {
      "defaultStorage": "lighthouse",
      "lighthouse": {
        "token": "LIGHTHOUSE_TOKEN"
      }
    }
  }
  // ...
}

Links


(c) Alex Baker