DragonflyDB 作为GoDNS存储 —— 筑梦之路

编写docker-compose.yml文件

bash 复制代码
version: "3"
services: 
  redis:
      image: docker.dragonflydb.io/dragonflydb/dragonfly:latest
      # command: --requirepass=dalong
      ports:
      - 6379:6379
      - 11211:11211
  joke: 
     image: dalongrong/godns:joke
     build: 
      context: ./
      dockerfile: ./Dockerfile-joke
     ports: 
     - "1223:1223"
  godns: 
     image: dalongrong/godns
     build: 
      context: ./
      dockerfile: ./Dockerfile-godns
     ports: 
     - "53:53/udp"
     - "53:53/tcp"

相关Dockerfile文件

1. godns dockerfile

基于golang的supervisord进行管理

bash 复制代码
FROM golang:1.13-alpine AS build-env
WORKDIR /go/src/app
RUN  /bin/sed -i 's,http://dl-cdn.alpinelinux.org,https://mirrors.aliyun.com,g' /etc/apk/repositories
​
ENV  GO111MODULE=on
ENV  GOPROXY=https://goproxy.cn
COPY code/godns/ .
RUN apk update && apk add git \
    && go build
​
FROM alpine:latest
WORKDIR /app
RUN  /bin/sed -i 's,http://dl-cdn.alpinelinux.org,https://mirrors.aliyun.com,g' /etc/apk/repositories
RUN apk update && apk add ca-certificates && rm -rf /var/cache/apk/*
COPY --from=ochinchina/supervisord:latest /usr/local/bin/supervisord /usr/local/bin/supervisord
COPY --from=build-env /go/src/app/godns /app/godns
COPY supervisor-godns.conf /etc/supervisord.conf
COPY godns.conf /etc/godns.conf
​
EXPOSE 53/udp 53 9001
CMD ["/usr/local/bin/supervisord"]

2. joke dockerfile

bash 复制代码
FROM golang:1.13-alpine AS build-env
WORKDIR /go/src/app
RUN  /bin/sed -i 's,http://dl-cdn.alpinelinux.org,https://mirrors.aliyun.com,g' /etc/apk/repositories
ENV  GO111MODULE=on
ENV  GOPROXY=https://goproxy.cn
COPY code/joke/ .
RUN apk update && apk add git \
    && go build
​
FROM alpine:latest
WORKDIR /app
RUN  /bin/sed -i 's,http://dl-cdn.alpinelinux.org,https://mirrors.aliyun.com,g' /etc/apk/repositories
RUN apk update && apk add ca-certificates && rm -rf /var/cache/apk/*
COPY --from=ochinchina/supervisord:latest /usr/local/bin/supervisord /usr/local/bin/supervisord
COPY --from=build-env /go/src/app/joke /app/joke
COPY --from=build-env /go/src/app/static /app/static
COPY --from=build-env /go/src/app/views /app/views
COPY supervisor-joke.conf /etc/supervisord.conf
COPY joke.conf /etc/joke.conf
EXPOSE 1223 9001
CMD ["/usr/local/bin/supervisord"]

3. godns 配置

bash 复制代码
#Toml config file
​
​
Title = "GODNS"
Version = "0.1.2"
Author = "kenshin"
​
Debug = false
​
[server]
host = "0.0.0.0"
port = 53
​
[resolv]
# Domain-specific nameservers configuration, formatting keep compatible with Dnsmasq
# Semicolon separate multiple files.
#server-list-file = "./etc/apple.china.conf;./etc/google.china.conf"
resolv-file = "/etc/resolv.conf"
timeout = 5  # 5 seconds
# The concurrency interval request upstream recursive server
# Match the PR15, https://github.com/kenshinx/godns/pull/15
interval = 200 # 200 milliseconds
​
setedns0 = false #Support for larger UDP DNS responses
​
[redis]
enable = true
host = "redis"
port = 6379
db = 0
password =""
​
[memcache]
servers = ["127.0.0.1:11211"]
​
[log]
stdout = true
level = "INFO"  #DEBUG | INFO |NOTICE | WARN | ERROR  
​
​
​
[cache]
# backend option [memory|memcache|redis]  
backend = "redis"  
expire = 600  # 10 minutes
maxcount = 0 #If set zero. The Sum of cache itmes will be unlimit.
​
[hosts]
#If set false, will not query hosts file and redis hosts record
enable = true
host-file = "/etc/hosts"
redis-enable = true
redis-key = "godns:hosts"
ttl = 600
refresh-interval = 5 # 5 seconds

4. joke 配置

bash 复制代码
#[beego]
appname = Joke
httpaddr = "0.0.0.0"
httpport = 1223
runmode = "dev"
autorender = true
autorecover = true
viewspath = "views"
​
​
#[auth]
#username:password.
#basic_auth = "joke:hello"
​
​
#[redis]
redisaddr = "redis:6379"
redisdb = 0
redispassword = ""
bindkey = "godns:hosts"
​
​
​
#[log]
stdout = true
logfile = "logs/joke.log"
logrorate = true

5. supervidord 配置

bash 复制代码
[program:godns]
command =/app/godns -c /etc/godns.conf
​
[inet_http_server]
port = :9001

参考资料:

GitHub - rongfengliang/godns-joke-learning: godns-joke-learning
GitHub - kenshinx/godns: A fast dns cache server written by go
https://github.com/kenshinx/joke
https://www.cnblogs.com/rongfengliang/p/11498598.html
GitHub - coredns/coredns: CoreDNS is a DNS server that chains plugins

https://www.cnblogs.com/rongfengliang/p/13200197.html

https://www.cnblogs.com/rongfengliang/p/16974556.html

相关推荐
古希腊数通小白(ip在学)3 分钟前
HCIA实现不同vlan间的通信
linux·服务器·网络
半桔17 分钟前
【Linux手册】从接口到管理:Linux文件系统的核心操作指南
android·java·linux·开发语言·面试·系统架构
禁默25 分钟前
Linux Vim 编辑器详解:从入门到进阶(含图示+插件推荐)
linux·vim·excel
许白掰2 小时前
Linux入门篇学习——Linux 工具之 make 工具和 makefile 文件
linux·运维·服务器·前端·学习·编辑器
longze_76 小时前
Ubuntu连接不上网络问题(Network is unreachable)
linux·服务器·ubuntu
Dirschs6 小时前
【Ubuntu22.04安装ROS Noetic】
linux·ubuntu·ros
qianshanxue116 小时前
ubuntu 操作记录
linux
AmosTian9 小时前
【系统与工具】Linux——Linux简介、安装、简单使用
linux·运维·服务器
这我可不懂11 小时前
Python 项目快速部署到 Linux 服务器基础教程
linux·服务器·python
车车不吃香菇12 小时前
java idea 本地debug linux服务
java·linux·intellij-idea