Thanks a lot to @qpleple for the help !
Get the stuff
Just in case you start from scratch on a mac OS X :- Install Xcode from the Application Disc (install everything, including UNIX developer tools)
- Download & install Macports
- Install/update Ruby through macports : 
 sudo port install ruby 
- Install/update RubyGems
 sudo gem update --system 
- Install Capifony
 sudo gem install capifony 
Configure Capifony
Setup the capifony project as explained here.Here is a sample (and more comprehensive) deploy.rb file (developed by @qpleple, annotated and reorganised by me) :
# ==============================================================================
#                                CONFIGURATION
# ==============================================================================
# ------------------------------------------------------------------------------
# 1. Servers configuration
# ------------------------------------------------------------------------------
# IP Adress of the servers to push the code to
set :domain,      "12.34.56.78"
set :application, "JohnDoeAppication"
set :serverName,  domain
# Front servers, nginx, HTTP server, Apache/etc
role :web,        domain
# Web server, where the code will go
role :app,        domain
# Database server       
role :db,         domain, :primary => true
set :deploy_to,   "/home/johndoe"
# ------------------------------------------------------------------------------
# 2. Security configuration
# ------------------------------------------------------------------------------
# Security : specification of the specific ssh key of the server
ssh_options[:keys] = %w(/Users/johndoe/.ssh/johndoe.pem)
ssh_options[:forward_agent] = true
# ------------------------------------------------------------------------------
# 3. Github and SCM configuration
# ------------------------------------------------------------------------------
# Repository path
set :repository,  "git@github.com:johndoe/Symfony.git"
# SCM type
set :scm,         :git
# Fetch only master branch
set :branch, "master"
# Use local keys to pull from github
set :scm_verbose, false
# Will keep a local git repo : only diffs will be uploaded
set :deploy_via, :remote_cache
# The number of releases which will remain on the server
set  :keep_releases,  3
# Automates the backup process
after "deploy:update", "deploy:cleanup" 
# ------------------------------------------------------------------------------
# 4. Project configuration
# ------------------------------------------------------------------------------
# Set some paths to be shared between versions : images, config..
set :shared_files,    ["app/config/parameters.ini"]
set :shared_children, [app_path + "/logs", web_path + "/uploads", "vendor"]
# Don't check vendors after each deploy : it has to be done manually
set :update_vendors, false
# ------------------------------------------------------------------------------
# 5. Capifony parameters
# ------------------------------------------------------------------------------
set :user,       "root"
set :use_sudo,   false
set :app_path,    "app"
after "deploy" do
    # Make app.php the front controller (and not app_dev.php)
    # in order not to have to change the htaccess manualyy everytime
    run "sed -i 's/app_dev/app/' #{deploy_to}/current/web/.htaccess"
end
# ==============================================================================
#                                     TASKS
# ==============================================================================
# ------------------------------------------------------------------------------
# Automated connection to the server
# ------------------------------------------------------------------------------
task :ssh do
    # To ssh into the prod server
    system("chmod 600 #{ssh_options[:keys]}")
    system("ssh -A -i #{ssh_options[:keys]} root@#{serverName}")
end
# ------------------------------------------------------------------------------
# First deploy
# ------------------------------------------------------------------------------
task :firstdeploy do
    # Make task fail if it is not the first deploy
    run "[ -d #{deploy_to} ] && exit 1 || echo 'ok'"
    
    # Install missing packages:
    # git-core: to get the code from github
    # php5-mysql: to make php able to talk to mysql (mysqli, pdo_mysql)
    # php5-sqlite: required by the profiler
    # php5-curl: CURL library
    run "apt-get install --yes git-core php5-mysql php5-sqlite php5-curl"
    
    # Activate url rewriting apache module
    run "a2enmod rewrite"
    
    # Create directory arborescence : creation of a shared folder, etc...
    deploy.setup
    
    # Permissions
    # Create new permission group
    run "egrep -i '^www-pub' /etc/group > /dev/null || groupadd www-pub"
    # Add the www-data user to the www-pub group
    run "usermod -a -G www-pub www-data"
    # Add the root user to the www-pub group
    run "usermod -a -G www-pub root"
    # Transfers the ownership of Home to the www-pub group
    run "chown -R root:www-pub #{deploy_to}"
    # Setup permissions for files and folders
    run "find #{deploy_to} -type d -exec chmod 2775 {} ;"
    run "find #{deploy_to} -type f -exec chmod 0664 {} ;"
    
    # Symlink from apache root dir to app web dir
    # run "rm -rf /var/www"
    # run "ln -s #{deploy_to}/current/web /var/www"
    set :mysql_password, Capistrano::CLI.ui.ask("Enter MySQL database password: ")
    # File parameters.ini
    template = <<-EOF
[parameters]
    database_driver="pdo_mysql"
    database_host="localhost"
    database_name="JohnDoeDatabase"
    database_user="root"
    database_password = #{mysql_password}
    mailer_transport="smtp"
    mailer_host="localhost"
    mailer_user=""
    mailer_password=""
    locale="en"
    secret            = #{Capistrano::CLI.ui.ask("Secret token: ")}
EOF
    run "mkdir -p #{shared_path}/app/config"
    put ERB.new(template).result(binding), "#{shared_path}/app/config/parameters.ini"
    # Tell Capistrano to install vendors 
    set :update_vendors, true
    
    # Make a new release, fetch code, install vendors
    deploy.default
    
    # Set mysql root password
    run "mysqladmin -u root password #{mysql_password} || echo 'password already set'"
    # Create database
    run "echo 'CREATE DATABASE JohnDoeDatabase CHARACTER SET utf8 COLLATE utf8_general_ci' | mysql -p#{mysql_password}"
    # Create schema
    symfony.doctrine.schema.create
    
end
# ------------------------------------------------------------------------------
# Clear distant cache
# ------------------------------------------------------------------------------
task :cc do
    run "rm -rf #{deploy_to}/current/app/cache"
end
Setup your server
You first have to make your server able to connect to the github repository : github has to be added to the know hosts list of the server. In order to do so :- Log into server in command line with the handy shortcut defined in deploy.rb :
 cap ssh 
- Connect to github
 ssh git@github.com 
- Quit server
Setup your computer
When you will try to push code to the server, the github server will follow the ssh challenge to the computer from which you are pushing. You thus have to have your id_rsa identity loaded in the ssh-agent of your computer at this time. You can display what are the currently loaded identities with :ssh-add -lIf the key is missing :
ssh-add ~/.ssh/id_rsaThis has to be done after every reboot.
Deploy
Launch first deploy :cap firstdeploy
If it crashes at some point :
- 
Remove everything on the server :
 cap ssh rm -rf /home/johndoe 
- 
Reinitialize the database
 echo "drop database DatabaseName;" | mysql -u root 
 
is :shared_files a supported capistrano variable?
RépondreSupprimer