TL;DR: I had to do a bunch of research in order to set up pretty URLs to apps running on my localhost at a particular port, so I decided to write up the steps I followed in one place in case anyone else wants to do this. Scroll down past the reasons I wanted to do this for the instructions.
I recently decided to use a non-admin user with OSX Yosemite on a daily basis, mostly on the recommendation of a security researcher who discovered a vulnerability in OSX, and because it sounds like a good idea in general.
The only problem I've encountered so far is in installing Pow-- the script to install it wants sudo, but it also wants to be run as the current user. There are instructions on the wiki for installation as a standard user, but they appear to be out of date; I got errors when trying to use
npm run-script. I also got errors when trying to install it from source. So ¯\_(ツ)_/¯.
The thing is, I was only using Pow for its pretty URL creation anyway; I use foreman or grunt to run my apps instead of Pow's rack server. So I set out to get URLs like
http://my-project.dev to serve up a rails app that I would usually access at
My first thought was that I could just use
/etc/hosts, but that only works for host names, not host names and ports. Luckily, Apache can do this and, conveniently enough, is included with OSX!
BUT WAIT! I do still need to use
/etc/hosts, so that the host goes to localhost where Apache will handle it.
So, to spell it all out, I logged in as my admin user (since I'm running from a non-admin day-to-day now) and edited
$ login admin password: admin$ sudo vim /etc/hosts
In order to add a new entry for
my-project.dev. So now, my
/etc/hosts file looks like:
## # Host Database # # localhost is used to configure the loopback interface # when the system is booting. Do not change this entry. ## 127.0.0.1 localhost 255.255.255.255 broadcasthost ::1 localhost 127.0.0.1 my-project.dev
At this point, still as the admin user, I started up apache by doing:
admin$ sudo apachectl start
And then I could go to
http://my-project.dev and see the Apache "It works!" page. We're halfway there!
/etc/apache2/httpd.conf, find this part about Virtual Hosts and uncomment the
Include line so it looks like this:
# Virtual hosts Include /private/etc/apache2/extra/httpd-vhosts.conf
Then, edit THAT file,
/private/etc/apache2/extra/httpd-vhosts.conf, remove the two sample
<VirtualHost>s, and insert a new one that looks like this, as recommended by this ServerFault answer:
NameVirtualHost *:80 <VirtualHost *> ServerName my-project.dev ProxyPreserveHost On # setup the proxy <Proxy *> Order allow,deny Allow from all </Proxy> ProxyPass / http://localhost:3000/ ProxyPassReverse / http://localhost:3000/ </VirtualHost>
Then restart apache:
admin$ sudo apachectl restart
And, if you've got your app running at port 3000, you should be able to visit
http://my-project.dev in your browser and get to your app!