Installing Drush on a Shared DreamHost Account

[box type=”note”]If you have issues with these directions, please read the alternate directions for installing on a shared host manually without using Pear. MediaTemple is one provider where you must use the alternate directions to get Drush working.[/box]

One of the easiest and most convenient ways to get your hands on Drupal is on a shared hosting environment. It’s pretty much where everyone is going to start from unless you happen to have a giant long-term budget for your own hardware.

You have a number of options when it comes to hosting and at one time or another I’ve tried a lot of them. Three companies that have managed to keep me the happiest though are A Small Orange (use coupon 15-off to get 15% off; no affiliate), DreamHost (no affiliate) and MediaTemple. I’ve found DreamHost in particular to be pretty impressive when it comes to hosting a lot of one-off sites on my very inexpensive shared plan. I even use it when rapid prototyping for clients.

The best part though is that with DreamHost I can use SSH and Drush the way I normally would like to on a dedicated or virtual server. Set up is a bit more complex than normal, but, once it’s set up for your user it’s smooth sailing.

Before you can do any of this, you will need to make sure you enable SSH for the user you assigned to the  domain you want to use Drush with. You can find these options under the Manage Users section of the DreamHost panel. From there open up your favorite SSH client and log into your site (PuTTY works well on Windows, you can just run ssh from the command line on Mac or Linux).

Since you’re in a locked-down shared hosting environment, you obviously can’t make system-wide changes. The easiest way to install Drush is though Pear. Pear, by default, wants to make system-wide changes. Since we can’t do that in a shared environment, our first order of business will be to set up a new instance of pear just for our user.

Once logged in, and in your user’s home folder, run:
pear config-create ${HOME} ${HOME}/.pearrc
pear install -o PEAR

Now you have your own instance of pear, but you still can’t use it yet. To fix this, we will edit our .bash_profile and add in the path to the most recent PHP version DreamHost provides, as well as adding in our pear directory early on in this user’s PATH.

Open ~/.bash_profile in your favorite editor:
nano ~/.bash_profile

And add these lines at the bottom of the file:
export PHP_PEAR_PHP_BIN=/usr/local/php53/bin/php
export PATH=${HOME}/pear:/usr/local/php53/bin:${PATH}

Finally, re-load the file so the changes will take effect immediately:
. ~/.bash_profile

Now we have the newest version of PHP and our custom version of pear available to us, to check this out, you can run these commands:
which php
which pear

Pretty cool, eh? Lastly, just run the usual install command for drush to install it:
pear channel-discover pear.drush.org
pear install drush/drush

Now you can use drush from any site under this user as you would anywhere else (try running `drush help` for some cool examples). You can repeat this process for any other SSH users on your account. A one line tl;dr version of this process is included below for your automated and repetitive pleasure. Enjoy!

tl;dr: Get drush running on DreamHost by running this line in SSH:
pear config-create ${HOME} ${HOME}/.pearrc;pear install -o PEAR;echo "export PHP_PEAR_PHP_BIN=/usr/local/php53/bin/php" >> ~/.bash_profile;echo 'export PATH=${HOME}/pear:/usr/local/php53/bin:${PATH}' >> ~/.bash_profile;. ~/.bash_profile;pear channel-discover pear.drush.org;pear install drush/drush

[box type=”note”]

Robin Monks has a passion for openness and freedom in technology and he’s spent the last 8 years of his life developing, supporting and maintaining open source software. He’s part of the panel of Drupal community experts who authored The Definitive Guide to Drupal 7 and currently provides independent consulting services. Reach him at 1-855-PODHURL.[/box]

25 thoughts on “Installing Drush on a Shared DreamHost Account

  1. Thanks for this, Robin!

    Have you tried doing Drush remote commands using aliases? (ref http://www.lullabot.com/articles/new-features-drush-3) When I did, I discovered the path exports needed to be in .bashrc so they were available to remote commands. I moved them .bashrc and do a “source ~/.bashrc” in .bash_profile.

    It is so sweet doing a drush @remotesystem status on my laptop and seeing results from my Dreamhost site.

  2. I’m getting PHP Warnings when it tries to load modules. Here are just a few of the warnings:

    PHP Warning: Module ‘bcmath’ already loaded in Unknown on line 0
    PHP Warning: Module ‘bz2’ already loaded in Unknown on line 0
    PHP Warning: Module ‘calendar’ already loaded in Unknown on line 0
    PHP Warning: Module ‘ctype’ already loaded in Unknown on line 0
    PHP Warning: Module ‘curl’ already loaded in Unknown on line 0

    Doing a php -i on the command line gives me some info on the config. Looks like two php.ini files are being loaded that both specify the same extensions.

    Configuration File (php.ini) Path => /etc/php53
    Loaded Configuration File => /etc/php53/php.ini
    Scan this dir for additional .ini files => /etc/php53/conf.d
    Additional .ini files parsed => /etc/php53/conf.d/php.ini

    Some of the extensions:

    extension = bcmath.so
    extension = bz2.so
    extension = calendar.so
    extension = ctype.so
    extension = curl.so

    Anybody know how to get dreamhost not to load two php.ini files?

  3. Nice, clear and the shortest instruction on installing drush at DreamHost. Now that php version 5.4 is available, you might want to change php53 to php54.

    Although php53 works just fine but I think it’s better to have the latest php version. What you think?

    Thanks for offering such a simple solution.

    1. You can (and should) if php54 exists on the shared server you’re hosted on. I haven’t switched the directions to 5.4 entirely because I don’t believe DreamHost has rolled it out everywhere yet.

  4. I have checked with DreamHost support staff and they have confirmed that php54 is available on all DreamHost servers. It’s also just announced in the latest DreamHost newsletter v15.3&4.

    1. Just a warning that the upgrade instructions in your second link won’t work for anyone using the installation method here on a shared host. If you use the direction here you must update via pear. To update, just run:

      pear upgrade drush/drush

  5. Hi there! Found this page while looking for instructions on installing Drush on Dreamhost. I have followed all the steps, but drush still wouldn’t initiate until I added those 2 lines:

    export PHP_PEAR_PHP_BIN=/usr/local/php53/bin/php
    export PATH=${HOME}/pear:/usr/local/php53/bin:${PATH}

    to my .bashrc file. Everything is working fine now. Thank you for your detailed instructions!

  6. The most recent version of drush was not allowing me to install using the /usr/local/php53 directory and when I updated the bash_profile to use the php54 directory it was not working either. I would get the error “Your command line PHP installation is too old. Drush requires at least PHP 5.3.3.” this is because the /usr/local/php53 version is actually PHP 5.3.27 (cli)…

    So to fix it I uninstalled drush using..
    pear uninstall drush/drush

    Then I edited the bash_profile to reflect php 5.4 instead of php53
    export PHP_PEAR_PHP_BIN=/usr/local/php54/bin/php
    export PATH=${HOME}/pear:/usr/local/php54/bin:${PATH}

    Then I reinstalled with
    pear install drush/drush

    Thank you for the tutorial and I hope this helps anyone who gets stuck.

  7. When creating/editing a user on DreamHost, you get the following options..

    User Type:

    FTP user – allows login via FTP for file transfers only.
    SFTP user – allows login via SFTP (SSH file transfer) for file transfers only.
    Shell user – allows login via SSH (secure shell) for command-line access, as well as SFTP.
    Shell Type: (dropdown menu)
    /bin/bash
    /usr/bin/tcsh
    /usr/bin/ksh
    /usr/bin/zsh
    Disallow FTP? (checkbox option)

    Any suggestions on which shell type to use?

Leave a Reply