Select Page

Boost WordPress Audio w/ Amazon S3The Simple Storage Service (S3) from Amazon is an easy way to serve information. Its high availability and low cost make it a no-brainer when it comes to hosting.

Recently, a friend moved his website (the Astropope) from my server to that of a hosting company (for which he presently works). Along with his account comes 3 GB of storage, except he currently uses about 5 GB. To help with the transition, we decided to move the majority of content over to S3.

In order to do this, we got an account, uploaded everything, made a DNS record, and then ever-so-slightly modified a WordPress plugin.

The steps we took are detailed for your convenience:

1. Sign up for an S3 account.

2. Download, install & configure the S3Fox plugin for Firefox.

3. Amazon uses a bucket as a means for organizing information. You may refer to a bucket as a unique, top-level directory. Many directories may exist within a bucket, but the most absolute of those contained within is a ‘bucket’. Create a bucket named s3.[yourdomain].com. In that bucket, make an audio directory. So now we have something along the lines of s3.[yourdomain].com/audio.

4. Using S3Fox, upload your mp3 files to the newly created audio directory within the bucket.

5. Right-click the audio directory and specify an ACL with read access for public requests. Note: Without specifying an ACL w/ public read access, it won’t work.

6. Within WordPress, install the Audio Player plugin.

7. Once installed, modify the plugin as such:

edit audio-player.php

Under // Options Default add:
add_option(‘s3_url’, ”, “Amazon S3 URL”, true);

Under // Global variables change $ap_audioURL to:
$ap_audioURL = get_settings(‘s3_url’) . get_option(“audio_player_web_path”);

Under // Update plugin options add:
update_option(‘s3_url’, $_POST[‘s3_url’]);

edit options-panel.php

[code]
<tr>
<th width=”33%” valign=”top”><label for=”ap_audiowebpath”>Audio files directory:</label></th>
<td>
<input type=”text” id=”ap_audiowebpath” name=”ap_audiowebpath” size=”40″ value=”<?php echo( get_option(“audio_player_web_path”) ); ?>” /><br />
Recommended: <code>/audio</code>
</td>
</tr>
<!– snipit starts here –>
<tr>
<th width=”33%” valign=”top”><label for=”s3_url”>Amazon S3 URL:</label></th>
<td>
<input type=”text” id=”s3_url” name=”s3_url” size=”40″ value=”<?php echo( get_option(“s3_url”) ); ?>” /><br />
<?php $string = get_option(“siteurl”);
$url2 = substr($string, 7);
echo “(e.g. http://s3.” . $url2 . “)”; ?>
</td>
</tr>
<!– snipit ends here –>
[/code]

Alternately, you can upload/replace with these pre-modified files:
wp-content/plugins/audio-player.php
wp-content/plugins/audio-player/options-panel.php
(be sure to rename from .ph_ to .php)

Login to WordPress, then go to Settings -> Audio player and add http://s3.[yourdomain].com to the new field below the audio files directory.

8. Add a cname (alias) at your domain registrar:
S3 -> bucketname.s3.amazonaws.com
(e.g. s3.[yourdomain].com.s3.amazonaws.com)
where S3 points to bucketname.s3.amazonaws.com. (TTL of 1 hr is acceptable.)

9. Post a song according to the directions for the plugin.

Did it work for you? Did you run into any trouble? (I’d be happy to help you set this up if you’d like assistance.)

— Edit:  9.16.09 —

Version 2.0 beta 6 of the Audio Player plugin includes an option for a custom URL.  When upgrading to this most recent version, there is no need to modify any source code.  Nice!

Also, the most recent version of the WordPress S3 plugin version .4 adds a setting for virtual hosting:

Make sure you check the ‘Bucket is setup for virutal hosting’ box.  If you see DNS warnings at the top of the plugin screen, refresh the page and it should go away (if you had this setup previously).