FROM php:8.1-fpm-alpine
LABEL org.opencontainers.image.authors="jerome@jutteau.fr"
+ARG INI="php"
# base install
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
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
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:
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).
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) {
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');
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');