Установка Peertube с обратным прокси сервером Apache2. PeerTube — это мощная, децентрализованная платформа для видеохостинга с открытым исходным кодом, позволяющая создать свой собственный видеопортал и стриминговый сервис.
Домен для Peertube
У регистратора доменных имен создать желаемый домен, для примера video.wildserver.ru
Получить сертификат Let’s Encrypt
Проверочный прогон:
sudo certbot certonly --dry-run -d video.wildserver.ru -d www.video.wildserver.ru
Получить сертификат:
sudo certbot certonly -d video.wildserver.ru -d www.video.wildserver.ru
Установка Docker compose
Установка Peertube
Создать каталог:
mkdir /home/sklad/peertube
Перейти в каталог
cd /home/sklad/peertube
Настройка docker-compose.yml Peertube
Скачать последнюю версию файла docker-compose.yml
:
curl https://raw.githubusercontent.com/chocobozzz/PeerTube/master/support/docker/production/docker-compose.yml > docker-compose.yml
nano docker-compose.yml
Этот конфиг отредактирован с учетом того, как будет реализован сервер Peertube: Сервис certbot
закомментирован поскольку сертификат будет получен для прокси сервера Apache2. Сервис webserver
весь закомментирован поскольку будет работать веб сервер Apache2. Почтовые сообщения будут рассылаться через сервер SMTP, настройки которого будут указаны в файле .env
. Так же можно сделать используя свой почтовый сервер, этот вариант рассматривать не буду. Выключить все что касается ipv6 ибо не поддерживается у меня.
services:
# You can comment this webserver section if you want to use another webserver/proxy or test PeerTube in local
# webserver:
# image: chocobozzz/peertube-webserver:latest
# If you don't want to use the official image and build one from sources:
# build:
# context: .
# dockerfile: Dockerfile.nginx
# env_file:
# - .env
# ports:
# - "8080:80"
# - "443:443"
# volumes:
# - type: bind
# Switch sources if you downloaded the whole repository
#source: ../../nginx/peertube
# source: ./docker-volume/nginx/peertube
# target: /etc/nginx/conf.d/peertube.template
# - assets:/var/www/peertube/peertube-latest/client/dist:ro
# - ./docker-volume/data:/var/www/peertube/storage
# - certbot-www:/var/www/certbot
# - ./docker-volume/certbot/conf:/etc/letsencrypt
# depends_on:
# - peertube
# restart: "always"
# You can comment this certbot section if you want to use another webserver/proxy or test PeerTube in local
# certbot:
# container_name: certbot
# image: certbot/certbot
# volumes:
# - ./docker-volume/certbot/conf:/etc/letsencrypt
# - certbot-www:/var/www/certbot
# restart: unless-stopped
# entrypoint: /bin/sh -c "trap exit TERM; while :; do certbot renew --webroot -w /var/www/certbot; sleep 12h & wait $${!}; done;"
# depends_on:
# - webserver
peertube:
# If you don't want to use the official image and build one from sources:
# build:
# context: .
# dockerfile: ./support/docker/production/Dockerfile.bookworm
image: chocobozzz/peertube:production-bookworm
# Use a static IP for this container because nginx does not handle proxy host change without reload
# This container could be restarted on crash or until the postgresql database is ready for connection
networks:
default:
ipv4_address: 172.18.0.42
# ipv6_address: 2001:db8:2::42
env_file:
- .env
environment:
- TZ=Europe/Moscow
ports:
- "1935:1935" # Comment if you don't want to use the live feature
- "9000:9000" # Uncomment if you use another webserver/proxy or test PeerTube in local, otherwise not suitable for production
volumes:
# Remove the following line if you want to use another webserver/proxy or test PeerTube in local
- assets:/app/client/dist
- ./docker-volume/data:/data
- ./docker-volume/config:/config
depends_on:
- postgres
- redis
- postfix
restart: "always"
postgres:
image: postgres:13-alpine
env_file:
- .env
environment:
- TZ=Europe/Moscow
volumes:
- ./docker-volume/db:/var/lib/postgresql/data
restart: "always"
redis:
image: redis:6-alpine
environment:
- TZ=Europe/Moscow
volumes:
- ./docker-volume/redis:/data
restart: "always"
postfix:
image: mwader/postfix-relay
env_file:
- .env
environment:
- TZ=Europe/Moscow
volumes:
- ./docker-volume/opendkim/keys:/etc/opendkim/keys
restart: "always"
networks:
default:
enable_ipv6: false
ipam:
driver: default
config:
- subnet: 172.18.0.0/16
# - subnet: 2001:db8:2::/64
volumes:
assets:
certbot-www:
Сохранить файл Ctrl+O Enter, закрыть Ctrl+X
services:
Эта секция определяет все службы, которые будут запущены в рамках этого docker-compose
проекта.
Сервисы
webserver
webserver:
image: chocobozzz/peertube-webserver:latest
- webserver: Название сервиса, который будет обрабатывать HTTP(S) запросы.
- image: Указывает, что будет использоваться последний образ
chocobozzz/peertube-webserver
для создания контейнера.
# If you don't want to use the official image and build one from sources:
# build:
# context: .
# dockerfile: Dockerfile.nginx
- build: Закомментированная секция, которая позволяет строить образ из исходников, если вы хотите внести изменения.
- context: Путь к директории, содержащей Dockerfile.
- dockerfile: Указывает, какой Dockerfile использовать для сборки образа.
env_file:
- .env
- env_file: Указывает файл
.env
, из которого будут загружены переменные окружения для этого сервиса.
ports:
- "80:80"
- "443:443"
- ports: Указывает, какие порты будут проброшены на хост-машину.
"80:80"
: Пробрасывает порт 80 (HTTP) из контейнера на хост."443:443"
: Пробрасывает порт 443 (HTTPS) из контейнера на хост.
volumes:
- type: bind
# Switch sources if you downloaded the whole repository
#source: ../../nginx/peertube
source: ./docker-volume/nginx/peertube
target: /etc/nginx/conf.d/peertube.template
- volumes: Указывает, какие каталоги будут примонтированы в контейнере.
type: bind
: Указывает, что используется связывание.- source: Путь на хосте, откуда будет взят конфигурационный файл для Nginx.
- target: Путь внутри контейнера, куда будет примонтирован файл.
- assets:/var/www/peertube/peertube-latest/client/dist:ro
- ./docker-volume/data:/var/www/peertube/storage
- certbot-www:/var/www/certbot
- ./docker-volume/certbot/conf:/etc/letsencrypt
- Здесь указаны дополнительные тома:
assets
: Примонтирует статические файлы клиента PeerTube../docker-volume/data
: Примонтирует папку для хранения данных PeerTube.certbot-www
: Примонтирует каталог, используемый для работы Certbot../docker-volume/certbot/conf
: Примонтирует каталог конфигурации для Let’s Encrypt.
depends_on:
- peertube
- depends_on: Указывает зависимости. Этот сервис не будет запущен, пока не будет запущен сервис
peertube
.
restart: "always"
- restart: Указывает политику перезапуска контейнера. В данном случае контейнер будет перезапускаться всегда, если он завершит работу.
certbot
certbot:
container_name: certbot
image: certbot/certbot
- certbot: Название сервиса для управления сертификатами Let’s Encrypt.
- container_name: Указывает имя контейнера.
- image: Использует образ Certbot для управления сертификатами.
volumes:
- ./docker-volume/certbot/conf:/etc/letsencrypt
- certbot-www:/var/www/certbot
- volumes: Указывает тома, которые будут примонтированы:
./docker-volume/certbot/conf
: Конфигурация Let’s Encrypt.certbot-www
: Папка, в которой Certbot будет хранить временные файлы.
restart: unless-stopped
- restart: Политика перезапуска. В этом случае контейнер будет перезапускаться, если он завершит работу, но не будет перезапускаться, если он был остановлен вручную.
entrypoint: /bin/sh -c "trap exit TERM; while :; do certbot renew --webroot -w /var/www/certbot; sleep 12h & wait $${!}; done;"
- entrypoint: Указывает команду, которая будет выполнена при запуске контейнера. Здесь это скрипт для автоматического обновления сертификатов каждые 12 часов.
depends_on:
- webserver
- depends_on: Этот сервис зависит от
webserver
, что означает, что он не будет запущен, пока не будет запущен сервисwebserver
.
peertube
peertube:
image: chocobozzz/peertube:production-bookworm
- peertube: Название сервиса, который запускает саму PeerTube.
- image: Использует образ PeerTube в версии
production-bookworm
.
networks:
default:
ipv4_address: 172.18.0.42
ipv6_address: 2001:db8:2::42
- networks: Определяет, в какой сети будет находиться контейнер.
ipv4_address
иipv6_address
: Указывают статические IP-адреса для контейнера.
env_file:
- .env
- Указывает файл
.env
, содержащий переменные окружения для PeerTube.
ports:
- "1935:1935" # Comment if you don't want to use the live feature
- ports: Пробрасывает порт 1935, используемый для трансляции в реальном времени. Закомментированная строка указывает, что этот порт можно закомментировать, если функция трансляции не требуется.
# - "9000:9000" # Uncomment if you use another webserver/proxy or test PeerTube in local, otherwise not suitable for production
- Эта строка закомментирована, но если вы используете другой веб-сервер или тестируете PeerTube локально, можно раскомментировать её, чтобы пробросить порт 9000.
volumes:
- assets:/app/client/dist
- ./docker-volume/data:/data
- ./docker-volume/config:/config
- Указывает тома для PeerTube:
assets
: Примонтирует статические файлы клиента../docker-volume/data
: Папка для хранения данных../docker-volume/config
: Папка для конфигурации PeerTube.
depends_on:
- postgres
- redis
- postfix
- depends_on: Указывает, что этот сервис зависит от других сервисов:
postgres
(база данных),redis
(кэш) иpostfix
(почтовый сервис).
restart: "always"
- Политика перезапуска контейнера: всегда перезапускать, если он завершит работу.
postgres
postgres:
image: postgres:13-alpine
- postgres: Название сервиса для PostgreSQL.
- image: Использует образ PostgreSQL версии 13 на базе Alpine.
env_file:
- .env
- Указывает, что этот сервис также использует файл
.env
для переменных окружения.
volumes:
- ./docker-volume/db:/var/lib/postgresql/data
- Примонтирует папку для хранения данных PostgreSQL, чтобы данные сохранялись между перезапусками контейнера.
restart: "always"
- Политика перезапуска контейнера: всегда перезапускать.
redis
redis:
image: redis:6-alpine
- redis: Название сервиса для Redis.
- image: Использует образ Redis версии 6 на базе Alpine.
volumes:
- ./docker-volume/redis:/data
- Примонтирует папку для хранения данных Redis.
restart: "always"
- Политика перезапуска контейнера: всегда перезапускать.
postfix
postfix:
image: mwader/postfix-relay
- postfix: Название сервиса для почтового сервера Postfix.
- image: Использует образ Postfix.
env_file:
- .env
- Использует файл
.env
для переменных окружения.
volumes:
- ./docker-volume/opendkim/keys:/etc/opendkim/keys
- Примонтирует папку для ключей DKIM, чтобы Postfix мог использовать их для подписи исходящих писем.
restart: "always"
- Политика перезапуска контейнера: всегда перезапускать.
Секции
networks
networks:
default:
enable_ipv6: true
ipam:
driver: default
config:
- subnet: 172.18.0.0/16
- subnet: 2001:db8:2::/64
- networks: Определяет сети, в которых будут работать контейнеры.
- default: Имя сети по умолчанию.
enable_ipv6
: Включает поддержку IPv6.- ipam: Указывает настройки управления IP-адресами, включая подсети для IPv4 и IPv6.
volumes
volumes:
assets:
- volumes: Определяет тома, которые могут использоваться разными контейнерами.
- assets: Определяет том
assets
, который будет использоваться для хранения статических файлов клиента.
- assets: Определяет том
Настройка .env Peertube
Скачать последнюю версию env_file:
curl https://raw.githubusercontent.com/Chocobozzz/PeerTube/master/support/docker/production/.env > .env
Отредактировать с учетом настроек в docker-compose
и своих данных: Сгенерировать ключ openssl rand -hex 32
вставить в строку PEERTUBE_SECRET
nano .env
# Database / Postgres service configuration
POSTGRES_USER=<ИМЯ ПОЛЗОВАТЕЛЯ БАЗЫ ДАННЫХ>
POSTGRES_PASSWORD=<ПАРОЛЬ БАЗЫ ДАННЫХ>
# Postgres database name "peertube"
POSTGRES_DB=peertube
# The database name used by PeerTube will be PEERTUBE_DB_NAME (only if set) *OR* 'peertube'+PEERTUBE_DB_SUFFIX
#PEERTUBE_DB_NAME=<MY POSTGRES DB NAME>
#PEERTUBE_DB_SUFFIX=_prod
# Database username and password used by PeerTube must match Postgres', so they are copied:
PEERTUBE_DB_USERNAME=$POSTGRES_USER
PEERTUBE_DB_PASSWORD=$POSTGRES_PASSWORD
PEERTUBE_DB_SSL=false
# Default to Postgres service name "postgres" in docker-compose.yml
PEERTUBE_DB_HOSTNAME=postgres
# PeerTube server configuration
# If you test PeerTube in local: use "peertube.localhost" and add this domain to your host file resolving on 127.0.0.1
PEERTUBE_WEBSERVER_HOSTNAME=<ДОМЕННОЕ ИМЯ СЕРВЕРА>
# If you just want to test PeerTube on local
PEERTUBE_WEBSERVER_PORT=443
PEERTUBE_WEBSERVER_HTTPS=true
# If you need more than one IP as trust_proxy
# pass them as a comma separated array:
PEERTUBE_TRUST_PROXY=["127.0.0.1", "loopback", "172.18.0.0/16"]
# Generate one using `openssl rand -hex 32`
PEERTUBE_SECRET=<СГЕНЕРИРОВАННЫЙ СЕКРЕТНЫЙ КЛЮЧ>
# E-mail configuration
# If you use a Custom SMTP server
PEERTUBE_SMTP_USERNAME=ИМЯ ПОЛЬЗОВАТЕЛЯ E-MAIL
PEERTUBE_SMTP_PASSWORD=ПАРОЛЬ ОТ ПОЧТЫ
# Default to Postfix service name "postfix" in docker-compose.yml
# May be the hostname of your Custom SMTP server
PEERTUBE_SMTP_HOSTNAME=<АДРЕС ПОЧТОВОГО СЕРВЕРА>
PEERTUBE_SMTP_PORT=587
PEERTUBE_SMTP_FROM=noreply@<MY DOMAIN>
PEERTUBE_SMTP_TLS=false
PEERTUBE_SMTP_DISABLE_STARTTLS=false
PEERTUBE_ADMIN_EMAIL=<ПОЧТОВЫЙ АДРЕС АДМИНА СЕРВЕРА>
# Postfix service configuration
#POSTFIX_myhostname=<MY DOMAIN>
# If you need to generate a list of sub/DOMAIN keys
# pass them as a whitespace separated string <DOMAIN>=<selector>
#OPENDKIM_DOMAINS=<MY DOMAIN>=peertube
# see https://github.com/wader/postfix-relay/pull/18
#OPENDKIM_RequireSafeKeys=no
#PEERTUBE_OBJECT_STORAGE_UPLOAD_ACL_PUBLIC="public-read"
#PEERTUBE_OBJECT_STORAGE_UPLOAD_ACL_PRIVATE="private"
#PEERTUBE_LOG_LEVEL=info
# /!\ Prefer to use the PeerTube admin interface to set the following configurations /!\
#PEERTUBE_SIGNUP_ENABLED=true
#PEERTUBE_TRANSCODING_ENABLED=true
#PEERTUBE_CONTACT_FORM_ENABLED=true
Сохранить файл Ctrl+O Enter, закрыть Ctrl+X
Конфигурация базы данных / Сервис Postgres
POSTGRES_USER=<MY POSTGRES USERNAME>
POSTGRES_PASSWORD=<MY POSTGRES PASSWORD>
POSTGRES_DB=peertube
PEERTUBE_DB_USERNAME=$POSTGRES_USER
PEERTUBE_DB_PASSWORD=$POSTGRES_PASSWORD
PEERTUBE_DB_SSL=false
PEERTUBE_DB_HOSTNAME=postgres
- POSTGRES_USER — имя пользователя для подключения к базе данных PostgreSQL. Этот пользователь создается при старте контейнера PostgreSQL.
- POSTGRES_PASSWORD — пароль для указанного пользователя PostgreSQL. Это важно для защиты доступа к базе данных.
- POSTGRES_DB — имя базы данных, которое используется для PeerTube. По умолчанию это
peertube
, но можно изменить. - PEERTUBE_DB_USERNAME и PEERTUBE_DB_PASSWORD — пользователь и пароль, которые использует PeerTube для подключения к базе данных. Эти значения копируются из настроек PostgreSQL, чтобы они совпадали.
- PEERTUBE_DB_SSL — отключает SSL для подключения к базе данных. Установлено в
false
, так как это внутренняя сеть Docker. - PEERTUBE_DB_HOSTNAME — хост базы данных, в данном случае это имя сервиса Postgres в Docker Compose, которое указано как
postgres
.
Альтернативные настройки базы данных:
#PEERTUBE_DB_NAME=<MY POSTGRES DB NAME>
#PEERTUBE_DB_SUFFIX=_prod
- PEERTUBE_DB_NAME — альтернативное имя базы данных. Если не указано, используется значение по умолчанию:
peertube
+PEERTUBE_DB_SUFFIX
. - PEERTUBE_DB_SUFFIX — добавляется к имени базы данных по умолчанию. Например, если указано
_prod
, база данных будет называтьсяpeertube_prod
.
Конфигурация веб-сервера PeerTube
PEERTUBE_WEBSERVER_HOSTNAME=<MY DOMAIN>
PEERTUBE_TRUST_PROXY=["127.0.0.1", "loopback", "172.18.0.0/16"]
PEERTUBE_SECRET=<MY PEERTUBE SECRET>
- PEERTUBE_WEBSERVER_HOSTNAME — домен, на котором доступен PeerTube. Например,
peertube.example.com
. - PEERTUBE_TRUST_PROXY — список доверенных прокси, которые могут передавать запросы. Это необходимо для корректной работы реверс-прокси (например, Nginx).
- PEERTUBE_SECRET — секретный ключ, который используется PeerTube для шифрования данных (например, сессий). Генерируется командой
openssl rand -hex 32
.
Альтернативные настройки:
#PEERTUBE_WEBSERVER_PORT=9000
#PEERTUBE_WEBSERVER_HTTPS=false
- PEERTUBE_WEBSERVER_PORT — порт, который будет использоваться для локального тестирования PeerTube. По умолчанию не используется, так как сервис работает через Nginx.
- PEERTUBE_WEBSERVER_HTTPS — включает или отключает HTTPS для локального тестирования. Обычно не используется в продакшене, так как Nginx управляет SSL-сертификатами.
Настройки Email
PEERTUBE_SMTP_HOSTNAME=postfix
PEERTUBE_SMTP_PORT=25
PEERTUBE_SMTP_FROM=noreply@<MY DOMAIN>
PEERTUBE_SMTP_TLS=false
PEERTUBE_SMTP_DISABLE_STARTTLS=false
PEERTUBE_ADMIN_EMAIL=<MY EMAIL ADDRESS>
- PEERTUBE_SMTP_HOSTNAME — имя SMTP-сервера, используемого для отправки почты. В этом случае используется встроенный контейнер Postfix, имя которого
postfix
. - PEERTUBE_SMTP_PORT — порт для SMTP-сервера (обычно 25).
- PEERTUBE_SMTP_FROM — адрес отправителя для исходящих писем, например,
noreply@yourdomain.com
. - PEERTUBE_SMTP_TLS — отключает использование TLS для SMTP. Установлено в
false
, так как это локальный сервер почты. - PEERTUBE_SMTP_DISABLE_STARTTLS — отключает команду
STARTTLS
. Обычноfalse
, если ваш сервер поддерживает STARTTLS. - PEERTUBE_ADMIN_EMAIL — email администратора, который будет использоваться для уведомлений и связи.
Альтернативные настройки:
#PEERTUBE_SMTP_USERNAME=
#PEERTUBE_SMTP_PASSWORD=
- PEERTUBE_SMTP_USERNAME и PEERTUBE_SMTP_PASSWORD — учетные данные для подключения к внешнему SMTP-серверу (если не используется Postfix).
Конфигурация Postfix
POSTFIX_myhostname=<MY DOMAIN>
OPENDKIM_DOMAINS=<MY DOMAIN>=peertube
OPENDKIM_RequireSafeKeys=no
- POSTFIX_myhostname — доменное имя сервера, которое Postfix использует как хост. Обычно совпадает с вашим основным доменом.
- OPENDKIM_DOMAINS — список доменов для OpenDKIM (технология подписи исходящих писем). Указывается домен и селектор, например,
peertube.example.com=peertube
. - OPENDKIM_RequireSafeKeys — отключает требование безопасных ключей для OpenDKIM. Полезно для упрощенной конфигурации.
Объектное хранилище
PEERTUBE_OBJECT_STORAGE_UPLOAD_ACL_PUBLIC="public-read"
PEERTUBE_OBJECT_STORAGE_UPLOAD_ACL_PRIVATE="private"
- PEERTUBE_OBJECT_STORAGE_UPLOAD_ACL_PUBLIC — если вы используете объектное хранилище (например, Amazon S3), эта настройка определяет права доступа к загруженным объектам.
public-read
делает объекты публично доступными. - PEERTUBE_OBJECT_STORAGE_UPLOAD_ACL_PRIVATE — аналогично,
private
делает объекты приватными.
Прочие настройки
#PEERTUBE_LOG_LEVEL=info
#PEERTUBE_SIGNUP_ENABLED=true
#PEERTUBE_TRANSCODING_ENABLED=true
#PEERTUBE_CONTACT_FORM_ENABLED=true
- PEERTUBE_LOG_LEVEL — уровень логирования. Может быть
info
,debug
,warn
и т.д. По умолчаниюinfo
. - PEERTUBE_SIGNUP_ENABLED — включение регистрации новых пользователей. Можно отключить, чтобы принимать пользователей только по приглашению.
- PEERTUBE_TRANSCODING_ENABLED — включает или отключает транс-кодирование видео.
- PEERTUBE_CONTACT_FORM_ENABLED — включает или отключает форму обратной связи на сайте.
Настройка Apache2 для Peertube
Для работы необходимы следующие модули:
core_module
proxy_module
proxy_http2_module
proxy_wstunnel_module
proxy_http_module
headers_module
remoteip_module
ssl_module
filter_module
reqtimeout_module
Проверить установленные модули:
sudo apachectl -M
Установить не достающие из списка, у меня не хватало proxy_http2_module
и remoteip_module
:
sudo a2enmod proxy_http2 remoteip
sudo systemctl restart apache2
Скачать конфиг виртуального хоста и поменять на свои данные, есть два варианта:
https://gist.github.com/ROBERT-MCDOWELL/7a55548d51a82080270b3184cd27ed36 - версия 6 Peertube
https://gist.github.com/rigelk/07a0b8963fa4fc1ad756374c28479bc7
Мой вариант выглядит пока скромно без каких либо наворотов, но будет дополнятся по мере необходимости во время эксплуатации сервиса Peertube
sudo nano /etc/apache2/sites-available/video.wildserver.ru-le-ssl.conf
<VirtualHost *:80>
ServerAdmin admin@wildserver.ru
ServerName video.wildserver.ru
ServerAlias www.video.wildserver.ru
CustomLog ${APACHE_LOG_DIR}/video.wildserver.ru.access.log combined
ErrorLog ${APACHE_LOG_DIR}/video.wildserver.ru.error.log
RewriteEngine on
RewriteCond %{SERVER_NAME} =www.video.wildserver.ru [OR]
RewriteCond %{SERVER_NAME} =video.wildserver.ru
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerAdmin admin@wildserver.ru
ServerName video.wildserver.ru
ServerAlias www.video.wildserver.ru
CustomLog ${APACHE_LOG_DIR}/video.wildserver.ru.access.log combined
ErrorLog ${APACHE_LOG_DIR}/video.wildserver.ru.error.log
# SSL настройки
Include /etc/letsencrypt/options-ssl-apache.conf
SSLCertificateFile /etc/letsencrypt/live/video.wildserver.ru/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/video.wildserver.ru/privkey.pem
# Заголовки безопасности
# Защита от понижения протокола с HTTPS на HTTP
Header always set Strict-Transport-Security "max-age=63072000; includeSubdomains; preload"
# Запрещаем встраивание страницы в iframe на других сайтах
Header always set X-Frame-Options SAMEORIGIN
# Защита от интерпретации MIME-типа
Header always set X-Content-Type-Options nosniff
# Политика реферера: не отправлять информацию на менее защищенные сайты
Header always set Referrer-Policy no-referrer-when-downgrade
# Политика безопасности содержимого
Header always set Content-Security-Policy "default-src https: data: 'unsafe-inline' 'unsafe-eval'"
# Защита от XSS-атак
Header always set X-XSS-Protection "1; mode=block"
# Ограничение использования определенных API
Header always set Feature-Policy "vibrate 'none'; usermedia 'none'"
# Обратный прокси
ProxyPreserveHost On
ProxyPass / http://localhost:9000/
ProxyPassReverse / http://localhost:9000/
ProxyPassReverse /api/ http://localhost:9000/api/
# WebSocket прокси
ProxyPass /socket ws://localhost:9000/socket
ProxyPassReverse /socket ws://localhost:9000/socket
# Поддержка больших файлов без ограничений размера
LimitRequestBody 0
# Разрешить доступ к PeerTube API
<Location /api/v1/users/me>
Header set Access-Control-Allow-Origin "*"
Header set Access-Control-Allow-Methods "GET, POST, OPTIONS"
Header set Access-Control-Allow-Headers "Authorization, Content-Type"
</Location>
</VirtualHost>
</IfModule>
Сохранить файл Ctrl+O Enter, закрыть Ctrl+X
Проверить конфигурацию запустив:
sudo apachectl configtest
Активировать виртуальный хост
sudo a2ensite video.wildserver.ru-le-ssl.conf
Перезапустить Apache2:
sudo systemctl restart apache2
Открыть порт для стрима в Peertube
Я почти уверен, что также понадобится правило в файерволе UFW, открывающее порт 1935 наружу, чтобы разрешить прямую трансляцию (стрим).
sudo ufw allow 1935/tcp
Первый запуск Peertube
Осторожно
После запуска нельзя будет поменять доменное имя для Peertube
Настал момент для запуска Peertube, для надежности поменяем каталог, если каким то образом находимся не в нем cd /home/sklad/peertube
Первый запуск:
docker compose up
В терминале будет выводится логи сервера. Из которых можно будет увидеть информацию о первом пользователе он же администратор сервера. Логин: **root ** и сгенерированный пароль, в этих строчках:
peertube-1 | [video.wildserver.ru:443] 2024-03-27 22:11:27.967 info: Username: root
peertube-1 | [video.wildserver.ru:443] 2024-03-27 22:11:27.967 info: User password: mevevomipewebeki
Примечание
Аккаунт root не удаляется и никак не меняется его роль, стоит изменить при первом входе на сайт отображаемое имя, а так же пароль, ограничить до нуля возможность загружать файлы, это будет аккаунт чисто для администрирования.
Логирование ведется в файл /home/sklad/peertube/docker-volume/data/logs/peertube.log
Запустив другой терминал выполнив команду, так же можно узнать логин и пароль главного администратора:
docker compose logs peertube | grep -A1 root
Просмотр возможных предупреждений
docker compose logs peertube | grep warn
- предупреждения, не критично но чтоб по фенхую исправлял.
docker compose logs peertube | grep error
- ошибки, хошь не хошь, а пути исправления надо искать, что были исправил, все было связано с конфигурацией.
А вот некоторые предупреждения запомнил и вот решения:
redis-1 WARNING Memory overcommit must be enabled! Without it, a background save or replication may fail under low memory condition. Being disabled, it can can also cause failures without low memory condition, see https://github.com/jemalloc/jemalloc/issues/1328. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.
Это предупреждение от Redis, указывающее на то, что настройки управления памятью в системе не позволяют Redis работать оптимально.
sudo sysctl vm.overcommit_memory=1
redis-1 WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
Это предупреждение от Redis указывает на то, что значение TCP backlog, установленное в конфигурации Redis (511), не может быть применено, потому что системное ограничение на максимальное количество подключений в очереди (параметр somaxconn) установлено на более низкое значение (128) в вашей системе.
Изменить значение somaxconn:
sudo sysctl -w net.core.somaxconn=511
Чтобы сделать изменения постоянными для обоих случаев добавить строки в sudo nano /etc/sysctl.conf
:
vm.overcommit_memory = 1
net.core.somaxconn=511
Применить настройки sudo sysctl -p
peertube-1 | [video.wildserver.ru:443] warn: It seems PeerTube was started (and created some data) with another domain name. This means you will not be able to federate! Please use NODE_CONFIG_DIR=/app/config:/app/support/docker/production/config:/config NODE_ENV=production npm run update-host to fix this.
Это предупреждение указывает на то, что PeerTube был запущен с другим доменным именем, и поэтому он не сможет федеративно взаимодействовать с другими инстансами Peertube. Необъодимо выполнить то что написано. Для этого:
Узнать, как называется контейнер peertube
docker ps
выведет все имена контейнеров, в моем случае он назван peertube-peertube-1
docker exec -it peertube-peertube-1 /bin/bash
открыть терминал в контейнере и выполнить указанную команду
NODE_CONFIG_DIR=/app/config:/app/support/docker/production/config:/config NODE_ENV=production npm run update-host
docker restart peertube-peertube-1
перезапустить контейнер
Обновление докера Peertube
Важно
Проверить журнал изменений на наличие дополнений касающихся докер образа
https://github.com/Chocobozzz/PeerTube/blob/develop/CHANGELOG.md
Перейти в каталог с Peertube:
cd /home/sklad/peertube
Загрузить последние изображения:
docker compose pull
Остановить, удалить контейнеры и внутренние тома:
docker compose down -v
Запустить Peertube
docker compose up -d
Бэкап и востановление базы данных
Чтобы сделать бэкап базы данных Peertube, запущенной в Docker, выполнить команду pg_dump
внутри контейнера PostgreSQL для создания дампа базы данных:
Найти имя контейнера PostgreSQL
Сначала узнать имя контейнера PostgreSQL:
docker ps
Найти строку с контейнером, использующим образ postgres:13-alpine
или подобный.
Выполнить бэкап базы данных
Выполнить команду создания дампа базы данных в файл:
docker exec -t <имя_контейнера_postgres> pg_dump -U <пользователь_postgres> peertube -F c > /path/to/backup/peertube_backup.sql
- Заменить
<имя_контейнера_postgres>
на фактическое имя контейнера PostgreSQL (например,peertube-postgres
). - Заменить
<пользователь_postgres>
на имя пользователя PostgreSQL (по умолчанию это может бытьpostgres
). /path/to/backup/peertube_backup.sql
— путь на сервере, куда сохранить бэкап базы данных.
Пример команды:
docker exec -t peertube-postgres-1 pg_dump -U postgres peertube -F c > /home/sklad/backup/peertube/
date +’%d%m%Y’-peertube_backup.sql
Восстановление базы данных
Чтобы восстановить базу данных из этого бэкапа команда pg_restore
:
docker exec -i <имя_контейнера_postgres> pg_restore -U <пользователь_postgres> -d peertube < /path/to/backup/peertube_backup.sql
Комментарии