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