Mentorship
Learn GeoServer development through hands-on mentorship. Start with Docker setup, tackle beginner-friendly issues, and grow your skills incrementally with the Kaizen philosophy.
GeoGuru.Africa offers mentorship for developers who want to contribute to GeoServer. Whether you’re new to open source or looking to deepen your expertise, we guide you through the journey from first contribution to sustained impact.
Getting Started with Docker Development Environment
The fastest way to start contributing to GeoServer is using the DevDocker environment - a pre-configured containerized development setup that gets you coding in minutes, not hours. This is the recommended approach for all GeoGuru participants.
Why DevDocker?
Traditional GeoServer development requires installing and configuring multiple tools: Java JDK, Maven, Git, Tomcat, and more. Getting all these tools working together can take hours or even days, especially if you encounter version conflicts or platform-specific issues.
DevDocker eliminates this setup friction by providing:
- Pre-configured build tools: JDK 21, Maven 3.8+, Git - all versions tested and working
- IDE connectivity: Connect your favorite IDE (Kiro, VSCode, IntelliJ) via SSH
- Remote debugging: Set breakpoints and debug GeoServer live with JDWP
- Fast builds: Optimized Maven caching means 2-3 minute builds after the first run
- Production parity: Environment mirrors the official GeoServer Docker image structure
Time to first contribution: 15-20 minutes from zero to running GeoServer with your first code change.
Prerequisites
Before starting, ensure you have:
- Docker Desktop (Windows/Mac) or Docker Engine (Linux) - Install Docker
- Docker Compose 2.0+ (usually included with Docker Desktop)
- SSH client (built into Windows 10+, macOS, and Linux)
- GitHub account (free) - Sign up here
- Basic command-line familiarity (navigating directories, running commands)
System Requirements:
- 8GB RAM minimum (16GB recommended for comfortable development)
- 20GB free disk space (for Docker images and Maven dependencies)
- Internet connection (for initial setup and dependency downloads)
Quick Start: Your First 20 Minutes
Follow these steps to go from zero to running GeoServer with your own fork. Commands shown with $ are run on your host machine, commands with # are run inside the container.
Step 1: Fork GeoServer on GitHub (2 minutes)
- Navigate to https://github.com/geoserver/geoserver
- Click the “Fork” button in the top-right corner
- Select your GitHub account as the destination
- Wait for GitHub to create your fork (usually takes 30-60 seconds)
Step 2: Get DevDocker (3 minutes)
Clone the DevDocker repository and start the environment:
$ git clone https://github.com/geoguru-africa/DevDocker.git
$ cd DevDocker
$ docker-compose up -d
Verify it’s running:
$ docker ps
You should see devdocker in the list of running containers.
Step 3: Set Up SSH Access (2 minutes)
Run the SSH setup utility:
$ ./scripts/setup-ssh-keys.sh
This script will:
- Detect your existing SSH keys
- Let you select which key to use
- Configure the container for SSH access
Then connect to the container:
$ ssh -p 2222 root@localhost
You’ll see a prompt like # (inside the container)
Step 4: Clone Your Fork (5 minutes)
Inside the container:
# git clone https://github.com/YOUR_USERNAME/geoserver.git
# cd geoserver
Configure upstream remote:
# git remote add upstream https://github.com/geoserver/geoserver.git
# git fetch upstream --tags
Either: checkout a recent release
# git checkout 2.28.2
Or: stick with main for cutting-edge development
# git checkout main
Step 5: Build GeoServer (10-15 minutes first time, 2-3 minutes after)
# build-geoserver.sh
Note: The first build will download all required dependencies, which typically takes 10-15 minutes depending on your internet connection. After the initial build, Maven caches these dependencies locally, so subsequent builds complete much faster in just 2-3 minutes.
Step 6: Start GeoServer (1 minute)
# start-geoserver.sh
Wait for startup (usually 30-60 seconds). You’ll see: “Server startup in [X] milliseconds”
Step 7: Access GeoServer (1 minute)
Open your browser and navigate to:
- URL: http://localhost:8080/geoserver
- Username: admin
- Default password: geoserver
You should see the GeoServer web interface with demo layers and sample data.
Congratulations! You now have a fully functional GeoServer development environment. You’re ready to make your first contribution.
Making Your First Code Change
Let’s make a simple change to verify your development workflow.
1. Find a file to modify
# cd /workspace/geoserver
# nano src/web/app/src/main/webapp/index.html
Note: The container includes nano (a beginner-friendly text editor). Use Ctrl+O to save, Ctrl+X to exit.
2. Make a small change
Add a comment or change some text in the HTML file. For example, add:
<!-- Modified by [Your Name] for GeoGuru mentorship -->
3. Rebuild the web application
# build-geoserver.sh
This takes about 1-2 minutes.
4. Restart GeoServer
# restart-geoserver.sh
5. Verify your change
Refresh http://localhost:8080/geoserver in your browser. View the page source to see your comment.
6. Commit and push
# cd /workspace/geoserver
# git add src/web/app/src/main/webapp/index.html
# git commit -m "Add mentorship comment to welcome page"
# git push origin main
You’ve just completed the full development cycle: edit β build β test β commit β push. This is the workflow you’ll use for all contributions.
Connecting Your IDE
While you can edit files via SSH using vim or nano, most developers prefer using their IDE. DevDocker supports remote development with popular IDEs.
Option 1: VSCode (Recommended)
VSCode provides excellent remote development support via SSH:
1. Install Remote-SSH extension:
- Open VSCode
- Press
Ctrl+Shift+X(Extensions) - Search for “Remote - SSH”
- Click Install
2. Configure SSH connection:
Run the SSH config setup utility on your host:
$ ./scripts/setup-ssh-config.sh
This script will:
- Detect your SSH keys
- Let you select which key to use
- Create or update your
~/.ssh/configfile
3. Connect:
- Press
Ctrl+Shift+P(Command Palette) - Type “Remote-SSH: Connect to Host”
- Select “devdocker”
- A new window opens connected to the container
4. Open workspace:
- File β Open Folder
- Navigate to
/workspace/geoserver - Click OK
You now have full IDE access with syntax highlighting, code completion, and integrated terminal.
Option 2: Kiro IDE
Follow the same steps as VSCode (Kiro uses the same Remote-SSH extension).
Option 3: IntelliJ IDEA
- Go to File β Settings β Build, Execution, Deployment β Deployment
- Add new SFTP server:
- Host: localhost
- Port: 2222
- User: root
- Map remote path
/workspace/geoserverto local project
Remote Debugging
DevDocker includes full debugging support via JDWP (Java Debug Wire Protocol). This lets you set breakpoints, inspect variables, and step through code while GeoServer is running.
Setting up debugging in VSCode/Kiro:
1. Create debug configuration:
Create .vscode/launch.json in your workspace:
{
"version": "0.2.0",
"configurations": [
{
"type": "java",
"name": "Debug GeoServer",
"request": "attach",
"hostName": "localhost",
"port": 5005
}
]
}
2. Start GeoServer (if not already running):
# start-geoserver.sh
3. Attach debugger:
- Press
F5or click Run β Start Debugging - You should see “Debugger attached” in the debug console
4. Set a breakpoint:
- Open a Java file (e.g.,
src/main/src/main/java/org/geoserver/GeoServerApplication.java) - Click in the left margin next to a line number to set a breakpoint (red dot appears)
5. Trigger the breakpoint:
- Access GeoServer in your browser (http://localhost:8080/geoserver)
- When code execution hits your breakpoint, the debugger pauses
- You can inspect variables, step through code, and evaluate expressions
Hot Code Replacement: For simple method body changes, you can modify code while debugging and the changes take effect immediately without restarting GeoServer. For structural changes (new methods, fields, classes), you’ll need to rebuild and restart.
Understanding the Development Workflow
Now that you have everything set up, here’s the typical development workflow. Commands with $ are on your host, commands with # are inside the container.
1. Find an issue to work on
Browse the GeoServer issue tracker:
- GitHub Issues: https://github.com/geoserver/geoserver/issues
- Look for labels: “good first issue”, “beginner-friendly”, “documentation”
2. Create a feature branch
Inside the container:
# cd /workspace/geoserver
# git checkout main
# git pull upstream main
# git checkout -b fix/issue-1234-description
3. Make your changes
Edit code using your IDE or SSH. Test locally by:
- Building:
mvn install -T 2C(inside container) - Running:
start-geoserver.sh(inside container) - Testing in browser: http://localhost:8080/geoserver
4. Write tests
GeoServer requires tests for most contributions:
# cd /workspace/geoserver/src
# mvn test -pl main
5. Commit and push
# git add .
# git commit -m "Fix issue #1234: Description of fix"
# git push origin fix/issue-1234-description
6. Create Pull Request
- Navigate to your fork on GitHub
- Click “Compare & pull request”
- Fill in the PR description:
- What issue does this fix?
- What changes did you make?
- How did you test it?
- Submit to the upstream repository
7. Respond to feedback
Maintainers will review your PR and may request changes. Make updates:
# git add .
# git commit -m "Address review feedback"
# git push origin fix/issue-1234-description
The PR updates automatically when you push to your branch.
Common Development Tasks
All commands below are run inside the container (with # prompt):
Rebuild after code changes:
# cd /workspace/geoserver/src
# mvn install -T 2C
Or rebuild specific module (faster):
# mvn install -T 2C -pl web/app -am
Restart GeoServer:
# restart-geoserver.sh
View GeoServer logs:
On host:
$ docker logs -f devdocker
Or inside container:
# tail -f /usr/local/tomcat/logs/catalina.out
Run tests:
# cd /workspace/geoserver/src
Run all tests (slow - 30+ minutes):
# mvn test
Run tests for specific module:
# mvn test -pl main
Run specific test class:
# mvn test -pl main -Dtest=GeoServerApplicationTest
Update your fork:
# cd /workspace/geoserver
# git checkout main
# git pull upstream main
# git push origin main
Work with specific GeoServer version:
List available versions:
# git tag -l | grep "^2\." | sort -V | tail -20
Checkout specific version:
# git checkout 2.28.2
Or create branch from version:
# git checkout -b my-feature-2.28.2 2.28.2
Troubleshooting
If you encounter issues during setup or development, refer to the comprehensive troubleshooting guide in the DevDocker repository:
- In the cloned repository: See
README.mdTroubleshooting section - Online: Visit the DevDocker GitHub repository for the latest troubleshooting tips
Common issues covered include:
- SSH connection problems
- Port conflicts
- Build failures
- Memory issues
- Git clone interruptions
- GeoServer startup problems
Advanced: Multi-Project Development
If you need to modify GeoTools or GeoWebCache (GeoServer’s dependencies), DevDocker supports multi-project development:
1. Clone additional repositories (inside container):
# cd /workspace
# git clone https://github.com/YOUR_USERNAME/geotools.git
# git clone https://github.com/YOUR_USERNAME/geowebcache.git
2. Configure custom builds (on host):
Edit .env file:
CUSTOM_GEOTOOLS=true
CUSTOM_GEOWEBCACHE=true
3. Restart container (on host):
$ docker-compose restart
4. Build all projects (inside container):
# build-geotrio.sh
This builds GeoTools β GeoWebCache β GeoServer in the correct order, using your local changes.
Note: Multi-project builds take significantly longer (30+ minutes first time). Only enable this if you’re specifically working on GeoTools or GeoWebCache integration.
Technical Focus Areas
Our mentorship program emphasizes key areas where GeoServer needs ongoing development:
Docker Development Environment
- Setting up reproducible dev environments
- Creating custom Docker images for testing
- Optimizing container builds for faster iteration
Custom Builds
- Building GeoServer from source
- Creating custom distributions with specific extensions
- Managing dependencies and build configurations
Community Modules
- Developing new community modules
- Testing and documenting community extensions
- Contributing to the community module ecosystem
GitHub Actions and CI/CD
- Improving automated testing pipelines
- Adding new test scenarios
- Optimizing build times and resource usage
- Contributing to continuous integration infrastructure
Security
- Identifying and fixing security vulnerabilities
- Implementing security best practices
- Contributing to security documentation
- Participating in security reviews and audits
These focus areas represent ongoing needs in the GeoServer project. Whether you’re interested in infrastructure, security, or feature development, there’s a place for your contributions.
Next Steps: Your Contribution Journey
Now that you have a working development environment, here’s your path forward:
Week 1-2: Familiarization
- Explore the GeoServer web interface
- Read the GeoServer Developer Guide
- Browse the codebase in your IDE
- Make small experimental changes to understand the build process
Week 3-4: First Contribution
- Find a “good first issue” on GitHub
- Start with documentation improvements or small bug fixes
- Submit your first Pull Request
- Respond to maintainer feedback
Month 2-3: Build Expertise
- Tackle more complex issues
- Write tests for existing functionality
- Contribute to community modules
- Help other developers with setup questions
Month 4+: Sustained Impact
- Take on feature development
- Review other contributors’ PRs
- Mentor new contributors
- Consider joining the GeoServer community as a regular contributor
Remember: Every expert contributor started exactly where you are now. The key is consistent, incremental progress. Small contributions build trust and familiarity with the codebase.
Getting Help
If you encounter issues or have questions:
1. Check existing documentation:
- DevDocker README: Comprehensive setup and troubleshooting guide
- GeoServer Developer Guide: https://docs.geoserver.org/latest/en/developer/
- GeoServer User Manual: https://docs.geoserver.org/ (for understanding features and functionality)
2. Search for similar issues:
- GitHub Issues: https://github.com/geoserver/geoserver/issues
- GeoServer mailing list archives: https://sourceforge.net/p/geoserver/mailman/
3. Ask the community:
- GeoServer developer mailing list: geoserver-devel@lists.sourceforge.net
- GeoServer Gitter chat: https://gitter.im/geoserver/geoserver
4. Contact GeoGuru mentorship:
- Email: info@geoguru.africa
- Tell us about your issue, what you’ve tried, and where you’re stuck
- We’re here to help you succeed
Why This Matters
Contributing to GeoServer isn’t just about writing code - it’s about joining a global community of developers working on critical geospatial infrastructure. Your contributions help:
- Organizations worldwide: GeoServer powers mapping applications for governments, NGOs, and businesses
- Open source ecosystem: Your work benefits the entire geospatial community
- Your career: Open source contributions demonstrate real-world skills to employers
- Future contributors: Your improvements make it easier for the next generation
The DevDocker environment removes technical barriers so you can focus on what matters: learning, contributing, and growing as a developer.
The Kaizen Philosophy
We follow the Japanese Kaizen philosophy of continuous, incremental improvement. You don’t need to make massive contributions to have impact. Start small, build trust, and grow your involvement over time.
The Journey:
- Start with documentation - Fix a typo, clarify a confusing section, add an example
- Build familiarity - As you read the docs, you’ll understand the architecture better
- Tackle small bugs - Fix issues you encounter while learning the system
- Contribute features - Once you understand the patterns, add new capabilities
- Volunteer for the unglamorous work - Take on the big, scary, audacious tasks that no one wants to touch - the dirty behind-the-scenes work that keeps projects healthy but rarely gets celebrated
- Mentor others - Share what you’ve learned to help the next generation of contributors
This path mirrors Peter Smythe’s journey from FOSS4G Tanzania 2018 to GeoServer PSC member. It starts with curiosity and grows through consistent, quality contributions.
Welcome to the GeoServer community. We’re excited to see what you’ll build.
Resources
- DevDocker Docker Hub: https://hub.docker.com/r/geoguruafrica/devdocker
- DevDocker GitHub: https://github.com/geoguru-africa/DevDocker
- GeoServer Developer Guide: https://docs.geoserver.org/latest/en/developer/
- GeoServer GitHub: https://github.com/geoserver/geoserver
How to Get Mentored
Ready to start your GeoServer contribution journey? We’re here to guide you.
Contact us: info@geoguru.africa
Tell us about your background, what you want to learn, and how much time you can commit. We’ll match you with resources, suggest starting points, and provide ongoing support as you grow your skills.
Mentorship is free. Our goal is to build a stronger, more diverse GeoServer community by removing barriers and bringing knowledge to developers across Africa and beyond.