Microservice architectures rely on the development of modular and independent software units, which typically address a single task and communicate with other microservices via well-defined interfaces. This has several benefits such as easier maintenance and update of services. However, deploying a microservice-based application is often more complicated than a monolithic application. While a monolithic application can be deployed one at a time on a group of similar servers behind a load balancer, a microservice-based application consists of different microservices and each microservice usually has more than one runtime instance that needs to be configured and deployed. For a small number of microservices and applications, the deployment could be done manually. However, a large number of microservices are frequently observed in practice. In such cases, the deployment becomes cumbersome and error-prone and does not scale with the increased number of services. To cope with this problem, we present a systematic approach and the corresponding tool support for enabling the deployment of microservices to resources that have limited capacity. Hereby, we model and define the design space given the deployment parameters and automatically derive the feasible deployment solution. The approach is validated using a taxi-hailing system case study inspired by Uber which has spread all over the world in recent years.