From 8440ecd29bd6b6baf7e58ae3b76d033fdcc08a6c Mon Sep 17 00:00:00 2001 From: Roman Kelesidis Date: Thu, 21 Aug 2025 11:53:51 +0300 Subject: [PATCH 01/52] feat: Added Docker support --- Dockerfile | 35 +++++++++++++++++++++++++++++++++++ docker-compose.yml | 36 ++++++++++++++++++++++++++++++++++++ 2 files changed, 71 insertions(+) create mode 100644 Dockerfile create mode 100644 docker-compose.yml diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 000000000..7ff1f6484 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,35 @@ +FROM dunglas/frankenphp:1-php8.4 + +RUN apt-get update && apt-get install -y \ + cron \ + libicu-dev \ + libtidy-dev \ + libjpeg-dev \ + libpng-dev \ + libfreetype6-dev \ + libxml2-dev \ + libzip-dev \ + && docker-php-ext-install -j$(nproc) \ + mysqli \ + mbstring \ + gd \ + bcmath \ + intl \ + tidy \ + xml \ + xmlwriter \ + && rm -rf /var/lib/apt/lists/* + +WORKDIR /app +COPY . /app + +RUN echo "*/10 * * * * php /app/cron.php >> /var/log/cron.log 2>&1" > /etc/cron.d/app-cron \ + && chmod 0644 /etc/cron.d/app-cron \ + && crontab /etc/cron.d/app-cron \ + && touch /var/log/cron.log + +COPY install/Caddyfile /etc/caddy/Caddyfile + +EXPOSE 80 443 + +CMD service cron start && frankenphp run --config /etc/caddy/Caddyfile diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 000000000..08c5ed7ef --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,36 @@ +version: "3.9" + +services: + app: + build: . + container_name: php-app + ports: + - "${TP_PORT}:80" + env_file: + - .env + volumes: + - ./:/app + - ./internal_data:/app/internal_data + - ./data:/app/data + - ./sitemap:/app/sitemap + depends_on: + - db + + db: + image: mariadb:10.11 + container_name: db + restart: always + env_file: + - .env + environment: + MYSQL_ROOT_PASSWORD: ${DB_PASSWORD} + MYSQL_DATABASE: ${DB_DATABASE} + MYSQL_USER: ${DB_USERNAME} + MYSQL_PASSWORD: ${DB_PASSWORD} + ports: + - "${DB_PORT}:3306" + volumes: + - db_data:/var/lib/mysql + +volumes: + db_data: From fc6a021b76a81b92ad465d7af63a9574e4318b0f Mon Sep 17 00:00:00 2001 From: Roman Kelesidis Date: Thu, 21 Aug 2025 12:01:19 +0300 Subject: [PATCH 02/52] Update docker-compose.yml --- docker-compose.yml | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/docker-compose.yml b/docker-compose.yml index 08c5ed7ef..db67506a2 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -5,7 +5,8 @@ services: build: . container_name: php-app ports: - - "${TP_PORT}:80" + - "80:80" + - "443:443" env_file: - .env volumes: @@ -13,6 +14,8 @@ services: - ./internal_data:/app/internal_data - ./data:/app/data - ./sitemap:/app/sitemap + - caddy_data:/data + - caddy_config:/config depends_on: - db @@ -34,3 +37,5 @@ services: volumes: db_data: + caddy_data: + caddy_config: From ea9986978c68b54689a440575a33fa8dcc74438d Mon Sep 17 00:00:00 2001 From: Roman Kelesidis Date: Thu, 21 Aug 2025 12:04:27 +0300 Subject: [PATCH 03/52] Update Caddyfile --- install/Caddyfile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/install/Caddyfile b/install/Caddyfile index 43c8f8aa2..3e2adf60e 100644 --- a/install/Caddyfile +++ b/install/Caddyfile @@ -1,7 +1,7 @@ # Example Caddy configuration for TorrentPier -example.com { - root * /path/to/www +{$TP_HOST} { # Set your host manually if you are not using Docker + root * /app # Set your web root manually if you are not using Docker encode gzip zstd php_fastcgi unix//run/php/php-fpm.sock try_files {path} {path}/ /index.php?{query} From 999f0a9619a7d1c28a579f1c6d6dd04287eabfea Mon Sep 17 00:00:00 2001 From: Roman Kelesidis Date: Thu, 21 Aug 2025 12:04:58 +0300 Subject: [PATCH 04/52] Update Caddyfile --- install/Caddyfile | 1 + 1 file changed, 1 insertion(+) diff --git a/install/Caddyfile b/install/Caddyfile index 3e2adf60e..2fc70d4af 100644 --- a/install/Caddyfile +++ b/install/Caddyfile @@ -1,4 +1,5 @@ # Example Caddy configuration for TorrentPier +# Used by default for Docker {$TP_HOST} { # Set your host manually if you are not using Docker root * /app # Set your web root manually if you are not using Docker From a64c9b3328bcd25a709265f08a9df3a2022769b1 Mon Sep 17 00:00:00 2001 From: Roman Kelesidis Date: Thu, 21 Aug 2025 12:09:41 +0300 Subject: [PATCH 05/52] Update docker-compose.yml --- docker-compose.yml | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index db67506a2..7b755bfd6 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,9 +1,11 @@ version: "3.9" services: - app: - build: . - container_name: php-app + torrentpier-app: + build: + context: . + dockerfile: Dockerfile + container_name: torrentpier-app ports: - "80:80" - "443:443" @@ -17,11 +19,11 @@ services: - caddy_data:/data - caddy_config:/config depends_on: - - db + - torrentpier-db - db: + torrentpier-db: image: mariadb:10.11 - container_name: db + container_name: torrentpier-db restart: always env_file: - .env From 729a6e951e819bdbd1a739c40514ffc427b7ab53 Mon Sep 17 00:00:00 2001 From: Roman Kelesidis Date: Thu, 21 Aug 2025 12:17:36 +0300 Subject: [PATCH 06/52] Update docker-compose.yml --- docker-compose.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/docker-compose.yml b/docker-compose.yml index 7b755bfd6..23ee9326c 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -36,6 +36,7 @@ services: - "${DB_PORT}:3306" volumes: - db_data:/var/lib/mysql + - ./install/mysql.sql:/docker-entrypoint-initdb.d/mysql.sql:ro volumes: db_data: From 12376096df1444972402c7c77fa1e5a3b0b252a4 Mon Sep 17 00:00:00 2001 From: Roman Kelesidis Date: Thu, 21 Aug 2025 12:36:44 +0300 Subject: [PATCH 07/52] Update docker-compose.yml --- docker-compose.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index 23ee9326c..d1e9608de 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,5 +1,3 @@ -version: "3.9" - services: torrentpier-app: build: From f16a605c350a5232fb12d82741cb7a114234c45c Mon Sep 17 00:00:00 2001 From: Roman Kelesidis Date: Thu, 21 Aug 2025 12:45:11 +0300 Subject: [PATCH 08/52] Update Caddyfile --- install/Caddyfile | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/install/Caddyfile b/install/Caddyfile index 2fc70d4af..3de942165 100644 --- a/install/Caddyfile +++ b/install/Caddyfile @@ -4,7 +4,8 @@ {$TP_HOST} { # Set your host manually if you are not using Docker root * /app # Set your web root manually if you are not using Docker encode gzip zstd - php_fastcgi unix//run/php/php-fpm.sock + php_fastcgi app:9000 # Used for Docker + # php_fastcgi unix//run/php/php-fpm.sock try_files {path} {path}/ /index.php?{query} file_server From dc6ae4a1cbaa5a0d3bd233a84ceaf3642505ea1f Mon Sep 17 00:00:00 2001 From: Roman Kelesidis Date: Thu, 21 Aug 2025 15:07:06 +0300 Subject: [PATCH 09/52] Create .dockerignore --- .dockerignore | 1 + 1 file changed, 1 insertion(+) create mode 100644 .dockerignore diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 000000000..8b1378917 --- /dev/null +++ b/.dockerignore @@ -0,0 +1 @@ + From f7c65a24b0d3ad7bc1227098c88b2c9c9964390e Mon Sep 17 00:00:00 2001 From: Roman Kelesidis Date: Thu, 21 Aug 2025 15:13:58 +0300 Subject: [PATCH 10/52] Updated --- Dockerfile | 13 ++++++++----- docker-compose.yml | 5 +---- install/supervisord.conf | 18 ++++++++++++++++++ 3 files changed, 27 insertions(+), 9 deletions(-) create mode 100644 install/supervisord.conf diff --git a/Dockerfile b/Dockerfile index 7ff1f6484..ac9b47074 100644 --- a/Dockerfile +++ b/Dockerfile @@ -2,6 +2,7 @@ FROM dunglas/frankenphp:1-php8.4 RUN apt-get update && apt-get install -y \ cron \ + supervisor \ libicu-dev \ libtidy-dev \ libjpeg-dev \ @@ -18,18 +19,20 @@ RUN apt-get update && apt-get install -y \ tidy \ xml \ xmlwriter \ + zip \ && rm -rf /var/lib/apt/lists/* WORKDIR /app COPY . /app -RUN echo "*/10 * * * * php /app/cron.php >> /var/log/cron.log 2>&1" > /etc/cron.d/app-cron \ +RUN echo "*/10 * * * * php /app/cron.php >> /proc/1/fd/1 2>&1" > /etc/cron.d/app-cron \ && chmod 0644 /etc/cron.d/app-cron \ - && crontab /etc/cron.d/app-cron \ - && touch /var/log/cron.log + && crontab /etc/cron.d/app-cron COPY install/Caddyfile /etc/caddy/Caddyfile +COPY install/supervisord.conf /etc/supervisor/conf.d/supervisord.conf -EXPOSE 80 443 +EXPOSE 80 +# EXPOSE 80 443 -CMD service cron start && frankenphp run --config /etc/caddy/Caddyfile +CMD ["/usr/bin/supervisord", "-c", "/etc/supervisor/conf.d/supervisord.conf"] diff --git a/docker-compose.yml b/docker-compose.yml index d1e9608de..5c6a4e4e7 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -6,11 +6,10 @@ services: container_name: torrentpier-app ports: - "80:80" - - "443:443" + # - "443:443" env_file: - .env volumes: - - ./:/app - ./internal_data:/app/internal_data - ./data:/app/data - ./sitemap:/app/sitemap @@ -30,8 +29,6 @@ services: MYSQL_DATABASE: ${DB_DATABASE} MYSQL_USER: ${DB_USERNAME} MYSQL_PASSWORD: ${DB_PASSWORD} - ports: - - "${DB_PORT}:3306" volumes: - db_data:/var/lib/mysql - ./install/mysql.sql:/docker-entrypoint-initdb.d/mysql.sql:ro diff --git a/install/supervisord.conf b/install/supervisord.conf new file mode 100644 index 000000000..21389ed46 --- /dev/null +++ b/install/supervisord.conf @@ -0,0 +1,18 @@ +[supervisord] +nodaemon=true +user=root + +[program:cron] +command=cron -f +autostart=true +autorestart=true +stderr_logfile=/var/log/cron.err.log +stdout_logfile=/var/log/cron.out.log + +[program:frankenphp] +command=frankenphp run --config /etc/caddy/Caddyfile +directory=/app +autostart=true +autorestart=true +stderr_logfile=/var/log/frankenphp.err.log +stdout_logfile=/var/log/frankenphp.out.log From f8c5c2f43a73cfe48278cb36262591c80eceef60 Mon Sep 17 00:00:00 2001 From: Roman Kelesidis Date: Thu, 21 Aug 2025 15:24:38 +0300 Subject: [PATCH 11/52] Updated --- Dockerfile | 2 +- install/Caddyfile | 1 - install/docker/Caddyfile | 49 +++++++++++++++++++++++++++ install/{ => docker}/supervisord.conf | 0 4 files changed, 50 insertions(+), 2 deletions(-) create mode 100644 install/docker/Caddyfile rename install/{ => docker}/supervisord.conf (100%) diff --git a/Dockerfile b/Dockerfile index ac9b47074..555196297 100644 --- a/Dockerfile +++ b/Dockerfile @@ -30,7 +30,7 @@ RUN echo "*/10 * * * * php /app/cron.php >> /proc/1/fd/1 2>&1" > /etc/cron.d/app && crontab /etc/cron.d/app-cron COPY install/Caddyfile /etc/caddy/Caddyfile -COPY install/supervisord.conf /etc/supervisor/conf.d/supervisord.conf +COPY install/docker/supervisord.conf /etc/supervisor/conf.d/supervisord.conf EXPOSE 80 # EXPOSE 80 443 diff --git a/install/Caddyfile b/install/Caddyfile index 3de942165..38e73afa6 100644 --- a/install/Caddyfile +++ b/install/Caddyfile @@ -1,5 +1,4 @@ # Example Caddy configuration for TorrentPier -# Used by default for Docker {$TP_HOST} { # Set your host manually if you are not using Docker root * /app # Set your web root manually if you are not using Docker diff --git a/install/docker/Caddyfile b/install/docker/Caddyfile new file mode 100644 index 000000000..d8a640001 --- /dev/null +++ b/install/docker/Caddyfile @@ -0,0 +1,49 @@ +# Caddy configuration for TorrentPier (Docker) + +{ + auto_https {$SSL_ENABLED:off} + admin off +} + +{$TP_HOST}{$TP_PORT:80} { + root * /app + encode gzip zstd + + php { + root /app + } + + try_files {path} {path}/ /index.php?{query} + file_server + + @blocked { + path /install/* /internal_data/* /library/* /config/* + path /.ht* /.en* /.git* /.docker* + path *.sql *.tpl *.db *.inc *.log *.md + path /docker-compose.yml /Dockerfile /.env* + } + respond @blocked 404 + + redir /sitemap.xml /sitemap/sitemap.xml 301 + + @static { + path *.html *.css *.js *.json *.xml *.txt *.ico + path *.png *.jpg *.jpeg *.gif *.svg *.webp + path *.woff *.woff2 *.ttf *.eot + } + header @static { + Content-Type "{mime}; charset=utf-8" + Cache-Control "public, max-age=31536000" + } + + header { + X-Frame-Options "SAMEORIGIN" + X-Content-Type-Options "nosniff" + Referrer-Policy "strict-origin-when-cross-origin" + } +} + +# HTTPS redirect (only if SSL is enabled) +# http://{$TP_HOST} { +# redir https://{$TP_HOST}{uri} permanent +# } diff --git a/install/supervisord.conf b/install/docker/supervisord.conf similarity index 100% rename from install/supervisord.conf rename to install/docker/supervisord.conf From 1a0213817e92c3d1e75286f083ae33c394dac2e7 Mon Sep 17 00:00:00 2001 From: Roman Kelesidis Date: Thu, 21 Aug 2025 15:26:36 +0300 Subject: [PATCH 12/52] Update Dockerfile --- Dockerfile | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/Dockerfile b/Dockerfile index 555196297..32b6a511e 100644 --- a/Dockerfile +++ b/Dockerfile @@ -29,10 +29,9 @@ RUN echo "*/10 * * * * php /app/cron.php >> /proc/1/fd/1 2>&1" > /etc/cron.d/app && chmod 0644 /etc/cron.d/app-cron \ && crontab /etc/cron.d/app-cron -COPY install/Caddyfile /etc/caddy/Caddyfile +COPY install/docker/Caddyfile /etc/caddy/Caddyfile COPY install/docker/supervisord.conf /etc/supervisor/conf.d/supervisord.conf -EXPOSE 80 -# EXPOSE 80 443 +EXPOSE 80 443 CMD ["/usr/bin/supervisord", "-c", "/etc/supervisor/conf.d/supervisord.conf"] From 2f5d0e0820432168eeca23e530f695e09474fc66 Mon Sep 17 00:00:00 2001 From: Roman Kelesidis Date: Thu, 21 Aug 2025 15:28:10 +0300 Subject: [PATCH 13/52] Update docker-compose.yml --- docker-compose.yml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index 5c6a4e4e7..0a42cbd5d 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -5,8 +5,8 @@ services: dockerfile: Dockerfile container_name: torrentpier-app ports: - - "80:80" - # - "443:443" + - "${TP_PORT}:80" + - "${SSL_PORT:-443}:443" env_file: - .env volumes: @@ -29,6 +29,8 @@ services: MYSQL_DATABASE: ${DB_DATABASE} MYSQL_USER: ${DB_USERNAME} MYSQL_PASSWORD: ${DB_PASSWORD} + ports: + - "${DB_PORT}:3306" volumes: - db_data:/var/lib/mysql - ./install/mysql.sql:/docker-entrypoint-initdb.d/mysql.sql:ro From 1fc43888966225a6bbfc0c0ad44d91a8a5e2a346 Mon Sep 17 00:00:00 2001 From: Roman Kelesidis Date: Thu, 21 Aug 2025 15:30:17 +0300 Subject: [PATCH 14/52] Update docker-compose.yml --- docker-compose.yml | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index 0a42cbd5d..fe0c92412 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -5,7 +5,7 @@ services: dockerfile: Dockerfile container_name: torrentpier-app ports: - - "${TP_PORT}:80" + - "${TP_PORT:-80}:80" - "${SSL_PORT:-443}:443" env_file: - .env @@ -29,8 +29,6 @@ services: MYSQL_DATABASE: ${DB_DATABASE} MYSQL_USER: ${DB_USERNAME} MYSQL_PASSWORD: ${DB_PASSWORD} - ports: - - "${DB_PORT}:3306" volumes: - db_data:/var/lib/mysql - ./install/mysql.sql:/docker-entrypoint-initdb.d/mysql.sql:ro From 946282252ff491530963d9af11fd3eb379f39224 Mon Sep 17 00:00:00 2001 From: Roman Kelesidis Date: Thu, 21 Aug 2025 15:33:27 +0300 Subject: [PATCH 15/52] Update supervisord.conf --- install/docker/supervisord.conf | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/install/docker/supervisord.conf b/install/docker/supervisord.conf index 21389ed46..76e02f365 100644 --- a/install/docker/supervisord.conf +++ b/install/docker/supervisord.conf @@ -1,18 +1,24 @@ [supervisord] nodaemon=true user=root +logfile=/var/log/supervisord.log +pidfile=/var/run/supervisord.pid [program:cron] command=cron -f autostart=true autorestart=true -stderr_logfile=/var/log/cron.err.log -stdout_logfile=/var/log/cron.out.log +stderr_logfile=/dev/stderr +stderr_logfile_maxbytes=0 +stdout_logfile=/dev/stdout +stdout_logfile_maxbytes=0 [program:frankenphp] command=frankenphp run --config /etc/caddy/Caddyfile directory=/app autostart=true autorestart=true -stderr_logfile=/var/log/frankenphp.err.log -stdout_logfile=/var/log/frankenphp.out.log +stderr_logfile=/dev/stderr +stderr_logfile_maxbytes=0 +stdout_logfile=/dev/stdout +stdout_logfile_maxbytes=0 From 6334c242352e0ee147ab6a6a76c97922723a985b Mon Sep 17 00:00:00 2001 From: Roman Kelesidis Date: Thu, 21 Aug 2025 15:38:59 +0300 Subject: [PATCH 16/52] Update Caddyfile --- install/Caddyfile | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/install/Caddyfile b/install/Caddyfile index 38e73afa6..43c8f8aa2 100644 --- a/install/Caddyfile +++ b/install/Caddyfile @@ -1,10 +1,9 @@ # Example Caddy configuration for TorrentPier -{$TP_HOST} { # Set your host manually if you are not using Docker - root * /app # Set your web root manually if you are not using Docker +example.com { + root * /path/to/www encode gzip zstd - php_fastcgi app:9000 # Used for Docker - # php_fastcgi unix//run/php/php-fpm.sock + php_fastcgi unix//run/php/php-fpm.sock try_files {path} {path}/ /index.php?{query} file_server From 53903be8dcb805af84009e407acbe121d088284a Mon Sep 17 00:00:00 2001 From: Roman Kelesidis Date: Thu, 21 Aug 2025 15:42:06 +0300 Subject: [PATCH 17/52] Create setup-docker.sh --- setup-docker.sh | 52 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 setup-docker.sh diff --git a/setup-docker.sh b/setup-docker.sh new file mode 100644 index 000000000..a81276a40 --- /dev/null +++ b/setup-docker.sh @@ -0,0 +1,52 @@ +#!/bin/bash + +echo "đŸŗ Setting up TorrentPier for Docker..." +echo "" + +if [ ! -f .env ]; then + if [ -f .env.example ]; then + cp .env.example .env + echo "✅ Created .env from .env.example" + else + echo "❌ Error: .env.example not found!" + exit 1 + fi +else + echo "â„šī¸ .env file already exists, updating for Docker..." +fi + +cp .env .env.backup +echo "💾 Backup created: .env.backup" + +if grep -q "DB_HOST=localhost" .env; then + sed -i 's/DB_HOST=localhost/DB_HOST=torrentpier-db/' .env + echo "✅ Updated DB_HOST for Docker" +fi + +if ! grep -q "SSL_ENABLED" .env; then + echo "" >> .env + echo "# Docker-specific configuration" >> .env + echo "SSL_ENABLED=off" >> .env + echo "SSL_PORT=443" >> .env + echo "✅ Added Docker SSL configuration" +fi + +echo "" +echo "🎉 Docker setup complete!" +echo "" +echo "📋 Next steps:" +echo " 1. Run: docker-compose up" +echo " 2. Open: http://localhost" +echo "" +echo "🔒 To enable HTTPS/SSL:" +echo " 1. Edit .env file and change:" +echo " TP_HOST=localhost → TP_HOST=yourdomain.com" +echo " SSL_ENABLED=off → SSL_ENABLED=on" +echo " 2. Make sure your domain points to this server" +echo " 3. Restart: docker-compose down && docker-compose up" +echo "" +echo "âš ī¸ SSL Notes:" +echo " - SSL requires a real domain (not localhost/IP)" +echo " - Caddy will automatically get Let's Encrypt certificates" +echo " - Port 80 and 443 must be accessible from the internet" +echo "" From 0d7c796e4f9140f7cd6eb05a808558b1acc7041c Mon Sep 17 00:00:00 2001 From: Roman Kelesidis Date: Thu, 21 Aug 2025 15:49:23 +0300 Subject: [PATCH 18/52] Update README.md --- README.md | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 8d28859d9..2a666542b 100644 --- a/README.md +++ b/README.md @@ -65,7 +65,24 @@ and go from there. The documentation will be translated to English in the near f For the installation, select one of the installation variants below: -### Quick (Clean install) 🚀 +### Quick Start with Docker 🚀 + +1. Select the folder where you want TorrentPier installed + ```shell + cd /path/to/www + ``` +2. Download the latest version of TorrentPier + ```shell + git clone --branch v2.4 --depth 1 https://github.com/torrentpier/torrentpier.git . + ``` +3. Setup Docker + ```shell + chmod +x setup-docker.sh + ./setup-docker.sh + ``` +4. Voila! ✨ + +### Quick (Installation script) 🚀 Check out our [autoinstall](https://github.com/torrentpier/autoinstall) repository with detailed instructions. From 65600b4edb6b1b46d34e5774b2cdff2b2b2255c2 Mon Sep 17 00:00:00 2001 From: Roman Kelesidis Date: Thu, 21 Aug 2025 15:51:10 +0300 Subject: [PATCH 19/52] Update Caddyfile --- install/docker/Caddyfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install/docker/Caddyfile b/install/docker/Caddyfile index d8a640001..4248e2238 100644 --- a/install/docker/Caddyfile +++ b/install/docker/Caddyfile @@ -17,7 +17,7 @@ file_server @blocked { - path /install/* /internal_data/* /library/* /config/* + path /install/* /internal_data/* /library/* path /.ht* /.en* /.git* /.docker* path *.sql *.tpl *.db *.inc *.log *.md path /docker-compose.yml /Dockerfile /.env* From 8eca0b923917fac1b70b8450b917f380f6821f19 Mon Sep 17 00:00:00 2001 From: Roman Kelesidis Date: Thu, 21 Aug 2025 16:05:28 +0300 Subject: [PATCH 20/52] Update Dockerfile --- Dockerfile | 1 + 1 file changed, 1 insertion(+) diff --git a/Dockerfile b/Dockerfile index 32b6a511e..3639bba54 100644 --- a/Dockerfile +++ b/Dockerfile @@ -10,6 +10,7 @@ RUN apt-get update && apt-get install -y \ libfreetype6-dev \ libxml2-dev \ libzip-dev \ + libonig-dev \ && docker-php-ext-install -j$(nproc) \ mysqli \ mbstring \ From 792ffbca00d9cfafa29b20acdf8f461551bd5d1f Mon Sep 17 00:00:00 2001 From: Roman Kelesidis Date: Thu, 21 Aug 2025 16:13:39 +0300 Subject: [PATCH 21/52] Update docker-compose.yml --- docker-compose.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker-compose.yml b/docker-compose.yml index fe0c92412..cea93a510 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -31,7 +31,7 @@ services: MYSQL_PASSWORD: ${DB_PASSWORD} volumes: - db_data:/var/lib/mysql - - ./install/mysql.sql:/docker-entrypoint-initdb.d/mysql.sql:ro + - ./install/sql/mysql.sql:/docker-entrypoint-initdb.d/mysql.sql:ro volumes: db_data: From 3f970faad4a85f5463658baa86cf9c4152021ac5 Mon Sep 17 00:00:00 2001 From: Roman Kelesidis Date: Thu, 21 Aug 2025 16:17:59 +0300 Subject: [PATCH 22/52] Update Caddyfile --- install/docker/Caddyfile | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/install/docker/Caddyfile b/install/docker/Caddyfile index 4248e2238..40e55707e 100644 --- a/install/docker/Caddyfile +++ b/install/docker/Caddyfile @@ -8,11 +8,7 @@ {$TP_HOST}{$TP_PORT:80} { root * /app encode gzip zstd - - php { - root /app - } - + php_server try_files {path} {path}/ /index.php?{query} file_server From a337ecf9b7257f10e45ee9f16a4a24828f89f2ef Mon Sep 17 00:00:00 2001 From: Roman Kelesidis Date: Thu, 21 Aug 2025 16:31:06 +0300 Subject: [PATCH 23/52] Update Dockerfile --- Dockerfile | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Dockerfile b/Dockerfile index 3639bba54..9b9c2ce74 100644 --- a/Dockerfile +++ b/Dockerfile @@ -26,6 +26,8 @@ RUN apt-get update && apt-get install -y \ WORKDIR /app COPY . /app +RUN composer install --prefer-dist --optimize-autoloader + RUN echo "*/10 * * * * php /app/cron.php >> /proc/1/fd/1 2>&1" > /etc/cron.d/app-cron \ && chmod 0644 /etc/cron.d/app-cron \ && crontab /etc/cron.d/app-cron From d52b874e8a02527131267cfbf04c9cbc543feaf2 Mon Sep 17 00:00:00 2001 From: Roman Kelesidis Date: Thu, 21 Aug 2025 16:34:28 +0300 Subject: [PATCH 24/52] Update Dockerfile --- Dockerfile | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Dockerfile b/Dockerfile index 9b9c2ce74..9278092ad 100644 --- a/Dockerfile +++ b/Dockerfile @@ -23,6 +23,8 @@ RUN apt-get update && apt-get install -y \ zip \ && rm -rf /var/lib/apt/lists/* +COPY --from=composer:latest /usr/bin/composer /usr/bin/composer + WORKDIR /app COPY . /app From 1d24f3625a5b93ebafe030c0179c458bf78a9ca3 Mon Sep 17 00:00:00 2001 From: Roman Kelesidis Date: Thu, 21 Aug 2025 17:28:07 +0300 Subject: [PATCH 25/52] Update Caddyfile --- install/docker/Caddyfile | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/install/docker/Caddyfile b/install/docker/Caddyfile index 40e55707e..b7ee46c7b 100644 --- a/install/docker/Caddyfile +++ b/install/docker/Caddyfile @@ -32,11 +32,10 @@ Cache-Control "public, max-age=31536000" } - header { - X-Frame-Options "SAMEORIGIN" - X-Content-Type-Options "nosniff" - Referrer-Policy "strict-origin-when-cross-origin" + @html_css_js { + path *.html *.css *.js *.json *.xml *.txt } + header @html_css_js Content-Type "{mime}; charset=utf-8" } # HTTPS redirect (only if SSL is enabled) From ead645e91c70054fc9e8ec04e2460c2724b5df8e Mon Sep 17 00:00:00 2001 From: Roman Kelesidis Date: Thu, 21 Aug 2025 17:30:21 +0300 Subject: [PATCH 26/52] Update Caddyfile --- install/docker/Caddyfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install/docker/Caddyfile b/install/docker/Caddyfile index b7ee46c7b..fbfea0faa 100644 --- a/install/docker/Caddyfile +++ b/install/docker/Caddyfile @@ -5,7 +5,7 @@ admin off } -{$TP_HOST}{$TP_PORT:80} { +{$TP_HOST}:{$TP_PORT:80} { root * /app encode gzip zstd php_server From 658282e4c4c8f1602d52cb9f9fa504322b9345d7 Mon Sep 17 00:00:00 2001 From: Roman Kelesidis Date: Thu, 21 Aug 2025 17:55:20 +0300 Subject: [PATCH 27/52] Update setup-docker.sh --- setup-docker.sh | 48 +++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 45 insertions(+), 3 deletions(-) diff --git a/setup-docker.sh b/setup-docker.sh index a81276a40..d49183f0c 100644 --- a/setup-docker.sh +++ b/setup-docker.sh @@ -23,6 +23,49 @@ if grep -q "DB_HOST=localhost" .env; then echo "✅ Updated DB_HOST for Docker" fi +if grep -q "DB_USERNAME=root" .env; then + sed -i 's/DB_USERNAME=root/DB_USERNAME=torrentpier_user/' .env + echo "✅ Updated DB_USERNAME to torrentpier_user" +fi + +echo "" +read -s -p "🔐 Enter database password for 'torrentpier_user': " DB_PASSWORD +echo "" + +if [ -z "$DB_PASSWORD" ]; then + echo "❌ Error: Database password cannot be empty!" + exit 1 +fi + +ESCAPED_PASSWORD=$(printf '%s\n' "$DB_PASSWORD" | sed 's/[&/\]/\\&/g') + +if grep -q "DB_PASSWORD=" .env; then + sed -i "s|DB_PASSWORD=.*|DB_PASSWORD=$ESCAPED_PASSWORD|" .env + echo "✅ Updated DB_PASSWORD in .env" +else + echo "DB_PASSWORD=$DB_PASSWORD" >> .env + echo "✅ Added DB_PASSWORD to .env" +fi + +echo "" +read -p "🌐 Enter your host (IP or domain, e.g. 192.168.1.100 or mytp.example.com): " TP_HOST +echo "" + +if [ -z "$TP_HOST" ]; then + echo "❌ Error: Host cannot be empty!" + exit 1 +fi + +ESCAPED_HOST=$(printf '%s\n' "$TP_HOST" | sed 's/[&/\]/\\&/g') + +if grep -q "TP_HOST=" .env; then + sed -i "s|TP_HOST=.*|TP_HOST=$ESCAPED_HOST|" .env + echo "✅ Updated TP_HOST to $TP_HOST" +else + echo "TP_HOST=$TP_HOST" >> .env + echo "✅ Added TP_HOST to .env" +fi + if ! grep -q "SSL_ENABLED" .env; then echo "" >> .env echo "# Docker-specific configuration" >> .env @@ -36,12 +79,11 @@ echo "🎉 Docker setup complete!" echo "" echo "📋 Next steps:" echo " 1. Run: docker-compose up" -echo " 2. Open: http://localhost" +echo " 2. Open: http://$TP_HOST" echo "" echo "🔒 To enable HTTPS/SSL:" echo " 1. Edit .env file and change:" -echo " TP_HOST=localhost → TP_HOST=yourdomain.com" -echo " SSL_ENABLED=off → SSL_ENABLED=on" +echo " SSL_ENABLED=off → SSL_ENABLED=on" echo " 2. Make sure your domain points to this server" echo " 3. Restart: docker-compose down && docker-compose up" echo "" From 498f60b049e2e0167c44a007a32de2dd204a4f93 Mon Sep 17 00:00:00 2001 From: Roman Kelesidis Date: Thu, 21 Aug 2025 18:47:37 +0300 Subject: [PATCH 28/52] Update Dockerfile --- Dockerfile | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Dockerfile b/Dockerfile index 9278092ad..1d3b70652 100644 --- a/Dockerfile +++ b/Dockerfile @@ -30,6 +30,8 @@ COPY . /app RUN composer install --prefer-dist --optimize-autoloader +RUN php _cleanup.php && rm _cleanup.php + RUN echo "*/10 * * * * php /app/cron.php >> /proc/1/fd/1 2>&1" > /etc/cron.d/app-cron \ && chmod 0644 /etc/cron.d/app-cron \ && crontab /etc/cron.d/app-cron From 6c5102071eae9eaa1fcf0758d984b5904848ef5a Mon Sep 17 00:00:00 2001 From: Roman Kelesidis Date: Thu, 21 Aug 2025 18:51:15 +0300 Subject: [PATCH 29/52] Update setup-docker.sh --- setup-docker.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup-docker.sh b/setup-docker.sh index d49183f0c..27fd147f7 100644 --- a/setup-docker.sh +++ b/setup-docker.sh @@ -48,7 +48,7 @@ else fi echo "" -read -p "🌐 Enter your host (IP or domain, e.g. 192.168.1.100 or mytp.example.com): " TP_HOST +read -p "🌐 Enter your host (IP or domain, e.g. 192.168.1.100 or example.com): " TP_HOST echo "" if [ -z "$TP_HOST" ]; then From 7b23de8bc7db45f903ec12d32277cfce4ca312fd Mon Sep 17 00:00:00 2001 From: Roman Kelesidis Date: Thu, 21 Aug 2025 18:55:13 +0300 Subject: [PATCH 30/52] Update setup-docker.sh --- setup-docker.sh | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/setup-docker.sh b/setup-docker.sh index 27fd147f7..a29a49fbf 100644 --- a/setup-docker.sh +++ b/setup-docker.sh @@ -18,6 +18,10 @@ fi cp .env .env.backup echo "💾 Backup created: .env.backup" +if grep -q "APP_CRON_ENABLED=true" .env; then + sed -i 's/APP_CRON_ENABLED=true/APP_CRON_ENABLED=false/' .env +fi + if grep -q "DB_HOST=localhost" .env; then sed -i 's/DB_HOST=localhost/DB_HOST=torrentpier-db/' .env echo "✅ Updated DB_HOST for Docker" From 204e9508675b50cffc357881d7aab00f6162170a Mon Sep 17 00:00:00 2001 From: Roman Kelesidis Date: Thu, 21 Aug 2025 18:57:46 +0300 Subject: [PATCH 31/52] Delete .dockerignore --- .dockerignore | 1 - 1 file changed, 1 deletion(-) delete mode 100644 .dockerignore diff --git a/.dockerignore b/.dockerignore deleted file mode 100644 index 8b1378917..000000000 --- a/.dockerignore +++ /dev/null @@ -1 +0,0 @@ - From 7d79deb36e9492e5ac76d66edd544826b9817a54 Mon Sep 17 00:00:00 2001 From: Roman Kelesidis Date: Thu, 21 Aug 2025 19:04:02 +0300 Subject: [PATCH 32/52] Update setup-docker.sh --- setup-docker.sh | 42 +++++++++++++++++++++++++++--------------- 1 file changed, 27 insertions(+), 15 deletions(-) diff --git a/setup-docker.sh b/setup-docker.sh index a29a49fbf..431263de5 100644 --- a/setup-docker.sh +++ b/setup-docker.sh @@ -70,12 +70,31 @@ else echo "✅ Added TP_HOST to .env" fi -if ! grep -q "SSL_ENABLED" .env; then +echo "" +echo "âš ī¸ SSL Notes:" +echo " - SSL requires a real domain (not localhost/IP)" +echo " - Caddy will automatically get Let's Encrypt certificates" +echo " - Port 80 and 443 must be accessible from the internet" +echo "" + +read -p "🔐 Do you want to enable SSL (HTTPS)? [y/N]: " ENABLE_SSL +ENABLE_SSL=$(echo "$ENABLE_SSL" | tr '[:upper:]' '[:lower:]') + +if [ "$ENABLE_SSL" = "y" ] || [ "$ENABLE_SSL" = "yes" ]; then + SSL_ENABLED="on" +else + SSL_ENABLED="off" +fi + +if grep -q "SSL_ENABLED" .env; then + sed -i "s|SSL_ENABLED=.*|SSL_ENABLED=$SSL_ENABLED|" .env + echo "✅ Updated SSL_ENABLED to $SSL_ENABLED" +else echo "" >> .env echo "# Docker-specific configuration" >> .env - echo "SSL_ENABLED=off" >> .env + echo "SSL_ENABLED=$SSL_ENABLED" >> .env echo "SSL_PORT=443" >> .env - echo "✅ Added Docker SSL configuration" + echo "✅ Added Docker SSL configuration (SSL_ENABLED=$SSL_ENABLED)" fi echo "" @@ -83,16 +102,9 @@ echo "🎉 Docker setup complete!" echo "" echo "📋 Next steps:" echo " 1. Run: docker-compose up" -echo " 2. Open: http://$TP_HOST" -echo "" -echo "🔒 To enable HTTPS/SSL:" -echo " 1. Edit .env file and change:" -echo " SSL_ENABLED=off → SSL_ENABLED=on" -echo " 2. Make sure your domain points to this server" -echo " 3. Restart: docker-compose down && docker-compose up" -echo "" -echo "âš ī¸ SSL Notes:" -echo " - SSL requires a real domain (not localhost/IP)" -echo " - Caddy will automatically get Let's Encrypt certificates" -echo " - Port 80 and 443 must be accessible from the internet" +if [ "$SSL_ENABLED" = "on" ]; then + echo " 2. Open: https://$TP_HOST" +else + echo " 2. Open: http://$TP_HOST" +fi echo "" From 786c2840b8c9fe3293fa8704ece0c9eab3df160c Mon Sep 17 00:00:00 2001 From: Roman Kelesidis Date: Thu, 21 Aug 2025 19:06:08 +0300 Subject: [PATCH 33/52] Update setup-docker.sh --- setup-docker.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/setup-docker.sh b/setup-docker.sh index 431263de5..ea1a69d3b 100644 --- a/setup-docker.sh +++ b/setup-docker.sh @@ -60,6 +60,8 @@ if [ -z "$TP_HOST" ]; then exit 1 fi +TP_HOST=$(echo "$TP_HOST" | sed -E 's|^https?://||') +TP_HOST=$(echo "$TP_HOST" | sed 's|/||g') ESCAPED_HOST=$(printf '%s\n' "$TP_HOST" | sed 's/[&/\]/\\&/g') if grep -q "TP_HOST=" .env; then From ca2fa0c7536062b830dea5a1b3ccf0dd3120f17b Mon Sep 17 00:00:00 2001 From: Roman Kelesidis Date: Thu, 21 Aug 2025 19:15:05 +0300 Subject: [PATCH 34/52] Update setup-docker.sh --- setup-docker.sh | 2 -- 1 file changed, 2 deletions(-) diff --git a/setup-docker.sh b/setup-docker.sh index ea1a69d3b..45aaf6fd7 100644 --- a/setup-docker.sh +++ b/setup-docker.sh @@ -34,7 +34,6 @@ fi echo "" read -s -p "🔐 Enter database password for 'torrentpier_user': " DB_PASSWORD -echo "" if [ -z "$DB_PASSWORD" ]; then echo "❌ Error: Database password cannot be empty!" @@ -53,7 +52,6 @@ fi echo "" read -p "🌐 Enter your host (IP or domain, e.g. 192.168.1.100 or example.com): " TP_HOST -echo "" if [ -z "$TP_HOST" ]; then echo "❌ Error: Host cannot be empty!" From f85ff0ede8d59ee4dce62a8315571ccc139e992a Mon Sep 17 00:00:00 2001 From: Roman Kelesidis Date: Thu, 21 Aug 2025 19:23:42 +0300 Subject: [PATCH 35/52] Update setup-docker.sh --- setup-docker.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/setup-docker.sh b/setup-docker.sh index 45aaf6fd7..c17a435fb 100644 --- a/setup-docker.sh +++ b/setup-docker.sh @@ -34,6 +34,7 @@ fi echo "" read -s -p "🔐 Enter database password for 'torrentpier_user': " DB_PASSWORD +echo "" if [ -z "$DB_PASSWORD" ]; then echo "❌ Error: Database password cannot be empty!" From 4352d822fd55449010e5d1f2c061c3e786934671 Mon Sep 17 00:00:00 2001 From: Roman Kelesidis Date: Thu, 21 Aug 2025 19:24:54 +0300 Subject: [PATCH 36/52] Update setup-docker.sh --- setup-docker.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/setup-docker.sh b/setup-docker.sh index c17a435fb..4b0616ff5 100644 --- a/setup-docker.sh +++ b/setup-docker.sh @@ -55,6 +55,7 @@ echo "" read -p "🌐 Enter your host (IP or domain, e.g. 192.168.1.100 or example.com): " TP_HOST if [ -z "$TP_HOST" ]; then + echo "" echo "❌ Error: Host cannot be empty!" exit 1 fi From 970aa1d92b51a472fbb5d7ca4196d17d10ffc0d8 Mon Sep 17 00:00:00 2001 From: Roman Kelesidis Date: Thu, 21 Aug 2025 19:42:06 +0300 Subject: [PATCH 37/52] Update setup-docker.sh --- setup-docker.sh | 3 +++ 1 file changed, 3 insertions(+) diff --git a/setup-docker.sh b/setup-docker.sh index 4b0616ff5..d3f177904 100644 --- a/setup-docker.sh +++ b/setup-docker.sh @@ -84,6 +84,9 @@ ENABLE_SSL=$(echo "$ENABLE_SSL" | tr '[:upper:]' '[:lower:]') if [ "$ENABLE_SSL" = "y" ] || [ "$ENABLE_SSL" = "yes" ]; then SSL_ENABLED="on" + if grep -q "TP_PORT=80" .env; then + sed -i 's/TP_PORT=80/TP_PORT=443/' .env + fi else SSL_ENABLED="off" fi From 2cdada6bc2745f9861922a1ba4691cbff76eec59 Mon Sep 17 00:00:00 2001 From: Roman Kelesidis Date: Thu, 21 Aug 2025 19:42:58 +0300 Subject: [PATCH 38/52] Revert "Update setup-docker.sh" This reverts commit 970aa1d92b51a472fbb5d7ca4196d17d10ffc0d8. --- setup-docker.sh | 3 --- 1 file changed, 3 deletions(-) diff --git a/setup-docker.sh b/setup-docker.sh index d3f177904..4b0616ff5 100644 --- a/setup-docker.sh +++ b/setup-docker.sh @@ -84,9 +84,6 @@ ENABLE_SSL=$(echo "$ENABLE_SSL" | tr '[:upper:]' '[:lower:]') if [ "$ENABLE_SSL" = "y" ] || [ "$ENABLE_SSL" = "yes" ]; then SSL_ENABLED="on" - if grep -q "TP_PORT=80" .env; then - sed -i 's/TP_PORT=80/TP_PORT=443/' .env - fi else SSL_ENABLED="off" fi From 03f9d4571b1adf2582a2e6d968d203b090deed37 Mon Sep 17 00:00:00 2001 From: Roman Kelesidis Date: Thu, 21 Aug 2025 19:51:11 +0300 Subject: [PATCH 39/52] Update Caddyfile --- install/docker/Caddyfile | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/install/docker/Caddyfile b/install/docker/Caddyfile index fbfea0faa..4c2846577 100644 --- a/install/docker/Caddyfile +++ b/install/docker/Caddyfile @@ -38,7 +38,7 @@ header @html_css_js Content-Type "{mime}; charset=utf-8" } -# HTTPS redirect (only if SSL is enabled) -# http://{$TP_HOST} { -# redir https://{$TP_HOST}{uri} permanent -# } +http://{$TP_HOST} { + @ssl_enabled expression {env.SSL_ENABLED} == "on" + redir @ssl_enabled https://{$TP_HOST}{uri} permanent +} From 3c194c018050fd44fab3c7e37d81ef4546f89421 Mon Sep 17 00:00:00 2001 From: Roman Kelesidis Date: Thu, 21 Aug 2025 19:52:05 +0300 Subject: [PATCH 40/52] Update docker-compose.yml --- docker-compose.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index cea93a510..e6abf4028 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -5,8 +5,7 @@ services: dockerfile: Dockerfile container_name: torrentpier-app ports: - - "${TP_PORT:-80}:80" - - "${SSL_PORT:-443}:443" + - "${TP_PORT:-80}:${TP_PORT:-80}" env_file: - .env volumes: From 0d05a80ffc6252190ba0b59aff5881c75ad363e6 Mon Sep 17 00:00:00 2001 From: Roman Kelesidis Date: Thu, 21 Aug 2025 19:56:44 +0300 Subject: [PATCH 41/52] Update setup-docker.sh --- setup-docker.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup-docker.sh b/setup-docker.sh index 4b0616ff5..032b43a11 100644 --- a/setup-docker.sh +++ b/setup-docker.sh @@ -18,6 +18,7 @@ fi cp .env .env.backup echo "💾 Backup created: .env.backup" +# Enable server-side cron if grep -q "APP_CRON_ENABLED=true" .env; then sed -i 's/APP_CRON_ENABLED=true/APP_CRON_ENABLED=false/' .env fi @@ -95,7 +96,6 @@ else echo "" >> .env echo "# Docker-specific configuration" >> .env echo "SSL_ENABLED=$SSL_ENABLED" >> .env - echo "SSL_PORT=443" >> .env echo "✅ Added Docker SSL configuration (SSL_ENABLED=$SSL_ENABLED)" fi From 2dd3d6cb2290c99bcdd788a3707f46f0d83de6c8 Mon Sep 17 00:00:00 2001 From: Roman Kelesidis Date: Thu, 21 Aug 2025 19:59:55 +0300 Subject: [PATCH 42/52] Update setup-docker.sh --- setup-docker.sh | 3 +++ 1 file changed, 3 insertions(+) diff --git a/setup-docker.sh b/setup-docker.sh index 032b43a11..8155e9bab 100644 --- a/setup-docker.sh +++ b/setup-docker.sh @@ -85,6 +85,9 @@ ENABLE_SSL=$(echo "$ENABLE_SSL" | tr '[:upper:]' '[:lower:]') if [ "$ENABLE_SSL" = "y" ] || [ "$ENABLE_SSL" = "yes" ]; then SSL_ENABLED="on" + if grep -q "TP_PORT=80" .env; then + sed -i 's/TP_PORT=80/TP_PORT=443/' .env + fi else SSL_ENABLED="off" fi From 2951fbeaef91d19bc0a7840d871d72eab53f6727 Mon Sep 17 00:00:00 2001 From: Roman Kelesidis Date: Thu, 21 Aug 2025 20:11:24 +0300 Subject: [PATCH 43/52] Update setup-docker.sh --- setup-docker.sh | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/setup-docker.sh b/setup-docker.sh index 8155e9bab..3e066cebc 100644 --- a/setup-docker.sh +++ b/setup-docker.sh @@ -85,11 +85,14 @@ ENABLE_SSL=$(echo "$ENABLE_SSL" | tr '[:upper:]' '[:lower:]') if [ "$ENABLE_SSL" = "y" ] || [ "$ENABLE_SSL" = "yes" ]; then SSL_ENABLED="on" - if grep -q "TP_PORT=80" .env; then - sed -i 's/TP_PORT=80/TP_PORT=443/' .env + if grep -q "TP_PORT" .env; then + sed -i "s|TP_PORT=.*|TP_PORT=443|" .env fi else SSL_ENABLED="off" + if grep -q "TP_PORT" .env; then + sed -i "s|TP_PORT=.*|TP_PORT=80|" .env + fi fi if grep -q "SSL_ENABLED" .env; then From 3206fab2c9d9d00fe9d29223666aa005af0b9b2f Mon Sep 17 00:00:00 2001 From: Roman Kelesidis Date: Thu, 21 Aug 2025 20:15:19 +0300 Subject: [PATCH 44/52] Update setup-docker.sh --- setup-docker.sh | 112 +++++++++++++++++++++++++++--------------------- 1 file changed, 62 insertions(+), 50 deletions(-) diff --git a/setup-docker.sh b/setup-docker.sh index 3e066cebc..10a8add0b 100644 --- a/setup-docker.sh +++ b/setup-docker.sh @@ -1,36 +1,37 @@ #!/bin/bash +set -e echo "đŸŗ Setting up TorrentPier for Docker..." echo "" if [ ! -f .env ]; then - if [ -f .env.example ]; then - cp .env.example .env - echo "✅ Created .env from .env.example" - else - echo "❌ Error: .env.example not found!" - exit 1 - fi + if [ -f .env.example ]; then + cp .env.example .env + echo "✅ Created .env from .env.example" + else + echo "❌ Error: .env.example not found!" + exit 1 + fi else - echo "â„šī¸ .env file already exists, updating for Docker..." + echo "â„šī¸ .env file already exists, updating for Docker..." fi cp .env .env.backup echo "💾 Backup created: .env.backup" # Enable server-side cron -if grep -q "APP_CRON_ENABLED=true" .env; then - sed -i 's/APP_CRON_ENABLED=true/APP_CRON_ENABLED=false/' .env +if grep -q "^APP_CRON_ENABLED=true" .env; then + sed -i 's/^APP_CRON_ENABLED=true/APP_CRON_ENABLED=false/' .env fi -if grep -q "DB_HOST=localhost" .env; then - sed -i 's/DB_HOST=localhost/DB_HOST=torrentpier-db/' .env - echo "✅ Updated DB_HOST for Docker" +if grep -q "^DB_HOST=localhost" .env; then + sed -i 's/^DB_HOST=localhost/DB_HOST=torrentpier-db/' .env + echo "✅ Updated DB_HOST for Docker" fi -if grep -q "DB_USERNAME=root" .env; then - sed -i 's/DB_USERNAME=root/DB_USERNAME=torrentpier_user/' .env - echo "✅ Updated DB_USERNAME to torrentpier_user" +if grep -q "^DB_USERNAME=root" .env; then + sed -i 's/^DB_USERNAME=root/DB_USERNAME=torrentpier_user/' .env + echo "✅ Updated DB_USERNAME to torrentpier_user" fi echo "" @@ -38,39 +39,46 @@ read -s -p "🔐 Enter database password for 'torrentpier_user': " DB_PASSWORD echo "" if [ -z "$DB_PASSWORD" ]; then - echo "❌ Error: Database password cannot be empty!" - exit 1 + echo "❌ Error: Database password cannot be empty!" + exit 1 fi -ESCAPED_PASSWORD=$(printf '%s\n' "$DB_PASSWORD" | sed 's/[&/\]/\\&/g') +# More robust password escaping for sed +ESCAPED_PASSWORD=$(printf '%s\n' "$DB_PASSWORD" | sed 's/[[\.*^$()+?{|]/\\&/g') -if grep -q "DB_PASSWORD=" .env; then - sed -i "s|DB_PASSWORD=.*|DB_PASSWORD=$ESCAPED_PASSWORD|" .env - echo "✅ Updated DB_PASSWORD in .env" +if grep -q "^DB_PASSWORD=" .env; then + sed -i "s/^DB_PASSWORD=.*/DB_PASSWORD=$ESCAPED_PASSWORD/" .env + echo "✅ Updated DB_PASSWORD in .env" else - echo "DB_PASSWORD=$DB_PASSWORD" >> .env - echo "✅ Added DB_PASSWORD to .env" + echo "DB_PASSWORD=$DB_PASSWORD" >> .env + echo "✅ Added DB_PASSWORD to .env" fi echo "" read -p "🌐 Enter your host (IP or domain, e.g. 192.168.1.100 or example.com): " TP_HOST +echo "" if [ -z "$TP_HOST" ]; then - echo "" - echo "❌ Error: Host cannot be empty!" - exit 1 + echo "❌ Error: Host cannot be empty!" + exit 1 +fi + +# Basic validation for host format +if [[ ! "$TP_HOST" =~ ^[a-zA-Z0-9.-]+$ ]]; then + echo "❌ Error: Invalid host format! Use only letters, numbers, dots, and hyphens." + exit 1 fi TP_HOST=$(echo "$TP_HOST" | sed -E 's|^https?://||') TP_HOST=$(echo "$TP_HOST" | sed 's|/||g') -ESCAPED_HOST=$(printf '%s\n' "$TP_HOST" | sed 's/[&/\]/\\&/g') +ESCAPED_HOST=$(printf '%s\n' "$TP_HOST" | sed 's/[[\.*^$()+?{|]/\\&/g') -if grep -q "TP_HOST=" .env; then - sed -i "s|TP_HOST=.*|TP_HOST=$ESCAPED_HOST|" .env - echo "✅ Updated TP_HOST to $TP_HOST" +if grep -q "^TP_HOST=" .env; then + sed -i "s/^TP_HOST=.*/TP_HOST=$ESCAPED_HOST/" .env + echo "✅ Updated TP_HOST to $TP_HOST" else - echo "TP_HOST=$TP_HOST" >> .env - echo "✅ Added TP_HOST to .env" + echo "TP_HOST=$TP_HOST" >> .env + echo "✅ Added TP_HOST to .env" fi echo "" @@ -84,25 +92,29 @@ read -p "🔐 Do you want to enable SSL (HTTPS)? [y/N]: " ENABLE_SSL ENABLE_SSL=$(echo "$ENABLE_SSL" | tr '[:upper:]' '[:lower:]') if [ "$ENABLE_SSL" = "y" ] || [ "$ENABLE_SSL" = "yes" ]; then - SSL_ENABLED="on" - if grep -q "TP_PORT" .env; then - sed -i "s|TP_PORT=.*|TP_PORT=443|" .env - fi + SSL_ENABLED="on" + if grep -q "^TP_PORT=" .env; then + sed -i "s/^TP_PORT=.*/TP_PORT=443/" .env + else + echo "TP_PORT=443" >> .env + fi else - SSL_ENABLED="off" - if grep -q "TP_PORT" .env; then - sed -i "s|TP_PORT=.*|TP_PORT=80|" .env - fi + SSL_ENABLED="off" + if grep -q "^TP_PORT=" .env; then + sed -i "s/^TP_PORT=.*/TP_PORT=80/" .env + else + echo "TP_PORT=80" >> .env + fi fi -if grep -q "SSL_ENABLED" .env; then - sed -i "s|SSL_ENABLED=.*|SSL_ENABLED=$SSL_ENABLED|" .env - echo "✅ Updated SSL_ENABLED to $SSL_ENABLED" +if grep -q "^SSL_ENABLED=" .env; then + sed -i "s/^SSL_ENABLED=.*/SSL_ENABLED=$SSL_ENABLED/" .env + echo "✅ Updated SSL_ENABLED to $SSL_ENABLED" else - echo "" >> .env - echo "# Docker-specific configuration" >> .env - echo "SSL_ENABLED=$SSL_ENABLED" >> .env - echo "✅ Added Docker SSL configuration (SSL_ENABLED=$SSL_ENABLED)" + echo "" >> .env + echo "# Docker-specific configuration" >> .env + echo "SSL_ENABLED=$SSL_ENABLED" >> .env + echo "✅ Added Docker SSL configuration (SSL_ENABLED=$SSL_ENABLED)" fi echo "" @@ -111,8 +123,8 @@ echo "" echo "📋 Next steps:" echo " 1. Run: docker-compose up" if [ "$SSL_ENABLED" = "on" ]; then - echo " 2. Open: https://$TP_HOST" + echo " 2. Open: https://$TP_HOST" else - echo " 2. Open: http://$TP_HOST" + echo " 2. Open: http://$TP_HOST" fi echo "" From 9f4b9350a36716132612b947820a9ee12f4e1825 Mon Sep 17 00:00:00 2001 From: Roman Kelesidis Date: Thu, 21 Aug 2025 20:20:16 +0300 Subject: [PATCH 45/52] Update Caddyfile --- install/docker/Caddyfile | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/install/docker/Caddyfile b/install/docker/Caddyfile index 4c2846577..bcff70be3 100644 --- a/install/docker/Caddyfile +++ b/install/docker/Caddyfile @@ -22,16 +22,6 @@ redir /sitemap.xml /sitemap/sitemap.xml 301 - @static { - path *.html *.css *.js *.json *.xml *.txt *.ico - path *.png *.jpg *.jpeg *.gif *.svg *.webp - path *.woff *.woff2 *.ttf *.eot - } - header @static { - Content-Type "{mime}; charset=utf-8" - Cache-Control "public, max-age=31536000" - } - @html_css_js { path *.html *.css *.js *.json *.xml *.txt } From bd4c8861e786d8d73c4d829704fb388c4c0dc17c Mon Sep 17 00:00:00 2001 From: Roman Kelesidis Date: Thu, 21 Aug 2025 20:24:12 +0300 Subject: [PATCH 46/52] Update Dockerfile --- Dockerfile | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/Dockerfile b/Dockerfile index 1d3b70652..32dca4e52 100644 --- a/Dockerfile +++ b/Dockerfile @@ -26,13 +26,17 @@ RUN apt-get update && apt-get install -y \ COPY --from=composer:latest /usr/bin/composer /usr/bin/composer WORKDIR /app + +COPY composer.json composer.lock ./ +RUN composer install --prefer-dist --no-dev --optimize-autoloader --no-scripts + COPY . /app -RUN composer install --prefer-dist --optimize-autoloader +RUN php _cleanup.php && rm _cleanup.php \ + && chown -R www-data:www-data /app \ + && chmod -R 755 /app -RUN php _cleanup.php && rm _cleanup.php - -RUN echo "*/10 * * * * php /app/cron.php >> /proc/1/fd/1 2>&1" > /etc/cron.d/app-cron \ +RUN echo "*/10 * * * * www-data php /app/cron.php >> /proc/1/fd/1 2>&1" > /etc/cron.d/app-cron \ && chmod 0644 /etc/cron.d/app-cron \ && crontab /etc/cron.d/app-cron From d586a18a9e132272472821d67a0a8ba0ed69fc84 Mon Sep 17 00:00:00 2001 From: Roman Kelesidis Date: Thu, 21 Aug 2025 20:37:44 +0300 Subject: [PATCH 47/52] Update Dockerfile --- Dockerfile | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/Dockerfile b/Dockerfile index 32dca4e52..43fce0bfe 100644 --- a/Dockerfile +++ b/Dockerfile @@ -32,13 +32,14 @@ RUN composer install --prefer-dist --no-dev --optimize-autoloader --no-scripts COPY . /app -RUN php _cleanup.php && rm _cleanup.php \ - && chown -R www-data:www-data /app \ - && chmod -R 755 /app +RUN php _cleanup.php && rm _cleanup.php + +RUN chown -R www-data:www-data /app \ + && find /app -type d -exec chmod 755 {} \; \ + && find /app -type f -exec chmod 644 {} \; RUN echo "*/10 * * * * www-data php /app/cron.php >> /proc/1/fd/1 2>&1" > /etc/cron.d/app-cron \ - && chmod 0644 /etc/cron.d/app-cron \ - && crontab /etc/cron.d/app-cron + && chmod 0644 /etc/cron.d/app-cron COPY install/docker/Caddyfile /etc/caddy/Caddyfile COPY install/docker/supervisord.conf /etc/supervisor/conf.d/supervisord.conf From ef50d17c97a3e8b68e253b2dd580f17eb556f2a2 Mon Sep 17 00:00:00 2001 From: Roman Kelesidis Date: Thu, 21 Aug 2025 20:45:00 +0300 Subject: [PATCH 48/52] Update supervisord.conf --- install/docker/supervisord.conf | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/install/docker/supervisord.conf b/install/docker/supervisord.conf index 76e02f365..1c2d2ab9c 100644 --- a/install/docker/supervisord.conf +++ b/install/docker/supervisord.conf @@ -3,15 +3,28 @@ nodaemon=true user=root logfile=/var/log/supervisord.log pidfile=/var/run/supervisord.pid +childlogdir=/var/log/supervisor +silent=true + +[unix_http_server] +file=/var/run/supervisor.sock +chmod=0700 + +[rpcinterface:supervisor] +supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface + +[supervisorctl] +serverurl=unix:///var/run/supervisor.sock [program:cron] -command=cron -f +command=/usr/sbin/cron -f autostart=true autorestart=true stderr_logfile=/dev/stderr stderr_logfile_maxbytes=0 stdout_logfile=/dev/stdout stdout_logfile_maxbytes=0 +user=root [program:frankenphp] command=frankenphp run --config /etc/caddy/Caddyfile @@ -22,3 +35,4 @@ stderr_logfile=/dev/stderr stderr_logfile_maxbytes=0 stdout_logfile=/dev/stdout stdout_logfile_maxbytes=0 +user=www-data From a46bd197e34a8754c4bcb0ca1cf5517b1d9394c9 Mon Sep 17 00:00:00 2001 From: Roman Kelesidis Date: Thu, 21 Aug 2025 20:49:27 +0300 Subject: [PATCH 49/52] Update Caddyfile --- install/docker/Caddyfile | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/install/docker/Caddyfile b/install/docker/Caddyfile index bcff70be3..37088543c 100644 --- a/install/docker/Caddyfile +++ b/install/docker/Caddyfile @@ -1,10 +1,5 @@ # Caddy configuration for TorrentPier (Docker) -{ - auto_https {$SSL_ENABLED:off} - admin off -} - {$TP_HOST}:{$TP_PORT:80} { root * /app encode gzip zstd @@ -27,8 +22,3 @@ } header @html_css_js Content-Type "{mime}; charset=utf-8" } - -http://{$TP_HOST} { - @ssl_enabled expression {env.SSL_ENABLED} == "on" - redir @ssl_enabled https://{$TP_HOST}{uri} permanent -} From 6d71ad3ffda24bb01d70b52b0b32631fa9f7ce40 Mon Sep 17 00:00:00 2001 From: Roman Kelesidis Date: Thu, 21 Aug 2025 21:03:57 +0300 Subject: [PATCH 50/52] Revert "Update supervisord.conf" This reverts commit ef50d17c97a3e8b68e253b2dd580f17eb556f2a2. --- install/docker/supervisord.conf | 16 +--------------- 1 file changed, 1 insertion(+), 15 deletions(-) diff --git a/install/docker/supervisord.conf b/install/docker/supervisord.conf index 1c2d2ab9c..76e02f365 100644 --- a/install/docker/supervisord.conf +++ b/install/docker/supervisord.conf @@ -3,28 +3,15 @@ nodaemon=true user=root logfile=/var/log/supervisord.log pidfile=/var/run/supervisord.pid -childlogdir=/var/log/supervisor -silent=true - -[unix_http_server] -file=/var/run/supervisor.sock -chmod=0700 - -[rpcinterface:supervisor] -supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface - -[supervisorctl] -serverurl=unix:///var/run/supervisor.sock [program:cron] -command=/usr/sbin/cron -f +command=cron -f autostart=true autorestart=true stderr_logfile=/dev/stderr stderr_logfile_maxbytes=0 stdout_logfile=/dev/stdout stdout_logfile_maxbytes=0 -user=root [program:frankenphp] command=frankenphp run --config /etc/caddy/Caddyfile @@ -35,4 +22,3 @@ stderr_logfile=/dev/stderr stderr_logfile_maxbytes=0 stdout_logfile=/dev/stdout stdout_logfile_maxbytes=0 -user=www-data From 65f1cdda2aec0e7042d23ec9eb3367a27db2a9d3 Mon Sep 17 00:00:00 2001 From: Roman Kelesidis Date: Thu, 21 Aug 2025 21:04:05 +0300 Subject: [PATCH 51/52] Revert "Update Dockerfile" This reverts commit d586a18a9e132272472821d67a0a8ba0ed69fc84. --- Dockerfile | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/Dockerfile b/Dockerfile index 43fce0bfe..32dca4e52 100644 --- a/Dockerfile +++ b/Dockerfile @@ -32,14 +32,13 @@ RUN composer install --prefer-dist --no-dev --optimize-autoloader --no-scripts COPY . /app -RUN php _cleanup.php && rm _cleanup.php - -RUN chown -R www-data:www-data /app \ - && find /app -type d -exec chmod 755 {} \; \ - && find /app -type f -exec chmod 644 {} \; +RUN php _cleanup.php && rm _cleanup.php \ + && chown -R www-data:www-data /app \ + && chmod -R 755 /app RUN echo "*/10 * * * * www-data php /app/cron.php >> /proc/1/fd/1 2>&1" > /etc/cron.d/app-cron \ - && chmod 0644 /etc/cron.d/app-cron + && chmod 0644 /etc/cron.d/app-cron \ + && crontab /etc/cron.d/app-cron COPY install/docker/Caddyfile /etc/caddy/Caddyfile COPY install/docker/supervisord.conf /etc/supervisor/conf.d/supervisord.conf From 94f1aa10bf5c91bcc63a9b8816f57fe8789ba7f7 Mon Sep 17 00:00:00 2001 From: Roman Kelesidis Date: Thu, 21 Aug 2025 21:04:53 +0300 Subject: [PATCH 52/52] Update Dockerfile --- Dockerfile | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/Dockerfile b/Dockerfile index 32dca4e52..d7021869b 100644 --- a/Dockerfile +++ b/Dockerfile @@ -32,11 +32,9 @@ RUN composer install --prefer-dist --no-dev --optimize-autoloader --no-scripts COPY . /app -RUN php _cleanup.php && rm _cleanup.php \ - && chown -R www-data:www-data /app \ - && chmod -R 755 /app +RUN php _cleanup.php && rm _cleanup.php -RUN echo "*/10 * * * * www-data php /app/cron.php >> /proc/1/fd/1 2>&1" > /etc/cron.d/app-cron \ +RUN echo "*/10 * * * * php /app/cron.php >> /proc/1/fd/1 2>&1" > /etc/cron.d/app-cron \ && chmod 0644 /etc/cron.d/app-cron \ && crontab /etc/cron.d/app-cron