I'm building an application which is still in proof-of-concept/prototype stage. I use Amazon EC2 for my server needs. Its not open to the public yet and I develop and test on the AWS machine directly also playing around with other AWS tools and bring the server online/offline whenever necessary. My stack is Node.js, MySQL, MongoDB and Angular2.
At some point in the next few months, I would like to keep it (the Amazon machine) running 24/7 and open it up to public to use this (at a very small scale - 10 to 100 users.. alpha release). At this point, I would like to move my testing and development to a test server and deploy changes on Amazon whenever I have a major/minor release or have to fix a bug. I use git for version control.
Some resources I've looked into
Although the resources below are informative, I cannot draw anything conclusive.
- How do you apply development practices like version control, testing and continuous integration/deployment to system administration?
- Multi-server Deployment strategies - Git on production servers?
- Advice for an EC2 Architecture and Deployment Strategy
- improve our deployment strategy
- Production deployment strategies
- Deploying a small Rails app - suggestions?
- http://guides.beanstalkapp.com/deployments/best-practices.html
My questions are as follows
- How do you recommend I move things from my test server to my production server when I want to fix a bug or roll out an update? Should I maintain a common code repository and use git on the production server to pull changes whenever necessary? Should this be done manually or automate this?
- Since I have only once machine (production), I'm guessing the services will be down when I'm updating. Is there way to minimize it or should I have a minimum of two production machines?
I've heard about (not used) tools like Capistrano, Chef but I dont have any CI/unit tests setup at this point(I'm being honest!). I barely have the complete code written.
My main goal is to prove my idea works and at the same time give some level of reliable service to the users (in the alpha/beta stage). Overall, I want to make it as professional as possible and follow good practices to an extent I can with the resources I have.
Keep in mind its just me and I dont have a team of smart talented developers. Any advice would be appreciated!