前言
本文主要讲解如何搭建部署简易在线视频网站,大家可以将这个网站作为私人影院或是和朋友一起分享视频资源
系统配置:华为云 2核2G 3M CentOS7.9
华为云服务器控制台:console.huaweicloud.com/smb/
首页展示
安装配置
环境配置
Miniconda
bash
cd
wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/Miniconda3-latest-Linux-x86_64.sh
bash Miniconda3-latest-Linux-x86_64.sh
然后一直回车,直到遇到 是否同意协议? 选择 yes,回车
选择Miniconda3的安装位置,这里选择回车,选择默认的,开始安装
是否初始化,并且会添加环境变量,选择yes,回车
最后刷新环境变量
bash
source ~/.bashrc
Docker
安装
bash
sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
启动
bash
sudo systemctl start docker
sudo docker run hello-world
此命令下载测试映像并在容器中运行它。当容器运行时,它会打印一条确认消息并退出。
MySQL
部署容器(必须挂载数据卷)
bash
docker run -d -p 3306:3306 --name mysql-container -e MYSQL_ROOT_PASSWORD=111111 -v ~/sql:/sql mysql:5.7
进入容器
bash
# 进入容器
docker exec -it mysql-container bash
# 进入 MySQL 命令行
mysql -uroot -p111111
创建 video 数据库
bash
CREATE DATABASE video CHARACTER SET utf8;
注意:删除容器命令 docker rm mysql-container -f
端口开放
我们需要配云置服务器的安全组,放行 8000 端口。
设置 CentOS 防火墙,可以直接关闭防火墙,也可以单独通过端口(比较推荐)
bash
# 关闭
systemctl stop firewalld
# 开启特定端口
firewall-cmd --zone=public --add-port=8000/tcp --permanent
# 关闭特定端口
firewall-cmd --zone=public --remove-port=8000/tcp --permanent
# 查看防火墙端口
firewall-cmd --list-ports
但是需要注意,如果您做了如上配置仍旧无法访问端口,可能是因为华为云针对入规则安全组默认配置有问题(实测 CentOS7.9 有问题),您需要做如下配置(这仅仅是针对于某些系统才需要做的操作,大部分系统不需要)
修改 IPv4 为如下配置
如果您只是想要快速搭建部署项目,不想要了解具体实现细节,可以直接跳转 部署项目(平台可能不支持 MD 目录跳转,请自行跳转到对应目录)
注意:原作者的操作系统是 Windows,如果您想要在 Windows 上部署项目可以直接参考原作者仓库,如果您想要使用 Linux 部署,可以继续向下阅读
功能介绍
注册登录
首页功能
搜索功能
视频功能
现在项目的基本功能介绍已经结束,如果您想要查看更详细的功能介绍可以直接查阅原作者开发文档 :videoproject/doc/开发文档
部署项目
本章节将会实现快速搭建部署项目(Linux),博主 fork 原作者的仓库之后做了一些修改,以适配个人搭建部署需求,同时原作者很多文件不全,除此之外也修复了一些问题
原作者仓库地址:geeeeeeeek/videoproject
博主仓库地址:ReturnTmp/videoproject
拉取项目
可以自行配置 SSH,或是直接下载压缩包再上传
bash
git clone https://github.com/ReturnTmp/videoproject.git
依赖安装
创建环境
bash
# 创建环境
conda create -n videoweb python=3.7
# 激活环境
conda activate videoweb
安装依赖
bash
cd videoproject/
pip install -r requirements.txt
数据库导入
运行容器
bash
docker run -d -p 3306:3306 --name mysql-container -e MYSQL_ROOT_PASSWORD=111111 -v ~/sql:/sql mysql:5.7
创建数据库
bash
# 进入容器
docker exec -it mysql-container bash
mysql -uroot -p111111
CREATE DATABASE video CHARACTER SET utf8;
然后项目根目录下执行如下命令
bash
python manage.py makemigrations users video myadmin comment
python manage.py migrate
再复制项目根目录的 video.sql
到 ~/sql
文件夹下(本步骤仅作记录,实际部署请跳过)
bash
cp video.sql ~/sql/
docker exec -it mysql-container bash
mysql -uroot -p video < /sql/video.sql
但是执行时可能出现问题 Cannot delete or update a parent row: a foreign key constraint fails
,快速方法如下
先禁用外键约束检查,执行 sql 文件之后再开启外键约束检查
bash
# 禁用
SET FOREIGN_KEY_CHECKS=0;
# 开启
SET FOREIGN_KEY_CHECKS=1;
但是其实这并不规范,应该按照约束规范执行
运行项目
bash
python manage.py runserver 0.0.0.0:8000
注意:一定要是配置 0.0.0.0 ,因为默认启动是使用回环地址 127.0.0.1,只能本机访问,导致外部无法访问
配置端口
但是只配置上述后会出现问题 Invalid HTTP_HOST header: '114.116.230.29:8000'. You may need to add '114.116.230.29' to ALLOWED_HOSTS.
我们需要做如下操作,打开 videoproject/settings.py
文件,然后添加如下内容
注意:我已经默认配置通过所有 IP,有需求的可以自行更改
bash
# 需要配置本机IP
ALLOWED_HOSTS = ['45.112.123.59',]
# 或是直接通过所有IP
ALLOWED_HOSTS = ['*',]
访问应用
最后访问视频首页:localhost:8000 (localhost 换成自己的服务器 IP,后文不再赘述)
然后我们点击右上角的登录,然后再点击注册用户,最后注册用户,即可使用(用户名:admin,密码:admin123456)
首页界面
然后访问后台管理页面:localhost:8000/myadmin
首先需要手动把 v_user
表中上面我们注册的 amin 用户 is_staff 和 is_superuser 字段修改为 1
注意:我们提升为 admin 权限之后,可以查看数据、搜索数据。但是暂无编辑和删除数据权限
然后配置 settings.py
,添加如下
bash
CSRF_TRUSTED_ORIGINS = [
'http://localhost:8000',
'http://<your_ip>:8000',
]
CORS_ORIGIN_WHITELIST = [
'http://localhost:8000',
'http://<your_ip>:8000',
]
后台总览
添加视频
首先我们需要添加分类(分类名称为中文会出现问题)
然后上传视频,填写相关信息(这里也是填写中文有问题)
发布成功
其他功能不在此演示,留待各位自行探索
技术解析
其实搭建 视频网站和普通网站,在技术实现方案上有很大的差别,上面这种只是给出的非常简易的实现方式,不能用于生产环境,下面将要详细讲解
注:当然我也只是从自身的角度阐发观点,可能有失偏颇,有熟悉视频网站开发的小伙伴也可以在评论区留言纠正
区别对比
视频网站与普通网站相比具有如下不同:
- 存储数据量不同。用于视频存储、缓存的数据量,一般是 TB 级,需要用合适的技术方法做大数据存储管理,需要有合适的技术方法做好存储设备的高速读写优化。
- 网站带宽使用不同。普通网站有 2Mbp 的出口就可以很好地运行,视频网站一般需要上百兆的出口,当并发量较大时,如超过 1000,则需要千兆的出口。
- 专业视频技术支撑不同。视频技术包括视频转码、切片、截图、元数据提取、流化的技术,存储缓存和读写复用技术,视频播放技术,视频加速技术,多终端适配技术等。
- 网络资源使用优化技术不同。在同样的硬件和网络条件下,如果使用普通网站的技术,通常几十个并发就很卡顿缓慢,而试用专业的流媒体播出技术,可以在数千并发时依然稳定顺畅。
- 技术团队不同。普通网站需要网页设计和前后端开发人员,视频网站则同时需要视频技术开发人员。
搭建细节
主机配置
视频网站的主机,可以使用云主机,也可以使用物理机或虚拟主机。如果是在 互联网运营 ,则建议使用 云主机 。如果在 局域网或专网运行 ,则使用 物理机
主机的配置根据实际的 并发需求 来做,可以按照如下配置:
100 并发: 2 核 CPU,4GB 内存,百兆出口 500 并发: 4 核 CPU,8GB 内存,千兆出口 1000 并发:8 核 CPU,16GB 内存,千兆出口及更大
网络配置
运行在局域网或政务网内的视频服务器,可用的带宽取决于既有的网路方案,例如新的校园网或政务网通常是千兆网络,则可以支撑 1000 以上的并发。
如果是运行在开放的互联网上,采用的是云主机,在选用云主机网络带宽时,不要选用按固定带宽付费,要选择按流量付费,这样会更经济。
在并发量很大时,如超过 500,通常要使用集群或 CDN 技术方案,华为云、阿里云都有视频 CDN 加速技术,可以通过购买流量包来提高并发能力,降低使用费用。
流媒体服务配置
流媒体服务器软件是搭建视频网站平台和各类在线视频应用系统的基础支撑系统,实现将视频存储、视频转码、视频播出、协议复用、终端适配、大并发播出等的工作集中处理,这样您在搭建视频网站时就可以只关注业务细节而不用再去处理与视频相关的诸多技术细节,从而实现提高项目实施效率、降低项目实施风险的目标。
播放器配置
播放器要根据播放终端来选用,对于标准的 H5 网页,如微信页面、公众号内嵌页面、开放互联网上的网站,可使用标准的 video 标签来播放视频。视频文件放到流媒体服务器上后,经转码后输出播出地址,将视频地址赋值给 video 标签即可。
video 标签的布局、控制等细节,参考相关教程就可以,前端工程师和网页美工可以搞定。
尽管 Flash 播放器在很多主流浏览器上已经不再支持使用,但对于一些传统单位,内网的办公机器依然在使用 IE 浏览器,这时候依然需要使用 Flash 播放器,因此在有些情况下还是需要兼容之前版本 IE 的。NTV Media Server G3 提供的集成代码可以做到这一点,实现对各种浏览器的自动兼容,在新型支持 H5 的浏览器上使用 video 标签,在老旧 IE 上依然加载 Flash。
对于 APP 开发,无论是 iOS 还是 Android,都有丰富的播放流媒体视频的组件,可以方便的播放 hls,http-flv 和 rtmp 视频流。
集成对接
如果视频资源量很少,增量也不多,譬如只有几十个资源,则不需要与流媒体服务器做开发集成,只要把流媒体服务器提供过的视频播放地址交给网页制作人员使用即可。
对于业务较为丰富的应用,如视频资源较多,且经常动态增减,则需要有完整的业务平台支撑,需要实现视频资源自动化发布,这个时候需要网站业务平台与流媒体服务器做集成对接。集成过程一般使用流媒体服务器的如下接口: 视频上传接口 -->视频转码接口 -->视频查询接口 -->视频播放接口等。需要实现整个功能自动对接
技术路线
对于运营视频网站,除了需要上述视频技术,还需要其他技术,包括以下:
1)后端技术,即开发业务后台,可使用 Java、PHP 等语言;
2)数据库技术,可以选用 MySQL,MariaDB,MongoDB 等等;
3)前端技术,开发视频展现的网站,需要使用成熟的前端框架来简化开发工作,同时需要美术设计人员来设计漂亮的呈现
4)视频拍摄和编辑,对于要求较高的宣传类、教育类、科研类视频应用,则需要有专业的摄影和视频编辑
参考文章
基于NodeJS Express框架开发的VIP视频网站项目及源码分享 - 知乎 (zhihu.com)
搭建在线视频网站,怎么弄? - 知乎 (zhihu.com)
python - You may need to add u'127.0.0.1' to ALLOWED_HOSTS - Stack Overflow
本文由博客一文多发平台 OpenWrite 发布!