rsnext/examples/cms-strapi
Shu Uesugi d60fada097
CMS Strapi Example (#12701)
* Strapi Example

* Fix og image URL

* Remove next.config.js

* Apply updates

* Remove API_URL

* Bugfixes

* Finish Strapi README

* Deploy Strapi

* Add strapi examples

* now →  vercel [ch1796]

* Use npx

* Minor readme update

* Prettier fix

Co-authored-by: Luis Alvarez <luis@vercel.com>
Co-authored-by: kodiakhq[bot] <49736102+kodiakhq[bot]@users.noreply.github.com>
2020-06-01 18:49:43 -05:00
..
components CMS Strapi Example (#12701) 2020-06-01 18:49:43 -05:00
lib CMS Strapi Example (#12701) 2020-06-01 18:49:43 -05:00
pages CMS Strapi Example (#12701) 2020-06-01 18:49:43 -05:00
public CMS Strapi Example (#12701) 2020-06-01 18:49:43 -05:00
styles CMS Strapi Example (#12701) 2020-06-01 18:49:43 -05:00
.env.local.example CMS Strapi Example (#12701) 2020-06-01 18:49:43 -05:00
.gitignore CMS Strapi Example (#12701) 2020-06-01 18:49:43 -05:00
jsconfig.json CMS Strapi Example (#12701) 2020-06-01 18:49:43 -05:00
package.json CMS Strapi Example (#12701) 2020-06-01 18:49:43 -05:00
postcss.config.js CMS Strapi Example (#12701) 2020-06-01 18:49:43 -05:00
README.md CMS Strapi Example (#12701) 2020-06-01 18:49:43 -05:00
tailwind.config.js CMS Strapi Example (#12701) 2020-06-01 18:49:43 -05:00
vercel.json CMS Strapi Example (#12701) 2020-06-01 18:49:43 -05:00

A statically generated blog example using Next.js and Strapi

This example showcases Next.js's Static Generation feature using Strapi as the data source.

Demo

https://next-blog-strapi.now.sh/

How to use

Using create-next-app

Execute create-next-app with npm or Yarn to bootstrap the example:

npx create-next-app --example cms-strapi cms-strapi-app
# or
yarn create next-app --example cms-strapi cms-strapi-app

Download manually

Download the example:

curl https://codeload.github.com/vercel/next.js/tar.gz/canary | tar -xz --strip=2 next.js-canary/examples/cms-strapi
cd cms-strapi

Configuration

Step 1. Set up Strapi locally

Follow the instructions on this page to create a Strapi project locally.

npx create-strapi-app my-project --quickstart
npm run develop # or: yarn develop

This will open http://localhost:1337/ and prompt you to create an admin user.

Step 2. Install GraphQL for Strapi

Inside the Strapi directory, stop the server, install GraphQL, and restart the server:

# If using Yarn: yarn strapi install graphql
npm run strapi install graphql

npm run dev # or: yarn develop

Step 3. Create an Author collection

From Content-Types Builder, create a new collection type.

  • The display name should be Author.

Next, add these fields (you don't have to modify the settings):

  • Text field called name (Short text)
  • Media field called picture (Single media)

Then click Save.

Step 4. Create a Post collection

From Content-Types Builder, create a new collection type.

  • The display name should be Post.

Next, add these fields (you don't have to modify the settings unless specified):

  • Text field called title (Short text)
  • Rich Text field called content (Multiple-paragraph Text)
  • Text field called excerpt (Long text)
  • Media field called coverImage (Single media)
  • Date field called date (type should be date)
  • UID field called slug (attached field should be title)
  • Relation field called author (Post has one Author)
  • Enumeration field status (the values should be published and draft)

Step 5. Set permissions

From Roles & Permissions, edit the Public role.

Then select: count, find, and findone permissions for both Author and Post. Click Save.

Step 6. Populate Content

Select Author and click Add New Author.

  • You just need 1 Author entry.
  • Use dummy data for the name.
  • For the image, you can download one from Unsplash.

Next, select Posts and click Add New Post.

  • We recommend creating at least 2 Post records.
  • Use dummy data for the text.
  • You can write markdown for the content field.
  • For the images, you can download ones from Unsplash.
  • Pick the Author you created earlier.
  • Set the status field to be published.

Step 7. Set up environment variables

While the Strapi server is running, open a new terminal and cd into the Next.js app directory you created earlier.

cd cms-strapi-app

Copy the .env.local.example file in this directory to .env.local (which will be ignored by Git):

cp .env.local.example .env.local

Then set each variable on .env.local:

  • NEXT_EXAMPLE_CMS_STRAPI_PREVIEW_SECRET can be any random string (but avoid spaces), like MY_SECRET - this is used for Preview Mode.
  • NEXT_PUBLIC_API_URL should be set as http://localhost:1337 (no trailing slash).

Step 8. Run Next.js in development mode

Make sure that the local Strapi server is still running at http://localhost:1337. Inside the Next.js app directory, run:

npm install
npm run dev

# or

yarn install
yarn dev

Your blog should be up and running on http://localhost:3000! You should see the two posts youve created. If it doesn't work, make sure that:

  • Youve installed GraphQL to Strapi on Step 2.
  • Youve set the Roles & Permissions in Step 5.
  • Youve set the status of each post to be published in Step 6.

The best place to debug is inside the fetchAPI function in lib/api.js. If you still need help, you can post on GitHub discussions.

Step 9. Try preview mode

To try preview mode, create another post like before, but:

  • Set the title as Draft Post Test
  • Set the status as draft.

Now, if you go to the post page on localhost, you won't see this post because its not published. However, if you use the Preview Mode, you'll be able to see the change (Documentation).

To enable the Preview Mode, go to this URL:

http://localhost:3000/api/preview?secret=<secret>&slug=draft-post-test
  • <secret> should be the string you entered for NEXT_EXAMPLE_CMS_STRAPI_PREVIEW_SECRET.
  • <slug> should be the post's slug attribute.

You should now be able to see the draft post. To exit the preview mode, you can click Click here to exit preview mode at the top.

Step 10. Deploy Strapi

To deploy to production, you must first deploy your Strapi app. The Strapi app for our demo at https://next-blog-strapi.now.sh/ is deployed to Heroku (heres the documentation) and uses Cloudinary for image hosting (see this file).

Step 11. Deploy on Vercel

After deploying Strapi, you can deploy this Next.js app to the cloud with Vercel (Documentation).

To deploy on Vercel, you need to set the environment variables with Vercel Secrets using Vercel CLI (Documentation).

Install Vercel CLI, log in to your account from the CLI, and run the following commands to add the environment variables. Replace <NEXT_PUBLIC_API_URL> and <NEXT_EXAMPLE_CMS_STRAPI_PREVIEW_SECRET> with the corresponding strings in .env.

vercel secrets add next_example_cms_strapi_api_url <NEXT_PUBLIC_API_URL>
vercel secrets add next_example_cms_strapi_preview_secret <NEXT_EXAMPLE_CMS_STRAPI_PREVIEW_SECRET>

Then push the project to GitHub/GitLab/Bitbucket and import to Vercel to deploy.