mirror of
https://github.com/yggdrasil-network/yggdrasil-go.git
synced 2025-08-24 16:05:07 +03:00
2.9 KiB
2.9 KiB
Development Environment Setup
This document describes how to set up a development environment for Yggdrasil using Docker and VS Code Dev Containers.
Prerequisites
- Docker installed and running
- VS Code with the "Dev Containers" extension installed
- Git configured with your user information
Option 1: VS Code Dev Containers (Recommended)
- Open this project in VS Code
- When prompted, click "Reopen in Container" or:
- Press
Ctrl+Shift+P
(orCmd+Shift+P
on macOS) - Type "Dev Containers: Reopen in Container"
- Select the option
- Press
VS Code will automatically build the development container and set up the environment with:
- Go 1.23 with all necessary tools
- Language server (gopls)
- Linting (golangci-lint)
- Debugging support (delve)
- Git integration
- Zsh shell with Oh My Zsh
Option 2: Manual Docker Container
If you prefer to use Docker directly:
Using Makefile commands:
# Build and run the development container
make -f Makefile dev
# Or build and run separately
make -f Makefile dev-build
make -f Makefile dev-run
# Get shell access to running container
make -f Makefile dev-shell
# Stop the container
make -f Makefile dev-stop
# Clean up
make -f Makefile dev-clean
Using Docker directly:
# Build the development image
docker build -f Dockerfile -t yggdrasil-dev .
# Run the container
docker run -it --rm \
--name yggdrasil-dev \
-v $(pwd):/workspace \
-v ~/.gitconfig:/home/vscode/.gitconfig:ro \
-p 9000:9000 \
-p 9001:9001 \
-p 9002:9002 \
-p 9003:9003 \
--privileged \
--cap-add=NET_ADMIN \
--device=/dev/net/tun \
yggdrasil-dev
Development Features
The development environment includes:
- Go Tools: gopls, delve debugger, goimports, golangci-lint, staticcheck
- Editor Support: Syntax highlighting, auto-completion, debugging
- Testing: Go test runner and coverage tools
- Networking: Privileged access for network interface testing
- Port Forwarding: Ports 9000-9003 exposed for Yggdrasil services
Building and Testing
Inside the container:
# Build the project
./build
# Run tests
go test ./...
# Generate configuration
./yggdrasil -genconf > yggdrasil.conf
# Run with configuration
./yggdrasil -useconf yggdrasil.conf
Tips
- Your local Git configuration is mounted into the container
- The workspace directory (
/workspace
) is mapped to your local project directory - All changes made to source files are persistent on your host machine
- The container runs as a non-root user (
vscode
) for security - Network capabilities are enabled for testing network-related features
Troubleshooting
- If the container fails to start, ensure Docker has enough resources allocated
- For network-related issues, verify that the container has the necessary privileges
- If Go tools are missing, rebuild the container:
make -f Makefile dev-clean dev-build