Skimming through the Internet et looking at some demos, I noticed Strapi is a very powerful tool and since it is based on top of NodeJS one could do almost anything and extend it to build any app.
What are your use case other than strictly delivering content through APIs (CMS usage) ?
Did you encounter similar technical setbacks using Strapi ? For example that Strapi doesn’t enforce (yet) database relationship so I wouldn’t really advise using Strapi for relational data intensive applications otherwise there are high risks to end up with an inconsistent database.
The goal of Strapi in our stack is the storage and public access of the data to be used by our own tools and resources as well as allowing other people in the Elite Dangerous developer community to pull the information into their own tools. Our entire Strapi application is open source (GitHub - canonn-science/CAPIv2-Strapi: Canonn APIv2) and hosted under the intention of making the information free and available to everyone to consume and contribute to.
We do our best to try and offer some basic tools (me and my little team of hobbyist developers in the player group) but the bulk of the usage is not done by us but others. Apologies to Mac users as the following link won’t work for you due to us using an outdated version of the Three.js library that apple doesn’t allow to run in any browser, but the best example we have is our 3D map: https://map.canonn.tech/ and our “Guardian Ruins” tool which pulls API data from Strapi and switches on/on some parts of a few SVG files to construct dynamic-like 2D maps of a puzzle in the game: https://ruins.canonn.tech/
From a Strapi perspective we do our level best to use Strapi internally within the company as much as we can, obviously I can’t share everything but our entire https://strapi.io website is powered by Strapi in the backend
Hahaha, thanks @SorinGFS our player group does a lot of role play (that I don’t generally participate in) but they really like to pretend they are actual sci-fi pilots . We are by far the largest “player group” in the game and we are entirely neutral “scientists”. It’s quite fun and I run our entire stack of applications and services with absolutely no ads or income and pay for the servers out of my own pocket.
The group actually got so big we had to register ourselves as a non-profit in the UK
wow, these bureaucrats …
I was also the admin of a gaming clan of over 1000 members at the time.
What to do, we have to escape from this world from time to time …
Nice job, keep doing it, keep running the dream!
So answer your question about technical limitations @alio I’ll leave you with an older, outdated graphic I created to show a high level overview of our Strapi application stack for the usage I detailed above:
We used to use all bare metal hardware as a reference but I had PFSense sitting as the edge firewall and handling most of our vlans, ect (blah blah network stuff)
But we had a virtual/floating IP address managed by HAProxy to load balance our Nginx servers (HAProxy + Keepalived).
From there we had 3 virtual machines used to handle the Strapi clusters (pm2 clusters), thus each VM had about 4 CPU cores, and 6GB of RAM to run a pm2 cluster of 4 Strapi backend instances per VM. Total of about 12 Strapi backend nodes. Our Strapi admin panel is deployed to each of the Nginx hosts and served statically to allow us to dynamically scale the backend as needed.
Each Strapi instance connects to the floating IP of the two ProxySQL nodes (active/passive or active/failover, however you want to see it). The ProxySQL also splits the read/write to the database so that we could run a multi-write MariaDB Galera cluster.
Your database is going to be the absolute largest piece of your Strapi stack as your traffic grows, at the time I made this graphic I was handling anywhere from half a million to over 3 million API requests in a month. This clearly made me analyse my database cluster carefully, and each of those database nodes was severely over powered for what I needed (16 CPU cores, 32 GB of RAM running on 8x SSDs in RaidZ2) but it ensured the confidence in my stack that my database was not going to be the bottleneck.
Typically when I’m looking at deploying applications, I focus very heavily on the hosting itself and the performance, while Strapi isn’t perfect with relational schema in RDS it is getting better and as Strapi itself is a strict schema, relational application. I have full faith in running it on relational database applications (specifically in my use case). Given I also have a deep background in linux systems engineering and was a Jr. network engineer for a time this is my area of strength and I know not everyone using Strapi has that knowledge to lean on. I hope that I can assist everyone in our community with their devops questions and converting those questions into relatable and searchable resources in our documentation or even just here on the forums.
I will clearly stress that the example I gave above is not the “normal” requirement for every deployment, and shouldn’t be treated as such I went way overboard in my infrastructure design out of habit
Wow that’s a hell of a project, kudos on building it. Thanks for your answer btw, and apologies for my late reply.
You are using strapi to store content that will be injected in/consumed by the game. Because of the traffic requirements, the game needs load-balancing, redundancy and high-availability. I understood that your application is more read intensive than write intensive and you manage DB eventual consistency using a MariaDB Galera cluster.
In the end your usage of Strapi falls neatly in the content distribution use case.
What I am looking for is to understand if Strapi is recommended to build any application that is out of the CMS scope.
For exemple, the very insightful article shows the developer notice some issue related to OAuth implementation, some database management and migration, GraphQL error management and has minor architecture and extensibility concerns.
Would you concur Strapi has there and workloads should be limited to the CMS intent it’s been build for?
Are developments planned for the issue mentioned in the blog article ?
Not directly in the game but by tools the players build (myself included)
And actually I have about a 50/50 mix of write and read (hence the multi-writer master Galera cluster).
The short answer to your question is that yes, Strapi can be used for any purpose. Obviously we build it around the headless CMS market and most of the features we add are geared this way also, but there are still those using it for IOT, web games, and even emergency services monitoring for EMT/Fire fighter live data.
With regards to the issues you mentioned we are aware of some of them and do plan to address them (most of this Q4 2020 is geared towards our plugin API and database refresh). We have some exciting stuff coming in 2021 also with a strong focus on making Strapi as stable and performant as possible.
Unfortunately most of the projects I’ve seen I can’t share, it’s up to those people to share their own projects.
While I would like to hope our ecosystem and community are willing to open source their projects, the companies behind some of them are not as willing. Hopefully some of the many other users I’ve talk to over the years can show off what they’ve built to the public, but that is their choice.
Thanks for your answers and help.
I’ll be looking closely as you improve in the areas we mentionned.
Strapi seems truly a great product that could be used in a wider enterprise ecosystem given shortcomings are resolved.