Ghost adapter to store images, media files, and other files into Google Cloud Storage.
- Create a project from Google Cloud Console
- Be sure that
Google Cloud Storage API
is enable inAPIs & Services > Library
- Create a new Service Account in
IAM & Admin > Service Accounts
- Create new credentials for your service account in
IAM & Admin > Service Accounts > <Your Service Account> > Actions > Manage Keys > Add Key
- Download your credentials as a JSON file and renamed it to
credentials.json
- Create a bucket to store your files (use Fine-grained access control)
- Go to your Ghost instalation folder (the folder where you have the files
config.production.json
orconfig.development.json
):
cd /your/ghost/instalation/folder
- Create the
adapters/storage
folder inside thecontent
folder:
mkdir -p content/adapters/storage
- Install this package via NPM:
npm i ghost-gcp-storage-adapter
- Copy the installed package into
content/adapters/storage
:
cp -r node_modules/ghost-gcp-storage-adapter content/adapters/storage/ghost-gcp-storage-adapter
-
Copy your
credentials.json
file intocontent/adapters/storage/ghost-gcp-storage-adapter
-
Add the following configuration to your
config.production.json
file:
"storage": {
"active": "ghost-gcp-storage-adapter", // For images
"media": "ghost-gcp-storage-adapter", // For video and audio files
"files": "ghost-gcp-storage-adapter", // For other file types
"ghost-gcp-storage-adapter": {
"projectId": "<your_google_cloud_project_id>",
"keyFilename": "<your_ghost_instalation_folder>/content/adapters/storage/ghost-gcp-storage-adapter/credentials.json",
"bucketName": "<your_bucket_name>"
}
}
Storage Configuration Options:
active
: Controls the storage adapter for imagesmedia
: Controls the storage adapter for video and audio filesfiles
: Controls the storage adapter for other file types
- Restart Ghost
If you're running Ghost in Docker, follow these steps:
- Clone and prepare the adapter:
# Clone this repository
git clone https://github.com/vcgtz/ghost-gcp-storage-adapter.git
cd ghost-gcp-storage-adapter
# Install dependencies
npm install
- Update your
docker-compose.yml
to mount the necessary volumes:
version: '3'
services:
ghost:
image: ghost:5-alpine
volumes:
# Mount config.production.json
- ./config.production.json:/var/lib/ghost/config.production.json
# Mount the storage adapter
- ./ghost-gcp-storage-adapter:/var/lib/ghost/content/adapters/storage/ghost-gcp-storage-adapter
# Mount credentials.json (ensure it's in your project directory)
- ./credentials.json:/var/lib/ghost/content/adapters/storage/ghost-gcp-storage-adapter/credentials.json
// ... other configurations ...
- Ensure your
config.production.json
includes the storage configuration:
{
// ... other configurations ...
"storage": {
"active": "ghost-gcp-storage-adapter", // For images
"media": "ghost-gcp-storage-adapter", // For video and audio files
"files": "ghost-gcp-storage-adapter", // For other file types
"ghost-gcp-storage-adapter": {
"projectId": "<your_google_cloud_project_id>",
"keyFilename": "/var/lib/ghost/content/adapters/storage/ghost-gcp-storage-adapter/credentials.json",
"bucketName": "<your_bucket_name>"
}
}
}
- Start your Docker containers:
docker-compose up -d
Note: Make sure the file permissions are correct and the credentials.json file is accessible within the container.
If you want to contribute or test this adapter, you can use it locally by following the next instructions:
- Follow the same steps to configure Google Cloud Storage
- Fork this repo
- Clone your fork in your computer
- Install Ghost locally (Instructions)
- In the folder where you installed Ghost, install the adapter locally
cd ghost_folder/
npm install /path/to/your/forked/repo
- Create the
adapters/storage
folder inside thecontent
folder:
mkdir -p content/adapters/storage
- Copy the installed package into
content/adapters/storage
:
cp -r node_modules/ghost-gcp-storage-adapter content/adapters/storage/ghost-gcp-storage-adapter
- Copy your
credentials.json
file intocontent/adapters/storage/ghost-gcp-storage-adapter
- Stop Ghost and running it in
development
mode by using:
NODE_ENV=development ghost run
With this you'be able to see the logs in real time and test and debug this package.