From: Blackeye <14815724-Blackstareye@users.noreply.gitlab.com> Date: Mon, 17 Feb 2025 15:51:11 +0000 (+0000) Subject: Merge branch 'fix_for_issue_20' into 'next-release' X-Git-Url: https://git.p6c8.net/jirafeau_project.git/commitdiff_plain/fd1347eaf268604e0999a7cfa4b8e3b127a25244?hp=d8e0f9c68ebf611d5f358be33277ebed456cebe8 Merge branch 'fix_for_issue_20' into 'next-release' fix for #20, added also lang to env variables; added function for associative... See merge request jirafeau/Jirafeau!14 --- diff --git a/Dockerfile b/Dockerfile index 823c1dd..6bf9788 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,6 @@ FROM php:8.1-fpm-alpine LABEL org.opencontainers.image.authors="jerome@jutteau.fr" +ARG INI="php" # base install RUN apk update && \ @@ -11,7 +12,7 @@ RUN apk update && \ COPY --chmod=550 docker/cleanup.sh docker/run.sh / COPY --chmod=640 docker/docker_config.php /docker_config.php -COPY docker/php.ini /usr/local/etc/php/php.ini +COPY docker/${INI}.ini /usr/local/etc/php/php.ini COPY docker/lighttpd.conf /etc/lighttpd/lighttpd.conf # Install Jirafeau diff --git a/docker-compose.yaml b/docker-compose.yaml index 6b9c57b..9fcb635 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -1,12 +1,30 @@ services: web: build: + no_cache: true + #args: + # INI: php_debug #change the ini context: . # or ../Dockerfile if we put it in the ./docker folder volumes: - ./jirafeau_data:/data environment: - - ADMIN_PASSWORD='p4ssw0rd' - + ADMIN_PASSWORD: p4ssw0rd + #LANG: en + #WEB_ROOT: 'my.domain.de' + #STYLE: 'my_jirafeau_theme' + #DARK_STYLE: 'my_jirafeau_theme' + AVAILABILITIES: | + { + "minute": true, + "hour": true, + "day": true, + "week": true, + "fortnight": true, + "month": true, + "quarter": false, + "year": false, + "none": false + } ports: - 8080:80 diff --git a/docker/README.md b/docker/README.md index 10ee322..d170d70 100644 --- a/docker/README.md +++ b/docker/README.md @@ -20,6 +20,47 @@ cd Jirafeau docker build -t your/jirafeau:latest . ``` +## Docker Compose + +You can use the `docker-compose.yaml` from [here](../docker-compose.yaml) + +### Run Container + +```sh +docker compose up -d +``` + +### Custom Theme + +1. copy the theme data from the running container + + ```sh + docker compose cp web:/www/media jirafeau_media + ``` + +2. mount the theme data + + ```yaml + #.... + volumes: + - ./jirafeau_media/your_theme:/www/media/your_theme + ``` + +3. set the environment variable + + ```yaml + # .... + environment: + STYLE: 'your_theme' + DARK_STYLE: 'your_theme' + ``` + +4. run the compose file + + ```sh + docker compose up -d + ``` + ## Security You may be interested in running Jirafeau on port 80: @@ -36,8 +77,11 @@ Jirafeau's docker image accepts some options through environment variables to ea More details about options in `lib/config.original.php`. Available options: + - `ADMIN_PASSWORD`: setup a specific admin password. If not set, a random password will be generated. - `ADMIN_IP`: set one or more ip allowed to access admin interface (separated by comma). +- `LANG`: choose the language for jirafeau (default auto). +- `AVAILABILITIES`: change the array for availablibilities that the user can select (see `docker-compose.yaml` for an example how to do that). Availability is the time the file should be available before it can be deleted. - `WEB_ROOT`: setup a specific domain to point at when generating links (e.g. 'jirafeau.mydomain.com/'). - `VAR_ROOT`: setup a specific path where to place files. default: '/data'. - `FILE_HASH`: can be set to `md5`, `partial_md5` or `random` (default). diff --git a/docker/docker_config.php b/docker/docker_config.php index 75c6fb8..6037ec6 100644 --- a/docker/docker_config.php +++ b/docker/docker_config.php @@ -91,6 +91,26 @@ function env_2_cfg_string_array(&$cfg, $config_name) return true; } +function env_2_cfg_array_from_json(&$cfg, $config_name) +{ + $env_name = strtoupper($config_name); + $env_string = getenv($env_name); + if ($env_string === false) { + return; + } + $result = json_decode($env_string, true); + if (json_last_error() === JSON_ERROR_NONE) { + // JSON is valid + $c = count($result); + echo("setting $config_name array with $c value(s)n\n"); + } else { + echo("ERROR - invalid json for environment key $config_name \n"); + } + + $cfg[$config_name] = $result; + return true; +} + function setup_admin_password(&$cfg) { if (strlen($cfg['admin_password']) > 0) { @@ -165,6 +185,7 @@ function run_setup(&$cfg) env_2_cfg_bool($cfg, 'preview'); env_2_cfg_string($cfg, 'title', false); env_2_cfg_string($cfg, 'organisation'); + env_2_cfg_string($cfg, 'lang'); env_2_cfg_string($cfg, 'contactperson'); env_2_cfg_string($cfg, 'style'); env_2_cfg_string($cfg, 'availability_default'); @@ -179,6 +200,8 @@ function run_setup(&$cfg) env_2_cfg_string_array($cfg, 'admin_ip'); env_2_cfg_string_array($cfg, 'upload_ip_nopassword'); env_2_cfg_string_array($cfg, 'proxy_ip'); + // this is a key value based value + env_2_cfg_array_from_json($cfg, 'availabilities'); env_2_cfg_bool($cfg, 'store_uploader_ip'); env_2_cfg_string($cfg, 'download_password_requirement'); env_2_cfg_int($cfg, 'download_password_gen_len');