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

这里写自定义目录标题

欢迎使用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博客

相关推荐
Python自动化办公社区10 小时前
《全面解析鸿蒙相关概念:鸿蒙、开源鸿蒙、鸿蒙 Next 有何区别》
华为·开源·harmonyos
说私域11 小时前
多级体验体系构建:基于开源AI智能客服与AI智能名片的S2B2C商城小程序体验升级路径研究
人工智能·小程序·开源·零售
那些免费的砖18 小时前
SQLiteStudio - 免费开源、轻量高效,跨平台的 SQLite 数据库管理工具,代替 Navicat for SQLite
数据库·sqlite·开源
2301_7875528718 小时前
node-DeepResearch开源ai程序用于深入调查查询,继续搜索、阅读网页、推理,直到找到答案
人工智能·开源
struggle202519 小时前
SPEAR开源程序是用于逼真演示 AI 研究的模拟器
人工智能·开源
hvinsion21 小时前
【开源解析】基于PyQt5+Folium的谷歌地图应用开发:从入门到实战
python·qt·开源·地图·谷歌地图·folium·地图引擎
TextIn智能文档云平台1 天前
TextIn OCR Frontend前端开源组件库发布!
大数据·前端·人工智能·计算机视觉·开源·ocr·textin
hvinsion1 天前
【开源工具】跳过网页APP禁止粘贴限制:自动输入键盘模拟工具
python·开源·pynput·粘贴·文本处理·自动输入工具
长安链开源社区2 天前
文档贡献 | 技术文档贡献流程及注意事项(保姆级教程)
开源·web3·区块链