Browse Source

搞定 docker 下使用 chrome

Signed-off-by: 716 <[email protected]>
716 4 years ago
parent
commit
caa284d9dd
8 changed files with 45 additions and 27 deletions
  1. 1 0
      .gitignore
  2. 26 4
      Dockerfile
  3. 0 2
      common/config.go
  4. 0 4
      common/reqParam.go
  5. 0 1
      config.yaml.sample
  6. 5 13
      downloader.go
  7. 0 2
      main.go
  8. 13 1
      sub_supplier/subhd/subhd.go

+ 1 - 0
.gitignore

@@ -11,3 +11,4 @@
 /ChineseSubFinder.exe
 /*.zip
 /*.rar
+/sub_supplier/subhd/Logs/*.log

+ 26 - 4
Dockerfile

@@ -14,11 +14,33 @@ COPY . .
 # 执行编译,-o 指定保存位置和程序编译名称
 RUN go build -ldflags="-s -w" -o /app/chinesesubfinder
 
-FROM alpine:latest
+FROM ubuntu:bionic
+
+RUN ln -s /root/.cache/rod/chromium-869685/chrome-linux/chrome /usr/bin/chrome && \
+    sed -i "s@http://deb.debian.org@http://mirrors.aliyun.com@g" /etc/apt/sources.list && rm -Rf /var/lib/apt/lists/* && \
+    apt-get update && \
+    apt-get install --no-install-recommends -y \
+    # C、C++ 支持库
+    libgcc-6-dev libstdc++6 \
+    # chromium dependencies
+    libnss3 \
+    libxss1 \
+    libasound2 \
+    libxtst6 \
+    libgtk-3-0 \
+    libgbm1 \
+    ca-certificates \
+    # fonts
+    fonts-liberation fonts-noto-color-emoji fonts-noto-cjk \
+    # timezone
+    tzdata \
+    # processs reaper
+    dumb-init \
+    # headful mode support, for example: $ xvfb-run chromium-browser --remote-debugging-port=9222
+    xvfb \
+    # cleanup
+    && rm -rf /var/lib/apt/lists/*
 
-RUN set -eux && sed -i 's/dl-cdn.alpinelinux.org/mirrors.ustc.edu.cn/g' /etc/apk/repositories \
-    && apk update --no-cache \
-    && apk add --no-cache ca-certificates tzdata libc6-compat libgcc libstdc++
 ENV TZ Asia/Shanghai
 
 WORKDIR /app

+ 0 - 2
common/config.go

@@ -7,7 +7,5 @@ type Config struct {
 	DebugMode bool
 	SaveMultiSub bool
 	FoundExistSubFileThanSkip bool
-	UseUnderDocker	bool	// 是否在 docker 下使用
 	MovieFolder string
-
 }

+ 0 - 4
common/reqParam.go

@@ -5,11 +5,7 @@ type ReqParam struct {
 	UserExtList []string	// 用户确认的视频后缀名支持列表
 	SaveMultiSub bool		// 存储每个网站 Top1 的字幕
 	DebugMode bool			// 调试标志位
-
 	FoundExistSubFileThanSkip bool	// 如果视频的目录下面有字幕文件了,就跳过
-	UseUnderDocker	bool	// 是否在 docker 下使用
-
-
 	HttpProxy string		// HttpClient 相关
 	UserAgent string		// HttpClient 相关
 	Referer   string		// HttpClient 相关

+ 0 - 1
config.yaml.sample

@@ -4,5 +4,4 @@ EveryTime: 6h
 DebugMode: false
 SaveMultiSub: false
 FoundExistSubFileThanSkip: true
-UseUnderDocker: true
 MovieFolder: X:\电影

+ 5 - 13
downloader.go

@@ -89,19 +89,11 @@ func (d Downloader) DownloadSub(dir string) error {
 	}
 	// 构建每个字幕站点下载者的实例
 	var subSupplierHub *sub_supplier.SubSupplierHub
-	// 因为在 docker 下 rod 的模拟浏览器点击无效,所以···
-	if d.reqParam.UseUnderDocker == true {
-		subSupplierHub = sub_supplier.NewSubSupplierHub(shooter.NewSupplier(d.reqParam),
-			xunlei.NewSupplier(d.reqParam),
-			zimuku.NewSupplier(d.reqParam),
-		)
-	} else {
-		subSupplierHub = sub_supplier.NewSubSupplierHub(shooter.NewSupplier(d.reqParam),
-			subhd.NewSupplier(d.reqParam),
-			xunlei.NewSupplier(d.reqParam),
-			zimuku.NewSupplier(d.reqParam),
-		)
-	}
+	subSupplierHub = sub_supplier.NewSubSupplierHub(shooter.NewSupplier(d.reqParam),
+		subhd.NewSupplier(d.reqParam),
+		xunlei.NewSupplier(d.reqParam),
+		zimuku.NewSupplier(d.reqParam),
+	)
 
 	// TODO 后续再改为每个视频以上的流程都是一个 channel 来做,并且需要控制在一个并发量之下(很可能没必要,毕竟要在弱鸡机器上挂机用的)
 	// 一个视频文件同时多个站点查询,阻塞完毕后,在进行下一个

+ 0 - 2
main.go

@@ -50,8 +50,6 @@ func main() {
 		DebugMode: config.DebugMode,
 		SaveMultiSub: config.SaveMultiSub,
 		FoundExistSubFileThanSkip: config.FoundExistSubFileThanSkip,
-
-		UseUnderDocker: config.UseUnderDocker,
 		})
 	//任务还没执行完,下一次执行时间到来,下一次执行就跳过不执行
 	c := cron.New(cron.WithChain(cron.SkipIfStillRunning(cron.DefaultLogger)))

+ 13 - 1
sub_supplier/subhd/subhd.go

@@ -26,7 +26,7 @@ type Supplier struct {
 	reqParam    common.ReqParam
 	log         *logrus.Logger
 	topic       int
-	rodlauncher *launcher.Launcher
+	rodLauncher *launcher.Launcher
 }
 
 func NewSupplier(_reqParam ...common.ReqParam) *Supplier {
@@ -47,6 +47,18 @@ func (s Supplier) GetSupplierName() string {
 	return common.SubSiteSubHd
 }
 
+func (s Supplier) GetSubListFromFile4Movie(filePath string) ([]common.SupplierSubInfo, error){
+	return s.GetSubListFromFile(filePath)
+}
+
+func (s Supplier) GetSubListFromFile4Series(seriesPath string) ([]common.SupplierSubInfo, error) {
+	panic("not implemented")
+}
+
+func (s Supplier) GetSubListFromFile4Anime(animePath string) ([]common.SupplierSubInfo, error){
+	panic("not implemented")
+}
+
 func (s Supplier) GetSubListFromFile(filePath string) ([]common.SupplierSubInfo, error) {
 	/*
 		虽然是传入视频文件路径,但是其实需要读取对应的视频文件目录下的