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

这里写自定义目录标题

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

相关推荐
ajassi20007 小时前
开源 Arkts 鸿蒙应用 开发(五)控件组成和复杂控件
华为·开源·harmonyos
alex88868 小时前
介绍一款免费MES、开源MES系统、MES源码
java·5g·开源·产品运营·软件构建·制造·源代码管理
TDengine (老段)9 小时前
TDengine 集群超能力:超越 InfluxDB 的水平扩展与开源优势
大数据·数据库·开源·时序数据库·iot·tdengine·涛思数据
说私域15 小时前
社群经济视阈下开源AI智能名片链动2+1模式与S2B2C商城小程序在私域电商中的融合应用研究
人工智能·小程序·开源·零售
风之旅人17 小时前
开发必备"节假日接口"
java·后端·开源
说私域19 小时前
利益驱动机制下开源AI智能名片链动2+1模式与S2B2C商城小程序的商业协同研究
人工智能·小程序·开源·零售
深圳亥时科技21 小时前
智慧园区系统(源码+文档+讲解+演示)
开源
时序数据说1 天前
时序数据库概念及IoTDB特性详解
大数据·数据库·开源·时序数据库·iotdb
说私域2 天前
开源AI大模型AI智能名片S2B2C商城小程序源码赋能下的“信息找人”:人工智能时代的精准零售场景
大数据·人工智能·小程序·开源·零售
说私域2 天前
定制开发开源AI智能名片S2B2C商城小程序:破解B2B营销四大难题的新路径
人工智能·小程序·开源·零售