Смотря для чего вам это надо, запустить основной процесс от пользователя и его группы в композ (версии 3) можно вот так
PS. Да забыл, только надо экспортунть эти переменные окружения
export UID="$(id -u)"export GID="$(id -g)"
Вы немного не поняли суть докера, это не виртуализация как например виртуалбокс, задача докера изолировать 1 процесс с PID 1 только за ним он и следит. То есть докер контейнер это запуск одной программы изолированно, например openssh-server, для примера nginx + php-fpm+mysql это будет 3 разных докер контейнера, при том если хотите lets encrypt это будет четвертый контейнер, крон пятый и так далее.
Сам по себе контейнер это запуск образа, а образ это "слоеный пирог" как таковой, в сам контейнер ничего писать нельзя он не сохраняет состояние, можно писать только в образ слоями, для этого есть файл Dockerfile каждая команда в нем это новый слой в пироге, только там можно дополнительно как то расширить образ новыми "слоями пирога" и на основе нового образа запустить контейнер.
Оверхеда практически никакого нет, вся эта изоляция делается на уровне ядра линукса хостовой системы, именно линукса, потому что в остальных системах это не совсем чистый докер, а Docker Desktop (докер на костылях).
Преимущество докера раскрывается на самом деле в управлении окружением, вы можете запустить с десяток php-fpm процессов различных версий, библиотек и конфигураций, что гарантирует (почти) одинаковое поведение на любой хост системе где установлен докер. Так же это помогает именно раскатки приложения в продакшене, вы можете подготовить и сконфигурировать образ для приложения, потом при изменениях в гите делать слой в образе накатывая туда код и записывать готовый образ с приложением в регистре (registry - хранилище образов), а системы деплоя уже увидят что изменился образ и подтянут его, запустят 100500 контейнеров после чего переключат на них трафик, так что деплой приложений стал простым и контролируемым. Но все это к стейтлесс частям приложения, стейтфул системы (базы данных, хранилища файловые) в докер как правило не запихивают для этого есть другие инструменты.
С виду действительно, как будто бэкапы срабатывают. Смена шареда сомневаюсь что поможет или будет лучше или будет дольше лучше =))
Но можете попробовать netangels мне ребята нравятся использую вместе с бегетом уже много лет
FastPanel прописывает spf, dkim, dmarc? Зачем почта на сервере с сайтом? У большинства хостеров закрыты порты почтовые. При том панели ставят в том числе на виртуалки где просто столько всего не запустить по ресурсам =))
Он не нужен без оркестрации или хотя бы CI/CD, в чем смысл запускать что то в докере, а не сразу на хост системе?
И вопрос: а вы не планируете выложить сорцы в опенсурс? И откроете ли возможность сообществу расширять вашу панель?
Технически из вне проверить невозможно, начиная от проксирования в клоудфлаер и заканчивая арендой прокси прокладки у хостера из реестра. При том если клоудфлер может выдать реальный IP то у прокси-прокладки сделать это не получится, так как нет доступа к настройкам
Там вот и все:
function level($id) {$level = 1; while ($id > 1) { $result = mysql_query("SELECT id,id_parent FROM `content` WHERE id='$id'"); $myrow = mysql_fetch_array($result); $id_parent = $myrow["id_parent"]; $level = $level + 1; $id = $id_parent; } return $level;}
Во-первых, у вас тут SQL Injection.Во-вторых, level лучше добавить в таблицу content чтоб он выбирался одним запросом, а не в цикле
И что это меняет? В любом случае нам нужен id, чтобы по нему сделать фильтр записей.
Зачем? Необязательно выбирать поле в select чтобы по нему сделать фильтрацию.
Запрос вида
select `id`, `parent_id` from `content` where `id` = 1
вернет только строки где id = 1 следовательно в select id не нужен так как он уже известен, других там не будет и это лишние данные которые гоняются, он нужен только в IN чтобы понять к какому id из запрошенных какой parent_id соответствует
Понятно, зачем. Чтобы id попал в объект, который формируется в результате запроса.
Это было бы логично если бы был WHERE id IN (...), но в данном случае действительно лишнее