Joyent - Smart Computing - Stupid Customer Service

Roughly 5 years ago, when I was first learning the ropes of Ruby development I signed up for a lifetime hosting account with Joyent (TextDrive at the time). Textdrive came highly recommended for its both product and service offerings from the Ruby community. On top of that, I felt it would eventually become a great deal and I was happy to help a promising company bootstrap and get off the ground.

I can’t find the receipt but I think it was in the neighborhood of a $1500 one time payment for a shared hosting setup. As I write this post that breaks down as follows:

$1500 / 5 years / 12 months = $25/month*

Rough current cost estimation*

Fast forward to present day. Joyent has shifted it’s priorities several times since I purchased this account. They’ve gone from a cozy home for small developers to a cloud infrastructure juggernaut competing with Amazon for big corporate customers.

In September of 2010 there was a forum post by a Joyent employee stating that the ruby installation on the shared servers would be upgraded “this fall” to 1.8.7. This was excellent timing because I had been working on upgrading my custom CMS to the recently released Rails 3. (Version 1.8.7 of Ruby was the minimum requirement for Rails 3)

By December of 2010, there was no further mention of the server upgrade which had missed the “Fall” deadline. I opened a support request and received this response:

Filip Hajny wrote:

The next update to shared land will bring in Ruby 1.8.7 (in place of 1.8.6) with the latest Rubygems and Git. We originally hoped to have such update done in the fall, but it slipped due to various issues, so we’re now into hopefully early 2011.


Fast forward to April 2011. I posted that exact quote on the Joyent forums with zero response. There was no update on the status of this upgrade for almost a solid calendar year.

In November of 2011, in response to yet another forum post I made inquiring about the “missing update”  I was told there was an upgrade email that had been sent to shared hosting customers the previous week. 

Did you get the email that was sent out regarding shared hosting upgrades last week?

Here’s the upgrade schedule from that email:
http://wiki.joyent.com/display/shared/Shared+Hosting+Maintenance+Schedules

The schedule that was posted, however, did not include my shared server. The response to that omission was:

We had to split up the server groups into batches, if it’s not listed there then it’s going to happen sometime in the New year

Finally, a reasonable timeframe! People were posting about the success of their individual servers in the forums!  I could see the light at the end of the tunnel. Eventually, my server, Oak was added to the schedule. January 18th, 2012 - the day the final batch of shared servers (including mine) was scheduled to be upgraded.

As you can probably guess, the reason I’m writing this blog post is because that scheduled server upgrade never happened. It’s April 3rd and I’m still waiting for my January 18th server upgrade (originally scheduled for Fall 2010).

I was hesitant to write this, because I have received a reasonably good value from Joyent over the years. That alone, though, is not a reason to allow them to dick me around for this long.

I understand lifetime shared hosting customers are not a priority, this has been made abundantly clear. I don’t feel like I’m asking for much - I want the software stack on my hosting server to be updated so I can use a technology from 2010. Alternatively, I would happily take a crossgrade to a free entry level SmartMachine that I could upgrade and maintain myself.

Companies shift focus all the time and although many of the services that were originally included in my lifetime account have now been sold off or sunsetted, I’m happy that Joyent has found massive success in the products they are now offering.

In a perfect world they would would support the customers who helped them get off the ground with half the level of service they provide current corporate customers. :(

Is it worse to lose someone before you get to tell them everything you want to say, or have them live long enough to hear everything your soul has to offer and have them act indifferently?

My mother passed away 18 years ago this month.
Today is Father’s Day, my father is 82.

Fresh setup of Ubuntu 11.04 with Postgres, RVM, Ruby 1.9.2, Rails 3, nginx and Passenger

Today I setup a fresh Linode VPS server from scratch following a combination of slicehost articles (1, 2 and Peter Cooper’s screencast)

I’m not contributing anything particularly new to this, other than consolidating various sources into one condensed, easy to follow reference. (Mostly for me, but if it helps you too… hooray!)

This covers:

  • Base security and configuration for Ubuntu 11.04
  • Install RVM, Postgres, Ruby 1.9.2, Passenger and nginx

Questions or problems? Consult google

Step 1: Secure it

#new server basic security

ssh root@123.45.67.890

#Immediately change root password
passwd

#Add new group /usr/sbin/groupadd wheel

#Edit sudoers file
/usr/sbin/visudo

#add this line
## Allows people in group wheel to run all commands
%wheel  ALL=(ALL)       ALL

# Create new user
/usr/sbin/adduser newuser

#add user to wheel group
/usr/sbin/usermod -a -G wheel newuser

#on your local mac
cd ~/.ssh
scp ~/.ssh/id_rsa.pub newuser@123.45.67.890:

#back on server
mkdir ~newuser/.ssh
mv ~newuser/id_rsa.pub ~newuser/.ssh/authorized_keys

#change permissions on server
chown -R newuser:newuser ~newuser/.ssh
chmod 700 ~newuser/.ssh
chmod 600 ~newuser/.ssh/authorized_keys #change the default SSH config nano /etc/ssh/sshd_config #look for these things Port 30000 <--- change to a port of your choosing Protocol 2 PermitRootLogin no PasswordAuthentication no UseDNS no AllowUsers newuser #update iptables /sbin/iptables -L // View current rules /sbin/iptables -F // Flush current rules nano /etc/iptables.up.rules // Create rules file example: http://articles.slicehost.com/assets/2007/9/4/iptables.txt /sbin/iptables-restore < /etc/iptables.up.rules // tell iptables to use the new rules /sbin/iptables -L // Review those new rules you just set nano /etc/network/if-pre-up.d/iptables // Create a file to load rules # contents of that file #!/bin/sh /sbin/iptables-restore < /etc/iptables.up.rules chmod +x /etc/network/if-pre-up.d/iptables // Make file executable reload ssh

Step 2: Install Server Basics, Postgres, RVM and Ruby

#update server
sudo aptitude update
sudo aptitude safe-upgrade
sudo aptitude install build-essential

#install git, curl and postgres dev tools
sudo aptitude install git-core curl libpq-dev

#install postgres
sudo aptitude install postgresql

#change the password of new user postgres
sudo passwd postgres

#install RVM
mkdir -p ~/.rvm/src/rvm/ && cd ~/.rvm/src && git clone http://github.com/wayneeseguin/rvm.git && cd rvm && ./install

#edit bash to see RVM
echo '[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm"' >> ~/.bashrc  // Add to the end of bashrc
source ~/.bashrc // reload bashrc

rvm notes  // see what rvm reccomends installing

#Example
sudo aptitude install build-essential bison openssl libreadline6 libreadline6-dev zlib1g zlib1g-dev libssl-dev libyaml-dev libsqlite3-0 libsqlite3-dev sqlite3 libxml2-dev libxslt-dev autoconf libc6-dev ncurses-dev
sudo aptitude install libcurl4-openssl-dev

#install ruby 1.9.2
rvm install 1.9.2
rvm --default use 1.9.2

#install postgres gem now that we have a working Ruby
gem install pg // requires postgres dev tools

Step 3: Passenger & Nginx

#install passenger
gem install passenger

#install nginx module
passenger-install-nginx-module // select download and install ... install to /home/newuser/nginx

#edit nginx conf file
nano ~/nginx/conf/nginx.conf
http {
    ...
    passenger_root /home/newuser/.rvm/gems/ruby-1.9.2-p180/gems/passenger-3.0.7;
    passenger_ruby /home/newuser/.rvm/wrappers/ruby-1.9.2-p180/ruby;
    ...
}

#add server block to nginx conf
server {
   listen 80;
   server_name www.yourhost.com;
   root /somewhere/public;   # <--- be sure to point to 'public'!
   passenger_enabled on;
}

#start nginx
sudo ~/nginx/sbin/nginx

#reload nginx
sudo ~/nginx/sbin/nginx -s reload

Album Art
[Flash 9 is required to listen to audio.]

Voice actor covers “Gin and Juice” by Snoop Dogg. Best cover ever?

ArtistUnknown
TitleGin & Juice