Skip navigation
This discussion is locked

Local Web Server for Lion

71312 Views 49 Replies Latest reply: Mar 28, 2012 6:58 AM by BillBaroud RSS
1 2 3 4 Previous Next
etresoft Level 7 Level 7 (23,905 points)
Currently Being Moderated
Jul 27, 2011 7:47 AM

Since the User Tips aren't ready yet, I thought I would go ahead and post my definitive guide to getting a local web server running on Lion. This is meant to be a development platform so that you can build and test your sites locally, then deploy to an internet server. I have instructions for configuring the Apache, PHP, MySQL, and Perl. Now that Lion is released, I wanted to consolidate and update all of the random bits and pieces here on Apple Support Communities.

 

Requirements:

  1. Basic understanding of Terminal.app and how to run command-line programs.
  2. Basic understanding of web servers.
  3. Basic usage of vi. You can substitute nano if you want.

 

Optional:

  1. Xcode is required for the MySQL driver and for adding PHP modules.

 

Lines in bold are what you will have to type in at the Terminal.

Replace <your local host> with the name of your machine. Ideally, it should be a one-word name with no spaces or punctuation. It just makes life easier.

Replace <your short user name> with your short user name.

 

Here goes... Enjoy!

 

Lion no longer creates personal web sites by default. To create one manually, enter the following:

mkdir ~/Sites

echo "<html><body><h1>My site works</h1></body></html>" > ~/Sites/index.html.en

 

PHP is not enabled in Lion. To enable it, do:

sudo vi /etc/apache2/httpd.conf

 

Uncomment line 111 that reads:

#LoadModule php5_module libexec/apache2/libphp5.so

to

LoadModule php5_module libexec/apache2/libphp5.so

 

Edit the launchd config file for Apache:

sudo vi /System/Library/LaunchDaemons/org.apache.httpd.plist 

 

Restart Apache:

sudo launchctl unload -w /System/Library/LaunchDaemons/org.apache.httpd.plist

sudo launchctl load -w /System/Library/LaunchDaemons/org.apache.httpd.plist

 

To turn on Apache, go to System Preferences > Sharing and enable Web Sharing.

 

NOTE: There appears to be a bug in Lion for which I haven't found a workaround. If web sharing doesn't start, just keep trying.

This might help. Might not. Remove the following from /System/Library/LaunchDaemons/org.apache.httpd.plist:

         <string>-D</string>

         <string>WEBSHARING_ON</string>

 

In Safari, navigate to your web site with the following address:

http://<your local host>/

 

It should say:

It works!

Now try your user home directory:

http://<your local host>/~<your short user name>

 

It should say:

My site works

Now try PHP. Create a PHP info file with:

echo "<?php echo phpinfo(); ?>" > ~/Sites/info.php

 

And test it by entering the following into Safari's address bar:

http://<your local host>/~<your short user name>/info.php

 

You should see your PHP configuration information. This will be important for setting up MySQL later.

 

Download MySQL from a local mirror. You want the Mac OS X ver. 10.6 (x86, 64-bit), DMG Archive. Open the archive mysql-5.5.14-osx10.6-x86_64.dmg. Install only the mysql-5.5.14-osx10.6-x86_64.pkg package. Ignore everything else.

 

Create the launchd config file for MySQL:

sudo vi /Library/LaunchDaemons/com.mysql.mysql.plist 

 

Use the following content:

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">

<plist version="1.0">

  <dict>

    <key>KeepAlive</key>

    <true/>

    <key>Label</key>

    <string>com.mysql.mysqld</string>

    <key>ProgramArguments</key>

    <array>

    <string>/usr/local/mysql/bin/mysqld_safe</string>

    <string>--user=mysql</string>

    </array>

  </dict>

</plist>

 

Create a config file for MySQL that matches the Apple PHP build:

sudo vi /etc/my.conf 

 

Use the following content:

[client]

socket=/var/mysql/mysql.sock

[mysqld]

socket=/var/mysql/mysql.sock

 

Start MySQL:

sudo launchctl load -w /Library/LaunchDaemons/com.mysql.mysql.plist

Download the MySQL Perl driver.

 

Extract the archive with:

tar zxvf DBD-mysql-4.019.tar.gz

 

Move into the directory:

cd DBD-mysql-4.019

 

First, fix the MySQL client library. (credit)

 

For Lion, type:

sudo install_name_tool -id /usr/local/mysql-5.5.14-osx10.6-x86_64/lib/libmysqlclient.18.dylib /usr/local/mysql-5.5.14-osx10.6-x86_64/lib/libmysqlclient.18.dylib

 

Next, build DBD::mysql with:

perl Makefile.PL --mysql_config=/usr/local/mysql/bin/mysql_config --testsocket=/var/mysql/mysql.sock --testuser=root

make

make test

sudo make install

Now that MySQL is tested and installed, don't forget to set a root password and configure your users.

 

If you want to add modules to PHP, I suggest the following site. I can't explain it any better. I had planned to update those instructions for Lion and just give him credit, but he beat me to it.

MacBook 2007 (white), Mac OS X (10.7), + iMac 27" + iPad + MacBook Pro
  • JollyGewd Level 1 Level 1 (0 points)
    Currently Being Moderated
    Aug 11, 2011 2:04 AM (in response to etresoft)

    Hi,

     

    Thanks for the write-up, very helpful. However, it's this line that bothers me: "To turn on Apache, go to System Preferences > Sharing and enable Web Sharing."

     

    I don't like the fact that in orde to let Apache run, I must turn on Web sharing. I'm not always on local networks in which I know all computers, and basically, I'm giving everyone free access to my Sites directory with Web sharing turned on (and as a web developer, there are quite some sites there). Is there any way of working around this? Maybe I could fix this in my Apache config, if so, do you have any suggestions on how to do this?

     

    As an aside: On Snow Leopard, in my experience the two were not connected... And in fact, on Lion, my Apache setup worked fine with Web sharing turned off, until I turned Web sharing on and off once. After that, apache started turning on/off on startup based on the Web sharing settings.

  • twtwtw Level 5 Level 5 (4,580 points)
    Currently Being Moderated
    Aug 11, 2011 7:38 AM (in response to JollyGewd)

    "Web Sharing" is just a Mac euphemism for "apache is running".  Whether or not you are actually sharing your sites with the web is controlled by the settings in the httpd.conf files in /etc/apache2 and /etc/apache2/users. If you just want to create a site for local development or a local intranet then you have to add appropriate directives to deny the service to everyone except the internet addresses you want to have access. see http://httpd.apache.org/docs/2.2/mod/directives.html.

     

    as a rule, it's not too much of a problem.  even if you leave your testing site open to the web, it's unlikely that anyone will know it's there.  If you have someone on your local web who's snooping around it's easy enough to find, of course, but I believe that OS X has 'show directories' turned off by default so they are not likely to find any of your web files except the index page and any files linked off that.

  • JollyGewd Level 1 Level 1 (0 points)
    Currently Being Moderated
    Aug 11, 2011 8:11 AM (in response to twtwtw)

    Ah, that makes sense, thanks for the explanation! So basically, the checkbox "Web sharing" does nothing more than turning Apache on and off?

     

    Concerning the default settings for indexes: in /private/etc/apache2/httpd.conf.default I see this:

     

    <Directory "/Library/WebServer/Documents">

    ...

    Options Indexes FollowSymLinks MultiViews

    ...

    </Directory>

     

    Apparently indexes are shown by default in the web directory, but I'm on a Macbook Pro which had Snow Leopard on it originally, so I'm not sure if these settings are the same for new Lion Macs.

  • twtwtw Level 5 Level 5 (4,580 points)
    Currently Being Moderated
    Aug 11, 2011 8:29 AM (in response to JollyGewd)

    Basically, yeah.  the 'Web Sharing' checkbox is a way for people without too much technical knowledge to publish a webpage quickly and seamlessly. KInd of an internet 'easy-bake oven'...  as far as the defaults go, well..  I set up my webserver so long agio that I can't remember what the files looked like originally.  maybe indexes are on by default?  I'll have to check my Lion partition (which I haven't yet modified) and see what it's conf files say.

  • JollyGewd Level 1 Level 1 (0 points)
    Currently Being Moderated
    Aug 12, 2011 1:14 AM (in response to etresoft)

    etresoft wrote:


    That is correct. You could adjust your Apache config, or just turn on your Firewall. This is one of the few situations where you would actually be using a Firewall for its intended purpose - to facilitate services for authorized users (yourself) while denying others. The MacOS X built-in Firewall is pretty anaemic, so you have to shut off all sharing services. The real ipfw firewall is still available via the command line or 3rd party GUI configuration tools.

    Ok, that's good to know. For now I just changed "Listen 80" to "Listen 127.0.0.1:80" in httpd.conf, this seems to do the trick for me. At first it didn't seem to work though, but apparently I had a lot of httpd processes running, some of which kept running even after restarting apache from Terminal (probably because I was goofing around with launchctl load/unload and starting/stopping using apachectl). After a fresh restart, other computers on the local network couldn't get in anymore.

    etresoft wrote:

     

    You may have been running a 3rd party build of Apache such as MacPorts or XAMPP. Another Apache installation would not be connected to the built-in Web Sharing preference setting. I prefer using the built-in Apache because there is less included with it. The MacPorts and XAMPP Apache builds are much like default Linux installations where they include every module under the sun. Then, when you go to deploy on a more restrictive sharing hosting provider, you could find that some of the modules your site depends on are not available. That is a bad time to make such a big discovery. All shared hosting sites will have some restricted subset of Apache modules available. It is better to know about such things and work around them in development.

    Good point about not having all kinds of modules enabled on a development machine. I do have MacPorts and use it quite frequently, but my apache has always been the OS X default (2010 Macbook Pro which originally had Snow Leopard on it). After upgrade to Lion, PHP was disabled in httpd.conf and local PHP scripts stopped working, which also indicates that I've been using the default apache all the time.

  • voigtstr Level 1 Level 1 (25 points)
    Currently Being Moderated
    Aug 20, 2011 12:24 AM (in response to etresoft)

    Since turning web sharing on, now the default wiki server doesn't work. How do I have both going at the same time and have specific sites served by virtual hosting?

     

    also the following line in httpd.conf prevents websharing from starting.

    Include /private/etc/apache2/extra/httpd-dav.conf

  • twtwtw Level 5 Level 5 (4,580 points)
    Currently Being Moderated
    Aug 20, 2011 1:40 PM (in response to voigtstr)

    There are a couple of tutorials for setting up local virtual hosts on the web: google 'OS X Leopard virtual host' (you don't want the Tiger versions because they rely on Net Info Manager).  The basics are as follows, and this should work on Leopard through Lion. This will set up a host at the URL local.dev.vhost that points to a folder at /Users/yourname/Sites/virtualHostFolder:

     

    Preparations:

    • download TextWrangler (you can use another text editor if you want, but everything I say will be geared towards TW)
    • make a current time machine backup - if you goof something up it will often be easier to start again from scratch than try to figure out what went wrong
    • open the following files in TextWrangler
      1. /etc/hosts
      2. /etc/apache2/httpd.conf
      3. /etc/apache2/extra/httpd-vhosts.conf
    • read the docs at http://httpd.apache.org/docs/2.2/vhosts/ (you'll be making a name-based virtual host, but make sure you get the overview as well as the details)

     

    Setting up a virtual host:

    • in /etc/hosts, add a line like the following at the end of the file (this informs the system that there should be a location on the local machine with the name we want): 127.0.0.1    local.dev.vhost
    • in the httpd.conf file, search for 'Virtual hosts' and make sure the include line is uncommented by deleting the pound sign (#) at the start of the line. The line you want should be near the end of the document: Include /private/etc/apache2/extra/httpd-vhosts.conf.
    • edit the httpd-vhosts.conf file.  first, comment out the example virtual hosts with pound signs (#).  Or just delete them, there's a folder of the original files in the apache2 folder you can refer to at need. Add two new host specifiers as follows (this is minimal - read the apache documentation documentation for more options.

    # This allows localhost to still find your main sites folder

    <VirtualHost *:80>

      DocumentRoot "/Users/yourname/Sites"

      ServerName localhost

    </VirtualHost>

     

    # This is your virtual host

    <VirtualHost *:80>

      DocumentRoot "/Users/yourname/Sites/virtualHostFolder"

      ServerName local.dev.vhost

    </VirtualHost>

    • save everything, then restart apache.

     

    You may also want to add a directory block for the virtual host folder to control access or set up other options.  e.g. the following, which should deny access from everywhere except localhost and your site name:

     

    <Directory "/Users/yourname/Sites/virtualHostFolder">

        Order Deny,Allow

        Allow from 127.0.0.1

        Deny from all

    </Directory>

     

    You can put this in the httpd-vhosts.conf file or in the file at /etc/apache2/users/yourname.conf, doesn't matter.

  • Andrew Vit Level 1 Level 1 (115 points)
    Currently Being Moderated
    Aug 25, 2011 12:17 PM (in response to etresoft)

    To fix the problem with Web Sharing not starting via the Sharing Preferences panel, I found that the launch daemon is disabled out of the box (at least mine was).

     

    Edit /System/Library/LaunchDaemons/org.apache.httpd.plist and remove the following lines:

     

        <key>Disabled</key>
        <false/>
    

     

    Note, it's important to actually remove these, and not just set it to "false". Surprisingly that wouldn't work.

  • Andrew Vit Level 1 Level 1 (115 points)
    Currently Being Moderated
    Aug 26, 2011 10:52 AM (in response to etresoft)

    Interesting, it wasn't hypothetical in my case: after trying several other things to get the daemon to start, this looked like the root cause. Do you have any references for where this value might be stored "elsewhere"?

1 2 3 4 Previous Next

Actions

More Like This

  • Retrieving data ...

Bookmarked By (14)

This site contains user submitted content, comments and opinions and is for informational purposes only. Apple disclaims any and all liability for the acts, omissions and conduct of any third parties in connection with or related to your use of the site. All postings and use of the content on this site are subject to the Apple Support Communities Terms of Use.