mirror of
https://github.com/misterunknown/ifm.git
synced 2025-08-09 09:36:29 +02:00
Completely new Dockerfile, add ability for different users (#121)
Signed-off-by: Marco Dickert <marco@misterunknown.de>
This commit is contained in:
121
Dockerfile
121
Dockerfile
@@ -1,106 +1,27 @@
|
||||
FROM alpine:3.5
|
||||
FROM php:7-cli-alpine
|
||||
|
||||
ENV PHP_INI_DIR /etc/php5
|
||||
# general settings
|
||||
ENV IFM_AUTH=0 \
|
||||
IFM_AUTH_SOURCE='inline;admin:$2y$10$0Bnm5L4wKFHRxJgNq.oZv.v7yXhkJZQvinJYR2p6X1zPvzyDRUVRC' \
|
||||
IFM_ROOT_DIR="" \
|
||||
IFM_TMP_DIR="" \
|
||||
IFM_DEFAULTTIMEZONE="Europe/Berlin"
|
||||
# api controls
|
||||
ENV IFM_API_AJAXREQUEST=1 IFM_API_CHMOD=1 IFM_API_COPYMOVE=1 \
|
||||
IFM_API_CREATEDIR=1 IFM_API_CREATEFILE=1 IFM_API_EDIT=1 \
|
||||
IFM_API_DELETE=1 IFM_API_DOWNLOAD=1 IFM_API_EXTRACT=1 \
|
||||
IFM_API_UPLOAD=1 IFM_API_REMOTEUPLOAD=1 IFM_API_RENAME=1 \
|
||||
IFM_API_ZIPNLOAD=1
|
||||
# gui controls
|
||||
ENV IFM_GUI_SHOWLASTMODIFIED=0 IFM_GUI_SHOWFILESIZE=1 IFM_GUI_SHOWOWNER=1 \
|
||||
IFM_GUI_SHOWGROUP=1 IFM_GUI_SHOWPERMISSIONS=2 IFM_GUI_SHOWHTDOCS=1 \
|
||||
IFM_GUI_SHOWHIDDENFILES=1 IFM_GUI_SHOWPATH=0
|
||||
# only necessary environment variables
|
||||
ENV IFM_ROOT_DIR="/var/www" \
|
||||
IFM_ROOT_PUBLIC_URL="/www" \
|
||||
IFM_TMP_DIR="/tmp"
|
||||
|
||||
# ensure apache user exists with the desired uid
|
||||
RUN set -x \
|
||||
&& deluser xfs \
|
||||
&& addgroup -g 33 -S apache \
|
||||
&& adduser -u 33 -D -S -G apache apache
|
||||
# add missing extensions and dependencies
|
||||
RUN apk add --no-cache libbz2 libzip libcap
|
||||
apk add --no-cache --virtual .php-extension-build-deps bzip2 bzip2-dev libzip-dev
|
||||
docker-php-ext-install bz2 zip
|
||||
apk del --no-cache --purge .php-extension-build-deps
|
||||
|
||||
RUN set -xe; \
|
||||
apk add --no-cache --virtual .image-runtime-deps \
|
||||
bash \
|
||||
sed \
|
||||
unzip \
|
||||
zip \
|
||||
curl \
|
||||
tar \
|
||||
gzip \
|
||||
bzip2 \
|
||||
xz
|
||||
# allow php binary to bind ports <1000, even if $USER != root
|
||||
RUN /usr/sbin/setcap CAP_NET_BIND_SERVICE=+eip /usr/local/bin/php
|
||||
|
||||
RUN set -xe; \
|
||||
apk add --no-cache --virtual .ifm-runtime-deps \
|
||||
apache2 \
|
||||
apache2-utils \
|
||||
php5-apache2 \
|
||||
php5 \
|
||||
php5-mcrypt \
|
||||
php5-gd \
|
||||
php5-intl \
|
||||
php5-json \
|
||||
php5-curl \
|
||||
php5-bz2 \
|
||||
php5-zlib \
|
||||
php5-posix \
|
||||
php5-soap \
|
||||
php5-openssl \
|
||||
php5-pcntl \
|
||||
php5-xml \
|
||||
php5-phar \
|
||||
php5-zip
|
||||
|
||||
RUN mkdir -p /run/apache2 \
|
||||
&& mv /var/www/localhost/htdocs /var/www/html \
|
||||
&& chown -R apache:apache /var/www \
|
||||
&& chmod g+ws /var/www/html \
|
||||
&& rm /var/www/html/index.html \
|
||||
&& rm -Rf /var/www/localhost \
|
||||
&& sed -ri \
|
||||
-e 's!^(\s*CustomLog)\s+\S+!\1 /proc/self/fd/1!g' \
|
||||
-e 's!^(\s*ErrorLog)\s+\S+!\1 /proc/self/fd/2!g' \
|
||||
-e 's!^#LoadModule rewrite_module!LoadModule rewrite_module!' \
|
||||
-e 's!/var/www/localhost/htdocs!/var/www/html!g' \
|
||||
-e 's!/var/www/localhost!/var/www!g' \
|
||||
"/etc/apache2/httpd.conf" \
|
||||
&& rm /etc/apache2/conf.d/info.conf \
|
||||
&& rm /etc/apache2/conf.d/userdir.conf \
|
||||
&& { \
|
||||
echo 'ServerTokens Prod'; \
|
||||
echo 'ServerSignature Off'; \
|
||||
echo 'DocumentRoot "/var/www/html"'; \
|
||||
echo '<Directory "/var/www/html">'; \
|
||||
echo ' Options None'; \
|
||||
echo ' AllowOverride All'; \
|
||||
echo ' Require all granted'; \
|
||||
echo '</Directory>'; \
|
||||
} > /etc/apache2/conf.d/ZZ_ifm
|
||||
|
||||
RUN { \
|
||||
echo 'date.timezone = "Europe/Berlin"'; \
|
||||
echo 'zlib.output_compression = On'; \
|
||||
echo 'zlib.output_compression_level = 6'; \
|
||||
echo 'memory_limit = 256M'; \
|
||||
echo 'max_execution_time = 120'; \
|
||||
echo 'upload_max_filesize = 512M'; \
|
||||
echo 'post_max_size = 512M'; \
|
||||
echo 'log_errors = On'; \
|
||||
echo 'error_log = "/var/www/php.log"'; \
|
||||
} > $PHP_INI_DIR/conf.d/ZZ_ifm.ini
|
||||
|
||||
COPY docker-startup.sh /usr/local/bin/
|
||||
|
||||
COPY ifm.php /var/www/html/index.php
|
||||
|
||||
WORKDIR /var/www
|
||||
# prepare files
|
||||
RUN rm -rf /var/www/html && \
|
||||
mkdir -p /usr/local/share/webapps/ifm && \
|
||||
ln -s /var/www /usr/local/share/webapps/ifm/www
|
||||
COPY ifm.php /usr/local/share/webapps/ifm/index.php
|
||||
COPY docker-startup.sh /usr/local/bin
|
||||
|
||||
# start php server
|
||||
WORKDIR /usr/local/share/webapps/ifm
|
||||
EXPOSE 80
|
||||
CMD ["docker-startup.sh"]
|
||||
|
||||
CMD /usr/local/bin/docker-startup.sh
|
||||
|
@@ -1,15 +1,22 @@
|
||||
#!/bin/sh
|
||||
set -e
|
||||
|
||||
################################################################################
|
||||
# Adjust ifm configuration according to docker env vars.
|
||||
# Defaults should match those in ifm.php. See Dockerfile for details.
|
||||
|
||||
################################################################################
|
||||
|
||||
# Apache gets grumpy about PID files pre-existing
|
||||
rm -f /usr/local/apache2/logs/httpd.pid
|
||||
|
||||
# Start up apache
|
||||
exec httpd -DFOREGROUND
|
||||
if [ ! -z $IFM_DOCKER_UID ]; then
|
||||
if [ -z $IFM_DOCKER_GID ]; then
|
||||
export IFM_DOCKER_GID=$IFM_DOCKER_UID
|
||||
fi
|
||||
if getent passwd $IFM_DOCKER_UID >/dev/null 2>&1; then
|
||||
deluser $(getent passwd $IFM_DOCKER_UID | sed "s/:.*//")
|
||||
fi
|
||||
if ! getent group $IFM_DOCKER_GID >/dev/null 2>&1; then
|
||||
addgroup -g $IFM_DOCKER_GID -S ifm
|
||||
REAL_GROUP=ifm
|
||||
else
|
||||
REAL_GROUP=$(getent group $IFM_DOCKER_GID | sed "s/:.*//")
|
||||
fi
|
||||
adduser -u $IFM_DOCKER_UID -HDG $REAL_GROUP ifm
|
||||
else
|
||||
adduser -HD ifm
|
||||
fi
|
||||
|
||||
su ifm -c "php -S 0:80 -t /usr/local/share/webapps/ifm"
|
||||
|
Reference in New Issue
Block a user