Environment Setup Guide
Overview
Help developers set up complete development environments from scratch. This skill provides step-by-step guidance for installing tools, configuring dependencies, setting up environment variables, and verifying the setup works correctly.
When to Use This Skill
-
Use when starting a new project and need to set up the development environment
-
Use when onboarding new team members to a project
-
Use when switching to a new machine or operating system
-
Use when troubleshooting environment-related issues
-
Use when documenting setup instructions for a project
-
Use when creating development environment documentation
How It Works
Step 1: Identify Requirements
I'll help you determine what needs to be installed:
-
Programming language and version (Node.js, Python, Go, etc.)
-
Package managers (npm, pip, cargo, etc.)
-
Database systems (PostgreSQL, MongoDB, Redis, etc.)
-
Development tools (Git, Docker, IDE extensions, etc.)
-
Environment variables and configuration files
Step 2: Check Current Setup
Before installing anything, I'll help you check what's already installed:
Check versions of installed tools
node --version python --version git --version docker --version
Step 3: Provide Installation Instructions
I'll give platform-specific installation commands:
-
macOS: Using Homebrew
-
Linux: Using apt, yum, or package manager
-
Windows: Using Chocolatey, Scoop, or direct installers
Step 4: Configure the Environment
Help set up:
-
Environment variables (.env files)
-
Configuration files (.gitconfig, .npmrc, etc.)
-
IDE settings (VS Code, IntelliJ, etc.)
-
Shell configuration (.bashrc, .zshrc, etc.)
Step 5: Verify Installation
Provide verification steps to ensure everything works:
-
Run version checks
-
Test basic commands
-
Verify database connections
-
Check environment variables are loaded
Examples
Example 1: Node.js Project Setup
Setting Up Node.js Development Environment
Prerequisites
- macOS, Linux, or Windows
- Terminal/Command Prompt access
- Internet connection
Step 1: Install Node.js
macOS (using Homebrew): ```bash
Install Homebrew if not installed
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
Install Node.js
brew install node ```
Linux (Ubuntu/Debian): ```bash
Update package list
sudo apt update
Install Node.js and npm
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash - sudo apt install -y nodejs ```
Windows (using Chocolatey): ```powershell
Install Chocolatey if not installed
Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))
Install Node.js
choco install nodejs ```
Step 2: Verify Installation
```bash node --version # Should show v20.x.x or higher npm --version # Should show 10.x.x or higher ```
Step 3: Install Project Dependencies
```bash
Clone the repository
git clone https://github.com/your-repo/project.git cd project
Install dependencies
npm install ```
Step 4: Set Up Environment Variables
Create a `.env` file: ```bash
Copy example environment file
cp .env.example .env
Edit with your values
nano .env ```
Example `.env` content: ``` NODE_ENV=development PORT=3000 DATABASE_URL=postgresql://localhost:5432/mydb API_KEY=your-api-key-here ```
Step 5: Run the Project
```bash
Start development server
npm run dev
Should see: Server running on http://localhost:3000
```
Troubleshooting
Problem: "node: command not found" Solution: Restart your terminal or run `source ~/.bashrc` (Linux) or `source ~/.zshrc` (macOS)
Problem: "Permission denied" errors
Solution: Don't use sudo with npm. Fix permissions:
```bash
mkdir /.npm-global
npm config set prefix '/.npm-global'
echo 'export PATH=~/.npm-global/bin:$PATH' >> ~/.bashrc
source ~/.bashrc
```
Example 2: Python Project Setup
Setting Up Python Development Environment
Step 1: Install Python
macOS: ```bash brew install python@3.11 ```
Linux: ```bash sudo apt update sudo apt install python3.11 python3.11-venv python3-pip ```
Windows: ```powershell choco install python --version=3.11 ```
Step 2: Verify Installation
```bash python3 --version # Should show Python 3.11.x pip3 --version # Should show pip 23.x.x ```
Step 3: Create Virtual Environment
```bash
Navigate to project directory
cd my-project
Create virtual environment
python3 -m venv venv
Activate virtual environment
macOS/Linux:
source venv/bin/activate
Windows:
venv\Scripts\activate ```
Step 4: Install Dependencies
```bash
Install from requirements.txt
pip install -r requirements.txt
Or install packages individually
pip install flask sqlalchemy python-dotenv ```
Step 5: Set Up Environment Variables
Create `.env` file: ``` FLASK_APP=app.py FLASK_ENV=development DATABASE_URL=sqlite:///app.db SECRET_KEY=your-secret-key-here ```
Step 6: Run the Application
```bash
Run Flask app
flask run
Should see: Running on http://127.0.0.1:5000
```
Example 3: Docker Development Environment
Setting Up Docker Development Environment
Step 1: Install Docker
macOS: ```bash brew install --cask docker
Or download Docker Desktop from docker.com
```
Linux: ```bash
Install Docker
curl -fsSL https://get.docker.com -o get-docker.sh sudo sh get-docker.sh
Add user to docker group
sudo usermod -aG docker $USER newgrp docker ```
Windows: Download Docker Desktop from docker.com
Step 2: Verify Installation
```bash docker --version # Should show Docker version 24.x.x docker-compose --version # Should show Docker Compose version 2.x.x ```
Step 3: Create docker-compose.yml
```yaml version: '3.8'
services: app: build: . ports: - "3000:3000" environment: - NODE_ENV=development - DATABASE_URL=postgresql://postgres:password@db:5432/mydb volumes: - .:/app - /app/node_modules depends_on: - db
db: image: postgres:15 environment: - POSTGRES_USER=postgres - POSTGRES_PASSWORD=password - POSTGRES_DB=mydb ports: - "5432:5432" volumes: - postgres_data:/var/lib/postgresql/data
volumes: postgres_data: ```
Step 4: Start Services
```bash
Build and start containers
docker-compose up -d
View logs
docker-compose logs -f
Stop services
docker-compose down ```
Step 5: Verify Services
```bash
Check running containers
docker ps
Test database connection
docker-compose exec db psql -U postgres -d mydb ```
Best Practices
✅ Do This
-
Document Everything - Write clear setup instructions
-
Use Version Managers - nvm for Node, pyenv for Python
-
Create .env.example - Show required environment variables
-
Test on Clean System - Verify instructions work from scratch
-
Include Troubleshooting - Document common issues and solutions
-
Use Docker - For consistent environments across machines
-
Pin Versions - Specify exact versions in package files
-
Automate Setup - Create setup scripts when possible
-
Check Prerequisites - List required tools before starting
-
Provide Verification Steps - Help users confirm setup works
❌ Don't Do This
-
Don't Assume Tools Installed - Always check and provide install instructions
-
Don't Skip Environment Variables - Document all required variables
-
Don't Use Sudo with npm - Fix permissions instead
-
Don't Forget Platform Differences - Provide OS-specific instructions
-
Don't Leave Out Verification - Always include test steps
-
Don't Use Global Installs - Prefer local/virtual environments
-
Don't Ignore Errors - Document how to handle common errors
-
Don't Skip Database Setup - Include database initialization steps
Common Pitfalls
Problem: "Command not found" after installation
Symptoms: Installed tool but terminal doesn't recognize it Solution:
-
Restart terminal or source shell config
-
Check PATH environment variable
-
Verify installation location
Check PATH
echo $PATH
Add to PATH (example)
export PATH="/usr/local/bin:$PATH"
Problem: Permission errors with npm/pip
Symptoms: "EACCES" or "Permission denied" errors Solution:
-
Don't use sudo
-
Fix npm permissions or use nvm
-
Use virtual environments for Python
Fix npm permissions
mkdir /.npm-global
npm config set prefix '/.npm-global'
echo 'export PATH=~/.npm-global/bin:$PATH' >> ~/.bashrc
Problem: Port already in use
Symptoms: "Port 3000 is already in use" Solution:
-
Find and kill process using the port
-
Use a different port
Find process on port 3000
lsof -i :3000
Kill process
kill -9 <PID>
Or use different port
PORT=3001 npm start
Problem: Database connection fails
Symptoms: "Connection refused" or "Authentication failed" Solution:
-
Verify database is running
-
Check connection string
-
Verify credentials
Check if PostgreSQL is running
sudo systemctl status postgresql
Test connection
psql -h localhost -U postgres -d mydb
Setup Script Template
Create a setup.sh script to automate setup:
#!/bin/bash
echo "🚀 Setting up development environment..."
Check prerequisites
command -v node >/dev/null 2>&1 || { echo "❌ Node.js not installed"; exit 1; } command -v git >/dev/null 2>&1 || { echo "❌ Git not installed"; exit 1; }
echo "✅ Prerequisites check passed"
Install dependencies
echo "📦 Installing dependencies..." npm install
Copy environment file
if [ ! -f .env ]; then echo "📝 Creating .env file..." cp .env.example .env echo "⚠️ Please edit .env with your configuration" fi
Run database migrations
echo "🗄️ Running database migrations..." npm run migrate
Verify setup
echo "🔍 Verifying setup..." npm run test:setup
echo "✅ Setup complete! Run 'npm run dev' to start"
Related Skills
-
@brainstorming
-
Plan environment requirements before setup
-
@systematic-debugging
-
Debug environment issues
-
@doc-coauthoring
-
Create setup documentation
-
@git-pushing
-
Set up Git configuration
Additional Resources
-
Node.js Installation Guide
-
Python Virtual Environments
-
Docker Documentation
-
Homebrew (macOS)
-
Chocolatey (Windows)
-
nvm (Node Version Manager)
-
pyenv (Python Version Manager)
Pro Tip: Create a setup.sh or setup.ps1 script to automate the entire setup process. Test it on a clean system to ensure it works!