commit 3f453af6c607b3de2b3e0e4352e7712d3f543cd6 Author: lagaffe <> Date: Tue Apr 21 19:11:13 2026 +0200 initial commit diff --git a/.env_base b/.env_base new file mode 100644 index 0000000..c4ad2dd --- /dev/null +++ b/.env_base @@ -0,0 +1,82 @@ +# Database / Postgres service configuration +POSTGRES_USER=piretube +POSTGRES_PASSWORD=< pass > +# 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= +#PEERTUBE_DB_SUFFIX=_prod +# Database username and password used by PeerTube must match Postgres', so they are copied: +PEERTUBE_DB_USERNAME=piretube +PEERTUBE_DB_PASSWORD=< pass > +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=piretube.urlab.be +# If you just want to test PeerTube on local +PEERTUBE_WEBSERVER_PORT=9000 +PEERTUBE_WEBSERVER_HTTPS=false +# 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=< itsasecret > + +# E-mail configuration +# If you use a Custom SMTP server +#PEERTUBE_SMTP_USERNAME= +#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=postfix +PEERTUBE_SMTP_PORT=25 +PEERTUBE_SMTP_FROM=contact@urlab.be +PEERTUBE_SMTP_TLS=false +PEERTUBE_SMTP_DISABLE_STARTTLS=false +PEERTUBE_ADMIN_EMAIL=contact@urlab.be + +# Postfix service configuration +POSTFIX_myhostname=piretube.urlab.be +# If you need to generate a list of sub/DOMAIN keys +# pass them as a whitespace separated string = +OPENDKIM_DOMAINS=piretube.urlab.be=peertube +# see https://github.com/wader/postfix-relay/pull/18 +OPENDKIM_RequireSafeKeys=no + +# If you want to enable object storage for PeerTube, set the following variables. +#PEERTUBE_OBJECT_STORAGE_ENABLED= +#PEERTUBE_OBJECT_STORAGE_ENDPOINT= +#PEERTUBE_OBJECT_STORAGE_REGION= +#PEERTUBE_OBJECT_STORAGE_FORCE_PATH_STYLE= +#PEERTUBE_OBJECT_STORAGE_CREDENTIALS_ACCESS_KEY_ID= +#PEERTUBE_OBJECT_STORAGE_CREDENTIALS_SECRET_ACCESS_KEY= +#PEERTUBE_OBJECT_STORAGE_STREAMING_PLAYLISTS_BUCKET_NAME= +#PEERTUBE_OBJECT_STORAGE_STREAMING_PLAYLISTS_PREFIX= +#PEERTUBE_OBJECT_STORAGE_STREAMING_PLAYLISTS_BASE_URL= +#PEERTUBE_OBJECT_STORAGE_WEB_VIDEOS_BUCKET_NAME= +#PEERTUBE_OBJECT_STORAGE_WEB_VIDEOS_PREFIX= +#PEERTUBE_OBJECT_STORAGE_WEB_VIDEOS_BASE_URL= +#PEERTUBE_OBJECT_STORAGE_USER_EXPORTS_BUCKET_NAME= +#PEERTUBE_OBJECT_STORAGE_USER_EXPORTS_PREFIX= +#PEERTUBE_OBJECT_STORAGE_USER_EXPORTS_BASE_URL= +#PEERTUBE_OBJECT_STORAGE_ORIGINAL_VIDEO_FILES_BUCKET_NAME= +#PEERTUBE_OBJECT_STORAGE_ORIGINAL_VIDEO_FILES_PREFIX= +#PEERTUBE_OBJECT_STORAGE_ORIGINAL_VIDEO_FILES_BASE_URL= +#PEERTUBE_OBJECT_STORAGE_CAPTIONS_BUCKET_NAME= +#PEERTUBE_OBJECT_STORAGE_CAPTIONS_PREFIX= +#PEERTUBE_OBJECT_STORAGE_CAPTIONS_BASE_URL= + +# Comment these variables if your S3 provider does not support object ACL +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 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..c76bb42 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +docker-volume diff --git a/.localenv b/.localenv new file mode 100644 index 0000000..554b369 --- /dev/null +++ b/.localenv @@ -0,0 +1,82 @@ +# Database / Postgres service configuration +POSTGRES_USER=lagaffe +POSTGRES_PASSWORD=lagaffe +# 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= +#PEERTUBE_DB_SUFFIX=_prod +# Database username and password used by PeerTube must match Postgres', so they are copied: +PEERTUBE_DB_USERNAME=lagaffe +PEERTUBE_DB_PASSWORD=lagaffe +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=peertube.localhost +# If you just want to test PeerTube on local +PEERTUBE_WEBSERVER_PORT=9000 +PEERTUBE_WEBSERVER_HTTPS=false +# 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=8356df4581770f99c8090889e892470e2cbea2bc7a2a74f69b50c9fc0da255a3 + +# E-mail configuration +# If you use a Custom SMTP server +#PEERTUBE_SMTP_USERNAME= +#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=postfix +PEERTUBE_SMTP_PORT=25 +PEERTUBE_SMTP_FROM=contact@urlab.be +PEERTUBE_SMTP_TLS=false +PEERTUBE_SMTP_DISABLE_STARTTLS=false +PEERTUBE_ADMIN_EMAIL=contact@urlab.be + +# Postfix service configuration +POSTFIX_myhostname=peertube.localhost +# If you need to generate a list of sub/DOMAIN keys +# pass them as a whitespace separated string = +OPENDKIM_DOMAINS==peertube +# see https://github.com/wader/postfix-relay/pull/18 +OPENDKIM_RequireSafeKeys=no + +# If you want to enable object storage for PeerTube, set the following variables. +#PEERTUBE_OBJECT_STORAGE_ENABLED= +#PEERTUBE_OBJECT_STORAGE_ENDPOINT= +#PEERTUBE_OBJECT_STORAGE_REGION= +#PEERTUBE_OBJECT_STORAGE_FORCE_PATH_STYLE= +#PEERTUBE_OBJECT_STORAGE_CREDENTIALS_ACCESS_KEY_ID= +#PEERTUBE_OBJECT_STORAGE_CREDENTIALS_SECRET_ACCESS_KEY= +#PEERTUBE_OBJECT_STORAGE_STREAMING_PLAYLISTS_BUCKET_NAME= +#PEERTUBE_OBJECT_STORAGE_STREAMING_PLAYLISTS_PREFIX= +#PEERTUBE_OBJECT_STORAGE_STREAMING_PLAYLISTS_BASE_URL= +#PEERTUBE_OBJECT_STORAGE_WEB_VIDEOS_BUCKET_NAME= +#PEERTUBE_OBJECT_STORAGE_WEB_VIDEOS_PREFIX= +#PEERTUBE_OBJECT_STORAGE_WEB_VIDEOS_BASE_URL= +#PEERTUBE_OBJECT_STORAGE_USER_EXPORTS_BUCKET_NAME= +#PEERTUBE_OBJECT_STORAGE_USER_EXPORTS_PREFIX= +#PEERTUBE_OBJECT_STORAGE_USER_EXPORTS_BASE_URL= +#PEERTUBE_OBJECT_STORAGE_ORIGINAL_VIDEO_FILES_BUCKET_NAME= +#PEERTUBE_OBJECT_STORAGE_ORIGINAL_VIDEO_FILES_PREFIX= +#PEERTUBE_OBJECT_STORAGE_ORIGINAL_VIDEO_FILES_BASE_URL= +#PEERTUBE_OBJECT_STORAGE_CAPTIONS_BUCKET_NAME= +#PEERTUBE_OBJECT_STORAGE_CAPTIONS_PREFIX= +#PEERTUBE_OBJECT_STORAGE_CAPTIONS_BASE_URL= + +# Comment these variables if your S3 provider does not support object ACL +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 diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..7bbd3d0 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,61 @@ +services: + peertube: + # If you don't want to use the official image and build one from sources: + # build: + # context: . + # dockerfile: ./support/docker/production/Dockerfile + image: docker.io/chocobozzz/peertube:production + # 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: fdab:e4b3:21a2:ef1b::42 + env_file: + - .env + + 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: + - ./docker-volume/data:/data + depends_on: + - postgres + - redis + - postfix + restart: "always" + + postgres: + image: docker.io/postgres:17-alpine + env_file: + - .env + volumes: + - ./docker-volume/db:/var/lib/postgresql/data + restart: "always" + + redis: + image: docker.io/redis:8-alpine + volumes: + - ./docker-volume/redis:/data + restart: "always" + + postfix: + image: docker.io/mwader/postfix-relay + env_file: + - .env + volumes: + - ./docker-volume/opendkim/keys:/etc/opendkim/keys + restart: "always" + +networks: + default: + enable_ipv6: true + ipam: + driver: default + config: + - subnet: 172.18.0.0/16 + - subnet: fdab:e4b3:21a2:ef1b::/64 + +volumes: + assets: + certbot-www: