You really should automate the deployment of your web site or application. Stop using your source control system for deployment, and definitely stop relying on FTP. This presentations talks about why, what you should be doing and importantly how to go about doing it.
Presented at barcamp brighton 4
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
Automating web site deployment
1. Automating Web Site Deployment
No more FTP
Barcamp Brighton 5th September 2009
gareth rushgrove | morethanseven.net http://www.flickr.com/photos/grittycitygirl/186837530/
3. What do you do now?
gareth rushgrove | morethanseven.net http://www.flickr.com/photos/mn_francis/392404523/
4. - Put all files under sourcecontrol
- Move files to the server
- Copy configuration into place
- Symlink the current release
- Restart your webserver
Steps to deploy
gareth rushgrove | morethanseven.net
5. Put all files under sourcecontrol
gareth rushgrove | morethanseven.net http://www.flickr.com/photos/rooreynolds/2396418896/
6. Don't just FTP files to the server
- Anything manual is error prone
- You will miss an important file
- Deploying to multiple machines at once is hard
- You have no history, what was live a year ago?
Move all files to the server
gareth rushgrove | morethanseven.net
7. Don't checkout your repo and serve from that.
- Your web servers need access to your repository
- You have to remember to limit access to hidden files
- Not all commands are atomic
- The checkout can become corrupt
Move all files to the server II
gareth rushgrove | morethanseven.net
8. Do use some sort of package.
- Tar files are fine, deb files are great
- It's repeatable
- You can introspect packages
- Packages freeze a moment in time
Move all files to the server III
gareth rushgrove | morethanseven.net
9. For example:
- Apache virtualhosts
- Memcache configuration
- Solr configuration
- Anything that lives in /etc in debian
Copy configuration into place
gareth rushgrove | morethanseven.net
10. - Each release is stored in a unique named directory
- You could use a timestamp or a version control uid
- A symlink points at the directory
- Apache virtualhosts point at the symlink
Symlink the current release
gareth rushgrove | morethanseven.net
11. > cd /srv/sample; ls
packages releases shared
> cd packages; ls
20090905142306.tar.gz
> cd ../releases; ls
20090905142306 current
Symlink the current release II
gareth rushgrove | morethanseven.net
12. Restart your web server
gareth rushgrove | morethanseven.net http://www.flickr.com/photos/anonymouscollective/2291896028/
13. WARNING: Live Demo
gareth rushgrove | morethanseven.net http://www.flickr.com/photos/arthur_chapman/3855590323/
14. You’ll probably want to move onto:
- Creating databases, or running migrations
- Rollback to a previous version
- Deploy to multiple machines at once
- Installing third party libraries
Next steps
gareth rushgrove | morethanseven.net