Самый простой вариант - хранить json в longText.
Если вариант с описанной выше структурой, то можно использовать morphMany - тип поля отдельная модель, значение поля тоже.
Возможно что-то не так с настройкой чистых ссылок. Если открыть вкладку Network в Chrome то можно увидеть что часть картинок грузится из images, а часть из Images. Это разные папки везде кроме Windows.
И вроде MW не очень дружит с nginx: mediawiki.ru/forum/threads/851
Выгрузите один раз все, а потом пинайте сторонний сайт чтобы он пошел и обновил то что изменилось. Например после обновления одной статьи отправляете им ее айди - они делают запрос и обновляют инфу об этой статье, или сразу шлите изменения.
Скорее всего в большинстве случаев они создаются от www-data потому что пользователь заходит на веб и в этот момент что-то пишется.
Но иногда может произойти так что лог создаться в момент запланированной в кроне артисановской командой. И тут уже вопрос от кого оно запускается.