strapi logo

Strapiをとりあえず動かしてみる

2021年07月22日

このブログはJamstackで構築されており、JamstackでWebサイトを組むにあたって重要なのがヘッドレスCMSです。そのヘッドレスCMSのひとつであるStrapiを試してみます。

ヘッドレスCMSでよく使われているのはContentfulやmicroCMSだと思うのですが、それらのサービスはCMS自体がプラットフォームとして提供されています。これでもCMS側がマネージドになるので非常に管理が楽だったりするので利点は多いのですが、さまざまな理由でCMSも自分でコントロールしたいという場合もあると思います。

CMSをセルフホストする際の有力な候補がWordPressなのですが、ご存知の通りWordPressは脆弱性の塊であり設置にはいろいろと気を遣います。記事を書く側がWordPressしか使えない、今まで運用していたWordPressをJamstackに置き換えたい、という場合にのみ採用するべきです。

今回はNode.js製のモダンなセルフホストができるCMSのStrapiを試しに動かしてみることにします。Gatsbyへの統合などはせずにDockerで動かす所まで。

Docker?

唐突にDockerというワードが出てきましたね。Dockerについては詳細な解説が多数ありますので簡単な説明に留めますが、コンテナ型の仮想環境です。Node.jsを使っているアプリケーションですから環境構築にそこそこ労力がいるのと、データベースも必要なのでDockerとdocker-composeで環境を開発マシンとは分けて・ついでにDBとまとめて動かしてしまったほうが楽ということです。

Docker Desktop for Mac and Windows | Docker

Docker Desktopをインストールしておきましょう。Windowsの場合はWSL2のセットアップも必要です。Linuxの場合Docker Desktopではなく各ディストロが用意しているDockerのパッケージをインストールすることになると思います。

動かしてみる

それでは動かしてみましょう。Windowsの場合これから説明するコマンドはすべてWSL2上のUbuntuで実行してください。

まず適当なディレクトリを作ります。

mkdir ~/strapi
cd ~/strapi

こんな内容のdocker-compose.ymlを作ります。公式ドキュメントのものとほとんど違いはありませんがalpineベースのイメージを使っているので、ビルドは多少速くなるはずです。

version: '3'
services:
    strapi:
        image: strapi/strapi:alpine
        environment:
            DATABASE_CLIENT: postgres
            DATABASE_NAME: strapi
            DATABASE_HOST: postgres
            DATABASE_PORT: 5432
            DATABASE_USERNAME: strapi
            DATABASE_PASSWORD: strapi
        volumes:
            - ./app:/srv/app
        ports:
            - '1337:1337'
        depends_on:
            - postgres
 
    postgres:
        image: postgres:alpine
        environment:
            POSTGRES_DB: strapi
            POSTGRES_USER: strapi
            POSTGRES_PASSWORD: strapi
        volumes:
            - ./data:/var/lib/postgresql/data

docker-composeを使うことでコマンドひとつでPostgreSQLとStrapiを同時に立ち上げたり終了したりすることができたり、Dockerでは問題になりがちなデータベースの永続化ができていたりと色々楽になります。DBのパスワードが非常に単純なので実運用ならもう少し複雑なものにしておいたほうがよさそうです。

設定ファイルができたら動かしてみましょう。

docker-compose up

マシンの性能にもよりますが、比較的新しいデスクトップPCでも立ち上げまでざっくり5分ぐらいかかります。ターミナルがこのような画面になればOKです。

strapi 2

ブラウザからlocalhost:1337にアクセスしてみましょう。

strapi 1

そのうちコンテンツタイプを整備し、APIを生やしてGatsbyからアクセスしてみます。そのうち……