静看光阴荏苒
不管不顾不问不说也不念

MediaCMS:功能齐全的开源视频CMS

MediaCMS是一个最近才开源的项目,目前作者还在不断更新和完善功能中。不过就目前而言这款程序的功能已经非常强大了,用来建一个小视频站完全没有问题。

我比较喜欢它的前端,可以说是高仿的Youtube,另外还支持HLS视频流。官方的演示站点:https://demo.mediacms.io/

由于这个项目是用Python+Django开发的,部署起来比较麻烦,官方目前也没有手动部署的文档,只有一个支持Ubuntu的安装脚本。

所以这里我先水一篇用Debian10手动部署的文章,未来官方应该会有Docker支持,到时候用Docker应该会省事很多。

安装所有需要用到的软件包:

apt -y update
apt -y dist-upgrade
apt -y install sudo wget git unzip build-essential 
apt -y install nginx python3-certbot-nginx python3-dev python3-pip python3-venv ffmpeg imagemagick postgresql redis-server

启动并设置nginx/postgresql/redis开机自启:

systemctl enable --now nginx postgresql redis-server

创建一个postgresql用户和数据库:

sudo -u postgres createuser -P mediacms
sudo -u postgres createdb -O mediacms mediacmsdb

拉取项目代码:

cd /opt
git clone https://github.com/mediacms-io/mediacms.git
cd mediacms

创建并启用python虚拟环境:

python3 -m venv mediacms.io
source mediacms.io/bin/activate

安装依赖:

pip install wheel
pip install -r requirements.txt

要支持HLS视频流,这里还需要装一个Bento4:

wget http://zebulon.bok.net/Bento4/binaries/Bento4-SDK-1-6-0-632.x86_64-unknown-linux.zip
unzip Bento4-SDK-1-6-0-632.x86_64-unknown-linux.zip
mkdir /opt/mediacms/media_files/hls

创建两个目录,一个用于存放日志文件,一个用于存放pid文件:

mkdir logs
mkdir pids

编辑默认的配置文件:

nano cms/settings.py

[可选]如果你不想直接改动这个默认的配置文件,可以新建一个local_settings.py来覆盖默认的配置:

nano cms/local_settings.py

这里可以改动的配置很多,我只说一下几个必须要改动的配置:

# 站点名字
PORTAL_NAME = "imlala"

# 时区设置
TIME_ZONE = "Asia/Shanghai"

# 站点域名
FRONTEND_HOST = "http://mediacms.imlala.best"

# 关闭用户注册,防止滥用
USERS_CAN_SELF_REGISTER = False

# 站点密钥,自己设置复杂一点
SECRET_KEY = "3dci5kog8k=5n37$fz)8dft)kg(s5&12)^xa*jv(bk+nv-z&cu"

# Bento4二进制文件的绝对路径
MP4HLS_COMMAND = (
    "/opt/mediacms/Bento4-SDK-1-6-0-632.x86_64-unknown-linux/bin/mp4hls"
)

# 数据库连接信息
DATABASES = {
    "default": {
        "ENGINE": "django.db.backends.postgresql",
        "NAME": "mediacmsdb",
        "HOST": "127.0.0.1",
        "PORT": "5432",
        "USER": "mediacms",
        "PASSWORD": "password",
    }
}

更多其他的配置,可以参考这里:

https://github.com/mediacms-io/mediacms/blob/main/docs/Configuration.md

初始化数据库/收集静态文件:

python manage.py migrate
python manage.py loaddata fixtures/encoding_profiles.json
python manage.py loaddata fixtures/categories.json
python manage.py collectstatic --noinput

创建管理员账号:

python manage.py createsuperuser

编辑uwsgi配置文件:

nano /opt/mediacms/uwsgi.ini

改为下面的配置:

[uwsgi]
chdir = /opt/mediacms/
virtualenv = /opt/mediacms/mediacms.io
module = cms.wsgi
uid = www-data
gid = www-data
processes = 2
threads = 2
master = true
socket = 127.0.0.1:9000
workers = 2
vacuum  = true
logto = /opt/mediacms/logs/errorlog.txt
disable-logging = true

给予正确的权限:

chown -R www-data:www-data /opt/mediacms

复制systemd配置文件:

cp deploy/celery_long.service /etc/systemd/system/celery_long.service
cp deploy/celery_short.service /etc/systemd/system/celery_short.service
cp deploy/celery_beat.service /etc/systemd/system/celery_beat.service
cp deploy/mediacms.service /etc/systemd/system/mediacms.service

编辑celery_long.service:

nano /etc/systemd/system/celery_long.service

里面相应的配置改为下面列出的:

Environment=APP_DIR="/opt/mediacms"
Environment=CELERY_BIN="/opt/mediacms/mediacms.io/bin/celery"
Environment=CELERYD_PID_FILE="/opt/mediacms/pids/%n.pid"
Environment=CELERYD_LOG_FILE="/opt/mediacms/logs/%N.log"
Environment=APP_DIR="/opt/mediacms"

编辑celery_short.service:

nano /etc/systemd/system/celery_short.service

里面相应的配置改为下面列出的:

Environment=APP_DIR="/opt/mediacms"
Environment=CELERY_BIN="/opt/mediacms/mediacms.io/bin/celery"
Environment=CELERYD_PID_FILE="/opt/mediacms/pids/%n.pid"
Environment=CELERYD_LOG_FILE="/opt/mediacms/logs/%N.log"
Environment=APP_DIR="/opt/mediacms"

编辑celery_beat.service:

nano /etc/systemd/system/celery_beat.service

里面相应的配置改为下面列出的:

Environment=APP_DIR="/opt/mediacms"
Environment=CELERY_BIN="/opt/mediacms/mediacms.io/bin/celery"
Environment=CELERYD_PID_FILE="/opt/mediacms/pids/beat%n.pid"
Environment=CELERYD_LOG_FILE="/opt/mediacms/logs/beat%N.log"
Environment=APP_DIR="/opt/mediacms"

编辑mediacms.service:

nano /etc/systemd/system/mediacms.service

里面相应的配置改为下面列出的:

ExecStart=/opt/mediacms/mediacms.io/bin/uwsgi --ini /opt/mediacms/uwsgi.ini

启动上面所有的服务并设置开机自启:

systemctl enable --now celery_long celery_short celery_beat mediacms

查看运行状态,确保所有服务都是Active的状态:

systemctl status celery_long celery_short celery_beat mediacms

接下来新建nginx站点配置文件:

nano /etc/nginx/conf.d/mediacms.conf

写入如下配置:

server {
    listen 80 ;
    server_name mediacms.imlala.best; # 换成你的域名
    client_max_body_size 0;
    gzip on;
    access_log /var/log/nginx/mediacms.io.access.log;
    error_log  /var/log/nginx/mediacms.io.error.log warn;

    location /static {
        alias /opt/mediacms/static ;
    }

    location /media/original {
        alias /opt/mediacms/media_files/original;
    }

    location /media {
        alias /opt/mediacms/media_files ;
    }

    location / {
        add_header 'Access-Control-Allow-Origin' '*';
        add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
        add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range';
        add_header 'Access-Control-Expose-Headers' 'Content-Length,Content-Range';
        include /etc/nginx/uwsgi_params;
        uwsgi_pass 127.0.0.1:9000;
    }
}

使用certbot签发ssl证书:

certbot --nginx

访问你的域名正常的话应该就能看到程序的首页了:

赞(9)
未经允许不得转载:荒岛 » MediaCMS:功能齐全的开源视频CMS
分享到: 更多 (0)

评论 19

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
  1. #1

    真就高仿

    Daniel3年前 (2021-01-26) Google Chrome 88.0.4324.93 Google Chrome 88.0.4324.93 Android 9 Android 9回复
  2. #2

    大佬,我就两个问题带转码吗?支持中文吗? :idea:

    Foliage3年前 (2021-01-26) Chrome 87.0.4280.77 Chrome 87.0.4280.77 iPhone iOS 14.3 iPhone iOS 14.3回复
    • 有自动转码,目前不支持中文。

      LALA3年前 (2021-01-30) Google Chrome 86.0.4240.198 Google Chrome 86.0.4240.198 Windows 10 x64 Edition Windows 10 x64 Edition回复
      • 可惜要代理才能打的开,PeerTube方便一点,而且带客户端。 :cool:

        Foliage3年前 (2021-01-30) Chrome 87.0.4280.77 Chrome 87.0.4280.77 iPhone iOS 14.3 iPhone iOS 14.3回复
        • 你是说网页里面静态资源调用了Google的那些公共库吧,可以在settings.py里面把LOAD_FROM_CDN改成False就可以让资源从本地加载了。

          LALA3年前 (2021-01-30) Google Chrome 88.0.4324.96 Google Chrome 88.0.4324.96 Windows 10 x64 Edition Windows 10 x64 Edition回复
          • 真的吗?我去试试。 :oops:

            Foliage3年前 (2021-01-30) Google Chrome 88.0.4324.104 Google Chrome 88.0.4324.104 Windows 10 x64 Edition Windows 10 x64 Edition
  3. #3

    请问下支持目标网站定向采集视频吗?还是每部影片都要手动上传?

    阿浪3年前 (2021-02-01) Chrome 87.0.4280.77 Chrome 87.0.4280.77 iPhone iOS 14.3 iPhone iOS 14.3回复
    • 不支持,每部影片都需要手动上传。如果只是采集youtube的视频可以用peertube。

      LALA3年前 (2021-02-02) Google Chrome 88.0.4324.96 Google Chrome 88.0.4324.96 GNU/Linux x64 GNU/Linux x64回复
  4. #4

    good news, Docker support is available. Nice article btw, will include it on https://github.com/mediacms-io/mediacms/wiki/Public-Mentions

    mgogoulos3年前 (2021-02-10) Google Chrome 88.0.4324.96 Google Chrome 88.0.4324.96 GNU/Linux x64 GNU/Linux x64回复
  5. #5

    安装完后上传视频,访问的时候一直显示是Media encoding is pending 是啥原因? :grin:

    李雨3年前 (2021-02-17) Google Chrome 88.0.4324.150 Google Chrome 88.0.4324.150 GNU/Linux x64 GNU/Linux x64回复
  6. #6

    国外的这种视频CMS,都长得一副hub的样子 :razz:

    唐风月3年前 (2021-02-22) Google Chrome 87.0.4280.141 Google Chrome 87.0.4280.141 Windows 10 x64 Edition Windows 10 x64 Edition回复
  7. #7

    很棒啊,非常值得研究的项目啊

    都得3年前 (2021-03-04) Google Chrome 87.0.4280.141 Google Chrome 87.0.4280.141 Windows 10 x64 Edition Windows 10 x64 Edition回复
  8. #8

    支持.ts切片吗?使用m3u8播放。那个下载功能可以禁止或者隐藏吗?不太实用

    都得3年前 (2021-03-04) Google Chrome 87.0.4280.141 Google Chrome 87.0.4280.141 Windows 10 x64 Edition Windows 10 x64 Edition回复
    • 我记得配置文件里面可以关闭下载功能。

      LALA3年前 (2021-03-04) Google Chrome 86.0.4240.198 Google Chrome 86.0.4240.198 Windows 10 x64 Edition Windows 10 x64 Edition回复
  9. #9

    上传视频,访问的时候一直显示是Media encoding is pending 是啥原因?

    都得3年前 (2021-03-05) Google Chrome 87.0.4280.141 Google Chrome 87.0.4280.141 Windows 10 x64 Edition Windows 10 x64 Edition回复
    • 可能视频正在转码中?看看ffmpeg有在运行么。

      LALA3年前 (2021-03-05) Google Chrome 88.0.4324.150 Google Chrome 88.0.4324.150 Windows 10 x64 Edition Windows 10 x64 Edition回复
      • ffmpeg没有运行,使用centos7安装的。重新使用ubuntu,用官方的脚本安装,又是OK的。

        都得3年前 (2021-04-05) Google Chrome 89.0.4389.90 Google Chrome 89.0.4389.90 Windows 10 x64 Edition Windows 10 x64 Edition回复
  10. #10

    大佬这篇文章好像有点问题,第一次做的时候了,昨天心血来潮想再做一次发现很多错误日志 :eek:

    Folliage3年前 (2021-03-08) Google Chrome 88.0.4324.104 Google Chrome 88.0.4324.104 Windows 10 x64 Edition Windows 10 x64 Edition回复

分享创造快乐

广告合作资源投稿