aVideo: instalación en Ubuntu 20.04

Instalar Apache

  • Ejecutamos
sudo apt install -y apache2 apache2-utils
  • Verificamos el estado
systemctl status apache2
  • Establecemos que arranque el inicio del sistema operativo
sudo systemctl enable apache2
  • Establecemos el dueño de la carpeta html
sudo chown www-data:www-data /var/www/html/ -R
  • Si ejecutamos el siguiente comando
sudo apache2ctl -t
  • Y nos devuelve el siguiente mensaje

AH00558: apache2: Could not reliably determine the server’s fully qualified domain name, using 127.0.1.1. Set the ‘ServerName’ directive globally to suppress this message
Syntax OK

  • Ejecutamos
sudo nano /etc/apache2/conf-available/videos.siua.ac.cr.conf
  • Y agregamos la siguiente linea
ServerName localhost
  • Activamos el sitio
sudo a2enconf videos.siua.ac.cr.conf
sudo systemctl reload apache2
sudo apache2ctl -t

Instalar MariaDB

  • Instalamos
sudo apt install mariadb-server mariadb-client
  • Verificamos el estado
systemctl status mariadb
  • Lo habilitamos para el arranque de la máquina
sudo systemctl enable mariadb
  • Lo configuramos
sudo mysql_secure_installation
  • Probamos que podemos ingresar
sudo mariadb -u root
  • Verificamos la versión
mariadb --version

Instalación PHP7.4

  • Instalamos
sudo apt install php7.4 libapache2-mod-php7.4 php7.4-mysql php-common php7.4-cli php7.4-common php7.4-json php7.4-opcache php7.4-readline
  • Habilitamos el módulo
sudo a2enmod php7.4 
sudo systemctl restart apache2
  • Verificamos la versión
php --version
  • Probamos
sudo nano /var/www/html/info.php
<?php phpinfo(); ?>

Instalar Avideo

  • El proyecto avideo esta compuesto de 2 proyecto el front end que le permite a los usuarios ver vídeos y el encoder vamos a instalar los 2
  • Ingresamos al directorio avideo
cd /var/www/html
  • Instalamos git
sudo apt install git
  • Clonamos el repositorio
sudo git clone https://github.com/WWBN/AVideo.git
  • Ingresamos al directorio
cd AVideo/
  • Clonamos el proyecto del encoder
sudo git clone https://github.com/WWBN/AVideo-Encoder.git
  • El proyecto se almacena como AVideo-Encoder pero para que el usuario entienda mejor que pasa cuando es redirigido lo renombramos a upload
sudo mv AVideo-Encoder upload
  • Creamos el dueño del proyecto
sudo chown www-data:www-data /var/www/html/AVideo/ -R
  • Instalamos dependencias
sudo apt install ffmpeg libimage-exiftool-perl
  • Agregamos unas extensiones de php
sudo apt install php7.4-cli php7.4-common php7.4-json php7.4-opcache php7.4-readline php7.4-curl php7.4-gd php7.4-xmln-y
  • Para obtener videos desde otros sitios necesitamos youtube-dl que esta incluido dentro de ubuntu pero necesitamos actualizarlo
sudo apt install python3-pip 
sudo -H pip3 install youtube-dl
  • Es muy importante tener la última versión o después no podrá bajar video, vamos a crear un cron-job para mantenerlo actualizado, ejecutamos
sudo crontab -e
  • Agregamos
@daily sudo -H pip3 install --upgrade youtube-dl > /dev/null

Creación de Base de datos y usuario

  • Ejecutamos
sudo mysql
  • Creamos la base de datos que llamaremos «bd_sis_avideo_siua»
create database bd_sis_avideo_siua;
  • Creamos el usuario
create user remoto@localhost identified by 'RB0';
  • Le damos permisos al usuario sobre la base de datos
grant all privileges on bd_sis_avideo_siua.* to remoto@localhost;
  • Necesitamos crear otra base de datos para el encoder
create database bd_sis_avideo_encoder_siua;
  • Le damos permisos al usuario «remoto» sobre la base de datos
grant all privileges on bd_sis_avideo_encoder_siua.* to remoto@localhost;
  • Actualizamos privilegios y salimos
flush privileges; 
exit;

Configurar Apache

  • Creamos un host virtual
sudo nano /etc/apache2/sites-available/videos.siua.ac.cr.conf
  • Agregamos
< VirtualHost *:80 >
    ServerName videos.siua.ac.cr
    DocumentRoot /var/www/html/AVideo

    < Directory /var/www/html/AVideo >
       DirectoryIndex index.php
       Options +FollowSymLinks
       AllowOverride All
       Require all granted
    < /Directory >

    ErrorLog ${APACHE_LOG_DIR}/videos.siua.ac.cr.error.log
    CustomLog ${APACHE_LOG_DIR}/videos.access.log combined

< / VirtualHost >
  • Habilitamos el sitio
sudo a2ensite videos.siua.ac.cr.conf
systemctl reload apache2
  • Habilitamos el módulo rewrite
sudo a2enmod rewrite
systemctl reload apache2
  • Reiniciamos apache
sudo systemctl restart apache2
  • Eliminamos el sitio defecto
sudo a2dissite 000-default.conf
systemctl reload apache2

Habilitar https

  • Instalamos Let’s Encrypt
sudo apt install certbot
  • Instalamos el plugin de apache
sudo apt install python3-certbot-apache -y
  • Mandamos a obtener el certificado
sudo certbot --apache --agree-tos --redirect --hsts --staple-ocsp --email admin@siua.ac.cr -d videos.siua.ac.cr

Paso adicionales xq estar detras de un proxy

  • Pero como nosotros lo tenemos en una maquina virtual detras de un proxy hacemos el proceso normal
  • Ejecutamos la guia de seguridad UGIT https://ugit.siua.ac.cr/?p=1951
  • Creamos una carpeta para almacenar los certificados
mkdir /etc/apache2/certificados/videos.siua.ac.cr
chmod 777 -R /etc/apache2/certificados/videos.siua.ac.cr
  • Ingresamos en proxy y le pasamos los certificados
  • Creamos los hostvirtuales de 80 y 443

Continuamos

  • Después de configurar la seguridad y pasarle los certificados y habilitar el sitio 443
  • nos presenta la ventana de instalación
  • Y vemos que tenemos que aumentar el post_max_size y upload_max_filesize
  • Abrimos
sudo nano /etc/php/7.4/apache2/php.ini
  • Modificamos
post_max_size = 8M
X
post_max_size = 1024M

upload_max_filesize = 2M
X
upload_max_filesize = 1024M
  • Reiniciamos
sudo systemctl restart apache2
  • Y ahora todo debería estar bien
  • Completamos los datos
  • Nos indica que debemos eliminar el directorio de instalación
  • Lo eliminamos
sudo rm /var/www/html/AVideo/install/ -r
  • Ya podemos acceder al sitio principal
  • ya podemos ingresar con el usuario «admin»

Instalar el encoder

  • Abrimos
sudo nano /etc/php/7.4/apache2/php.ini
  • Modificamos
max_execution_time = 30
X
max_execution_time = 7200

memory_limit = 128M
X
memory_limit = 512M

sudo systemctl restart apache2
  • Si después de instaldo se presentan problemas debe incrementar max_execution_time
  • Modificamos los datos
  • Eliminamos el directorio de instalación
sudo rm /var/www/html/AVideo/upload/install/ -r
  • vamos al dominio principal
  • Y ingresamos
  • Ingresamos a Admin Panel
  • Ahora salga del sistema y vuelva a ingresar y vaya a la opción «Mis videos» -> «Subir videos» y deberá mandarlo a su encoder
  • Tome en cuenta que el rendimiento no depende de la RAM sino CPU ya que el lo copia en /var/www/html/AVideo/upload/videos

Configurar smtp

  • Ahora dentro de la sección anterior de Admin Panel esta también la opción de smtp

Habilitar TCP BBR

  • Para video streming es necesario habilitar TCP BBR en el kernel de linux
  • Linux utiliza reno y cubic algoritmos para congestion podemos comprobarlo con
sysctl net.ipv4.tcp_available_congestion_control
  • Resultado
net.ipv4.tcp_available_congestion_control = reno cubic
  • Para saber cual esta habilitado
sysctl net.ipv4.tcp_congestion_control
  • Resultado
net.ipv4.tcp_congestion_control = cubic
  • TCP BBR esta soportado desde el kernel 4.9 para comprobar la versión del kernel
uname -r
  • Lo instalamos (Creo esto no es necesario solo si el kernel es menor 4.9)
sudo apt install --install-recommends linux-generic-hwe-20.04
  • Abrimos el archivo
sudo nano /etc/sysctl.conf
  • Agregamos esto el final del archivo
net.core.default_qdisc=fq 
net.ipv4.tcp_congestion_control=bbr
  • Recargamos las configuraciones
  • Ahora verificamos el algoritmo de congestion
sysctl net.ipv4.tcp_congestion_control
  • Resultado
net.ipv4.tcp_congestion_control = bbr

Aplicaciones moviles

  • Para google play AVideo
  • Para iOS YPT Mobile

Errores

  • Si le da problemas al cargar CSS o JS es por que en el hostvirtual agrego un «/» de mas
#mal 
DocumentRoot /var/www/html/AVideo/

#Bien
DocumentRoot /var/www/html/AVideo
  • Los logs
/var/www/AVideo/videos/youphptube.log
/var/www/AVideo/upload/videos/youphptube.log
  • When encoding videos, you can choose resolutions (low, SD, HD). If you use AVideo as a personal video streaming site, I recommend choosing HD resolution only to reduce encoding time and save disk space. If you have already encoded videos to all 3 resolutions, you can go to the AVideo video directory (/var/www/AVideo/videos) and delete low resolution and SD resolution videos.
cd /var/www/AVideo/videos/ 
sudo rm *Low.mp4
sudo rm *SD.mp4

You can use the youtube-dl command line utility to download all videos. First, you need to go to AVideo dashboard, then go to the video list page and scroll down to the bottom, click the download your videos list (permalink .txt file) button. You will see a list of URL for all the videos.

Next, open up a terminal and create a txt file with a text editor, copy the URLs from the web page and paste them into the file. Then you can run the following command to download the videos. Replace video-list.txt with the your own file name.

youtube-dl -a video-list.txt