mirror of
https://github.com/yggdrasil-network/yggdrasil-go.git
synced 2025-08-25 00:15:06 +03:00
112 lines
No EOL
2.9 KiB
Markdown
112 lines
No EOL
2.9 KiB
Markdown
# 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)
|
|
|
|
1. Open this project in VS Code
|
|
2. When prompted, click "Reopen in Container" or:
|
|
- Press `Ctrl+Shift+P` (or `Cmd+Shift+P` on macOS)
|
|
- Type "Dev Containers: Reopen in Container"
|
|
- Select the option
|
|
|
|
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:
|
|
|
|
```bash
|
|
# 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:
|
|
|
|
```bash
|
|
# 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:
|
|
|
|
```bash
|
|
# Build the project
|
|
./build
|
|
|
|
# Run tests
|
|
go test ./...
|
|
|
|
# Generate configuration
|
|
./yggdrasil -genconf > yggdrasil.conf
|
|
|
|
# Run with configuration
|
|
./yggdrasil -useconf yggdrasil.conf
|
|
```
|
|
|
|
## Tips
|
|
|
|
1. Your local Git configuration is mounted into the container
|
|
2. The workspace directory (`/workspace`) is mapped to your local project directory
|
|
3. All changes made to source files are persistent on your host machine
|
|
4. The container runs as a non-root user (`vscode`) for security
|
|
5. 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` |