1
0
Fork 0
mirror of https://github.com/YunoHost-Apps/peertube_ynh.git synced 2024-09-03 19:56:29 +02:00

Merge pull request #304 from YunoHost-Apps/ovh_fix_testing

Ovh fix upgrade
This commit is contained in:
yalh76 2022-01-18 19:54:47 +01:00 committed by GitHub
commit c4c31e4ce6
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
19 changed files with 515 additions and 210 deletions

143
README.md
View file

@ -1,76 +1,81 @@
# ovh_fix branch for peertube_ynh <!--
N.B.: This README was automatically generated by https://github.com/YunoHost/apps/tree/master/tools/README-generator
It shall NOT be edited by hand.
-->
If installing on an ovh virtual machine or having `gyp ERR! configure error` please follow the steps below # PeerTube for YunoHost
## Steps for installing [![Integration level](https://dash.yunohost.org/integration/peertube.svg)](https://dash.yunohost.org/appci/app/peertube) ![](https://ci-apps.yunohost.org/ci/badges/peertube.status.svg) ![](https://ci-apps.yunohost.org/ci/badges/peertube.maintain.svg)
[![Install PeerTube with YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=peertube)
1. Install nodejs *[Lire ce readme en français.](./README_fr.md)*
> *This package allows you to install PeerTube quickly and simply on a YunoHost server.
If you don't have YunoHost, please consult [the guide](https://yunohost.org/#/install) to learn how to install it.*
## Overview
Federated (ActivityPub) video streaming platform using P2P (BitTorrent) directly in the web browser, using <a href="https://github.com/feross/webtorrent">WebTorrent</a>.
**Shipped version:** 4.0.0~ynh2
**Demo:** http://peertube.cpy.re
## Screenshots
![](./doc/screenshots/screenshot1.png)
## Disclaimers / important information
### Why PeerTube?
We can't build a FOSS video streaming alternatives to YouTube, Dailymotion, Vimeo... with a centralized software. One organization alone cannot have enough money to pay bandwidth and video storage of its server.
So we need to have a decentralized network of servers seeding videos (as [Hubzilla YunoHost](https://github.com/YunoHost-Apps/hubzilla_ynh), [Friendica YunoHost](https://github.com/YunoHost-Apps/friendica_ynh),[Mastodon YunoHost](https://github.com/YunoHost-Apps/mastodon_ynh)), [Diaspora](https://github.com/diaspora/diaspora) ([Diaspora YunoHost](https://github.com/YunoHost-Apps/diaspora_ynh)),[Funkwhale](https://funkwhale.audio) ([Funkwhale YunoHost](https://github.com/YunoHost-Apps/funkwhale_ynh)).
But it's not enough because one video could become famous and overload the server.
It's the reason why we need to use a P2P protocol to limit the server load.
Thanks to [WebTorrent](https://github.com/feross/webtorrent), we can make P2P (thus BitTorrent) inside the web browser, as of today.
### Why is that cool?
Servers are run independently by different people and organizations. They can apply wildly different moderation policies, so you can find or make one that fits your taste perfectly.
By watching a video, you help the hosting provider to broadcast it by becoming a broadcaster of the video yourself. Each instance doesn't need much money to broadcast the videos of its users.
* Any known limitations, constrains or stuff not working, such as (but not limited to):
* Require **dedicated domain** like **peertube.domain.tld**.
* Admin username is: **root**.
* **Admin password and LDAP configuration** will be sent to the email address given at the time of the installation.
* URL can not be changed once selected. Choose the domain wisely.
* You need more then **1 GB** of RAM. If you don't have it, please create a **swap memory**.
$ dd if=/dev/zero of=/swapfile bs=1024 count=1048576
$ mkswap /swapfile
$ swapon /swapfile
$ echo "/swapfile swap swap defaults 0 0" >> /etc/fstab
* This app is **multi-instance** (you can have more then one PeerTube instance running on a YunoHost server)
* **If you are hosted on OVH virtual machine or experiencing `gyp ERR! configure error`, please switch to [ovh_fix](https://github.com/YunoHost-Apps/peertube_ynh/tree/ovh_fix)**
* LDAP auth is supported, LDAP configuration will be sent to the email address given at the time of the installation.
* HTTP auth is not supported
## Documentation and resources
* Official app website: https://joinpeertube.org/fr/
* Official admin documentation: https://docs.joinpeertube.org/
* Upstream app code repository: https://github.com/Chocobozzz/PeerTube/
* YunoHost documentation for this app: https://yunohost.org/app_peertube
* Report a bug: https://github.com/YunoHost-Apps/peertube_ynh/issues
## Developer info
Please send your pull request to the [testing branch](https://github.com/YunoHost-Apps/peertube_ynh/tree/testing).
To try the testing branch, please proceed like that.
``` ```
$ curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash - sudo yunohost app install https://github.com/YunoHost-Apps/peertube_ynh/tree/testing --debug
$ sudo apt-get install -y nodejs or
sudo yunohost app upgrade peertube -u https://github.com/YunoHost-Apps/peertube_ynh/tree/testing --debug
``` ```
2. Install the peertube with **OVH fix** branch. **More info regarding app packaging:** https://yunohost.org/packaging_apps
```
$ yunohost app install https://github.com/YunoHost-Apps/peertube_ynh/tree/ovh_fix --debug
```
3. After installation is complete run **yarn install**.
```
$ cd /var/www/peertube && yarn install --production --pure-lockfile
```
4. Give proper **permissions** to peertube
```
$ chown -R peertube:peertube /var/www/peertube
```
5. **Restart peertube** and check if there is any error message.
```
$ service peertube restart
$ journalctl -feu peertube
```
6. If there is no **error in red** in the last lines of log. Press **ctrl+c** to stop the logs.
7. Go to your **domain** to check if peertube is running and everthing is ok.
8. Change your **root password** by this command:
```
$ cd /var/www/peertube && NODE_CONFIG_DIR="/var/www/peertube/config/" NODE_ENV=production npm run reset-password -- -u root
```
Username: **root**
password: **created in above step**
## Steps for upgrading
1. Upgrade peertube with **OVH fix** branch.
```
$ yunohost app upgrade peertube -u https://github.com/YunoHost-Apps/peertube_ynh/tree/ovh_fix --debug
```
2. After upgrade is complete run **yarn install**.
```
$ cd /var/www/peertube && sudo yarn install --production --pure-lockfile
```
3. Give proper **permissions** to peertube
```
$ chown -R peertube:peertube /var/www/peertube
```
4. **Restart peertube** and check if there is any error message.
```
$ service peertube restart
```

87
README_fr.md Normal file
View file

@ -0,0 +1,87 @@
# PeerTube pour YunoHost
[![Niveau d'intégration](https://dash.yunohost.org/integration/peertube.svg)](https://dash.yunohost.org/appci/app/peertube) ![](https://ci-apps.yunohost.org/ci/badges/peertube.status.svg) ![](https://ci-apps.yunohost.org/ci/badges/peertube.maintain.svg)
[![Installer PeerTube avec YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=peertube)
*[Read this readme in english.](./README.md)*
*[Lire ce readme en français.](./README_fr.md)*
> *Ce package vous permet d'installer PeerTube rapidement et simplement sur un serveur YunoHost.
Si vous n'avez pas YunoHost, regardez [ici](https://yunohost.org/#/install) pour savoir comment l'installer et en profiter.*
## Vue d'ensemble
Plateforme de streaming vidéo fédérée (ActivityPub) utilisant P2P (BitTorrent) directement dans le navigateur Web, en utilisant <a href="https://github.com/feross/webtorrent"> WebTorrent </a>
**Version incluse :** 4.0.0~ynh2
**Démo :** http://peertube.cpy.re
## Captures d'écran
![](./doc/screenshots/screenshot1.png)
## Avertissements / informations importantes
## Vue d'ensemble
### Qu'est-ce que PeerTube ?
PeerTube est une plateforme de streaming vidéo fédérée (ActivityPub) utilisant P2P (BitTorrent) directement dans le navigateur Web, en utilisant <a href="https://github.com/feross/webtorrent"> WebTorrent </a>.
### Pourquoi PeerTube?
Nous ne pouvons pas créer d'alternatives de streaming vidéo FOSS à YouTube, Dailymotion, Vimeo... avec un logiciel centralisé. Une organisation seule ne peut pas avoir assez d'argent pour payer la bande passante et le stockage vidéo de son serveur.
Nous avons donc besoin d'un réseau décentralisé de serveurs « semant » des vidéos (comme [Hubzilla YunoHost](https://github.com/YunoHost-Apps/hubzilla_ynh), [Friendica YunoHost](https://github.com/YunoHost-Apps/friendica_ynh), [Mastodon YunoHost](https://github.com/YunoHost-Apps/mastodon_ynh)), [Diaspora](https://github.com/diaspora/diaspora) ([Diaspora YunoHost](https://github.com/YunoHost-Apps/diaspora_ynh)),[Funkwhale](https://funkwhale.audio) ([Funkwhale YunoHost](https://github.com/YunoHost-Apps/funkwhale_ynh)).
Mais ce n'est pas suffisant car une vidéo pourrait devenir célèbre et surcharger le serveur. C'est la raison pour laquelle nous devons utiliser un protocole P2P pour limiter la charge du serveur. Grâce à [WebTorrent](https://github.com/feross/webtorrent), nous pouvons faire du P2P (donc BitTorrent) dans le navigateur Web, dès aujourd'hui.
### Pourquoi est-ce cool ?
Les serveurs sont gérés indépendamment par différentes personnes et organisations. Ils peuvent appliquer des politiques de modération extrêmement différentes, afin que vous puissiez en trouver ou en créer une qui correspond parfaitement à vos goûts.
En regardant une vidéo, vous aidez l'hébergeur à la diffuser en devenant vous-même un diffuseur de la vidéo. Chaque instance n'a pas besoin de beaucoup d'argent pour diffuser les vidéos de ses utilisateurs.
## Points importants à lire avant l'installation
1. Nécessite un **domaine dédié** comme **peertube.domain.tld**.
1. Le nom d'utilisateur de l'administrateur est: **root**.
1. **Le mot de passe administrateur et la configuration LDAP** seront envoyés à l'adresse email indiquée au moment de l'installation.
1. L'URL ne peut pas être modifiée une fois sélectionnée. Choisissez judicieusement le domaine.
1. Vous avez besoin de plus de **1 Go** de RAM. Si vous ne l'avez pas, veuillez créer une **mémoire swap**.
$ dd if=/dev/zero of=/swapfile bs=1024 count=1048576
$ mkswap /swapfile
$ swapon /swapfile
$ echo "/swapfile swap swap defaults 0 0" >> /etc/fstab
1. Cette application est **multi-instance** (vous pouvez avoir plus d'une instance PeerTube en cours d'exécution sur un serveur YunoHost)
1. **Si vous êtes hébergé sur une machine virtuelle OVH ou rencontrez `gyp ERR! configure error`, veuillez passer à [ovh_fix](https://github.com/YunoHost-Apps/peertube_ynh/tree/ovh_fix)**
## Caractéristiques spécifiques YunoHost
#### Support multi-utilisateur
* L'authentification LDAP est prise en charge, les instructions de configuration sont envoyées à l'adresse email indiquée au moment de l'installation
* L'authentification HTTP n'est pas prise en charge
## Documentations et ressources
* Site officiel de l'app : https://joinpeertube.org/fr/
* Documentation officielle de l'admin : https://docs.joinpeertube.org/
* Dépôt de code officiel de l'app : https://github.com/Chocobozzz/PeerTube/
* Documentation YunoHost pour cette app : https://yunohost.org/app_peertube
* Signaler un bug : https://github.com/YunoHost-Apps/peertube_ynh/issues
## Informations pour les développeurs
Merci de faire vos pull request sur la [branche testing](https://github.com/YunoHost-Apps/peertube_ynh/tree/testing).
Pour essayer la branche testing, procédez comme suit.
```
sudo yunohost app install https://github.com/YunoHost-Apps/peertube_ynh/tree/testing --debug
ou
sudo yunohost app upgrade peertube -u https://github.com/YunoHost-Apps/peertube_ynh/tree/testing --debug
```
**Plus d'infos sur le packaging d'applications :** https://yunohost.org/packaging_apps

View file

@ -22,6 +22,8 @@
upgrade=1 from_commit=ed59a268e93910f8b35b0f87399f91b8cad9ede0 upgrade=1 from_commit=ed59a268e93910f8b35b0f87399f91b8cad9ede0
# 3.4.0~ynh1 # 3.4.0~ynh1
upgrade=1 from_commit=83a06ca4c96ccd941b49647b3698db2c6b771b79 upgrade=1 from_commit=83a06ca4c96ccd941b49647b3698db2c6b771b79
# 4.0.0~ynh1
upgrade=1 from_commit=7c2bb0bb6a91b6b957b734f684aa3d64da892f4c
backup_restore=1 backup_restore=1
multi_instance=0 multi_instance=0
port_already_use=0 port_already_use=0
@ -40,3 +42,5 @@ Notification=yes
name=3.3.0~ynh3 name=3.3.0~ynh3
; commit=83a06ca4c96ccd941b49647b3698db2c6b771b79 ; commit=83a06ca4c96ccd941b49647b3698db2c6b771b79
name=3.4.0~ynh1 name=3.4.0~ynh1
; commit=7c2bb0bb6a91b6b957b734f684aa3d64da892f4c
name=4.0.0~ynh1

View file

@ -1,7 +1,6 @@
SOURCE_URL=https://github.com/Chocobozzz/PeerTube/releases/download/v3.4.1/peertube-v3.4.1.tar.xz SOURCE_URL=https://github.com/Chocobozzz/PeerTube/releases/download/v4.0.0/peertube-v4.0.0.tar.xz
SOURCE_SUM=dd7357529826beb071a86e6f76bc2eb99b0d6481a71566db1cb2f6cf8a4a6305 SOURCE_SUM=afbc6ef1f950cb80fc1b61ef83e27ab25d2c7ec8f605e17bc59f8635848862da
SOURCE_SUM_PRG=sha256sum SOURCE_SUM_PRG=sha256sum
SOURCE_FORMAT=tar.xz SOURCE_FORMAT=tar.xz
SOURCE_IN_SUBDIR=true SOURCE_IN_SUBDIR=true
SOURCE_FILENAME=
SOURCE_EXTRACT=true SOURCE_EXTRACT=true

View file

@ -26,9 +26,6 @@ location = /api/v1/videos/upload-resumable {
} }
location / { location / {
if ($scheme = http) {
rewrite ^ https://$server_name$request_uri? permanent;
}
try_files /dev/null @api; try_files /dev/null @api;
@ -122,7 +119,7 @@ tcp_nodelay on; # don't buffer data sent, good for small data burs
# Bypass PeerTube for performance reasons. Optional. # Bypass PeerTube for performance reasons. Optional.
# Should be consistent with client-overrides assets list in /server/controllers/client.ts # Should be consistent with client-overrides assets list in /server/controllers/client.ts
location ~ ^/client/(assets/images/(icons/icon-36x36\.png|icons/icon-48x48\.png|icons/icon-72x72\.png|icons/icon-96x96\.png|icons/icon-144x144\.png|icons/icon-192x192\.png|icons/icon-512x512\.png|logo\.svg|favicon\.png))$ { location ~ ^/client/(assets/images/(icons/icon-36x36\.png|icons/icon-48x48\.png|icons/icon-72x72\.png|icons/icon-96x96\.png|icons/icon-144x144\.png|icons/icon-192x192\.png|icons/icon-512x512\.png|logo\.svg|favicon\.png|default-playlist\.jpg|default-avatar-account\.png|default-avatar-video-channel\.png))$ {
more_set_headers "Cache-Control : public, max-age=31536000, immutable"; # Cache 1 year more_set_headers "Cache-Control : public, max-age=31536000, immutable"; # Cache 1 year
try_files __DATADIR__/client-overrides/$1 __FINALPATH__/client/dist/$1 @api; try_files __DATADIR__/client-overrides/$1 __FINALPATH__/client/dist/$1 @api;
@ -201,12 +198,6 @@ location ~ ^/static/(webseed|redundancy|streaming-playlists)/ {
sendfile_max_chunk 1M; # prevent one fast connection from entirely occupying the worker process. should be > 800k. sendfile_max_chunk 1M; # prevent one fast connection from entirely occupying the worker process. should be > 800k.
aio threads; aio threads;
# Use this in tandem with fuse-mounting i.e. https://docs.joinpeertube.org/admin-remote-storage
# to serve files directly from a public bucket without proxying.
# Assumes you have buckets named after the storage subdirectories, i.e. 'videos', 'redundancy', etc.
#set $cdn <your S3-compatiable bucket public url mounted via fuse>;
#rewrite ^/static/webseed/(.*)$ $cdn/videos/$1 redirect;
#rewrite ^/static/(.*)$ $cdn/$1 redirect;
rewrite ^/static/webseed/(.*)$ /videos/$1 break; rewrite ^/static/webseed/(.*)$ /videos/$1 break;
rewrite ^/static/(.*)$ /$1 break; rewrite ^/static/(.*)$ /$1 break;

View file

@ -32,7 +32,7 @@ rates_limit:
trust_proxy: trust_proxy:
- 'loopback' - 'loopback'
# Your database name will be database.name OR "peertube"+database.suffix # Your database name will be database.name OR 'peertube'+database.suffix
database: database:
hostname: 'localhost' hostname: 'localhost'
port: 5432 port: 5432
@ -50,7 +50,7 @@ redis:
hostname: 'localhost' hostname: 'localhost'
port: 6379 port: 6379
auth: null auth: null
db: 0 db: __REDIS_DB__
# SMTP server to send emails # SMTP server to send emails
smtp: smtp:
@ -69,13 +69,21 @@ smtp:
email: email:
body: body:
signature: "PeerTube" signature: 'PeerTube'
subject: subject:
prefix: "[PeerTube]" prefix: '[PeerTube]'
# PeerTube client/interface configuration
client:
videos:
miniature:
# By default PeerTube client displays author username
prefer_author_display_name: false
# From the project root directory # From the project root directory
storage: storage:
tmp: '__DATADIR__/tmp/' # Use to download data (imports etc), store uploaded files before processing... tmp: '__DATADIR__/tmp/' # Use to download data (imports etc), store uploaded files before processing...
bin: '__DATADIR__/bin/'
avatars: '__DATADIR__/avatars/' avatars: '__DATADIR__/avatars/'
videos: '__DATADIR__/videos/' videos: '__DATADIR__/videos/'
streaming_playlists: '__DATADIR__/streaming-playlists/' streaming_playlists: '__DATADIR__/streaming-playlists/'
@ -87,19 +95,58 @@ storage:
captions: '__DATADIR__/captions/' captions: '__DATADIR__/captions/'
cache: '__DATADIR__/cache/' cache: '__DATADIR__/cache/'
plugins: '__DATADIR__/plugins/' plugins: '__DATADIR__/plugins/'
# Overridable client files : logo.svg, favicon.png and icons/*.png (PWA) in client/dist/assets/images # Overridable client files in client/dist/assets/images:
# - logo.svg
# - favicon.png
# - default-playlist.jpg
# - default-avatar-account.png
# - default-avatar-video-channel.png
# - and icons/*.png (PWA)
# Could contain for example assets/images/favicon.png # Could contain for example assets/images/favicon.png
# If the file exists, peertube will serve it # If the file exists, peertube will serve it
# If not, peertube will fallback to the default fil # If not, peertube will fallback to the default file
client_overrides: '__DATADIR__/client-overrides/' client_overrides: '__DATADIR__/client-overrides/'
object_storage:
enabled: false
# Without protocol, will default to HTTPS
endpoint: '' # 's3.amazonaws.com' or 's3.fr-par.scw.cloud' for example
region: 'us-east-1'
credentials:
# You can also use AWS_ACCESS_KEY_ID env variable
access_key_id: ''
# You can also use AWS_SECRET_ACCESS_KEY env variable
secret_access_key: ''
# Maximum amount to upload in one request to object storage
max_upload_part: 2GB
streaming_playlists:
bucket_name: 'streaming-playlists'
# Allows setting all buckets to the same value but with a different prefix
prefix: '' # Example: 'streaming-playlists:'
# Base url for object URL generation, scheme and host will be replaced by this URL
# Useful when you want to use a CDN/external proxy
base_url: '' # Example: 'https://mirror.example.com'
# Same settings but for webtorrent videos
videos:
bucket_name: 'videos'
prefix: ''
base_url: ''
log: log:
level: 'info' # debug/info/warning/error level: 'info' # 'debug' | 'info' | 'warn' | 'error'
rotation: rotation:
enabled : true # Enabled by default, if disabled make sure that 'storage.logs' is pointing to a folder handled by logrotate enabled : true # Enabled by default, if disabled make sure that 'storage.logs' is pointing to a folder handled by logrotate
maxFileSize: 12MB max_file_size: 12MB
maxFiles: 20 max_files: 20
anonymizeIP: false anonymize_ip: false
log_ping_requests: true log_ping_requests: true
prettify_sql: false prettify_sql: false
@ -151,11 +198,16 @@ csp:
report_only: true # CSP directives are still being tested, so disable the report only mode at your own risk! report_only: true # CSP directives are still being tested, so disable the report only mode at your own risk!
report_uri: report_uri:
security:
# Set the X-Frame-Options header to help to mitigate clickjacking attacks
frameguard:
enabled: true
tracker: tracker:
# If you disable the tracker, you disable the P2P aspect of PeerTube # If you disable the tracker, you disable the P2P aspect of PeerTube
enabled: true enabled: true
# Only handle requests on your videos. # Only handle requests on your videos
# If you set this to false it means you have a public tracker. # If you set this to false it means you have a public tracker
# Then, it is possible that clients overload your instance with external torrents # Then, it is possible that clients overload your instance with external torrents
private: true private: true
# Reject peers that do a lot of announces (could improve privacy of TCP/UDP peers) # Reject peers that do a lot of announces (could improve privacy of TCP/UDP peers)
@ -178,6 +230,11 @@ views:
remote: remote:
max_age: '30 days' max_age: '30 days'
# PeerTube buffers local video views before updating and federating the video
local_buffer_update_interval: '30 minutes'
ip_view_expiration: '1 hour'
plugins: plugins:
# The website PeerTube will ask for available PeerTube plugins and themes # The website PeerTube will ask for available PeerTube plugins and themes
# This is an unmoderated plugin index, so only install plugins/themes you trust # This is an unmoderated plugin index, so only install plugins/themes you trust
@ -192,20 +249,30 @@ federation:
# Add a weekly job that cleans up remote AP interactions on local videos (shares, rates and comments) # Add a weekly job that cleans up remote AP interactions on local videos (shares, rates and comments)
# It removes objects that do not exist anymore, and potentially fix their URLs # It removes objects that do not exist anymore, and potentially fix their URLs
# This setting is opt-in because due to an old bug in PeerTube, remote rates sent by instance before PeerTube 3.0 will be deleted cleanup_remote_interactions: true
# We still suggest you to enable this setting even if your users will loose most of their video's likes/dislikes
cleanup_remote_interactions: false
peertube:
check_latest_version:
# Check and notify admins of new PeerTube versions
enabled: false
# You can use a custom URL if your want, that respect the format behind https://joinpeertube.org/api/v1/versions.json
url: 'https://joinpeertube.org/api/v1/versions.json'
webadmin:
configuration:
edition:
# Set this to false if you don't want to allow config edition in the web interface by instance admins
allowed: true
############################################################################### ###############################################################################
# #
# From this point, all the following keys can be overridden by the web interface # From this point, all the following keys can be overridden by the web interface
# (local-production.json file). If you need to change some values, prefer to # (local-production.json file). If you need to change some values, prefer to
# use the web interface because the configuration will be automatically # use the web interface because the configuration will be automatically
# reloaded without any need to restart PeerTube. # reloaded without any need to restart PeerTube
# #
# /!\ If you already have a local-production.json file, the modification of the # /!\ If you already have a local-production.json file, the modification of the
# following keys will have no effect /!\. # following keys will have no effect /!\
# #
############################################################################### ###############################################################################
@ -228,6 +295,7 @@ contact_form:
signup: signup:
enabled: false enabled: false
limit: 10 # When the limit is reached, registrations are disabled. -1 == unlimited limit: 10 # When the limit is reached, registrations are disabled. -1 == unlimited
minimum_age: 16 # Used to configure the signup form
requires_email_verification: false requires_email_verification: false
filters: filters:
cidr: # You can specify CIDR ranges to whitelist (empty = no filtering) or blacklist cidr: # You can specify CIDR ranges to whitelist (empty = no filtering) or blacklist
@ -235,13 +303,17 @@ signup:
blacklist: [] blacklist: []
user: user:
# Default value of maximum video BYTES the user can upload (does not take into account transcoded files). # Default value of maximum video bytes the user can upload (does not take into account transcoded files)
# Byte format is supported ("1GB" etc)
# -1 == unlimited # -1 == unlimited
video_quota: -1 video_quota: -1
video_quota_daily: -1 video_quota_daily: -1
# If enabled, the video will be transcoded to mp4 (x264) with "faststart" flag video_channels:
# In addition, if some resolutions are enabled the mp4 video file will be transcoded to these new resolutions. max_per_user: 20 # Allows each user to create up to 20 video channels.
# If enabled, the video will be transcoded to mp4 (x264) with `faststart` flag
# In addition, if some resolutions are enabled the mp4 video file will be transcoded to these new resolutions
# Please, do not disable transcoding since many uploaded videos will not work # Please, do not disable transcoding since many uploaded videos will not work
transcoding: transcoding:
enabled: true enabled: true
@ -264,6 +336,7 @@ transcoding:
resolutions: # Only created if the original video has a higher resolution, uses more storage! resolutions: # Only created if the original video has a higher resolution, uses more storage!
0p: false # audio-only (creates mp4 without video stream, always created when enabled) 0p: false # audio-only (creates mp4 without video stream, always created when enabled)
144p: false
240p: false 240p: false
360p: false 360p: false
480p: false 480p: false
@ -310,8 +383,17 @@ live:
# Your firewall should accept traffic from this port in TCP if you enable live # Your firewall should accept traffic from this port in TCP if you enable live
rtmp: rtmp:
enabled: true
port: 1935 port: 1935
rtmps:
enabled: false
port: 1936
# Absolute path
key_file: ''
# Absolute path
cert_file: ''
# Allow to transcode the live streaming in multiple live resolutions # Allow to transcode the live streaming in multiple live resolutions
transcoding: transcoding:
enabled: true enabled: true
@ -323,6 +405,7 @@ live:
profile: 'default' profile: 'default'
resolutions: resolutions:
144p: false
240p: false 240p: false
360p: false 360p: false
480p: false 480p: false
@ -340,13 +423,23 @@ import:
http: # Classic HTTP or all sites supported by youtube-dl https://rg3.github.io/youtube-dl/supportedsites.html http: # Classic HTTP or all sites supported by youtube-dl https://rg3.github.io/youtube-dl/supportedsites.html
enabled: false enabled: false
youtube_dl_release:
# Direct download URL to youtube-dl binary
# Github releases API is also supported
# Examples:
# * https://api.github.com/repos/ytdl-org/youtube-dl/releases
# * https://api.github.com/repos/yt-dlp/yt-dlp/releases
url: 'https://api.github.com/repos/yt-dlp/yt-dlp/releases'
# youtube-dl binary name
# yt-dlp is also supported
name: 'yt-dlp'
# Path to the python binary to execute for youtube-dl or yt-dlp
python_path: '/usr/bin/python3'
# IPv6 is very strongly rate-limited on most sites supported by youtube-dl # IPv6 is very strongly rate-limited on most sites supported by youtube-dl
force_ipv4: false force_ipv4: false
# You can use an HTTP/HTTPS/SOCKS proxy with youtube-dl
proxy:
enabled: false
url: ""
torrent: # Magnet URI or torrent file (use classic TCP/UDP/WebSeed to download the file) torrent: # Magnet URI or torrent file (use classic TCP/UDP/WebSeed to download the file)
enabled: false enabled: false
@ -380,7 +473,7 @@ instance:
business_model: '' # Supports Markdown business_model: '' # Supports Markdown
# If you want to explain on what type of hardware your PeerTube instance runs # If you want to explain on what type of hardware your PeerTube instance runs
# Example: "2 vCore, 2GB RAM..." # Example: '2 vCore, 2GB RAM...'
hardware_information: '' # Supports Markdown hardware_information: '' # Supports Markdown
# What are the main languages of your instance? To interact with your users for example # What are the main languages of your instance? To interact with your users for example
@ -420,20 +513,20 @@ instance:
# Enabling it will allow other administrators to know that you are mainly federating sensitive content # Enabling it will allow other administrators to know that you are mainly federating sensitive content
# Moreover, the NSFW checkbox on video upload will be automatically checked by default # Moreover, the NSFW checkbox on video upload will be automatically checked by default
is_nsfw: false is_nsfw: false
# By default, "do_not_list" or "blur" or "display" NSFW videos # By default, `do_not_list` or `blur` or `display` NSFW videos
# Could be overridden per user with a setting # Could be overridden per user with a setting
default_nsfw_policy: 'do_not_list' default_nsfw_policy: 'do_not_list'
customizations: customizations:
javascript: '' # Directly your JavaScript code (without <script> tags). Will be eval at runtime javascript: '' # Directly your JavaScript code (without <script> tags). Will be eval at runtime
css: '' # Directly your CSS code (without <style> tags). Will be injected at runtime css: '' # Directly your CSS code (without <style> tags). Will be injected at runtime
# Robot.txt rules. To disallow robots to crawl your instance and disallow indexation of your site, add '/' to "Disallow:' # Robot.txt rules. To disallow robots to crawl your instance and disallow indexation of your site, add `/` to `Disallow:`
robots: | robots: |
User-agent: * User-agent: *
Disallow: Disallow:
# Security.txt rules. To discourage researchers from testing your instance and disable security.txt integration, set this to an empty string. # Security.txt rules. To discourage researchers from testing your instance and disable security.txt integration, set this to an empty string
securitytxt: securitytxt:
"# If you would like to report a security issue\n# you may report it to:\nContact: https://github.com/Chocobozzz/PeerTube/blob/develop/SECURITY.md\nContact: mailto:" '# If you would like to report a security issue\n# you may report it to:\nContact: https://github.com/Chocobozzz/PeerTube/blob/develop/SECURITY.md\nContact: mailto:'
services: services:
# Cards configuration to format video in Twitter # Cards configuration to format video in Twitter
@ -441,7 +534,7 @@ services:
username: '@yunohost' # Indicates the Twitter account for the website or platform on which the content was published username: '@yunohost' # Indicates the Twitter account for the website or platform on which the content was published
# If true, a video player will be embedded in the Twitter feed on PeerTube video share # If true, a video player will be embedded in the Twitter feed on PeerTube video share
# If false, we use an image link card that will redirect on your PeerTube instance # If false, we use an image link card that will redirect on your PeerTube instance
# Change it to "true", and then test on https://cards-dev.twitter.com/validator to see if you are whitelisted # Change it to `true`, and then test on https://cards-dev.twitter.com/validator to see if you are whitelisted
whitelisted: false whitelisted: false
followers: followers:

View file

@ -16,24 +16,36 @@ StandardError=syslog
SyslogIdentifier=__APP__ SyslogIdentifier=__APP__
Restart=always Restart=always
; Some security directives. # Sandboxing options to harden security
; Use private /tmp and /var/tmp folders inside a new file system namespace, # Depending on specificities of your service/app, you may need to tweak these
; which are discarded after the process stops. # .. but this should be a good baseline
PrivateTmp=true # Details for these options: https://www.freedesktop.org/software/systemd/man/systemd.exec.html
; Mount /usr, /boot, and /etc as read-only for processes invoked by this service. NoNewPrivileges=yes
PrivateTmp=yes
#PrivateDevices=yes
RestrictAddressFamilies=AF_UNIX AF_INET AF_INET6 AF_NETLINK
RestrictNamespaces=yes
RestrictRealtime=yes
DevicePolicy=closed
DeviceAllow=/dev/dri/renderD128
ProtectSystem=full ProtectSystem=full
; Sets up a new /dev mount for the process and only adds API pseudo devices ProtectControlGroups=yes
; like /dev/null, /dev/zero or /dev/random but not physical devices. Disabled ProtectKernelModules=yes
; by default because it may not work on devices like the Raspberry Pi. ProtectKernelTunables=yes
PrivateDevices=false LockPersonality=yes
; Ensures that the service process and all its children can never gain new SystemCallFilter=~@clock @debug @module @mount @obsolete @reboot @setuid @swap
; privileges through execve().
NoNewPrivileges=true # Denying access to capabilities that should not be relevant for webapps
; This makes /home, /root, and /run/user inaccessible and empty for processes invoked # Doc: https://man7.org/linux/man-pages/man7/capabilities.7.html
; by this unit. Make sure that you do not depend on data inside these folders. CapabilityBoundingSet=~CAP_RAWIO CAP_MKNOD
ProtectHome=false CapabilityBoundingSet=~CAP_AUDIT_CONTROL CAP_AUDIT_READ CAP_AUDIT_WRITE
; Drops the sys admin capability from the daemon. CapabilityBoundingSet=~CAP_SYS_BOOT CAP_SYS_TIME CAP_SYS_MODULE CAP_SYS_PACCT
CapabilityBoundingSet=~CAP_SYS_ADMIN CapabilityBoundingSet=~CAP_LEASE CAP_LINUX_IMMUTABLE CAP_IPC_LOCK
CapabilityBoundingSet=~CAP_BLOCK_SUSPEND CAP_WAKE_ALARM
CapabilityBoundingSet=~CAP_SYS_TTY_CONFIG
CapabilityBoundingSet=~CAP_MAC_ADMIN CAP_MAC_OVERRIDE
CapabilityBoundingSet=~CAP_NET_ADMIN CAP_NET_BROADCAST CAP_NET_RAW
CapabilityBoundingSet=~CAP_SYS_ADMIN CAP_SYS_PTRACE CAP_SYSLOG
[Install] [Install]
WantedBy=multi-user.target WantedBy=multi-user.target

1
doc/DESCRIPTION.md Normal file
View file

@ -0,0 +1 @@
Federated (ActivityPub) video streaming platform using P2P (BitTorrent) directly in the web browser, using <a href="https://github.com/feross/webtorrent">WebTorrent</a>.

1
doc/DESCRIPTION_fr.md Normal file
View file

@ -0,0 +1 @@
Plateforme de streaming vidéo fédérée (ActivityPub) utilisant P2P (BitTorrent) directement dans le navigateur Web, en utilisant <a href="https://github.com/feross/webtorrent"> WebTorrent </a>

View file

@ -10,7 +10,7 @@ Thanks to [WebTorrent](https://github.com/feross/webtorrent), we can make P2P (t
### Why is that cool? ### Why is that cool?
Servers are run independently by different people and organizations. They can apply wildly different moderation policies, so you can find or make one that fits your taste perfectly. Servers are run independently by different people and organizations. They can apply wildly different moderation policies, so you can find or make one that fits your taste perfectly.
By watching a video, you help the hosting provider to broadcast it by becoming a broadcaster of the video yourself. Each instance doesnt need much money to broadcast the videos of its users. By watching a video, you help the hosting provider to broadcast it by becoming a broadcaster of the video yourself. Each instance doesn't need much money to broadcast the videos of its users.
* Any known limitations, constrains or stuff not working, such as (but not limited to): * Any known limitations, constrains or stuff not working, such as (but not limited to):
* Require **dedicated domain** like **peertube.domain.tld**. * Require **dedicated domain** like **peertube.domain.tld**.

View file

@ -1,27 +1,27 @@
## Vue d'ensemble ## Vue d'ensemble
### Qu'est-ce que PeerTube ? ### Qu'est-ce que PeerTube ?
PeerTube est une plateforme de streaming vidéo fédérée (ActivityPub) utilisant P2P (BitTorrent) directement dans le navigateur Web, en utilisant <a href="https://github.com/feross/webtorrent"> WebTorrent </a>. PeerTube est une plateforme de streaming vidéo fédérée (ActivityPub) utilisant P2P (BitTorrent) directement dans le navigateur Web, en utilisant <a href="https://github.com/feross/webtorrent"> WebTorrent </a>.
### Pourquoi PeerTube? ### Pourquoi PeerTube?
Nous ne pouvons pas créer d'alternatives de streaming vidéo FOSS à YouTube, Dailymotion, Vimeo... avec un logiciel centralisé. Une organisation seule ne peut pas avoir assez d'argent pour payer la bande passante et le stockage vidéo de son serveur. Nous ne pouvons pas créer d'alternatives de streaming vidéo FOSS à YouTube, Dailymotion, Vimeo... avec un logiciel centralisé. Une organisation seule ne peut pas avoir assez d'argent pour payer la bande passante et le stockage vidéo de son serveur.
Nous avons donc besoin d'un réseau décentralisé de serveurs « semant » des vidéos (comme [Hubzilla YunoHost](https://github.com/YunoHost-Apps/hubzilla_ynh), [Friendica YunoHost](https://github.com/YunoHost-Apps/friendica_ynh), [Mastodon YunoHost](https://github.com/YunoHost-Apps/mastodon_ynh)), [Diaspora](https://github.com/diaspora/diaspora) ([Diaspora YunoHost](https://github.com/YunoHost-Apps/diaspora_ynh)),[Funkwhale](https://funkwhale.audio) ([Funkwhale YunoHost](https://github.com/YunoHost-Apps/funkwhale_ynh)). Nous avons donc besoin d'un réseau décentralisé de serveurs « semant » des vidéos (comme [Hubzilla YunoHost](https://github.com/YunoHost-Apps/hubzilla_ynh), [Friendica YunoHost](https://github.com/YunoHost-Apps/friendica_ynh), [Mastodon YunoHost](https://github.com/YunoHost-Apps/mastodon_ynh)), [Diaspora](https://github.com/diaspora/diaspora) ([Diaspora YunoHost](https://github.com/YunoHost-Apps/diaspora_ynh)),[Funkwhale](https://funkwhale.audio) ([Funkwhale YunoHost](https://github.com/YunoHost-Apps/funkwhale_ynh)).
Mais ce n'est pas suffisant car une vidéo pourrait devenir célèbre et surcharger le serveur. C'est la raison pour laquelle nous devons utiliser un protocole P2P pour limiter la charge du serveur. Grâce à [WebTorrent](https://github.com/feross/webtorrent), nous pouvons faire du P2P (donc BitTorrent) dans le navigateur Web, dès aujourd'hui. Mais ce n'est pas suffisant car une vidéo pourrait devenir célèbre et surcharger le serveur. C'est la raison pour laquelle nous devons utiliser un protocole P2P pour limiter la charge du serveur. Grâce à [WebTorrent](https://github.com/feross/webtorrent), nous pouvons faire du P2P (donc BitTorrent) dans le navigateur Web, dès aujourd'hui.
### Pourquoi est-ce cool ? ### Pourquoi est-ce cool ?
Les serveurs sont gérés indépendamment par différentes personnes et organisations. Ils peuvent appliquer des politiques de modération extrêmement différentes, afin que vous puissiez en trouver ou en créer une qui correspond parfaitement à vos goûts. Les serveurs sont gérés indépendamment par différentes personnes et organisations. Ils peuvent appliquer des politiques de modération extrêmement différentes, afin que vous puissiez en trouver ou en créer une qui correspond parfaitement à vos goûts.
En regardant une vidéo, vous aidez l'hébergeur à la diffuser en devenant vous-même un diffuseur de la vidéo. Chaque instance n'a pas besoin de beaucoup d'argent pour diffuser les vidéos de ses utilisateurs. En regardant une vidéo, vous aidez l'hébergeur à la diffuser en devenant vous-même un diffuseur de la vidéo. Chaque instance n'a pas besoin de beaucoup d'argent pour diffuser les vidéos de ses utilisateurs.
## Points importants à lire avant l'installation ## Points importants à lire avant l'installation
1. Nécessite un **domaine dédié** comme **peertube.domain.tld**. 1. Nécessite un **domaine dédié** comme **peertube.domain.tld**.
1. Le nom d'utilisateur de l'administrateur est: **root**. 1. Le nom d'utilisateur de l'administrateur est: **root**.
1. **Le mot de passe administrateur et la configuration LDAP** seront envoyés à l'adresse email indiquée au moment de l'installation. 1. **Le mot de passe administrateur et la configuration LDAP** seront envoyés à l'adresse email indiquée au moment de l'installation.
1. L'URL ne peut pas être modifiée une fois sélectionnée. Choisissez judicieusement le domaine. 1. L'URL ne peut pas être modifiée une fois sélectionnée. Choisissez judicieusement le domaine.
1. Vous avez besoin de plus de **1 Go** de RAM. Si vous ne l'avez pas, veuillez créer une **mémoire swap**. 1. Vous avez besoin de plus de **1 Go** de RAM. Si vous ne l'avez pas, veuillez créer une **mémoire swap**.
$ dd if=/dev/zero of=/swapfile bs=1024 count=1048576 $ dd if=/dev/zero of=/swapfile bs=1024 count=1048576
@ -29,12 +29,12 @@ En regardant une vid
$ swapon /swapfile $ swapon /swapfile
$ echo "/swapfile swap swap defaults 0 0" >> /etc/fstab $ echo "/swapfile swap swap defaults 0 0" >> /etc/fstab
1. Cette application est **multi-instance** (vous pouvez avoir plus d'une instance PeerTube en cours d'exécution sur un serveur YunoHost) 1. Cette application est **multi-instance** (vous pouvez avoir plus d'une instance PeerTube en cours d'exécution sur un serveur YunoHost)
1. **Si vous êtes hébergé sur une machine virtuelle OVH ou rencontrez `gyp ERR! configure error`, veuillez passer à [ovh_fix](https://github.com/YunoHost-Apps/peertube_ynh/tree/ovh_fix)** 1. **Si vous êtes hébergé sur une machine virtuelle OVH ou rencontrez `gyp ERR! configure error`, veuillez passer à [ovh_fix](https://github.com/YunoHost-Apps/peertube_ynh/tree/ovh_fix)**
## Caractéristiques spécifiques YunoHost ## Caractéristiques spécifiques YunoHost
#### Support multi-utilisateur #### Support multi-utilisateur
* L'authentification LDAP est prise en charge, les instructions de configuration sont envoyées à l'adresse email indiquée au moment de l'installation * L'authentification LDAP est prise en charge, les instructions de configuration sont envoyées à l'adresse email indiquée au moment de l'installation
* L'authentification HTTP n'est pas prise en charge * L'authentification HTTP n'est pas prise en charge

View file

@ -6,14 +6,13 @@
"en": "Video streaming platform using P2P directly in the web browser, connected to a federated network", "en": "Video streaming platform using P2P directly in the web browser, connected to a federated network",
"fr": "Plateforme de diffusion vidéo par P2P directement dans le navigateur, et connectée à un réseau fédéralisé" "fr": "Plateforme de diffusion vidéo par P2P directement dans le navigateur, et connectée à un réseau fédéralisé"
}, },
"version": "3.4.1~ynh1", "version": "4.0.0~ynh2",
"url": "https://github.com/Chocobozzz/PeerTube", "url": "https://github.com/Chocobozzz/PeerTube",
"upstream": { "upstream": {
"license": "AGPL-3.0-only", "license": "AGPL-3.0-only",
"website": "https://joinpeertube.org/fr/", "website": "https://joinpeertube.org/fr/",
"demo": "http://peertube.cpy.re", "demo": "http://peertube.cpy.re",
"admindoc": "https://docs.joinpeertube.org/", "admindoc": "https://docs.joinpeertube.org/",
"userdoc": "https://yunohost.org/#/app_peertube",
"code": "https://github.com/Chocobozzz/PeerTube/" "code": "https://github.com/Chocobozzz/PeerTube/"
}, },
"license": "AGPL-3.0-only", "license": "AGPL-3.0-only",
@ -27,7 +26,7 @@
} }
], ],
"requirements": { "requirements": {
"yunohost": ">= 4.2.0" "yunohost": ">= 4.3.0"
}, },
"multi_instance": false, "multi_instance": false,
"services": [ "services": [
@ -37,13 +36,11 @@
"install" : [ "install" : [
{ {
"name": "domain", "name": "domain",
"type": "domain", "type": "domain"
"example": "example.com"
}, },
{ {
"name": "admin", "name": "admin",
"type": "user", "type": "user"
"example": "johndoe"
}, },
{ {
"name": "is_public", "name": "is_public",

View file

@ -5,9 +5,9 @@
#================================================= #=================================================
# dependencies used by the app # dependencies used by the app
pkg_dependencies="ffmpeg postgresql postgresql-contrib openssl g++ redis-server redis-tools mailutils apt-transport-https" pkg_dependencies="ffmpeg postgresql postgresql-contrib openssl g++ mailutils apt-transport-https"
NODEJS_VERSION=14 NODEJS_VERSION=16
#================================================= #=================================================
# PERSONAL HELPERS # PERSONAL HELPERS

View file

@ -7,6 +7,7 @@
#================================================= #=================================================
source _common.sh source _common.sh
source ynh_redis
source ynh_send_readme_to_admin__2 source ynh_send_readme_to_admin__2
source /usr/share/yunohost/helpers source /usr/share/yunohost/helpers
@ -69,7 +70,7 @@ ynh_app_setting_set --app=$app --key=port --value=$port
# PeerTube Live port # PeerTube Live port
rtmp_port=1935 rtmp_port=1935
ynh_port_available --port=$rtmp_port || ynh_die "Port $rtmp_port is needs to be available for this app" ynh_port_available --port=$rtmp_port || ynh_die --message="Port $rtmp_port is needs to be available for this app"
ynh_app_setting_set --app=$app --key=rtmp_port --value=$rtmp_port ynh_app_setting_set --app=$app --key=rtmp_port --value=$rtmp_port
# Open the port # Open the port
@ -85,14 +86,7 @@ ynh_script_progression --message="Installing dependencies..."
#ynh_install_nodejs --nodejs_version=$NODEJS_VERSION #ynh_install_nodejs --nodejs_version=$NODEJS_VERSION
# Install dependencies # Install dependencies
ynh_install_app_dependencies $pkg_dependencies ynh_exec_warn_less ynh_install_app_dependencies $pkg_dependencies
# Install ffmpeg from backports for Debian Jessie and from main for others
if [ "$(lsb_release --codename --short)" == "jessie" ]; then
ynh_install_extra_app_dependencies --repo="deb http://httpredir.debian.org/debian jessie-backports main" --package="ffmpeg"
else
ynh_add_app_dependencies --package="ffmpeg"
fi
# Install Yarn # Install Yarn
ynh_install_extra_app_dependencies --repo="deb https://dl.yarnpkg.com/debian/ stable main" --package="yarn" --key="https://dl.yarnpkg.com/debian/pubkey.gpg" ynh_install_extra_app_dependencies --repo="deb https://dl.yarnpkg.com/debian/ stable main" --package="yarn" --key="https://dl.yarnpkg.com/debian/pubkey.gpg"
@ -111,9 +105,10 @@ ynh_system_user_create --username=$app --home_dir=$final_path
ynh_script_progression --message="Creating a PostgreSQL database..." ynh_script_progression --message="Creating a PostgreSQL database..."
db_name="peertube_${app}" db_name="peertube_${app}"
db_user=$app db_user=$(ynh_sanitize_dbid --db_name=$app)
db_pwd=$(ynh_string_random --length=30) db_pwd=$(ynh_string_random --length=30)
ynh_app_setting_set --app=$app --key=db_name --value=$db_name ynh_app_setting_set --app=$app --key=db_name --value=$db_name
ynh_app_setting_set --app=$app --key=db_user --value=$db_user
ynh_app_setting_set --app=$app --key=db_pwd --value=$db_pwd ynh_app_setting_set --app=$app --key=db_pwd --value=$db_pwd
ynh_psql_test_if_first_run ynh_psql_test_if_first_run
ynh_psql_setup_db --db_user=$db_user --db_name=$db_name --db_pwd=$db_pwd ynh_psql_setup_db --db_user=$db_user --db_name=$db_name --db_pwd=$db_pwd
@ -121,6 +116,13 @@ ynh_psql_setup_db --db_user=$db_user --db_name=$db_name --db_pwd=$db_pwd
ynh_psql_execute_as_root --sql="CREATE EXTENSION IF NOT EXISTS unaccent;" --database=$db_name ynh_psql_execute_as_root --sql="CREATE EXTENSION IF NOT EXISTS unaccent;" --database=$db_name
ynh_psql_execute_as_root --sql="CREATE EXTENSION IF NOT EXISTS pg_trgm;" --database=$db_name ynh_psql_execute_as_root --sql="CREATE EXTENSION IF NOT EXISTS pg_trgm;" --database=$db_name
#=================================================
# CONFIGURE REDIS
#=================================================
redis_db=$(ynh_redis_get_free_db)
ynh_app_setting_set --app="$app" --key=redis_db --value="$redis_db"
#================================================= #=================================================
# DOWNLOAD, CHECK AND UNPACK SOURCE # DOWNLOAD, CHECK AND UNPACK SOURCE
#================================================= #=================================================
@ -128,6 +130,7 @@ ynh_script_progression --message="Setting up source files..."
ynh_app_setting_set --app=$app --key=final_path --value=$final_path ynh_app_setting_set --app=$app --key=final_path --value=$final_path
# Download, check integrity, uncompress and patch the source from app.src # Download, check integrity, uncompress and patch the source from app.src
[ -d "../sources/patches-$(ynh_app_upstream_version)" ] && cp -a "../sources/patches-$(ynh_app_upstream_version)" "../sources/patches"
ynh_setup_source --dest_dir="$final_path" ynh_setup_source --dest_dir="$final_path"
chmod 750 "$final_path" chmod 750 "$final_path"

View file

@ -7,6 +7,7 @@
#================================================= #=================================================
source _common.sh source _common.sh
source ynh_redis
source ynh_send_readme_to_admin__2 source ynh_send_readme_to_admin__2
source /usr/share/yunohost/helpers source /usr/share/yunohost/helpers
@ -21,12 +22,13 @@ domain=$(ynh_app_setting_get --app=$app --key=domain)
port=$(ynh_app_setting_get --app=$app --key=port) port=$(ynh_app_setting_get --app=$app --key=port)
rtmp_port=$(ynh_app_setting_get --app=$app --key=rtmp_port) rtmp_port=$(ynh_app_setting_get --app=$app --key=rtmp_port)
db_name=$(ynh_app_setting_get --app=$app --key=db_name) db_name=$(ynh_app_setting_get --app=$app --key=db_name)
db_user=$app db_user=$(ynh_app_setting_get --app=$app --key=db_user)
final_path=$(ynh_app_setting_get --app=$app --key=final_path) final_path=$(ynh_app_setting_get --app=$app --key=final_path)
admin=$(ynh_app_setting_get --app=$app --key=admin) admin=$(ynh_app_setting_get --app=$app --key=admin)
admin_email=$(ynh_user_get_info --username=$admin --key="mail") admin_email=$(ynh_user_get_info --username=$admin --key="mail")
datadir=$(ynh_app_setting_get --app=$app --key=datadir) datadir=$(ynh_app_setting_get --app=$app --key=datadir)
path_url=$(ynh_app_setting_get --app=$app --key=path) path_url=$(ynh_app_setting_get --app=$app --key=path)
redis_db=$(ynh_app_setting_get --app=$app --key=redis_db)
#================================================= #=================================================
# STANDARD REMOVE # STANDARD REMOVE
@ -49,6 +51,14 @@ ynh_script_progression --message="Stopping and removing the systemd service..."
# Remove the dedicated systemd config # Remove the dedicated systemd config
ynh_remove_systemd_config ynh_remove_systemd_config
#=================================================
# REMOVE LOGROTATE CONFIGURATION
#=================================================
ynh_script_progression --message="Removing logrotate configuration..."
# Remove the app-specific logrotate config
ynh_remove_logrotate
#================================================= #=================================================
# REMOVE THE POSTGRESQL DATABASE # REMOVE THE POSTGRESQL DATABASE
#================================================= #=================================================
@ -58,13 +68,11 @@ ynh_script_progression --message="Removing the PostgreSQL database..."
ynh_psql_remove_db --db_user=$db_user --db_name=$db_name ynh_psql_remove_db --db_user=$db_user --db_name=$db_name
#================================================= #=================================================
# REMOVE DEPENDENCIES # REMOVE THE REDIS DATABASE
#================================================= #=================================================
ynh_script_progression --message="Removing dependencies..." ynh_script_progression --message="Removing the redis database..."
# Remove metapackage and its dependencies ynh_redis_remove_db "$redis_db"
ynh_remove_nodejs
ynh_remove_app_dependencies
#================================================= #=================================================
# REMOVE APP MAIN DIR # REMOVE APP MAIN DIR
@ -74,6 +82,17 @@ ynh_script_progression --message="Removing app main directory..."
# Remove the app directory securely # Remove the app directory securely
ynh_secure_remove --file="$final_path" ynh_secure_remove --file="$final_path"
#=================================================
# REMOVE DATA DIR
#=================================================
# Remove the data directory if --purge option is used
if [ "${YNH_APP_PURGE:-0}" -eq 1 ]
then
ynh_script_progression --message="Removing app data directory..."
ynh_secure_remove --file="$datadir"
fi
#================================================= #=================================================
# REMOVE NGINX CONFIGURATION # REMOVE NGINX CONFIGURATION
#================================================= #=================================================
@ -83,12 +102,13 @@ ynh_script_progression --message="Removing NGINX web server configuration..."
ynh_remove_nginx_config ynh_remove_nginx_config
#================================================= #=================================================
# REMOVE LOGROTATE CONFIGURATION # REMOVE DEPENDENCIES
#================================================= #=================================================
ynh_script_progression --message="Removing logrotate configuration..." ynh_script_progression --message="Removing dependencies..."
# Remove the app-specific logrotate config # Remove metapackage and its dependencies
ynh_remove_logrotate ynh_remove_nodejs
ynh_remove_app_dependencies
#================================================= #=================================================
# CLOSE A PORT # CLOSE A PORT

View file

@ -33,7 +33,7 @@ final_path=$(ynh_app_setting_get --app=$app --key=final_path)
port=$(ynh_app_setting_get --app=$app --key=port) port=$(ynh_app_setting_get --app=$app --key=port)
rtmp_port=$(ynh_app_setting_get --app=$app --key=rtmp_port) rtmp_port=$(ynh_app_setting_get --app=$app --key=rtmp_port)
db_name=$(ynh_app_setting_get --app=$app --key=db_name) db_name=$(ynh_app_setting_get --app=$app --key=db_name)
db_user=$app db_user=$(ynh_app_setting_get --app=$app --key=db_user)
db_pwd=$(ynh_app_setting_get --app=$app --key=db_pwd) db_pwd=$(ynh_app_setting_get --app=$app --key=db_pwd)
datadir=$(ynh_app_setting_get --app=$app --key=datadir) datadir=$(ynh_app_setting_get --app=$app --key=datadir)
@ -60,7 +60,7 @@ ynh_restore_file --origin_path="/etc/nginx/conf.d/$domain.d/$app.conf"
ynh_script_progression --message="Recreating the dedicated system user..." ynh_script_progression --message="Recreating the dedicated system user..."
# Create the dedicated user (if not existing) # Create the dedicated user (if not existing)
ynh_system_user_create --username=$app --home_dir="$final_path" ynh_system_user_create --username=$app --home_dir=$final_path
#================================================= #=================================================
# RESTORE THE APP MAIN DIR # RESTORE THE APP MAIN DIR
@ -97,14 +97,7 @@ ynh_script_progression --message="Reinstalling dependencies..."
ynh_install_nodejs --nodejs_version=$NODEJS_VERSION ynh_install_nodejs --nodejs_version=$NODEJS_VERSION
# Install dependencies # Install dependencies
ynh_install_app_dependencies $pkg_dependencies ynh_exec_warn_less ynh_install_app_dependencies $pkg_dependencies
# Install ffmpeg from backports for Debian Jessie and from main for others
if [ "$(lsb_release --codename --short)" == "jessie" ]; then
ynh_install_extra_app_dependencies --repo="deb http://httpredir.debian.org/debian jessie-backports main" --package="ffmpeg"
else
ynh_add_app_dependencies --package="ffmpeg"
fi
# Install Yarn # Install Yarn
ynh_install_extra_app_dependencies --repo="deb https://dl.yarnpkg.com/debian/ stable main" --package="yarn" --key="https://dl.yarnpkg.com/debian/pubkey.gpg" ynh_install_extra_app_dependencies --repo="deb https://dl.yarnpkg.com/debian/ stable main" --package="yarn" --key="https://dl.yarnpkg.com/debian/pubkey.gpg"
@ -134,6 +127,13 @@ ynh_script_progression --message="Restoring the systemd configuration..."
ynh_restore_file --origin_path="/etc/systemd/system/$app.service" ynh_restore_file --origin_path="/etc/systemd/system/$app.service"
systemctl enable $app.service --quiet systemctl enable $app.service --quiet
#=================================================
# RESTORE THE LOGROTATE CONFIGURATION
#=================================================
ynh_script_progression --message="Restoring the logrotate configuration..."
ynh_restore_file --origin_path="/etc/logrotate.d/$app"
#================================================= #=================================================
# INTEGRATE SERVICE IN YUNOHOST # INTEGRATE SERVICE IN YUNOHOST
#================================================= #=================================================
@ -148,13 +148,6 @@ ynh_script_progression --message="Starting a systemd service..."
ynh_systemd_action --service_name=$app --action="start" --log_path="systemd" --line_match="HTTP server listening on localhost" ynh_systemd_action --service_name=$app --action="start" --log_path="systemd" --line_match="HTTP server listening on localhost"
#=================================================
# RESTORE THE LOGROTATE CONFIGURATION
#=================================================
ynh_script_progression --message="Restoring the logrotate configuration..."
ynh_restore_file --origin_path="/etc/logrotate.d/$app"
#================================================= #=================================================
# GENERIC FINALIZATION # GENERIC FINALIZATION
#================================================= #=================================================

View file

@ -7,6 +7,7 @@
#================================================= #=================================================
source _common.sh source _common.sh
source ynh_redis
source /usr/share/yunohost/helpers source /usr/share/yunohost/helpers
#================================================= #=================================================
@ -22,11 +23,12 @@ final_path=$(ynh_app_setting_get --app=$app --key=final_path)
port=$(ynh_app_setting_get --app=$app --key=port) port=$(ynh_app_setting_get --app=$app --key=port)
rtmp_port=$(ynh_app_setting_get --app=$app --key=rtmp_port) rtmp_port=$(ynh_app_setting_get --app=$app --key=rtmp_port)
db_name=$(ynh_app_setting_get --app=$app --key=db_name) db_name=$(ynh_app_setting_get --app=$app --key=db_name)
db_user=$app db_user=$(ynh_app_setting_get --app=$app --key=db_user)
db_pwd=$(ynh_app_setting_get --app=$app --key=db_pwd) db_pwd=$(ynh_app_setting_get --app=$app --key=db_pwd)
datadir=$(ynh_app_setting_get --app=$app --key=datadir) datadir=$(ynh_app_setting_get --app=$app --key=datadir)
admin=$(ynh_app_setting_get --app=$app --key=admin) admin=$(ynh_app_setting_get --app=$app --key=admin)
admin_email=$(ynh_user_get_info --username=$admin --key="mail") admin_email=$(ynh_user_get_info --username=$admin --key="mail")
redis_db=$(ynh_app_setting_get --app=$app --key=redis_db)
#================================================= #=================================================
# CHECK VERSION # CHECK VERSION
@ -73,12 +75,24 @@ if [ -z "$db_name" ]; then
ynh_app_setting_set --app=$app --key=db_name --value=$db_name ynh_app_setting_set --app=$app --key=db_name --value=$db_name
fi fi
# If db_user doesn't exist, create it
if [ -z "$db_user" ]; then
db_user=$app
ynh_app_setting_set --app=$app --key=db_user --value=$db_user
fi
# If db_pwd doesn't exist, create it # If db_pwd doesn't exist, create it
if [ -z "$db_pwd" ]; then if [ -z "$db_pwd" ]; then
db_pwd=$(ynh_app_setting_get --app=$app --key=psqlpwd) db_pwd=$(ynh_app_setting_get --app=$app --key=psqlpwd)
ynh_app_setting_set --app=$app --key=db_pwd --value=$db_pwd ynh_app_setting_set --app=$app --key=db_pwd --value=$db_pwd
fi fi
# If redis_db doesn't exist, create it
if [ -z "$redis_db" ]; then
redis_db=$(ynh_redis_get_free_db)
ynh_app_setting_set --app="$app" --key=redis_db --value="$redis_db"
fi
if [ -z "$datadir" ]; if [ -z "$datadir" ];
then then
datadir="/home/yunohost.app/${app}/storage" datadir="/home/yunohost.app/${app}/storage"
@ -97,7 +111,6 @@ ynh_psql_execute_as_root --sql="CREATE EXTENSION IF NOT EXISTS unaccent;" --data
ynh_psql_execute_as_root --sql="CREATE EXTENSION IF NOT EXISTS pg_trgm;" --database=$db_name ynh_psql_execute_as_root --sql="CREATE EXTENSION IF NOT EXISTS pg_trgm;" --database=$db_name
# Remove repository # Remove repository
ynh_secure_remove --file="/etc/apt/sources.list.d/jessie-backports.list"
ynh_secure_remove --file="/etc/apt/sources.list.d/yarn.list" ynh_secure_remove --file="/etc/apt/sources.list.d/yarn.list"
# Remove not needed checksum # Remove not needed checksum
@ -106,7 +119,7 @@ ynh_delete_file_checksum --file="../conf/msg_install"
if [ -z "$rtmp_port" ]; if [ -z "$rtmp_port" ];
then then
rtmp_port=1935 rtmp_port=1935
ynh_port_available --port=$rtmp_port || ynh_die "Port $rtmp_port is needs to be available for this app" ynh_port_available --port=$rtmp_port || ynh_die --message="Port $rtmp_port is needs to be available for this app"
ynh_app_setting_set --app=$app --key=rtmp_port --value=$rtmp_port ynh_app_setting_set --app=$app --key=rtmp_port --value=$rtmp_port
# Open the port # Open the port
@ -156,6 +169,7 @@ then
ynh_secure_remove --file="$final_path" ynh_secure_remove --file="$final_path"
# Download, check integrity, uncompress and patch the source from app.src # Download, check integrity, uncompress and patch the source from app.src
[ -d "../sources/patches-$(ynh_app_upstream_version)" ] && cp -a "../sources/patches-$(ynh_app_upstream_version)" "../sources/patches"
ynh_setup_source --dest_dir="$final_path" ynh_setup_source --dest_dir="$final_path"
#Copy the admin saved settings from tmp directory to final path #Copy the admin saved settings from tmp directory to final path
@ -193,14 +207,7 @@ ynh_script_progression --message="Upgrading dependencies..."
#ynh_install_nodejs --nodejs_version=$NODEJS_VERSION #ynh_install_nodejs --nodejs_version=$NODEJS_VERSION
# Install dependencies # Install dependencies
ynh_install_app_dependencies $pkg_dependencies ynh_exec_warn_less ynh_install_app_dependencies $pkg_dependencies
# Install ffmpeg from backports for Debian Jessie and from main for others
if [ "$(lsb_release --codename --short)" == "jessie" ]; then
ynh_install_extra_app_dependencies --repo="deb http://httpredir.debian.org/debian jessie-backports main" --package="ffmpeg"
else
ynh_add_app_dependencies --package="ffmpeg"
fi
# Install Yarn # Install Yarn
ynh_install_extra_app_dependencies --repo="deb https://dl.yarnpkg.com/debian/ stable main" --package="yarn" --key="https://dl.yarnpkg.com/debian/pubkey.gpg" ynh_install_extra_app_dependencies --repo="deb https://dl.yarnpkg.com/debian/ stable main" --package="yarn" --key="https://dl.yarnpkg.com/debian/pubkey.gpg"
@ -245,6 +252,22 @@ pushd "$final_path"
#ynh_exec_warn_less sudo -u $app env $ynh_node_load_PATH yarn install --production --pure-lockfile #ynh_exec_warn_less sudo -u $app env $ynh_node_load_PATH yarn install --production --pure-lockfile
popd popd
#=================================================
# SETUP SYSTEMD
#=================================================
ynh_script_progression --message="Upgrading systemd configuration..."
# Create a dedicated systemd config
ynh_add_systemd_config
#=================================================
# START SYSTEMD SERVICE
#=================================================
ynh_script_progression --message="Starting a systemd service..."
# Start a systemd service
ynh_systemd_action --service_name=$app --action="start" --log_path="systemd" --line_match="HTTP server listening on localhost"
#================================================= #=================================================
# INSTALL LDAP PLUGIN # INSTALL LDAP PLUGIN
#================================================= #=================================================
@ -255,12 +278,23 @@ pushd "$final_path"
popd popd
#================================================= #=================================================
# SETUP SYSTEMD # PEERTUBE 4.0.0 UPGRADE MIGRATION SCRIPT
#================================================= #=================================================
ynh_script_progression --message="Upgrading systemd configuration..."
# Create a dedicated systemd config if ynh_compare_current_package_version --comparison lt --version 4.0.0~ynh1; then
ynh_add_systemd_config ynh_script_progression --message="Running Peertube 4.0.0 migration script..."
pushd "$final_path"
ynh_exec_warn_less sudo -u $app env $ynh_node_load_PATH NODE_CONFIG_DIR="$final_path/config" NODE_ENV=production $ynh_node dist/scripts/migrations/peertube-4.0.js
popd
fi
#=================================================
# STOP SYSTEMD SERVICE
#=================================================
ynh_script_progression --message="Stopping a systemd service..."
# Stop a systemd service
ynh_systemd_action --service_name=$app --action="stop" --log_path="systemd"
#================================================= #=================================================
# GENERIC FINALIZATION # GENERIC FINALIZATION

39
scripts/ynh_redis Normal file
View file

@ -0,0 +1,39 @@
#!/bin/bash
# get the first available redis database
#
# usage: ynh_redis_get_free_db
# | returns: the database number to use
ynh_redis_get_free_db() {
local result max db
result=$(redis-cli INFO keyspace)
# get the num
max=$(cat /etc/redis/redis.conf | grep ^databases | grep -Eow "[0-9]+")
db=0
# default Debian setting is 15 databases
for i in $(seq 0 "$max")
do
if ! echo "$result" | grep -q "db$i"
then
db=$i
break 1
fi
db=-1
done
test "$db" -eq -1 && ynh_die --message="No available Redis databases..."
echo "$db"
}
# Create a master password and set up global settings
# Please always call this script in install and restore scripts
#
# usage: ynh_redis_remove_db database
# | arg: database - the database to erase
ynh_redis_remove_db() {
local db=$1
redis-cli -n "$db" flushall
}

View file

@ -0,0 +1,26 @@
diff '--color=auto' -ru ./dist/server/helpers/youtube-dl/youtube-dl-cli.js ./dist/server/helpers/youtube-dl/youtube-dl-cli.js
--- ./dist/server/helpers/youtube-dl/youtube-dl-cli.js 2021-12-13 09:22:44.000000000 +0100
+++ ./dist/server/helpers/youtube-dl/youtube-dl-cli.js 2022-01-11 22:35:52.992330841 +0100
@@ -104,7 +104,8 @@
let completeArgs = this.wrapWithProxyOptions(args);
completeArgs = this.wrapWithIPOptions(completeArgs);
completeArgs = this.wrapWithFFmpegOptions(completeArgs);
- const output = yield (0, execa_1.default)('python', [youtubeDLBinaryPath, ...completeArgs, url], processOptions);
+ const { PYTHON_PATH } = config_1.CONFIG.IMPORT.VIDEOS.HTTP.YOUTUBE_DL_RELEASE;
+ const output = yield (0, execa_1.default)(PYTHON_PATH, [youtubeDLBinaryPath, ...completeArgs, url], processOptions);
logger_1.logger.debug('Runned youtube-dl command.', Object.assign({ command: output.command }, lTags()));
return output.stdout
? output.stdout.trim().split(/\r?\n/)
diff '--color=auto' -ru ./dist/server/initializers/config.js ./dist/server/initializers/config.js
--- ./dist/server/initializers/config.js 2021-12-13 09:22:43.000000000 +0100
+++ ./dist/server/initializers/config.js 2022-01-11 22:35:51.812344562 +0100
@@ -295,7 +295,8 @@
get ENABLED() { return config.get('import.videos.http.enabled'); },
YOUTUBE_DL_RELEASE: {
get URL() { return config.get('import.videos.http.youtube_dl_release.url'); },
- get NAME() { return config.get('import.videos.http.youtube_dl_release.name'); }
+ get NAME() { return config.get('import.videos.http.youtube_dl_release.name'); },
+ get PYTHON_PATH() { return config.get('import.videos.http.youtube_dl_release.python_path'); }
},
get FORCE_IPV4() { return config.get('import.videos.http.force_ipv4'); }
},