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的方法。
下面的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。
3.2 打开strapi网站
strapi的container运行之后,第一次启动,strapi会安装前端的应用程序,会根据网络状况的不同,耗时不同。一个小技巧,如果等不及,可以手动安装。
方法如下:
docker exec -it 4a7e94 # 这里的4a7e94是上述得到的strapi-container id
npm install
第一次打开网站会让你创建super admin账户的用户名密码,一定记住这个密码,否则以后没法登录!
3.3 进入admin页面
创建好super-admin之后,页面会像上图一样,点击“Open the administration”按钮,会进入到admin页面。
3.4 点击Content-Types Builder
- 点击“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
- 选中Entity1作为关系项,默认会选中Entity1中的第一个字段也就是name
- 我们可以通过编辑Entity2的relationship field来修改Entity1显示在relationshipfield中的名称(默认为第一个字段
name
,下面我们来演示如何修改成第二个字段username
)- 点击“Content-Type Builder”,选中Entity2,点击“Configure the view”
- 点击“Relation Fields”中的Entity1
- 在弹出窗口中将Entity-Title从name换成“username”
- 重新创建Entity2,就可以显示Entity1.username了
4. 暴露API
- 点击侧边栏的Settings
- 点击“USERS & PERMISSIONS PLUGINS”下的roles
- 点击pbulic,就可以配置要暴露的api了
- 勾选要暴露的API,在右侧strapi会为我们显示api的格式
- 可以使用postman等工具进行测试
- 可以在Strapi的Entity1的list里面查看新添加的entity