一个开源的多播放源自动采集在线影视网站

这里写自定义目录标题

欢迎使用Markdown编辑器

GoFilm

一个基于 vue 和 gin 实现的在线观影网站

简介

GoFilm

项目采用vite + vue作为前端技术栈, 使用 ElementPlus 作为UI 框架进行开发

后端程序使用 Gin + gorm + go-redis 等相关框架提供接口服务, 使用 gocolly 和 robfig/cron 进行公共影视资源采集和定时更新功能

项目部署

部署方式

1、前置环境准备

  • linux 服务器
  • 下载 GoFilm 项目

修改默认信息 ( 直接使用默认配置则跳过此步骤 )

###容器默认启动端口,默认账户密码配置

复制代码
# 文件路径: GoFilm/film/docker-compose.yml
# nginx 容器配置
ports:
- port:80 # port 为浏览器访问的默认端口
# film 容器配置
environment:	# 环境变量,暂未使用
  MYSQL_PORT: 3661	# mysql 服务连接端口
  MYSQL_USER: root	# mysql 连接用户
  MYSQL_PASSWORD: root # mysql 连接用户的密码
  MYSQL_DBNAME: FilmSite # 默认使用的 mysql 数据库名称
  REDIS_PORT: 3662	# redis 服务连接端口
ports:
  - port:3601 # port 为 go 服务端的默认访问端口
# mysql 容器配置
ports:
- port:3306	# port 为 mysql 服务的外部访问端口
environment:
  MYSQL_ROOT_PASSWORD: 默认密码	# 修改 Mysql 的 root 用户的默认密码
  MYSQL_DATABASE: 数据库名 # 默认创建的数据库名称
# redis 容器配置
ports:
  - prot:6379 # port 为 redis 服务的外部访问端口

1.2 redis 配置

复制代码
# 文件路径 Gofilm/film/data/redis/redis.conf
daemonize no
requirepass 密码 # 设置 redis 服务的访问密码
appendonly no
tcp-keepalive 300 
stop-writes-on-bgsave-error no

film-api 后端服务配置

复制代码
# 文件路径 GoFilm/film/server/config/DataConfig.go
# mysql 服务配置信息 设置 mysql 的 root 用户密码和数据库名为 docker-compose.yml 中对应的信息
MysqlDsn = "root:密码@(mysql:3306)/数据库名称?charset=utf8mb4&parseTime=True&loc=Local"
# Redis 连接信息,设置 redis 访问密码为 Gofilm/film/data/redis/redis.conf 中的密码
RedisPassword = `root`

将 GoFilm 项目根目录下的 film 文件夹上传到 linux 服务器的 /opt 目录下

上传完成后路径为: /opt/film (只上传 GoFilm 项目中的 film 文件夹)

效果如下图所示

2. 构建运行

1. docker 部署

1.1 安装 docker , docker compose 环境

Centos 安装 Docker Engine 官方文档链接

Ubuntu 安装 Docker Engine 官方文档链接

复制代码
# Centos 系统安装 Docker Engine 示例
# 1. 卸载旧版本 Docker


sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine

进入项目部署文件目录 /opt/film

复制代码
执行命令 cd /opt/film 进入项目目录

执行构建并运行容器

复制代码
执行命令 docker compose up -d 构建拉取相关镜像并启动

等待容器构建并启动,启动完毕后可通过 docker compose ps 查看容器是否均正常启动

docker compose 相关命令

复制代码
docker compose ps 查看已启动的相关容器, docker compose ps -a 查看所有相关容器
docker compose start 启动相关服务容器
docker compose restart 重启相关服务容器
docker compose up -d 以后台服务的方式构建并启动相关服务
docker compose down 删除相关服务容器及关联资源

注意事项:

复制代码
docker compose 系列命令需在 docker-compose.yml 文件目录下执行
在其他路径下执行需使用 -f /opt/film/docker-compose.yml 指定关联的文件路径
server 相关文件改变后,需使用 docker rmi 容器名|ID 删除 film-film 镜像

2、 1panel 部署

安装 1Panel

登录 1Panel 管理面板

启动容器

依次点击 容器 --> 编排 ---> 创建编排

  • 选择 来源 --> 路径选择,输入 GoFilm 安装文件的存放路径 /opt/film/docker-compose.yml
  • 等待编排完成,关闭编排添加页,点击 容器 查看容器启动状态

3. 程序初始化

3.1. 管理后台

登录项目管理后台

访问路径: http://服务器IP:3600/manage

默认账户密码: admin admin

采集设置初始化

  • 点击左侧菜单,采集管理 --> 影视采集,选择启用默认采集站点或自行添加站点信息

  • 启用需要采集的站点,将对应站点的是否启用状态设置为启用

  • 选择主站点 (必要), 在需要设置的站点操作栏点击蓝色编辑按钮,设置站点权重为主站点

  • 点击一键采集,选择需要执行采集的站点,设置采集时长为 - 1 (采集全部), 点击确认执行

  • 等待采集完成 (手动采集一次即可,后续无需重复手动采集)

影视分类初始化

  • 点击左侧菜单,影片管理 --> 影视分类,对需要展示和隐藏的分类进行设置 (用于网站顶部导航以及首页数据展示)
  • 点击对应的分类操作栏对分类名称等默认信息进行修改

影片定时更新

  • 点击左侧菜单,定时任务 --> 任务管理,选择启用默认的定时任务 (默认每 20 分钟采集一次最新 6 小时内更新的影片)
  • 自定义定时任务:
  • 任务类型 (自动更新), 指定周期内对所有已启用的采集站点进行更新采集
  • 任务类型 (自定义更新), 指定周期内仅对选中的站点进行更新采集

3.2. 网站首页

管理后台进行相关设置并完成主站点采集后,访问首页地址: http://服务器IP:3600/index

首页访问提示导航数据获取失败或服务器繁忙,请等待数据采集完成后,重新访问

4. 常见问题

CPU 架构为 ARM 的服务器部署时 需修改Dockerfile 文件中的 GOARCH=amd64 为 GOARCH=arm

服务器内存偏小时, 可能自行将redis容器关闭, 需在宿主机 /etc/sysctl.conf 文件中追加 vm.overcommit_memory = 1 配置, 并执行 sysctl vm.overcommit_memory=1 使其生效

5. 管理后台基本使用说明

访问 http://xxx.xxx.xxx/manage 进行登录, 用户名 密码: admin admin , 登录成功后自行修改

使用 采集管理 -> 影视采集 功能进行采集站信息的添加和更新, 系统初始化时有预留站点信息, 自行斟酌选择

首先选择一个站点为主站点, 然后选择 采集一周, 一天, 或 全部, 进行主站点的数据采集, (前台数据全来自于主站点, 因此主站点只需要存在一个, 否则会冲突)

主站点信息采集完成后则可在 影片管理 -> 影视分类 中进行主页分类展示信息的设置, 选择需要展示的分类信息, 以及分类的名称管理 (自行摸索如何使用)

附属站点即影片的多个播放来源, 可自行进行选择性的采集添加

定时任务:

系统默认添加一条规则, 但未启用, 该规则为每20分钟更新一次所有已开启的采集站的近3小时内更新的数据, 开启后则基本满足资源更新需求

可自定义定时任务, 使用相关功能可自主选择对某些站点进行定时更新功能

1Panel部署(可视化面板操作)

使用指南

  • 后端项目路径 GoFilm/server, 包含 项目结构说明, 后端程序源码, API接口说明, 本地启动注意事项 查看
  • 前端项目路径 GoFilm/client, 包含 项目结构说明, 前端项目源码, 配置文件说明, 本地启动方式 [查看]/GoFilm/tree/main/client)
  • 部署文件 GoFilm/film, 包含项目部署所需的所有文件以及相应的说明文件 查看
  • 程序使用文档: 提供项目安装部署以及相应的初始化使用步骤说明 点击前往

环境准备 (Docker)

Linux 服务器

安装 docker, docker compose 服务

Centos 安装 Docker Engine 官方文档链接

Ubuntu 安装 Docker Engine 官方文档链接

Centos 系统安装Docker Engine示例

1. 1卸载旧版本Docker

复制代码
sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine

1.2. 设置存储库

复制代码
sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

1.3. 安装最新版本Docker

复制代码
$ sudo yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

启动 Docker 服务

复制代码
sudo systemctl start docker

2. 启动流程

如果使用默认配置信息,则执行如下流程

将本项目中的 film 文件夹完整的上传到服务器的 /opt/ 目录下 (放在其他目录下时需同步修改 Dockerfile 以及 docker-compose.yml 文件中的相关路径)

进入服务器中的 /opt/film/ 目录并执行 docker compose build 构建相关docker镜像

在 /opt/film/ 目录下执行命令 docker compose up -d (后台运行服务)

使用 docker ps 命令查看相关服务是否成功启动

等待后端程序初始化工作和数据爬取, 大概3~8分钟左右

停止服务 docker compose down

查看服务容器运行状态 docker ps

在浏览器中访问管理后台: http://xxx.xxx.xxx/manage,

登录 默认 用户名 密码: admin admin

使用后台功能中的采集管理功能进行影视数据采集 (采集任务开启后需等待一段时间)

浏览器中访问前台地址查看效果, 例: http://xxx.xxx.xxx/index (点击管理后台的logo菜单可直接跳转到前台页面)

3.服务配置信息修改

film 后端接口服务配置, film/server 下存放了程序的构建文件, 修改后重新构建镜像即可

mysql 用户名密码和端口信息直接修改 docker-compose.yml 文件中的相关配置即可

redis 服务信息配置需修改 /film/data/redis/redis.conf 文件

nginx 配置文件 /film/data/nginx/nginx.conf

注意事项

mysql 和 redis 服务配置修改后需要同步修改 /film/server/config/DataConfig.go 中的连接地址和账户名信息

配置使用的用户名密码信息需和ocker-compose.yml文件中设置的一致

const (

// mysql服务配置信息修改

mysqlDsn = "用户名:密码$@(服务名:服务端口)/FilmSite?charset=utf8mb4&parseTime=True&loc=Local"

复制代码
/*
	redis 配置信息
	RedisAddr host:port
	RedisPassword redis访问密码
	RedisDBNo 使用第几号库
*/
RedisAddr = `服务名:服务端口`
RedisPassword = `密码`
RedisDBNo = 0

)

docker-compose.yml (设置服务的启动端口和服务名以及账户密码信息)

复制代码
mysql:
    container_name: film_mysql
    image: mysql
    ports:
    - 3610:3306
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: FilmSite
 redis:
    container_name: film_redis
    image: redis
    ports:
      - 3620:6379

3. 常见问题

CPU 架构为 ARM 的服务器部署时 需修改Dockerfile 文件中的 GOARCH=amd64 为 GOARCH=arm

服务器内存偏小时, 可能自行将redis容器关闭, 需在宿主机 /etc/sysctl.conf 文件中追加 vm.overcommit_memory = 1 配置, 并执行 sysctl vm.overcommit_memory=1 使其生效

5. 管理后台基本使用说明

访问 http://xxx.xxx.xxx/manage 进行登录, 用户名 密码: admin admin , 登录成功后自行修改

使用 采集管理 -> 影视采集 功能进行采集站信息的添加和更新, 系统初始化时有预留站点信息, 自行斟酌选择

首先选择一个站点为主站点, 然后选择 采集一周, 一天, 或 全部, 进行主站点的数据采集, (前台数据全来自于主站点, 因此主站点只需要存在一个, 否则会冲突)

主站点信息采集完成后则可在 影片管理 -> 影视分类 中进行主页分类展示信息的设置, 选择需要展示的分类信息, 以及分类的名称管理 (自行摸索如何使用)

附属站点即影片的多个播放来源, 可自行进行选择性的采集添加

定时任务:

系统默认添加一条规则, 但未启用, 该规则为每20分钟更新一次所有已开启的采集站的近3小时内更新的数据, 开启后则基本满足资源更新需求

可自定义定时任务, 使用相关功能可自主选择对某些站点进行定时更新功能

目录结构

text 复制代码
GoFilm-main                            
├─ client                              
│  ├─ public                           
│  │  └─ favicon.ico                   
│  ├─ src                              
│  │  ├─ assets                        
│  │  │  ├─ css                        
│  │  │  │  ├─ classify.css            
│  │  │  │  ├─ film.css                
│  │  │  │  └─ pagination.css          
│  │  │  └─ image                      
│  │  │     ├─ 404.png                 
│  │  │     └─ play.png                
│  │  ├─ components                    
│  │  │  ├─ Loading                    
│  │  │  │  ├─ index.ts                
│  │  │  │  └─ Loading.vue             
│  │  │  ├─ FilmList.vue               
│  │  │  ├─ Footer.vue                 
│  │  │  ├─ Header.vue                 
│  │  │  ├─ RelateList.vue             
│  │  │  └─ Util.vue                   
│  │  ├─ router                        
│  │  │  └─ router.ts                  
│  │  ├─ utils                         
│  │  │  ├─ cookie.ts                  
│  │  │  └─ request.ts                 
│  │  ├─ views                         
│  │  │  ├─ error                      
│  │  │  │  └─ Error404.vue            
│  │  │  ├─ index                      
│  │  │  │  ├─ FilmClassify.vue        
│  │  │  │  ├─ FilmClassifySearch.vue  
│  │  │  │  ├─ FilmDetails.vue         
│  │  │  │  ├─ Home.vue                
│  │  │  │  ├─ Play.vue                
│  │  │  │  └─ SearchFilm.vue          
│  │  │  └─ IndexHome.vue              
│  │  ├─ App.vue                       
│  │  ├─ main.ts                       
│  │  ├─ style.css                     
│  │  └─ vite-env.d.ts                 
│  ├─ auto-imports.d.ts                
│  ├─ components.d.ts                  
│  ├─ index.html                       
│  ├─ package.json                     
│  ├─ README.md                        
│  ├─ tsconfig.json                    
│  ├─ tsconfig.node.json               
│  └─ vite.config.ts                   
├─ film                                
│  ├─ data                             
│  │  ├─ nginx                         
│  │  │  ├─ html                       
│  │  │  │  ├─ assets                  
│  │  │  │  │  ├─ 404-b813c94a.png     
│  │  │  │  │  ├─ index-984712d6.js    
│  │  │  │  │  ├─ index-de4c7ff5.css   
│  │  │  │  │  └─ play-bb9c8990.png    
│  │  │  │  ├─ favicon.ico             
│  │  │  │  └─ index.html              
│  │  │  └─ nginx.conf                 
│  │  └─ redis                         
│  │     └─ redis.conf                 
│  ├─ server                           
│  │  ├─ config                        
│  │  │  └─ DataConfig.go              
│  │  ├─ controller                    
│  │  │  ├─ IndexController.go         
│  │  │  └─ SpiderController.go        
│  │  ├─ logic                         
│  │  │  ├─ IndexLogic.go              
│  │  │  └─ SpiderLogic.go             
│  │  ├─ model                         
│  │  │  ├─ Categories.go              
│  │  │  ├─ Movies.go                  
│  │  │  ├─ RequestParams.go           
│  │  │  ├─ ResponseJson.go            
│  │  │  └─ Search.go                  
│  │  ├─ plugin                        
│  │  │  ├─ common                     
│  │  │  │  ├─ dp                      
│  │  │  │  │  ├─ ProcessCategory.go   
│  │  │  │  │  └─ ProcessMovies.go     
│  │  │  │  └─ param                   
│  │  │  │     └─ SimpleParam.go       
│  │  │  ├─ db                         
│  │  │  │  ├─ mysql.go                
│  │  │  │  └─ redis.go                
│  │  │  └─ spider                     
│  │  │     ├─ Spider.go               
│  │  │     ├─ SpiderCron.go           
│  │  │     └─ SpiderRequest.go        
│  │  ├─ router                        
│  │  │  └─ router.go                  
│  │  ├─ go.mod                        
│  │  ├─ go.sum                        
│  │  ├─ main.go                       
│  │  └─ README.md                     
│  ├─ docker-compose.yml               
│  ├─ Dockerfile                       
│  └─ README.md                        
├─ server                              
│  ├─ config                           
│  │  └─ DataConfig.go                 
│  ├─ controller                       
│  │  ├─ IndexController.go            
│  │  └─ SpiderController.go           
│  ├─ logic                            
│  │  ├─ IndexLogic.go                 
│  │  └─ SpiderLogic.go                
│  ├─ model                            
│  │  ├─ Categories.go                 
│  │  ├─ Movies.go                     
│  │  ├─ RequestParams.go              
│  │  ├─ ResponseJson.go               
│  │  └─ Search.go                     
│  ├─ plugin                           
│  │  ├─ common                        
│  │  │  ├─ dp                         
│  │  │  │  ├─ ProcessCategory.go      
│  │  │  │  └─ ProcessMovies.go        
│  │  │  ├─ param                      
│  │  │  │  └─ SimpleParam.go          
│  │  │  └─ util                       
│  │  │     ├─ FileDownload.go         
│  │  │     └─ Request.go              
│  │  ├─ db                            
│  │  │  ├─ mysql.go                   
│  │  │  └─ redis.go                   
│  │  └─ spider                        
│  │     ├─ Spider.go                  
│  │     └─ SpiderCron.go              
│  ├─ router                           
│  │  └─ router.go                     
│  ├─ go.mod                           
│  ├─ go.sum                           
│  ├─ main.go                          
│  └─ README.md                        
├─ LICENSE                             
└─ README.md                           

【更新汇总】

关注我的CSDN博客

更多资源可以查看我的CSDN博客

相关推荐
DisonTangor28 分钟前
小红书开源dots.ocr:单一视觉语言模型中的多语言文档布局解析
语言模型·开源·ocr
zkmall2 小时前
电商系统定制开发流程:ZKmall开源商城需求分析到上线全程可控
开源·需求分析
IvorySQL8 小时前
PGSQL运维优化:提升vacuum执行时间观测能力
运维·postgresql·开源·开源数据库·ivorysql
呼啸长风11 小时前
记一次未成功的 MMKV Pull Request
android·ios·开源
草梅友仁13 小时前
草梅 Auth 1.2.0 发布与最新动态 | 2025 年第 31 周草梅周报
开源·github·ai编程
胡琦博客16 小时前
LLM Prompt与开源模型资源(3)如何写一个好的 Prompt
数据库·开源·prompt
棱镜七彩19 小时前
【网安播报】Lazarus Group 利用开源包展开长期供应链间谍战
开源
花果山总钻风20 小时前
开源在线客服系统Chatwoot配置文件
开源
猫头虎1 天前
新手小白如何快速检测IP 的好坏?
网络·人工智能·网络协议·tcp/ip·开源·github·php
十三浪1 天前
开源框架推荐:API数据批处理与爬虫集成
爬虫·开源