Installing Deploy
Deploy requires two servers
- A source server (which you will be deploying from)
- A destination server (which you will be deploying to)
While these do need to be separate and distinct Drupal installations, they do not actually need to be on two servers. They can be in separate subdirectories or virtual hosts on a single server and everything will work perfectly well. Two sites in a multi-site installation may work depending on the table sharing scenarios. This is beyond the scope of this guide.
Note: There is a different installation process depending on whether you are installing a new fresh install of Drupal on both servers or if you already have an existing site with lots of content that you want to split into "source" and "receiving" sites (a.k.a. "stage" and "live").
In either case, you'll want to make sure the servers have the same time, otherwise there may be synchronization issues. See http://www.cyberciti.biz/faq/howto-install-ntp-to-synchronize-server-clock/ for a nice set of instructions on installing the network time protocol (ntp) on CentOS, or search the internet for instructions for your OS.
Instructions for Fresh Drupal Install on Both Servers
Source server
- Download and extract the tarball for Deploy into your modules directory. You must be using the most current -dev version.
- Surf to /admin/build/modules on your site.
- Enable the module Deployment (under the Deployment group), Node Deployment, User Deployment, and UUID.
- Go to admin/build/deploy/servers. Click 'Add a new server'.
- Enter 'Live Server' for the Name and 'http://your-destination-site.example.com/services/xmlrpc' for the URL field. (Replace "your-destination-site.example.com" with the domain of your actual destination server.) Save the server information.
Destination Server
- Extract the tarball for Deploy and Services into your modules directory. You must be using the most current -dev version of both modules.
- Surf to /admin/build/modules on your site.
- Enable the following modules - Services (under the Services group), Key Authentication (under the Service - Authentication group), XMLRPC Server (under Services - servers group), System Service, Node Service, UUID Service, and User Service (under Services - services group), and UUID (under Deployment group).
- Go to admin/build/services/settings. Under 'Authentication module' choose 'Key authentication'. Make sure that 'Use sessid' is clicked and 'Use keys' is not (Deployment does not currently support API keys with Services.) Save the settings.
- Deployments run as a logged in user with the permissions of that user. For this test we will just use admin to keep things simple, but if you do not wish to use admin, you will need to configure permissions appropriately for the user you're planning on logging in as.
Instructions for Installing Using an Existing Drupal Site
In the following instructions, we assume your existing site will be the source server and that you will be setting up a copy of the site on the receiving server. (Don't set up the copy just yet -- read the instructions.)
Source Server
- Download and extract the tarball for Deploy into your modules directory. You must be using the most current -dev version.
- Surf to /admin/build/modules on your site.
- Enable the module Deployment (under the Deployment group), Node Deployment, User Deployment, and UUID.
- Go to admin/build/deploy/servers. Click 'Add a new server'.
- Enter 'Live Server' for the Name and 'http://your-destination-site.example.com/services/xmlrpc' for the URL field. (Replace "your-destination-site.example.com" with the domain that you will be using for your actual destination server.) Save the server information.
Destination Server
- Make an exact copy of your source server's files and database and set them up on your destination server. It's important that you copy the database after you have set up Deploy on the source site. The database copy is best done using mysqldump of the source database (or an equivalent export utility depending on the type of database you're using) and then importing it into a fresh destination database. Be sure to modify your .htaccess and settings.php file on the destination server to reflect the new environment (like the new database name and login info.)
- Extract the tarball for Services into the modules directory for the receiving site. You must be using the most current -dev version of the module.
- Surf to /admin/build/modules on your site.
- Enable the following modules - Services (under the Services group), Key Authentication (under the Service - Authentication group), XMLRPC Server (under Services - servers group), System Service, Node Service, UUID Service, and User Service (under Services - services group), and UUID (under Deployment group).
- Go to admin/build/services/settings. Under 'Authentication module' choose 'Key authentication'. Make sure that 'Use sessid' is clicked and 'Use keys' is not (Deployment does not currently support API keys with Services.) Save the settings.
- Deployments run as a logged in user with the permissions of that user. For this test we will just use admin to keep things simple, but if you do not wish to use admin, you will need to configure permissions appropriately for the user you're planning on logging in as.
Now you can try deploying a new or updated node from the source server to the destination server. See "Basic Use" for more info.
Forbidden Error
If you get the error "Forbidden" during a deploy, you should check your destination server.
It turns out that on the destination server, in User Management > Permissions > services module > access services, you need to enable the "anonymous users" checkbox.

Permissions
For the above example, the destination user needs these permissions as far as I can tell:
- all from system_service
- user_service module:
-- get own user data
-- update own user data
- node_service module:
-- load node data
and obviously the permissions to create / edit the things the deployment is trying to push, eg nodes.