Once in a while I need to access my documents from my phone. When using Android, I was able to use Solid Explorer paired with ZeroTier to log in remotely to my SMB share on my home server. After moving to iOS, I have yet to discover a files app that is able to transfer any files reliably. I've tried the native Files app, as well as a variety of 3P solutions. Ultimately, it was easier to just deploy a web app.
After some light digging, I found https://filerun.com/ which met my criteria:
- Self hosted with docker
- Decent UI
- Mobile support
- Allows mapping existing file systems to the shares.
For my particular deployment, I set up a docker image on my cloud server, and added some additional protection using Client Side SSL, using https://github.com/cloudflare/cfssl for the generation and management of my PKI.
I did have to patch the
uploads.ini to allow larger file uploads, so I mapped that directly into the docker container using a volume mount:
./uploads.ini:/usr/local/etc/php/conf.d/uploads.ini. I also edited the
config.php and mapped it in:
./config.php:/var/www/html/customizables/config.php. Everything else works flawlessly.
Here's a sample docker-compose:
--- version: '2' services: db: image: mariadb:10.1 environment: MYSQL_ROOT_PASSWORD: your_mysql_root_password MYSQL_USER: your_filerun_username MYSQL_PASSWORD: your_filerun_password MYSQL_DATABASE: your_filerun_database PUID: 1000 PGID: 1000 volumes: - ./db:/var/lib/mysql restart: unless-stopped web: image: afian/filerun environment: FR_DB_HOST: db FR_DB_PORT: 3306 FR_DB_NAME: your_filerun_database FR_DB_USER: your_filerun_username FR_DB_PASS: your_filerun_password APACHE_RUN_USER: your_user APACHE_RUN_USER_ID: 1000 APACHE_RUN_GROUP: your_user APACHE_RUN_GROUP_ID: 1000 UPLOAD_LIMIT: 1024M PUID: 1000 PGID: 1000 depends_on: - db links: - db:db ports: - "8311:80" volumes: - ./html:/var/www/html - ./config.php:/var/www/html/customizables/config.php - ./user-files:/user-files - /your/data:/user-files/folder1 - ./uploads.ini:/usr/local/etc/php/conf.d/uploads.ini restart: unless-stopped
file_uploads = On memory_limit = 1024M upload_max_filesize =1024M post_max_size = 1024M max_execution_time = 600
<?php $config['url']['root'] = 'https://my.domain.here/';
It's mobile friendly, password protected, and is bound to my VPN interface protected by PKI. I feel secure putting my files there.