Simple Mobile File Access
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.
Filerun
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.
Config Examples
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
My uploads.ini
file_uploads = On
memory_limit = 1024M
upload_max_filesize =1024M
post_max_size = 1024M
max_execution_time = 600
My config.php
<?php
$config['url']['root'] = 'https://my.domain.here/';
Summary
It's mobile friendly, password protected, and is bound to my VPN interface protected by PKI. I feel secure putting my files there.