Deplyment with Capfiony on Windows
Usually, we need to transfer our code from development environment to the production environment e.g production server. In case a symfony 2 application this process could be the following :
Upload your code to the production server;
Update the project dependencies via Composer;
Update/migrate your database;
Clear the cache;
On of the best tools available for symfony 2 is « Capifony » that is built on top of Capistrano. This is an open source tool to use for easily deploying Rails applications but a customize version called « Capifony » is published by symfony community to deploy symfony 1 and 2 applications.
While most of recipes deal with linux environments, I try to provide a simple guide to build Capifony in Windows to deploy your Symfony2 applications from Windows to a linux based server like debian.
Recommendation:
Use Git Bash as the unique shell for your projects.
Prerequisites:
– Production server ready with ssh access.
– Git repository on your local computer or distant server
– tar package installed
1) Install Git for Windows
– download and install msysGit from official Git site : http://git-scm.com/download/win
2) Install Ruby
– download and install Rubyinstall for Windows : http://rubyinstaller.org/downloads/
3) Install Capifony
– open a Windows command prompt with Ruby
– install Capifony with this command :
gem install capifony
4) Setup local project
cd path/to/your/project
capifony .
5) Configure to deploy
There is 2 modes available; directly from git repository or via copy from local machine.
– Edit ./app/config/deploy.rb file :
set :application, "myappli" set :domain, "mydomain.com" set :user, "username" set :use_sudo, false set :repository, "ssh://#{domain}:/var/repo/#{application}.git" set :scm, :git set :deploy_to, "/var/www/#{application}" set :app_path, "app" set :model_manager, "doctrine" role :web, domain # Your HTTP server, Apache/etc role :app, domain # This may be the same as your `Web` server role :db, domain, :primary => true # This is where Symfony2 migrations will run set :keep_releases, 3 logger.level = Logger::MAX_LEVEL set :shared_files, ["app/config/parameters.yml"] set :shared_children, [app_path + "/logs", web_path + "/uploads", "vendor"] set :use_composer, true set :update_vendors, true # Symfony2 >= 2.1 before 'symfony:composer:update', 'symfony:copy_vendors' namespace :symfony do desc "Copy vendors from previous release" task :copy_vendors, :except => { :no_release => true } do if Capistrano::CLI.ui.agree("Do you want to copy last release vendor dir then do composer install ?: (y/N)") capifony_pretty_print "--> Copying vendors from previous release" run "cp -a #{previous_release}/vendor #{latest_release}/" capifony_puts_ok end end end
5) Setup production server
– run this command on local project directory :
cap deploy:setup
– create server side « parameters.yml » in ./shared/app/config/ folder containing at least this parameter :
# /var/www/myappli/shared/app/config/parameters.yml parameters: #... secret: ThisTokenIsNotSoSecretChangeIt
6) Check if everything is ok to deploy
cap deploy:check
7) Deploy it !
cap deploy
8) Configure production server parameters
– Edit ./shared/app/config/parameters.yml file and add all necessary parameters e.g database connection.