原文地址:https://lala.im/7344.html,請支持原作者!該處僅作轉載。
取自官方的项目介绍:NodeTube是YouTube的开源替代品,可提供视频,音频和图像上传,实时流媒体和内置获利功能。
官方没有详细的文档,自己部署的时候遇到很多坑,这里记录一下。另外吐槽一下这个程序的前端属实是有点简陋。不过反正能用,开源的嘛白嫖也不指望个啥。
系统debian10,安装nodejs10/mongodb/redis:
apt -y update
apt -y install build-essential gnupg curl wget git
curl -sL https://deb.nodesource.com/setup_10.x | bash -
wget -qO - https://www.mongodb.org/static/pgp/server-4.2.asc | apt-key add -
echo "deb http://repo.mongodb.org/apt/debian buster/mongodb-org/4.2 main" | tee /etc/apt/sources.list.d/mongodb-org-4.2.list
apt -y update
apt -y install nodejs mongodb-org redis-server
注意nodejs的版本只能是10,其他版本跑不起来或者跑起来有问题。
安装nginx/certbot,如果要直播支持还需要安装rtmp模块:
apt -y install nginx python-certbot-nginx libnginx-mod-rtmp
启动mongodb/redis,以及设置一下这些程序的开机自启:
systemctl start mongod redis
systemctl enable nginx mongod redis
现在拉取项目文件/安装依赖:
cd /opt
git clone https://github.com/mayeaux/nodetube
cd nodetube
npm install
修改程序的配置文件:
nano .env.private
如下位置需要改动:
DOMAIN_NAME_AND_TLD='https://nodetube.imlala.best'
INSTANCE_DOMAIN_NAME='nodetube.imlala.best'
如果你需要直播功能,还需要更改另一个配置文件:
nano .env.settings
其中要改动的位置如下:
LIVESTREAM_APP=true
NODE_ENV='production'
RUN_NGROK=false
修改目录/文件的所有者:
chown -R www-data:www-data /opt/nodetube
接着新建一个systemd服务文件:
nano /lib/systemd/system/nodetube.service
写入如下配置:
[Unit]
Description=nodetube
[Service]
Type=simple
User=www-data
Group=www-data
WorkingDirectory=/opt/nodetube
ExecStart=/usr/bin/npm start
Restart=always
[Install]
WantedBy=multi-user.target
启动以及设置开机自启:
systemctl start nodetube
systemctl enable nodetube
编辑nginx的主配置文件:
nano /etc/nginx/nginx.conf
在文件的末尾加入直播需要的rtmp配置:
rtmp {
server {
listen 1935;
chunk_size 4096;
application live {
live on;
on_publish http://127.0.0.1:3000/livestream/on-live-auth;
on_publish_done http://127.0.0.1:3000/livestream/on-live-done;
hls on;
hls_path /opt/nodetube/hls;
hls_fragment 10s;
}
}
}
接着新建一个nginx站点配置文件用于反向代理:
nano /etc/nginx/conf.d/nodetube.conf
写入如下配:
server {
listen 80;
server_name nodetube.imlala.best; # 换成你的域名
client_max_body_size 0;
root /opt/nodetube;
location /uploads/ {
gzip off;
sendfile on;
sendfile_max_chunk 1m;
tcp_nopush on;
try_files $uri @redirect;
}
location @redirect {
proxy_pass http://127.0.0.1:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location / {
proxy_pass http://127.0.0.1:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
接下来用certbot签一个ssl证书:
certbot --nginx --agree-tos --no-eff-email --email [email protected]
证书签好了之后,由于这个程序直播界面有一个基于websocket的聊天功能是用的自签证书,这里需要把我们的证书替换掉自签证书,否则聊天功能不能正常使用:
cd /opt/nodetube/keys
mv server.crt server.crt.bak
mv server.key server.key.bak
cp /etc/letsencrypt/live/nodetube.imlala.best/fullchain.pem server.crt
cp /etc/letsencrypt/live/nodetube.imlala.best/privkey.pem server.key
给予正确的文件所有者,否则程序运行的时候报错:
chown www-data:www-data server.crt
chown www-data:www-data server.key
最后重启一下nodetube即可:
systemctl restart nodetube
打开你的域名,如果正常应该可以看到如下界面:
第一个注册的用户自动成为管理员,直播功能,在MY ACCOUNT-Livestreaming:
OBS和FFMPEG推流的方法都在页面内有介绍,自己看着设置就行了。