PLC Directory over DNS (experiment)

docker compose, makefile

+61
Makefile
··· 1 + # Makefile 2 + .PHONY: build run test docker-build docker-run docker-stop clean help 3 + 4 + APP_NAME=plcdns 5 + DOCKER_IMAGE=$(APP_NAME):latest 6 + DOCKER_CONTAINER=$(APP_NAME) 7 + 8 + help: ## Show this help message 9 + @echo 'Usage: make [target]' 10 + @echo '' 11 + @echo 'Available targets:' 12 + @awk 'BEGIN {FS = ":.*?## "} /^[a-zA-Z_-]+:.*?## / {printf " %-15s %s\n", $$1, $$2}' $(MAKEFILE_LIST) 13 + 14 + build: ## Build the Go binary 15 + go build -o $(APP_NAME) . 16 + 17 + run: ## Run the application locally 18 + go run . -port 8053 19 + 20 + test: ## Run tests 21 + go test -v -race -cover ./... 22 + 23 + test-coverage: ## Run tests with coverage report 24 + go test -v -race -coverprofile=coverage.out ./... 25 + go tool cover -html=coverage.out -o coverage.html 26 + @echo "Coverage report generated: coverage.html" 27 + 28 + docker-build: ## Build Docker image 29 + docker build -t $(DOCKER_IMAGE) . 30 + 31 + docker-run: ## Run Docker container (port 8053) 32 + docker-compose up -d 33 + 34 + docker-run-prod: ## Run Docker container on port 53 35 + docker-compose -f docker-compose.prod.yml up -d 36 + 37 + docker-stop: ## Stop Docker container 38 + docker-compose down 39 + 40 + docker-logs: ## Show Docker container logs 41 + docker-compose logs -f 42 + 43 + docker-shell: ## Open shell in running container 44 + docker exec -it $(DOCKER_CONTAINER) sh 45 + 46 + clean: ## Clean build artifacts 47 + rm -f $(APP_NAME) 48 + rm -f coverage.out coverage.html 49 + go clean 50 + 51 + fmt: ## Format code 52 + go fmt ./... 53 + 54 + lint: ## Run linter 55 + golangci-lint run 56 + 57 + deps: ## Download dependencies 58 + go mod download 59 + go mod tidy 60 + 61 + .DEFAULT_GOAL := help
+34
docker-compose.prod.yml
··· 1 + version: '3.8' 2 + 3 + services: 4 + plcdns: 5 + build: 6 + context: . 7 + dockerfile: Dockerfile 8 + container_name: plcdns 9 + ports: 10 + - "53:53/udp" 11 + - "53:53/tcp" 12 + environment: 13 + - DNS_PORT=53 14 + - TZ=UTC 15 + restart: unless-stopped 16 + cap_add: 17 + - NET_BIND_SERVICE 18 + networks: 19 + - plcdns-network 20 + logging: 21 + driver: "json-file" 22 + options: 23 + max-size: "10m" 24 + max-file: "3" 25 + healthcheck: 26 + test: ["CMD", "true"] 27 + interval: 30s 28 + timeout: 10s 29 + retries: 3 30 + start_period: 40s 31 + 32 + networks: 33 + plcdns-network: 34 + driver: bridge
+34
docker-compose.yml
··· 1 + version: '3.8' 2 + 3 + services: 4 + plcdns: 5 + build: 6 + context: . 7 + dockerfile: Dockerfile 8 + container_name: plcdns 9 + ports: 10 + - "8053:8053/udp" 11 + - "8053:8053/tcp" 12 + environment: 13 + - DNS_PORT=8053 14 + - TZ=UTC 15 + restart: unless-stopped 16 + networks: 17 + - plcdns-network 18 + # For logging 19 + logging: 20 + driver: "json-file" 21 + options: 22 + max-size: "10m" 23 + max-file: "3" 24 + # Health check 25 + healthcheck: 26 + test: ["CMD", "true"] 27 + interval: 30s 28 + timeout: 10s 29 + retries: 3 30 + start_period: 40s 31 + 32 + networks: 33 + plcdns-network: 34 + driver: bridge