Strapi 01 :: 使用Docker搭建Strapi系统
什么是Strapi
一套免费的CMS系统,使用API driven,也就是说,消费strapi的时候,可以通过strapi提供的API来调用strapi的资源。
- Strapi的优势
- 支持多种数据库 (SQLite, MongoDB, MySQL, Postgres)
- Api Driven(可以在消费端和Strapi之间建立隔离)
- Authentication&Authorization(基于API Driven,方便做权限管理)
- 永久免费
- Strapi的不足
- 现阶段没有完整的migrate方案,需要手工dump数据
总体来说,对于轻量级或者微服务来说,strapi还是能够较好地满足我们的需求的。
使用docker-compose搭建strapi
- 安装docker-compose
本文采用ubuntu作为目标机,如果有使用mac或者windows的小伙伴们,可以自行百度一下,其实很容易的。
可以follow这篇文章来安装docker-compose
https://docs.docker.com/compose/install/
1 sudo chmod +x /usr/local/bin/docker-compose 2 sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose 3 #verify docker-compose installed 4 docker-compose --version
- 编写docker-compose.yml
Strapi的官方文档已经提供了如何编写docker-compose的方法。
1 version: '3' 2 services: 3 strapi: 4 image: strapi/strapi 5 environment: 6 DATABASE_CLIENT: mongo 7 DATABASE_NAME: strapi 8 DATABASE_HOST: mongo 9 DATABASE_PORT: 27017 10 DATABASE_USERNAME: strapi 11 DATABASE_PASSWORD: strapi 12 volumes: 13 - ./app:/srv/app 14 ports: 15 - '1337:1337' 16 depends_on: 17 - mongo 18 19 mongo: 20 image: mongo 21 environment: 22 MONGO_INITDB_DATABASE: strapi 23 MONGO_INITDB_ROOT_USERNAME: strapi 24 MONGO_INITDB_ROOT_PASSWORD: strapi 25 volumes: 26 - ./data:/data/db
- 运行docker-compose
1 docker-compose down 2 docker-compose up -d
- 查看进程
1 docker ps # view all process 2 3 docker ps -a # view all process include stopped
添加content-type
- 按照上面步骤运行docker-compose
使用docker-compose运行之后,可以查看已经运行的docker container。其中红色框框里面的是上面docker-compose.yml中描述的两个container。第一行则是后续我们要介绍的strapi的consumer。
- 打开strapi网站
strapi的container运行之后,第一次启动,strapi会安装前端的应用程序,会根据网络状况的不同,耗时不同。一个小技巧,如果等不及,可以手动安装。
方法如下:
1 docker exec -it 4a7e94 # 这里的4a7e94是上述得到的strapi-container id 2 npm install
第一次打开网站会让你创建super admin账户的用户名密码,一定记住这个密码,否则以后没法登录!
- 进入admin页面
创建好super-admin之后,页面会像上图一样,点击“Open the administration”按钮,会进入到admin页面。
- 点击“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
-
-
-
- 我们可以通过编辑Entity1来显示Entity1的UserName
- 点击“Content-Type Builder”,选中Entity2,点击“Configure the view”
- 点击“Relation Fields”中的Entity1
- 在弹出窗口中将Entity-Title从name换成“username”
- 重新创建Entity2,就可以显示Entity1.username了
- 我们可以通过编辑Entity1来显示Entity1的UserName
-
暴露Api
- 点击侧边栏的Settings
- 点击“USERS & PERMISSIONS PLUGINS”下的roles
- 点击pbulic,就可以配置要暴露的api了
- 勾选要暴露的API,在右侧strapi会为我们显示api的格式
- 可以使用postman等工具进行测试