Dockerfile, custom-php.ini & start.sh moved into main repo
This commit is contained in:
@@ -33,6 +33,8 @@ This refactor improves maintainability, testability, and documentation clarity a
|
|||||||
- Expanded checkAuth.php Response now returns all three flags—folderOnly, readOnly, and disableUpload so client can handle every permission.
|
- Expanded checkAuth.php Response now returns all three flags—folderOnly, readOnly, and disableUpload so client can handle every permission.
|
||||||
- In auth.js’s updateAuthenticatedUI(), write all three flags into localStorage whenever you land on the app (OIDC, basic or form). That guarantees consistent behavior across page loads.
|
- In auth.js’s updateAuthenticatedUI(), write all three flags into localStorage whenever you land on the app (OIDC, basic or form). That guarantees consistent behavior across page loads.
|
||||||
- Made sure the OIDC handler reads the live config via AdminModel::getConfig() and pushes you through the TOTP flow if needed, then back to /index.html.
|
- Made sure the OIDC handler reads the live config via AdminModel::getConfig() and pushes you through the TOTP flow if needed, then back to /index.html.
|
||||||
|
- Dockerfile, custom-php.ini & start.sh moved into main repo for easier onboarding.
|
||||||
|
- filerise-docker changed to dedicated CI/CD pipeline
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|||||||
98
Dockerfile
Normal file
98
Dockerfile
Normal file
@@ -0,0 +1,98 @@
|
|||||||
|
# syntax=docker/dockerfile:1.4
|
||||||
|
|
||||||
|
#############################
|
||||||
|
# Source Stage – copy your FileRise app
|
||||||
|
#############################
|
||||||
|
FROM ubuntu:24.04 AS appsource
|
||||||
|
RUN apt-get update && \
|
||||||
|
apt-get install -y --no-install-recommends ca-certificates && \
|
||||||
|
rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
|
# prepare the folder and remove Apache’s default index
|
||||||
|
RUN mkdir -p /var/www && rm -f /var/www/html/index.html
|
||||||
|
|
||||||
|
# **Copy the FileRise source** (where your composer.json lives)
|
||||||
|
COPY . /var/www
|
||||||
|
|
||||||
|
#############################
|
||||||
|
# Composer Stage – install PHP dependencies
|
||||||
|
#############################
|
||||||
|
FROM composer:2 AS composer
|
||||||
|
WORKDIR /app
|
||||||
|
|
||||||
|
# **Copy composer files from the source** and install
|
||||||
|
COPY --from=appsource /var/www/composer.json /var/www/composer.lock ./
|
||||||
|
RUN composer install --no-dev --optimize-autoloader
|
||||||
|
|
||||||
|
#############################
|
||||||
|
# Final Stage – runtime image
|
||||||
|
#############################
|
||||||
|
FROM ubuntu:24.04
|
||||||
|
|
||||||
|
LABEL by=error311
|
||||||
|
|
||||||
|
# Set basic environment variables
|
||||||
|
ENV DEBIAN_FRONTEND=noninteractive \
|
||||||
|
HOME=/root \
|
||||||
|
LC_ALL=C.UTF-8 \
|
||||||
|
LANG=en_US.UTF-8 \
|
||||||
|
LANGUAGE=en_US.UTF-8 \
|
||||||
|
TERM=xterm \
|
||||||
|
UPLOAD_MAX_FILESIZE=5G \
|
||||||
|
POST_MAX_SIZE=5G \
|
||||||
|
TOTAL_UPLOAD_SIZE=5G \
|
||||||
|
PERSISTENT_TOKENS_KEY=default_please_change_this_key
|
||||||
|
|
||||||
|
ARG PUID=99
|
||||||
|
ARG PGID=100
|
||||||
|
|
||||||
|
# Install Apache, PHP, and required extensions
|
||||||
|
RUN apt-get update && \
|
||||||
|
apt-get upgrade -y && \
|
||||||
|
apt-get install -y --no-install-recommends \
|
||||||
|
apache2 php php-json php-curl php-zip php-mbstring php-gd \
|
||||||
|
ca-certificates curl git openssl && \
|
||||||
|
apt-get clean && \
|
||||||
|
rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
|
# Fix www-data UID/GID
|
||||||
|
RUN set -eux; \
|
||||||
|
if [ "$(id -u www-data)" != "${PUID}" ]; then usermod -u ${PUID} www-data || true; fi; \
|
||||||
|
if [ "$(id -g www-data)" != "${PGID}" ]; then groupmod -g ${PGID} www-data || true; fi; \
|
||||||
|
usermod -g ${PGID} www-data
|
||||||
|
|
||||||
|
# Copy application code and vendor directory
|
||||||
|
COPY custom-php.ini /etc/php/8.3/apache2/conf.d/99-app-tuning.ini
|
||||||
|
COPY --from=appsource /var/www /var/www
|
||||||
|
COPY --from=composer /app/vendor /var/www/vendor
|
||||||
|
|
||||||
|
# Fix ownership & permissions
|
||||||
|
RUN chown -R www-data:www-data /var/www && chmod -R 775 /var/www
|
||||||
|
|
||||||
|
# Create a symlink for uploads folder in public directory.
|
||||||
|
RUN cd /var/www/public && ln -s ../uploads uploads
|
||||||
|
|
||||||
|
# Configure Apache
|
||||||
|
RUN cat <<'EOF' > /etc/apache2/sites-available/000-default.conf
|
||||||
|
<VirtualHost *:80>
|
||||||
|
ServerAdmin webmaster@localhost
|
||||||
|
DocumentRoot /var/www/public
|
||||||
|
<Directory "/var/www/public">
|
||||||
|
AllowOverride All
|
||||||
|
Require all granted
|
||||||
|
DirectoryIndex index.php index.html
|
||||||
|
</Directory>
|
||||||
|
ErrorLog /var/log/apache2/error.log
|
||||||
|
CustomLog /var/log/apache2/access.log combined
|
||||||
|
</VirtualHost>
|
||||||
|
EOF
|
||||||
|
|
||||||
|
# Enable the rewrite and headers modules
|
||||||
|
RUN a2enmod rewrite headers
|
||||||
|
|
||||||
|
# Expose ports and set up start script
|
||||||
|
EXPOSE 80 443
|
||||||
|
COPY start.sh /usr/local/bin/start.sh
|
||||||
|
RUN chmod +x /usr/local/bin/start.sh
|
||||||
|
|
||||||
|
CMD ["/usr/local/bin/start.sh"]
|
||||||
52
custom-php.ini
Normal file
52
custom-php.ini
Normal file
@@ -0,0 +1,52 @@
|
|||||||
|
; custom-php.ini
|
||||||
|
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
; OPcache Settings
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
opcache.enable=1
|
||||||
|
opcache.enable_cli=0
|
||||||
|
; Allocate 128MB of memory for opcode caching
|
||||||
|
opcache.memory_consumption=128
|
||||||
|
; Increase the maximum number of accelerated files (adjust if you have a large codebase)
|
||||||
|
opcache.max_accelerated_files=4000
|
||||||
|
; Refresh file timestamp every 60 seconds to avoid too many disk reads
|
||||||
|
opcache.revalidate_freq=60
|
||||||
|
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
; Memory and Execution Time Limits
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
; Increase memory limit to 512M for large file processing or image processing operations
|
||||||
|
memory_limit=512M
|
||||||
|
; Set execution time limits to accommodate long-running uploads/processes
|
||||||
|
max_execution_time=300
|
||||||
|
max_input_time=300
|
||||||
|
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
; Realpath Cache Settings
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
realpath_cache_size=4096k
|
||||||
|
realpath_cache_ttl=600
|
||||||
|
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
; File Upload Settings
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
; Allow a maximum of 20 files per request
|
||||||
|
max_file_uploads=20
|
||||||
|
; Ensure the temporary directory is set (should exist and be writable)
|
||||||
|
upload_tmp_dir=/tmp
|
||||||
|
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
; Session Configuration (if applicable)
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
session.gc_maxlifetime=1440
|
||||||
|
session.gc_probability=1
|
||||||
|
session.gc_divisor=100
|
||||||
|
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
; Error Handling / Logging
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
; Do not display errors publicly in production
|
||||||
|
display_errors=Off
|
||||||
|
; Log errors to a dedicated file
|
||||||
|
log_errors=On
|
||||||
|
error_log=/var/log/php8.3-error.log
|
||||||
@@ -3,7 +3,7 @@ import { sendRequest } from './networkUtils.js';
|
|||||||
import { t, applyTranslations, setLocale } from './i18n.js';
|
import { t, applyTranslations, setLocale } from './i18n.js';
|
||||||
import { loadAdminConfigFunc } from './auth.js';
|
import { loadAdminConfigFunc } from './auth.js';
|
||||||
|
|
||||||
const version = "v1.1.3";
|
const version = "v1.2.0";
|
||||||
// Use t() for the admin panel title. (Make sure t("admin_panel") returns "Admin Panel" in English.)
|
// Use t() for the admin panel title. (Make sure t("admin_panel") returns "Admin Panel" in English.)
|
||||||
const adminTitle = `${t("admin_panel")} <small style="font-size: 12px; color: gray;">${version}</small>`;
|
const adminTitle = `${t("admin_panel")} <small style="font-size: 12px; color: gray;">${version}</small>`;
|
||||||
|
|
||||||
|
|||||||
162
start.sh
Normal file
162
start.sh
Normal file
@@ -0,0 +1,162 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
echo "🚀 Running start.sh..."
|
||||||
|
|
||||||
|
# Warn if default persistent tokens key is in use
|
||||||
|
if [ "$PERSISTENT_TOKENS_KEY" = "default_please_change_this_key" ]; then
|
||||||
|
echo "⚠️ WARNING: Using default persistent tokens key. Please override PERSISTENT_TOKENS_KEY for production."
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Update config.php based on environment variables
|
||||||
|
CONFIG_FILE="/var/www/config/config.php"
|
||||||
|
if [ -f "$CONFIG_FILE" ]; then
|
||||||
|
echo "🔄 Updating config.php based on environment variables..."
|
||||||
|
if [ -n "$TIMEZONE" ]; then
|
||||||
|
echo " Setting TIMEZONE to $TIMEZONE"
|
||||||
|
sed -i "s|define('TIMEZONE',[[:space:]]*'[^']*');|define('TIMEZONE', '$TIMEZONE');|" "$CONFIG_FILE"
|
||||||
|
fi
|
||||||
|
if [ -n "$DATE_TIME_FORMAT" ]; then
|
||||||
|
echo "🔄 Setting DATE_TIME_FORMAT to $DATE_TIME_FORMAT"
|
||||||
|
sed -i "s|define('DATE_TIME_FORMAT',[[:space:]]*'[^']*');|define('DATE_TIME_FORMAT', '$DATE_TIME_FORMAT');|" "$CONFIG_FILE"
|
||||||
|
fi
|
||||||
|
if [ -n "$TOTAL_UPLOAD_SIZE" ]; then
|
||||||
|
echo "🔄 Setting TOTAL_UPLOAD_SIZE to $TOTAL_UPLOAD_SIZE"
|
||||||
|
sed -i "s|define('TOTAL_UPLOAD_SIZE',[[:space:]]*'[^']*');|define('TOTAL_UPLOAD_SIZE', '$TOTAL_UPLOAD_SIZE');|" "$CONFIG_FILE"
|
||||||
|
fi
|
||||||
|
if [ -n "$SECURE" ]; then
|
||||||
|
echo "🔄 Setting SECURE to $SECURE"
|
||||||
|
sed -i "s|\$envSecure = getenv('SECURE');|\$envSecure = '$SECURE';|" "$CONFIG_FILE"
|
||||||
|
fi
|
||||||
|
if [ -n "$SHARE_URL" ]; then
|
||||||
|
echo "🔄 Setting SHARE_URL to $SHARE_URL"
|
||||||
|
sed -i "s|define('SHARE_URL',[[:space:]]*'[^']*');|define('SHARE_URL', '$SHARE_URL');|" "$CONFIG_FILE"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Ensure the PHP configuration directory exists
|
||||||
|
mkdir -p /etc/php/8.3/apache2/conf.d
|
||||||
|
|
||||||
|
# Update PHP upload limits at runtime if TOTAL_UPLOAD_SIZE is set.
|
||||||
|
if [ -n "$TOTAL_UPLOAD_SIZE" ]; then
|
||||||
|
echo "🔄 Updating PHP upload limits with TOTAL_UPLOAD_SIZE=$TOTAL_UPLOAD_SIZE"
|
||||||
|
echo "upload_max_filesize = $TOTAL_UPLOAD_SIZE" > /etc/php/8.3/apache2/conf.d/99-custom.ini
|
||||||
|
echo "post_max_size = $TOTAL_UPLOAD_SIZE" >> /etc/php/8.3/apache2/conf.d/99-custom.ini
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Update Apache LimitRequestBody based on TOTAL_UPLOAD_SIZE if set.
|
||||||
|
if [ -n "$TOTAL_UPLOAD_SIZE" ]; then
|
||||||
|
size_str=$(echo "$TOTAL_UPLOAD_SIZE" | tr '[:upper:]' '[:lower:]')
|
||||||
|
factor=1
|
||||||
|
case "${size_str: -1}" in
|
||||||
|
g)
|
||||||
|
factor=$((1024*1024*1024))
|
||||||
|
size_num=${size_str%g}
|
||||||
|
;;
|
||||||
|
m)
|
||||||
|
factor=$((1024*1024))
|
||||||
|
size_num=${size_str%m}
|
||||||
|
;;
|
||||||
|
k)
|
||||||
|
factor=1024
|
||||||
|
size_num=${size_str%k}
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
size_num=$size_str
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
LIMIT_REQUEST_BODY=$((size_num * factor))
|
||||||
|
echo "🔄 Setting Apache LimitRequestBody to $LIMIT_REQUEST_BODY bytes (from TOTAL_UPLOAD_SIZE=$TOTAL_UPLOAD_SIZE)"
|
||||||
|
cat <<EOF > /etc/apache2/conf-enabled/limit_request_body.conf
|
||||||
|
<Directory "/var/www/public">
|
||||||
|
LimitRequestBody $LIMIT_REQUEST_BODY
|
||||||
|
</Directory>
|
||||||
|
EOF
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Set Apache Timeout (default is 300 seconds)
|
||||||
|
echo "🔄 Setting Apache Timeout to 600 seconds"
|
||||||
|
cat <<EOF > /etc/apache2/conf-enabled/timeout.conf
|
||||||
|
Timeout 600
|
||||||
|
EOF
|
||||||
|
|
||||||
|
echo "🔥 Final Apache Timeout configuration:"
|
||||||
|
cat /etc/apache2/conf-enabled/timeout.conf
|
||||||
|
|
||||||
|
# Update Apache ports if environment variables are provided
|
||||||
|
if [ -n "$HTTP_PORT" ]; then
|
||||||
|
echo "🔄 Setting Apache HTTP port to $HTTP_PORT"
|
||||||
|
sed -i "s/^Listen 80$/Listen $HTTP_PORT/" /etc/apache2/ports.conf
|
||||||
|
sed -i "s/<VirtualHost \*:80>/<VirtualHost *:$HTTP_PORT>/" /etc/apache2/sites-available/000-default.conf
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -n "$HTTPS_PORT" ]; then
|
||||||
|
echo "🔄 Setting Apache HTTPS port to $HTTPS_PORT"
|
||||||
|
sed -i "s/^Listen 443$/Listen $HTTPS_PORT/" /etc/apache2/ports.conf
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Update Apache ServerName if environment variable is provided
|
||||||
|
if [ -n "$SERVER_NAME" ]; then
|
||||||
|
echo "🔄 Setting Apache ServerName to $SERVER_NAME"
|
||||||
|
echo "ServerName $SERVER_NAME" >> /etc/apache2/apache2.conf
|
||||||
|
else
|
||||||
|
echo "🔄 Setting Apache ServerName to default: FileRise"
|
||||||
|
echo "ServerName FileRise" >> /etc/apache2/apache2.conf
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "Final /etc/apache2/ports.conf content:"
|
||||||
|
cat /etc/apache2/ports.conf
|
||||||
|
|
||||||
|
echo "📁 Web app is served from /var/www/public."
|
||||||
|
|
||||||
|
# Ensure the uploads folder exists in /var/www
|
||||||
|
mkdir -p /var/www/uploads
|
||||||
|
echo "🔑 Fixing permissions for /var/www/uploads..."
|
||||||
|
chown -R ${PUID:-99}:${PGID:-100} /var/www/uploads
|
||||||
|
chmod -R 775 /var/www/uploads
|
||||||
|
|
||||||
|
# Ensure the users folder exists in /var/www
|
||||||
|
mkdir -p /var/www/users
|
||||||
|
echo "🔑 Fixing permissions for /var/www/users..."
|
||||||
|
chown -R ${PUID:-99}:${PGID:-100} /var/www/users
|
||||||
|
chmod -R 775 /var/www/users
|
||||||
|
|
||||||
|
# Ensure the metadata folder exists in /var/www
|
||||||
|
mkdir -p /var/www/metadata
|
||||||
|
echo "🔑 Fixing permissions for /var/www/metadata..."
|
||||||
|
chown -R ${PUID:-99}:${PGID:-100} /var/www/metadata
|
||||||
|
chmod -R 775 /var/www/metadata
|
||||||
|
|
||||||
|
# Create users.txt only if it doesn't already exist (preserving persistent data)
|
||||||
|
if [ ! -f /var/www/users/users.txt ]; then
|
||||||
|
echo "ℹ️ users.txt not found in persistent storage; creating new file..."
|
||||||
|
echo "" > /var/www/users/users.txt
|
||||||
|
chown ${PUID:-99}:${PGID:-100} /var/www/users/users.txt
|
||||||
|
chmod 664 /var/www/users/users.txt
|
||||||
|
else
|
||||||
|
echo "ℹ️ users.txt already exists; preserving persistent data."
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Create createdTags.json only if it doesn't already exist (preserving persistent data)
|
||||||
|
if [ ! -f /var/www/metadata/createdTags.json ]; then
|
||||||
|
echo "ℹ️ createdTags.json not found in persistent storage; creating new file..."
|
||||||
|
echo "[]" > /var/www/metadata/createdTags.json
|
||||||
|
chown ${PUID:-99}:${PGID:-100} /var/www/metadata/createdTags.json
|
||||||
|
chmod 664 /var/www/metadata/createdTags.json
|
||||||
|
else
|
||||||
|
echo "ℹ️ createdTags.json already exists; preserving persistent data."
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Optionally, fix permissions for the rest of /var/www
|
||||||
|
echo "🔑 Fixing permissions for /var/www..."
|
||||||
|
find /var/www -type f -exec chmod 664 {} \;
|
||||||
|
find /var/www -type d -exec chmod 775 {} \;
|
||||||
|
chown -R ${PUID:-99}:${PGID:-100} /var/www
|
||||||
|
|
||||||
|
echo "🔥 Final PHP configuration (90-custom.ini):"
|
||||||
|
cat /etc/php/8.3/apache2/conf.d/90-custom.ini
|
||||||
|
|
||||||
|
echo "🔥 Final Apache configuration (limit_request_body.conf):"
|
||||||
|
cat /etc/apache2/conf-enabled/limit_request_body.conf
|
||||||
|
|
||||||
|
echo "🔥 Starting Apache..."
|
||||||
|
exec apachectl -D FOREGROUND
|
||||||
Reference in New Issue
Block a user