1 min read

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:

  1. Self hosted with docker
  2. Decent UI
  3. Mobile support
  4. 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.