IPFS (Filebase, Pinata, Fleek, Web3, Lighthouse) storage adapter for Ghost.
- 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
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/"
}
- 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"
}
}
// ...
}
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"
}
}
}
// ...
}
Variable | Type | Description | Required |
---|---|---|---|
jwt | string | Pinata JWT (Secret access token) | yes |
{
// ...
"storage": {
"active": "ghost-ipfs",
"ghost-ipfs": {
"defaultStorage": "pinata",
"pinata": {
"jwt": "PINATA_JWT"
}
}
}
// ...
}
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"
}
}
}
// ...
}
Variable | Type | Description | Required |
---|---|---|---|
token | string | Web3 Storage API Token | yes |
{
// ...
"storage": {
"active": "ghost-ipfs",
"ghost-ipfs": {
"defaultStorage": "web3",
"web3": {
"token": "WEB3_TOKEN"
}
}
}
// ...
}
Variable | Type | Description | Required |
---|---|---|---|
token | string | Lghthouse Storage API Token | yes |
{
// ...
"storage": {
"active": "ghost-ipfs",
"ghost-ipfs": {
"defaultStorage": "lighthouse",
"lighthouse": {
"token": "LIGHTHOUSE_TOKEN"
}
}
}
// ...
}
- Ghost website
- IPFS website
- Filebase website
- Pinata website
- Fleek website
- Web3 website
- Lighthouse website
(c)
Alex Baker