什么是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等工具進行測試