What is Advantages and Disadvantages of Caprover in Production Deployment?
Vietnamese version: https://vinguyen.blog/diem-manh-va-yeu-cua-caprover-trong-trien-khai-production/
What is Caprover?
- TLDR: Free and Open Source PaaS!
- For more detail: https://caprover.com/docs/get-started.html
Props:
- Caprover is a complete open source PaaS (Heroku like as open source) built on the basis of docker swarm & production ready: that is, we can use it for similar deployment on Heroku on 1/many self-host servers
- Because of Caprover is PaaS, it easy to apply Twelve-Factor in the deployment model
- There are many simple & handy deployment solutions: CLI, Web UI, Git integration, deployment model, CI/CD ready to use after setup
- Leverage the power of Docker/Dockerize Application, which is already very popular among programmers today
- One-Click App has many pre-configuration applications available. on-click to deploy
Cons
- Persistent data: I think this to be a major limitation of Caprover, it only supports persistent data on Disk (once they get created they get locked down on a specific server if you have multiple servers). so if you want to deploy a service that requires Persistent data, the horizontal scale of the app is suppressed because it can only be used on one server, or the application must be designed to be a stateless app from the beginning and use the following mechanisms. other storage: eg BlockStorage ( S3/MinIO/Storj,...)
- Scaling resources on multiple nodes (need more verification): in a case while supporting the team to setup scale a Caprover cluster, I found that autoscaling & resource balancing on multiple nodes is not really good, some cases need have to manually allocate resources on the server. This point is both the optimal point (because we can plan where to put the service is best) but also more effort take to setup & monitor, this point the orchestration Other tools like k8s work quite smoothly
- Account management & Authentication: CapRover is not an enterprise grade application like Kubernetes. Caprover doesn't have the goal to become an enterprise grade application, so the mechanisms for users, delegation, and resource sharing will not be developed in the Caprover core, so if you have the desire to use it in a large team, having a decentralized mechanism, or many applications/services belonging to many different products on the same Caprover, it is almost impossible to deploy.
When should we use Caprover?
- The team is small, can be trusted and doesn't need complicated mechanics, the product is in the MVP or early state of the insight product, not large scale, traffic to the backend does not increase or decrease, volatility, ...
- The number of services is simple, persistent data is designed according to stateful service.
- The server has Horizontal and Vertical Scale capabilities.
- Team has experience with docker, dockerizied application, want to deploy CI/CD process fast, convenient, compact & ready to use
- Have experience with Nginx, Letsencrypt,...
- Familiar with PaaS model like Heroku
When shouldn't we use Caprover?
- Complex applications, many services, a lot of traffic, or unusual fluctuations (eg events, e-comerse flash sales)
- The team has many products but wants to deploy on the same Caprover cluster, but has the desire to divide data and resource rights.
Alternative Solutions:
- Heroku: it's good, popular and ready to use
- Docker, docker-compose on Single server: this solution is just enough for small applications, not too high traffic, simple, convenient, easy to sync & backup, CI/CD can also be deployed by some simple techniques simple
- Aws Autoscaling Group/Azure VM Scale Set: This solution is better for applications with high load demand, or scaling when needed
- Kubernetes/K8S: if it can be applied, it's good, but cumbersome and costly to maintain, the cost of platform resources is high, so it's only suitable for relatively large applications and the team has strong K8S experience (I will have a post to share. on this matter later)