Strapi 01 :: 使用docker-compose搭建Strapi系统

3,295 阅读4分钟

1. 什么是Strapi?

一套免费的CMS系统,使用API driven,也就是说,消费strapi的时候,可以通过strapi提供的API来调用strapi的资源。

1.1 Strapi的优势

  • 支持多种数据库 (SQLite, MongoDB, MySQL, Postgres)
  • Api Driven(可以在消费端和Strapi之间建立隔离)
  • Authentication&Authorization(基于API Driven,方便做权限管理)
  • 永久免费

1.2 Strapi的不足

  • 现阶段没有完整的migrate方案,需要手工dump数据 总体来说,对于轻量级或者微服务来说,strapi还是能够较好地满足我们的需求的。

2. 使用docker-compose搭建strapi

2.1 安装docker-compose

本文采用ubuntu作为目标机,如果有使用mac或者windows的小伙伴们,可以自行百度一下,其实很容易的。

可以follow这篇文章来安装docker-compose. docs.docker.com/compose/ins…

sudo chmod +x /usr/local/bin/docker-compose
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
#verify docker-compose installed
docker-compose --version

2.2 编写docker-compose.yml

Strapi的官方文档已经提供了如何编写docker-compose的方法。

strapi.io/documentati…

下面的yml文件中,使用了两个docker-image,一个是strapi的镜像,另一个是他一懒得mongo数据库。而且关联了host机器上面的文件存储,Strapi Container的数据保存在当前文件夹的app文件夹中,MongoContainer的数据保存在当前文件夹的data文件夹中。请记住这两个文件夹,在后续文章中,我们将利用这两个文件夹进行数据的migration。

version: '3'
services:
  strapi:
    image: strapi/strapi
    environment:
      DATABASE_CLIENT: mongo
      DATABASE_NAME: strapi
      DATABASE_HOST: mongo
      DATABASE_PORT: 27017
      DATABASE_USERNAME: strapi
      DATABASE_PASSWORD: strapi
    volumes:
      - ./app:/srv/app
    ports:
      - '1337:1337'
    depends_on:
      - mongo

  mongo:
    image: mongo
    environment:
      MONGO_INITDB_DATABASE: strapi
      MONGO_INITDB_ROOT_USERNAME: strapi
      MONGO_INITDB_ROOT_PASSWORD: strapi
    volumes:
      - ./data:/data/db

2.3 运行docker-compose

docker-compose down
docker-compose up -d

2.4 查看进程

docker ps    # 查看所有alive进程
docker ps -a # 查看所有进程,包括stopped

3. 添加content-type

3.1 按照上面步骤运行docker-compose

使用docker-compose运行之后,可以查看已经运行的docker container。其中红色框框里面的是上面docker-compose.yml中描述的两个container。第一行则是后续我们要介绍的strapi的consumer。

image.png

3.2 打开strapi网站

strapi的container运行之后,第一次启动,strapi会安装前端的应用程序,会根据网络状况的不同,耗时不同。一个小技巧,如果等不及,可以手动安装。

方法如下:

docker exec -it 4a7e94 # 这里的4a7e94是上述得到的strapi-container id
npm install

第一次打开网站会让你创建super admin账户的用户名密码,一定记住这个密码,否则以后没法登录!

3.3 进入admin页面

image.png 创建好super-admin之后,页面会像上图一样,点击“Open the administration”按钮,会进入到admin页面。

image.png

3.4 点击Content-Types Builder

image.png

  • 点击“Content-Type Builder”
  • 点击“Create New Collection Type”
  • follow向导创建你的Collection Content Type,顾名思义,collection content type就相当于数据库里面的一个表,而single content type相当于一个单例
  • 需要注意的一点,Strapi也像关系型数据库一样支持表与表之间的关系,你还可以定义每个表在关系中显示的字段
    • 例如,现在我创建了Entity1和Entity2两个Collection Type
    • Entity1里面有name和username两个字段
    • Entity2里面有name一个字段,下面我想让每个Entity1对应一个Entity2
    • 需要选中Entity2,点击“Add new field”,再选择Relationship
      image.png
    • 选中Entity1作为关系项,默认会选中Entity1中的第一个字段也就是name image.png image.png
    • 我们可以通过编辑Entity2的relationship field来修改Entity1显示在relationshipfield中的名称(默认为第一个字段name,下面我们来演示如何修改成第二个字段username
      • 点击“Content-Type Builder”,选中Entity2,点击“Configure the view”
      • 点击“Relation Fields”中的Entity1 image.png
      • 在弹出窗口中将Entity-Title从name换成“username” image.png
      • 重新创建Entity2,就可以显示Entity1.username了
        image.png

4. 暴露API

  • 点击侧边栏的Settings
  • 点击“USERS & PERMISSIONS PLUGINS”下的roles image.png
  • 点击pbulic,就可以配置要暴露的api了
  • 勾选要暴露的API,在右侧strapi会为我们显示api的格式 image.png
  • 可以使用postman等工具进行测试 image.png
  • 可以在Strapi的Entity1的list里面查看新添加的entity image.png