当前位置: 首页 > news >正文

zdir3个人网盘dockerfile打包

zdir3是用golang编写的个人网盘,但是最新的zdir4改成收费并且不再开源。

个人感觉zdir3已经够用,但是有几个问题,纯https访问时,列表链接还是返回的https,所以需要自己重新打包成docker,但是源码的dockerfile已经无法打包。

zdir3项目地址:GitHub - helloxz/zdir: A multifunctional private storage program that integrates file indexing, online preview, and sharing, supporting both WebDAV and cloud download.

下载源码后在代码根目录新建Dockerfile,内容如下

# 第一阶段:构建应用
FROM golang:alpine AS builderWORKDIR /app# 设置环境变量
ENV GO111MODULE=on
ENV CGO_ENABLED=0
#ENV GIN_MODE=release# 拷贝 go.mod 和 go.sum 到工作目录
COPY go.mod  ./
COPY go.sum  ./# 下载依赖
RUN go mod download# 拷贝源代码到工作目录
COPY cli ./cli
COPY config ./config
COPY controller ./controller
COPY docker  ./docker
COPY model ./model
COPY router  ./router
COPY sh ./sh
COPY sql ./sql
COPY templates  ./templates
COPY compile.sh ./
COPY config.simple.ini ./
COPY main.go ./
COPY run.xml ./
COPY README.md ./
COPY ./docker/run.sh ./# 安装 upx
RUN apk add --no-cache upx# 构建应用并压缩
RUN go build -ldflags "-s -w" -o zdir main.go# 第二阶段:创建最小化运行时镜像
FROM alpine:3.16# 设置环境变量
ENV GIN_MODE=release# 安装时区
RUN apk add --no-cache tzdataWORKDIR /data/apps/zdir# 从构建阶段复制可执行文件和资源文件夹
COPY --from=builder /app/zdir .
COPY --from=builder /app/README.md .
COPY --from=builder /app/sh ./sh
COPY --from=builder /app/templates ./templates
COPY --from=builder /app/sql ./sql
COPY --from=builder /app/run.sh ./RUN cp run.sh /usr/sbin/run.sh && chmod +x /usr/sbin/run.shEXPOSE 6080
CMD ["/usr/sbin/run.sh"]

使用下面的命令打包

docker build -t my-zdir3 .

这个代码打包后跟作者提供的3.2.0的docker不一样,控制台没有输出日志.

找到代码router/router.go,删除或者注释掉下面的内容

f, _ := os.Create("logs/zdir.log")gin.DefaultWriter = io.MultiWriter(f)//日志同时输出到控制台gin.DefaultWriter = io.MultiWriter(f, os.Stdout)

这样打包就能输出控制台日志了。

我们还需要兼容https

找到代码config/ini_config.go的Public_domain函数,替换为下面的内容

func Public_domain(c *gin.Context) string {// 获取请求hosthost := c.Request.Host// 从请求中获取当前协议(http 或 https)scheme := "http"if c.Request.URL.Scheme == "https" || c.GetHeader("X-Forwarded-Proto") == "https" {scheme = "https"}// 载入配置文件,通过cfg调用domain := viper.GetString("storages.public_domain")// 如果公共存储域名为空,则构造默认值if domain == "" {domain = scheme + "://" + host + "/public"}return domain
}

若有nginx,则检查nginx配置是否设置了 proxy_set_header X-Forwarded-Proto $scheme;没有则忽略此步骤

一个典型的nginx配置如下

server {#listen       80;#listen  [::]:80;listen  443 ssl;server_name  zdir.example.com;client_max_body_size 500M;ssl_certificate   /etc/letsencrypt/cert/example.com/fullchain.pem;ssl_certificate_key  /etc/letsencrypt/cert/example.com/privkey.pem;location =/robots.txt {default_type text/html;add_header Content-Type "text/plain; charset=UTF-8";return 200 "User-Agent: *\nDisallow: /";}location / {if ($block_ip) {return 403;  # 返回 403 Forbidden}proxy_pass http://zdir:80;proxy_set_header Host $host;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-Proto $scheme;}
}

相关文章:

  • 深入解析:如何基于开源p-net快速开发Profinet从站服务
  • C# WinForm DataGridView 非常频繁地更新或重新绘制慢问题及解决
  • WPF 性能 UI 虚拟化 软件开发人员的思考
  • gvm安装go报错ERROR: Failed to use installed version
  • C++GO语言微服务之用户信息处理
  • 深圳SMT贴片加工厂制造流程解析
  • 4.分布式锁
  • Pale Moon:速度优化的Firefox定制浏览器
  • vue访问后端接口,实现用户注册
  • 【金仓数据库征文】_金仓数据库在金融行业的两地三中心容灾架构实践
  • Linux 内核链表宏的详细解释
  • 前端开发实战:用React Hooks优化你的组件性能
  • 缓存理论到实战:技术选型与七层架构设计
  • Windows 系统 - Trae 内 终端 无法使用 node (重新配置 nodejs 路径)
  • RT-Thread 深入系列 Part 7:RT-Thread vs 其他 RTOS 对比与选型指南
  • 图像处理篇---opencv实现坐姿检测
  • Kotlin高阶函数多态场景条件判断与子逻辑
  • 腾讯多模态定制化视频生成框架:HunyuanCustom
  • C语言的中断 vs Java/Kotlin的异常:底层机制与高级抽象的对比
  • android HashMap和List该如何选择
  • 想象力网站建设/广州百度推广排名优化
  • 做个人博客的网站/网络营销与直播电商专业介绍
  • 网站 wordpress/搜索网站排行
  • 潍坊做网站维护费用/市场推广渠道有哪些
  • 哪个网站上可以做代打/营销和运营的区别是什么
  • 美观网站建设价格/软文广告营销