-1

I've spent a plenty of hours trying to find a full stable solution for an application deployment (in my case it's php). There are a lot of SO answers, where phing / capistrano / hudson are being proposed, but such propositions make me feel sad.

The idea is to have a magic box with all your configuration for all environments (like dev, prod, test and so on), to provide a possibility to simply type magicbox deploy --env prod on a bare linux machine (VPS) to fully deploy an application, including:

  • configured nginx / apache
  • configured php with all dependencies and mods
  • configured mysql with needed users and databases
  • configured search engines (like Sphinx, ElasticSearch)
  • a system to manage the installed box, like making soft / hard relaunch (without / with lose of persistent data)

I was inspired with Vagrant / Docker, because they seem very similar to what I am looking for, but a lot of guys are saying they are not ready for use in production. Moreover, I am a dabbler in virtualization and it is not clear to me how Docker works, what using Docker means for a machine perfomance and is it possible to use it with any VPS provider.

Thanks a lot for sharing your expirience.

Community
  • 1
  • 1
James Akwuh
  • 2,169
  • 1
  • 23
  • 25
  • If you want full server/app deployment with minimal learning curve on your end, just go host with someone like Heroku or EngineYard. Setting up a server yourself, from scratch, and deploying your app... it's complicated. No silver bullet. – jszobody Mar 14 '16 at 19:15
  • @jszobody thank you. It's clear that I could use cloud infrastructure providers. But there are cases where I have a VPS and code, and I need to automate deployment on my own. More over, cloud providers do not solve the problem of deploying the needed stuff locally, or for tests (in our company we run tests on our own machines). I believe there must be a solution. – James Akwuh Mar 14 '16 at 19:26

1 Answers1

1

There is a lot of chaos in your question:

  1. Configuration management:
    setup web services, databases, etc with tools like Ansible, Saltstack, Puppet, Chef
  2. Deploy code from repository to production:
    build package like Docker image or deb\rpm package or deploy directly from sources with Ansible\Fabric\Capistrano scripting
  3. Continuous integration:
    Automatic get sources after each commit or by scheduling, deploy it to the test environment, execute a tests and then merge changes into master or even deploy it to the production with tools like Jenkins, Hudson, Teamcity, Buildbot, etc
  4. Service orchestration for big complex environment:
    When you have a lot of components and cloud instances, environment required complex design and management. For this cases DevOps uses "cloud operating systems" like Mesosphere or orchestration tools like Nomad or Juju

In simplest case I recommend use Ansible for setup your components, Vagrant for local testing and AWS or any VPS for production. When your team will grow for automation you can use Jenkins for private repositories or Travis-ci for open source projects.

And hire a good DevOps when you'll grow ;)

  • Thanks a lot! I've just watched a 30-minutes video explaining what Ansible is, and now I see that it suits for both deployment and configuration management. Thank you for wrapping my thoughts up and helping find a solution! – James Akwuh Mar 14 '16 at 22:17