{"id":707,"date":"2021-03-11T01:34:47","date_gmt":"2021-03-11T01:34:47","guid":{"rendered":"https:\/\/asgardius.company\/?p=343"},"modified":"2021-03-11T01:34:47","modified_gmt":"2021-03-11T01:34:47","slug":"instalar-peertube-en-ubuntu-20-04-con-apache-como-servidor-web","status":"publish","type":"post","link":"https:\/\/asgardius.company\/?p=707","title":{"rendered":"Instalar Peertube en Ubuntu 20.04 con Apache como servidor web"},"content":{"rendered":"\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/asgardius.company\/wp-content\/uploads\/2021\/06\/449px-Logo_de_PeerTube.svg_.png\" alt=\"\" class=\"wp-image-23\"\/><\/figure>\n\n\n\n<p><a href=\"https:\/\/asgardius.company\/index.php\/2019\/11\/26\/peertube-una-alternativa-libre-y\/\">En un art\u00edculo anterior<\/a> mencion\u00e9 la plataforma Peertube, en este art\u00edculo les mostrar\u00e9 c\u00f3mo montar un nodo propio. Los requisitos son:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Tener un servidor dedicado con 2GB de RAM o m\u00e1s (los servidores virtualizados suelen dar problemas, ya que en ocasiones la CPU del servidor puede estar trabajando al 100% durante horas)<\/li><li>Un proveedor de internet que no nos limite la cantidad de ancho de banda que podemos usar al mes ni de problemas al utilizar bittorrent (en caso de usar un hosting se debe revisar que la pol\u00edtica de uso aceptable no prohiba el uso de torrents, ya que nuestra instancia de peertube actuar\u00e1 como un tracker)<\/li><li>Una cantidad suficiente de almacenamiento<\/li><li>Capacidad de procesamiento proporcional a la cantidad de usuarios que permitiremos que publiquen contenido en nuestro servidor (los v\u00eddeos nuevos se codifican a las resoluciones establecidas por el usuario)<\/li><li>Tener Ubuntu 20.04 o Debian 10<\/li><li>Un servidor de correo<\/li><li>Tener una instancia PostgreSQL en nuestro servidor o en un servidor cercano (en caso de no tener una la montaremos en este tutorial)<\/li><\/ul>\n\n\n\n<p>Lo primero es instalar PostgreSQL en caso de no tenerlo ya<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo apt install postgresql postgresql-contrib<\/code><\/pre>\n\n\n\n<p>Ahora creamos una base de datos para Peertube en nuestra instancia de PostgreSQL<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo su - postgres\ncreateuser peertube -d -P -R\ncreatedb -O peertube peertube\npsql -c \"CREATE EXTENSION pg_trgm;\" peertube\npsql -c \"CREATE EXTENSION unaccent;\" peertube\nexit<\/code><\/pre>\n\n\n\n<p>Instalamos algunas dependencias<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo apt install curl\ncurl -sL https:\/\/deb.nodesource.com\/setup_12.x | sudo bash -E -\ncurl -sS https:\/\/dl.yarnpkg.com\/debian\/pubkey.gpg | sudo apt-key add -\necho \"deb https:\/\/dl.yarnpkg.com\/debian\/ stable main\" | sudo tee \/etc\/apt\/sources.list.d\/yarn.list\nsudo apt update\nsudo apt install unzip xz-utils nodejs yarn ffmpeg postgresql-client g++ make redis-server<\/code><\/pre>\n\n\n\n<p>Creamos una cuenta de sistema para Peertube<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo useradd -m -d \/var\/www\/peertube -s \/bin\/bash -p peertube peertube<\/code><\/pre>\n\n\n\n<p>Descargamos la \u00faltima versi\u00f3n estable de Peertube<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo su peertube\ncd ~\nVERSION=$(curl -s https:\/\/api.github.com\/repos\/chocobozzz\/peertube\/releases\/latest | grep tag_name | cut -d '\"' -f 4) &amp;&amp; echo \"Latest Peertube version is $VERSION\"\nmkdir -p config storage versions etc var\/log\/apache2\ncd versions\nVERSION=$(curl -s https:\/\/api.github.com\/repos\/chocobozzz\/peertube\/releases\/latest | grep tag_name | cut -d '\"' -f 4)\nwget -q \"https:\/\/github.com\/Chocobozzz\/PeerTube\/releases\/download\/${VERSION}\/peertube-${VERSION}.tar.xz\"\ntar -xJf peertube-${VERSION}.tar.xz\nrm -f peertube-${VERSION}.tar.xz\ncd ..\/\nln -s versions\/peertube-${VERSION} .\/peertube-latest\ncd .\/peertube-latest<\/code><\/pre>\n\n\n\n<p>Instalamos el software<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>yarn install --production --pure-lockfile\ncp .\/config\/production.yaml.example ..\/..\/config\/production.yaml<\/code><\/pre>\n\n\n\n<p>Editamos el archivo de configurai\u00f3n de Peertube seg\u00fan nuestras necesidades<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>nano $HOME\/config\/production.yaml\nexit<\/code><\/pre>\n\n\n\n<p>Ponemos en marcha el servicio<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo cp \/var\/www\/peertube\/peertube-latest\/support\/systemd\/peertube.service \/etc\/systemd\/system\/\nsudo systemctl daemon-reload\nsudo systemctl enable peertube\nsudo systemctl start peertube<\/code><\/pre>\n\n\n\n<p>Establecemos la contrase\u00f1a de administrador<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo su peertube\ncd ~\/peertube-latest\nNODE_CONFIG_DIR=\/var\/www\/peertube\/config NODE_ENV=production npm run reset-password -- -u root<\/code><\/pre>\n\n\n\n<p>Habilitamos los siguientes m\u00f3dulos de apache<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo a2enmod proxy proxy_http proxy_wstunnel ssl http2 rewrite headers<\/code><\/pre>\n\n\n\n<p>Editamos el archivo de configuraci\u00f3n de nuestro host virtual<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo nano \/etc\/apache2\/sites-enabled\/peertube.asgardius.company-le-ssl.conf<\/code><\/pre>\n\n\n\n<p>Deber\u00eda quedar parecido a esto<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;IfModule mod_ssl.c&gt;\n&lt;VirtualHost *:443&gt;\nDocumentRoot \/var\/www\/peertube\nServerName peertube.asgardius.company\n&lt;Directory \/var\/www\/peertube&gt;\nOptions -Indexes +FollowSymLinks\nAllowOverride All\n&lt;\/Directory&gt;\n\n        # HSTS (mod_headers is required) (63072000 seconds = 2 years) (only activate it knowingly)\n        #Header always set Strict-Transport-Security \"max-age=63072000; includeSubDomains; preload\"\n        \n        Header always set X-Content-Type-Options nosniff\n        Header always set X-Robots-Tag none\n        Header always set X-XSS-Protection \"1; mode=block\"\n\n  \t# Activate http\/2\n  \tProtocols h2 h2c http\/1.1\n\n  \tH2Push          on\n  \tH2PushPriority  *                       after\n  \tH2PushPriority  text\/css                before\n  \tH2PushPriority  image\/jpeg              after   32\n  \tH2PushPriority  image\/png               after   32\n  \tH2PushPriority  application\/javascript  interleaved\n\n        # Hard limit, PeerTube does not support videos &gt; 4GB\n        LimitRequestBody 4294967294\n\n        # Set caching on assets for 1 year\n        &lt;FilesMatch ^\/client\/(.*\\.(js|css|woff2|otf|ttf|woff|eot))$&gt;\n                Header append Cache-Control \"public, max-age=31536000, immutable\"\n        &lt;\/FilesMatch&gt;\n        AliasMatch ^\/client\/(.*\\.(js|css|woff2|otf|ttf|woff|eot))$ \/var\/www\/peertube.aukfood.net\/peertube-latest\/client\/dist\/$1\n\n        # Set caching on image files for 1 year\n        &lt;FilesMatch ^\/static\/(thumbnails|avatars)\/(.*)$&gt;\n                Header append Cache-Control \"public, max-age=31536000, immutable\"\n        &lt;\/FilesMatch&gt;\n        AliasMatch ^\/static\/(thumbnails|avatars)\/(.*)$ \/var\/www\/peertube.aukfood.net\/storage\/$1\/$2\n\n        # Bypass PeerTube webseed route for better performances\n        Alias \/static\/webseed \/var\/www\/peertube.aukfood.net\/storage\/videos\n        &lt;Location \/static\/webseed&gt;\n                # Clients usually have 4 simultaneous webseed connections, so the real limit is 3MB\/s per client\n                SetOutputFilter RATE_LIMIT\n                SetEnv rate-limit 800\n\n                SetEnvIf Request_Method \"GET\" GETMETH=1\n\n                Header set Access-Control-Allow-Origin \"*\" env=GETMETH\n                Header set Access-Control-Allow-Headers \"Range,DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type\" env=GETMETH\n                Header set Access-Control-Allow-Methods \"GET, OPTIONS\" env=GETMETH\n                Header set toto \"foo\" env=GETMETH\n                SetEnvIf GETMETH \"1\" dontlog\n\n                SetEnvIf Request_Method \"OPTIONS\" OPTIONSMETH=1\n\n                Header set Access-Control-Allow-Origin \"*\" env=OPTIONSMETH\n                Header set Access-Control-Allow-Headers \"Range,DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type\" env=OPTIONSMETH\n                Header set Access-Control-Allow-Methods \"GET, OPTIONS\" env=OPTIONSMETH\n                Header set Access-Control-Max-Age \"1000\" env=OPTIONSMETH\n                Header set Content-Type \"text\/plain charset=UTF-8\" env=OPTIONSMETH\n                Header set Content-Length \"0\" env=OPTIONSMETH\n        &lt;\/Location&gt;\n\n        &lt;Location \/videos\/embed&gt;\n                Header unset X-Frame-Options\n        &lt;\/Location&gt;\n\n        ProxyPreserveHost On\n        ProxyRequests On\n        ProxyTimeout 600\n\n        # Websocket tracker\n        RewriteEngine On\n        RewriteCond %{HTTP:Upgrade} websocket &#91;NC]\n        RewriteRule \/(.*) ws:\/\/127.0.0.1:9000\/$1 &#91;P,L]\n\n        &lt;Location \/&gt;\n                ProxyPass http:\/\/127.0.0.1:9000\/\n        &lt;\/Location&gt;\n\nSSLCertificateFile \/etc\/letsencrypt\/live\/peertube.asgardius.company\/fullchain.pem\nSSLCertificateKeyFile \/etc\/letsencrypt\/live\/peertube.asgardius.company\/privkey.pem\nInclude \/etc\/letsencrypt\/options-ssl-apache.conf\n&lt;\/VirtualHost&gt;\n&lt;\/IfModule&gt;\n<\/code><\/pre>\n\n\n\n<p>Reiniciamos el servidor Apache<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo systemctl restart apache2<\/code><\/pre>\n\n\n\n<p>Nuestra instancia de Peertube deber\u00eda estar lista para usarse<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/asgardius.company\/wp-content\/uploads\/2021\/06\/Captura-de-pantalla-de-2021-03-10-18-28-59-1024x550.png\" alt=\"\" class=\"wp-image-344\"\/><\/figure>\n\n\n\n<p>Referencias:<\/p>\n\n\n\n<p><a href=\"https:\/\/github.com\/Chocobozzz\/PeerTube\/blob\/develop\/support\/doc\/production.md\">https:\/\/github.com\/Chocobozzz\/PeerTube\/blob\/develop\/support\/doc\/production.md<\/a><\/p>\n\n\n\n<p><a href=\"https:\/\/www.aukfood.fr\/peertube-sur-debian-10-avec-apache\/\">https:\/\/www.aukfood.fr\/peertube-sur-debian-10-avec-apache\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>En un art\u00edculo anterior mencion\u00e9 la plataforma Peertube, en este art\u00edculo les mostrar\u00e9 c\u00f3mo montar un nodo propio. Los requisitos son: Tener un servidor dedicado con 2GB de RAM o m\u00e1s (los servidores virtualizados suelen dar problemas, ya que en ocasiones la CPU del servidor puede estar trabajando al 100% durante horas) Un proveedor de&hellip; <a class=\"more-link\" href=\"https:\/\/asgardius.company\/?p=707\">Seguir leyendo <span class=\"screen-reader-text\">Instalar Peertube en Ubuntu 20.04 con Apache como servidor web<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-707","post","type-post","status-publish","format-standard","hentry","category-sin-categoria","entry"],"_links":{"self":[{"href":"https:\/\/asgardius.company\/index.php?rest_route=\/wp\/v2\/posts\/707","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/asgardius.company\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/asgardius.company\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/asgardius.company\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/asgardius.company\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=707"}],"version-history":[{"count":0,"href":"https:\/\/asgardius.company\/index.php?rest_route=\/wp\/v2\/posts\/707\/revisions"}],"wp:attachment":[{"href":"https:\/\/asgardius.company\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=707"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/asgardius.company\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=707"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/asgardius.company\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=707"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}