+61
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
+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
+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