A Complete Guide to Setting Up Web Development on a Mac
This step-by-step guide walks you through setting up a Mac for web development, from installing Homebrew and Python to configuring Git, Docker, and a local web server. Follow along to create a clean, professional development environment that lets you focus on coding.
Advertisement
So you just got a shiny new Mac, or maybe you’ve had one for a while but never really set it up for coding. Either way, you’re in the right place. Setting up a Mac for web development isn’t hard, but doing it the right way saves you hours of frustration later. I’ve been through this process more times than I can count, and I’m going to walk you through every step so you can start building real projects without hitting weird errors.
Why Bother with a Proper Setup?
Here’s the thing: a messy development environment is like a cluttered desk. You can still work, but everything takes longer, and you’ll keep tripping over things. A clean setup means you spend less time debugging environment issues and more time actually coding. Plus, when you follow best practices from the start, you avoid those “why is this not working?” moments that can kill your momentum.
Step 1: Get the Terminal Ready
Your Mac’s Terminal is your best friend. Open it from Applications > Utilities > Terminal, or just search for it with Spotlight (Cmd+Space). The default shell on modern Macs is Zsh, which is great. But you’ll want to make sure you have the latest version of Xcode Command Line Tools installed. These include compilers and other essentials that many tools need.
Run this in your terminal:
xcode-select --install
A popup will appear. Click “Install” and wait a few minutes. This is a one-time thing, and it’s absolutely necessary for almost everything else we’ll do.
Step 2: Install Homebrew – The Missing Package Manager
Homebrew is the single most important tool you’ll install. It’s a package manager that lets you install command-line tools, programming languages, and databases with simple commands. Without it, you’d be downloading and compiling everything manually, which is a huge pain.
Open your terminal and paste this:
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
Follow the prompts. It’ll ask for your password and might take a few minutes. Once it’s done, run brew doctor to make sure everything is healthy. If you see any warnings, follow the instructions to fix them.
Now you can install almost anything with brew install. For example, to install Git (which you definitely need), just type:
brew install git
Step 3: Choose Your Code Editor
You need a good code editor. While you can use anything from Vim to VS Code, I strongly recommend Visual Studio Code for beginners and pros alike. It’s free, fast, and has an incredible extension ecosystem.
Download it from the official website or use Homebrew:
brew install --cask visual-studio-code
Once installed, open it and install a few essential extensions: - Python (by Microsoft) – for syntax highlighting and IntelliSense - Prettier – to auto-format your code - Live Server – to preview HTML pages with auto-reload - GitLens – to see who changed what in your Git history
You can find these by clicking the Extensions icon on the left sidebar (or pressing Cmd+Shift+X).
Step 3: Set Up Python Properly
Macs come with Python 2 pre-installed, but that’s ancient history. You need Python 3. The best way to manage Python versions is with pyenv, which lets you switch between different Python versions easily.
First, install pyenv via Homebrew:
brew install pyenv
Then add these lines to your shell configuration file (usually ~/.zshrc):
export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init --path)"
Restart your terminal or run source ~/.zshrc. Now you can install any Python version:
pyenv install 3.12.0
pyenv global 3.12.0
Check it worked with python --version. You should see Python 3.12.0. This is important because many web frameworks and tools expect Python 3, and having the right version prevents compatibility headaches.
Step 4: Install Node.js and npm
If you’re doing any frontend work (and let’s be honest, who isn’t these days), you need Node.js. It comes with npm, the Node package manager. The best way to install Node on a Mac is through nvm (Node Version Manager), which lets you switch between Node versions for different projects.
Install nvm with:
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
Restart your terminal, then install the latest stable Node:
nvm install node
This gives you the latest version. For most projects, that’s fine. But if you ever need an older version (like for a legacy project), just do nvm install 16 and switch with nvm use 16.
Step 5: Set Up a Local Web Server
You don’t need to pay for hosting to test your websites. Your Mac can run a local server easily. For simple static sites, Python has a built-in server:
python -m http.server 8000
That serves the current directory at http://localhost:8000. But for more serious work, you’ll want something like Apache or Nginx. I prefer Nginx because it’s lightweight and fast.
Install Nginx with Homebrew:
brew install nginx
Start it with:
sudo nginx
Your web server is now running at http://localhost:8080. You can change the port in the configuration file at /usr/local/etc/nginx/nginx.conf. To stop it, use sudo nginx -s stop.
Step 5: Set Up a Database
Most web apps need a database. For local development, SQLite is the simplest because it requires no server setup. But if you’re building something more serious, you’ll want PostgreSQL or MySQL.
PostgreSQL is my go-to. Install it with:
brew install postgresql
Start the service:
brew services start postgresql
Now you can create a database with:
createdb myapp
And connect to it with psql myapp. That’s it. You have a full relational database running locally.
Step 6: Version Control with Git
You probably already have Git installed (check with git --version). If not, install it with brew install git. But the real magic is in configuring it properly.
Set your name and email globally:
git config --global user.name "Your Name"
git config --global user.email "your.email@example.com"
These are attached to every commit you make. Use the same email you use on GitHub or GitLab.
I also recommend setting up SSH keys for GitHub. This way you don’t have to type your password every time you push code. Generate a key with:
ssh-keygen -t ed25519 -C "your.email@example.com"
Then copy the public key with pbcopy < ~/.ssh/id_ed25519.pub and add it to your GitHub account under Settings > SSH and GPG keys.
Step 7: Create a Project Folder Structure
Before you start coding, decide where your projects will live. I keep everything in a folder called ~/Projects. Inside that, I have subfolders like ~/Projects/web, ~/Projects/python, and ~/Projects/experiments. This keeps things organized and makes backups easy.
Create it with:
mkdir -p ~/Projects/web
Now, whenever you start a new project, create a folder inside ~/Projects/web and initialize a Git repository there. This habit will save you from losing work.
Step 8: Install a Virtual Environment Tool
If you’re working with Python web frameworks like Django or Flask, you absolutely need virtual environments. They isolate your project’s dependencies so you don’t end up with version conflicts.
Python 3 comes with venv built-in. To create a virtual environment for a project:
cd ~/Projects/web/myproject
python -m venv venv
source venv/bin/activate
Now any Python packages you install with pip will only affect this project. When you’re done, type deactivate to exit the virtual environment.
For more advanced dependency management, consider using pipenv or poetry. But for most beginners, venv is perfectly fine.
Step 7: Install a Code Linter and Formatter
Good code is consistent code. Install flake8 for linting and black for formatting:
pip install flake8 black
In VS Code, install the Python extension and it will automatically use these tools. You can also configure them to run on save. Open your settings (Cmd+,) and search for “format on save” and enable it. This will make your code look professional without you having to think about it.
Step 8: Set Up a Local Domain for Testing
When you’re building web apps, you often need to test with a real domain name (like myapp.local). You can do this by editing your hosts file. Open it with:
sudo nano /etc/hosts
Add a line like:
127.0.0.1 myapp.local
Now you can point your local server to myapp.local and it will work like a real domain. This is especially useful for testing cookies, CORS, and other browser features that behave differently on localhost.
Step 9: Install Docker (Optional but Powerful)
If you plan to work with multiple projects that have different dependencies, Docker is a lifesaver. It lets you run applications in isolated containers. Install it with:
brew install --cask docker
Open Docker from your Applications folder and let it start. Then you can pull images like docker pull python:3.12 and run containers without messing up your system.
Docker is overkill for simple projects, but if you’re working with microservices or need to replicate a production environment, it’s invaluable.
Step 10: Automate Repetitive Tasks with Shell Aliases
You’ll find yourself typing the same commands over and over. Save time by creating aliases. Open your ~/.zshrc file and add lines like:
alias python=python3
alias pip=pip3
alias gs='git status'
alias gp='git push'
alias serve='python -m http.server 8000'
After saving, run source ~/.zshrc to apply them. Now typing serve starts a local server. Small wins like this add up.
Step 11: Test Your Setup
Let’s make sure everything works. Create a simple Python web app to test your environment:
cd ~/Projects/web
mkdir testapp
cd testapp
python -m venv venv
source venv/bin/activate
pip install flask
Create a file called app.py with this content:
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello():
return "Hello from PythonSkillset!"
if __name__ == '__main__':
app.run(debug=True)
Run it with python app.py and open http://127.0.0.1:5000 in your browser. You should see “Hello from PythonSkillset!”. If you do, congratulations – your Mac is fully set up for web development.
Step 11: Keep Your System Clean
One thing I learned the hard way: don’t install everything globally. Use virtual environments for Python projects, and use nvm for Node versions. This keeps your system clean and makes it easy to switch between projects.
Also, get into the habit of updating Homebrew regularly:
brew update && brew upgrade
This keeps your tools current and secure.
Final Thoughts
Setting up a Mac for web development is a one-time investment that pays off every single day. The steps I’ve outlined here are the same ones I use at PythonSkillset for all our tutorials and guides. They’re battle-tested and work for everything from simple static sites to complex Django applications.
Remember, the goal isn’t to have the fanciest setup. It’s to have a setup that gets out of your way so you can focus on building things. Start with these basics, and you’ll be writing code in no time. If you hit any snags, the PythonSkillset community is always here to help. Happy coding!
Advertisement
Comments
Questions, corrections, and tips stay visible for everyone reading this page.
Join the discussion
No comments yet
Be the first to leave a note — it helps the next reader.