ghost-ipfs
v1.0.5
Published
IPFS storage adapter for Ghost
Downloads
54
Maintainers
Readme
Ghost IPFS Storage Adapter
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
| 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
| 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
| 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
| 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
| 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