[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"custom-urls-\u002Fmodx\u002Fserver":3,"categories-menu":10,"post-nastroyka-vps-servera-pod-modx-php8-ubuntu-24-04":120,"post-content-nastroyka-vps-servera-pod-modx-php8-ubuntu-24-04":158,"post-comments-v06yaukpbxnypv0bh0s48osu":7856,"tags":7908},{"type":4,"entity":5,"path":8},"post",{"documentId":6,"slug":7},"v06yaukpbxnypv0bh0s48osu","nastroyka-vps-servera-pod-modx-php8-ubuntu-24-04",{"uri":9},"\u002Fmodx\u002Fserver",[11,31,104],{"id":12,"documentId":13,"name":14,"slug":15,"desc":16,"published":17,"uri":18,"showmenu":17,"createdAt":19,"updatedAt":20,"publishedAt":21,"locale":22,"heading":16,"order":23,"posts":24},4,"dw88ipzixowg4rbtqhna1fck","Личное","self",null,true,"\u002Fself","2026-05-17T11:06:55.868Z","2026-05-19T09:58:08.297Z","2026-05-19T09:58:08.291Z","en",0,[25,28],{"id":26,"documentId":27},61,"otr8hblo0fac9ovggct48osv",{"id":29,"documentId":30},76,"z77qh8cg0mcz533087epr6xu",{"id":32,"documentId":33,"name":34,"slug":35,"desc":16,"published":17,"uri":36,"showmenu":17,"createdAt":37,"updatedAt":38,"publishedAt":39,"locale":22,"heading":16,"order":40,"posts":41},2,"oxow5hzkizd4dgongka7hxvf","Рабочее","work","\u002Fwork","2026-05-15T07:43:18.016Z","2026-05-19T09:58:08.301Z","2026-05-19T09:58:08.295Z",1,[42,45,48,50,53,56,59,62,65,68,71,74,77,80,83,86,89,92,95,98,101],{"id":43,"documentId":44},71,"tciv16vv801l5eg5m4rx3gal",{"id":46,"documentId":47},80,"x8y72z9yibyjcllzwes23h43",{"id":49,"documentId":6},81,{"id":51,"documentId":52},82,"wgd4f0022pq1pwbvq04rq0x0",{"id":54,"documentId":55},83,"i8wiipabpbxtcofme04ncqjy",{"id":57,"documentId":58},84,"ny1dz9tknms3219nrc5oaahy",{"id":60,"documentId":61},89,"igz67vanm4ke94cilkgrts2i",{"id":63,"documentId":64},95,"fa4sibhpf6ohmet6qo3s4ywx",{"id":66,"documentId":67},96,"u7g77d0bu0rv1u67qea9kglu",{"id":69,"documentId":70},98,"exnbib5xi3fgt7mku9q8ithc",{"id":72,"documentId":73},99,"bja31j10up0ffiqw1j5nfr79",{"id":75,"documentId":76},100,"ztrhdkce10c349k6jngsqz72",{"id":78,"documentId":79},101,"gsf74mv1zc39kkejpvy70lfk",{"id":81,"documentId":82},102,"m7c1icp5gt0x73ssyc67atvc",{"id":84,"documentId":85},103,"yz8vml65wloblc0dsp1okc8l",{"id":87,"documentId":88},104,"lquxceynryigq9wdydiwby7f",{"id":90,"documentId":91},105,"yy6x55uwn90hzkzz0786ev1q",{"id":93,"documentId":94},106,"ns37ttwnqxfc86lw6355bx9n",{"id":96,"documentId":97},107,"bjlqk6v41quti6geq9hs4ta6",{"id":99,"documentId":100},108,"ztumsu968y7otczfxrol0o19",{"id":102,"documentId":103},109,"xxxi8etz2ay3839xvw2oz9ym",{"id":105,"documentId":106,"name":107,"slug":108,"desc":16,"published":17,"uri":109,"showmenu":17,"createdAt":110,"updatedAt":111,"publishedAt":112,"locale":22,"heading":16,"order":32,"posts":113},3,"cat0obshestvennoe000001","Общественное","public","\u002Fpublic","2026-05-15T18:29:50.696Z","2026-05-19T09:58:05.992Z","2026-05-19T09:58:05.985Z",[114,117],{"id":115,"documentId":116},74,"u55grcuibxa3e64ymhoaav2v",{"id":118,"documentId":119},92,"rcz3w4mhmhb54ps3o8j462fp",{"id":49,"documentId":6,"title":121,"slug":7,"content":122,"desc":123,"intro":124,"uri":9,"published":17,"publishedDate":125,"showComments":17,"canComment":17,"telegramId":16,"telegramLink":16,"telegramHash":16,"telegramSetReaction":126,"telegramPasteImage":126,"telegramPasteTitle":126,"telegramPasteLink":126,"internalMeta":127,"createdAt":129,"updatedAt":130,"publishedAt":131,"locale":16,"coverCaption":16,"showOnHome":17,"category":132,"cover":16,"tags":133,"author":141,"comments":156,"reactions":157},"Настройка VPS сервера под MODX: PHP8 + Ubuntu 24.04","Часто настраиваю сервера под MODX, устал держать в памяти шаги. Обычно поднимая сервер по памяти, забудешь какую-нибудь мелочь, с которой провозишься 3 часа. Пусть это руководство будет шпаргалкой. А я, по мере использования, буду его дополнять.\n\n## Арендуем сервер\n\nМожно арендовать VPS на [XorekCloud](https:\u002F\u002Fbit.ly\u002FgvoXorekCloud) в любой предложеной стране или на [FirstVDS](https:\u002F\u002Fbit.ly\u002FgvoFirstVds) в России, с подходящим для вас конфигом. Цены и качество у данных провайдеров самые приемлемые, на мой взгляд.\n\n## Базовый софт\n\n```bash\napt install sudo\nsudo apt update\nsudo apt install -y curl\nsudo apt install -y software-properties-common\nsudo apt install -y language-pack-ru-base\nsudo echo \"ru_RU.CP1251 CP1251\" >>\u002Fvar\u002Flib\u002Flocales\u002Fsupported.d\u002Fru\nsudo locale-gen\nsudo locale-gen en_US.UTF-8\n```\n\nСтавим корректную локаль на сервере:\n\n```bash\ntee \u002Fetc\u002Fdefault\u002Flocale \u003C\u003C'EOF'\nLANGUAGE=en_US.UTF-8\nLC_ALL=en_US.UTF-8\nLANG=en_US.UTF-8\nLC_TYPE=en_US.UTF-8\nEOF\n```\n\nПосле этого **перезаходим на сервер по SSH**, чтобы изменения применились.\n\nСтавим nodejs, gulp, pm2:\n\n```bash\ncurl -fsSL https:\u002F\u002Fdeb.nodesource.com\u002Fsetup_23.x -o nodesource_setup.sh && sudo -E bash nodesource_setup.sh\nsudo apt-get install -y nodejs && node -v\nnpm install gulp -g\nnpm install pm2 -g\n```\n\n[Тут подробнее](https:\u002F\u002Fgithub.com\u002Fnodesource\u002Fdistributions\u002Fblob\u002Fmaster\u002FREADME.md#debinstall) про установку на Ubuntu.\n\nGit, zip, cron и т.д.:\n`sudo apt install -y git zip unzip mc nano htop cron libyaml-dev`\n\nДобавляем новую группу юзеров `sftp` и правим конфиг `\u002Fetc\u002Fssh\u002Fsshd_config`:\n\n```bash\nsudo addgroup sftp; \\\nfile_ssh_config=\u002Fetc\u002Fssh\u002Fsshd_config; \\\nsudo sed -ri 's\u002F^#?\\s?(Subsystem\\ssftp\\s.*)$\u002F#\\1\u002F' $file_ssh_config; \\\nif ! grep -q \"Subsystem sftp internal-sftp\" $file_ssh_config; then \\\n    echo \"\" | sudo tee -a $file_ssh_config; \\\n    echo \"Subsystem sftp internal-sftp\" | sudo tee -a $file_ssh_config; \\\n    echo \"Match Group sftp\" | sudo tee -a $file_ssh_config; \\\n    echo \"    ChrootDirectory %h\" | sudo tee -a $file_ssh_config; \\\n    echo \"    AllowTCPForwarding no\" | sudo tee -a $file_ssh_config; \\\n    echo \"    ForceCommand internal-sftp\" | sudo tee -a $file_ssh_config; \\\nfi; \\\nsudo service ssh restart\n```\n\n## Python\n\nУстанавливаем версию выше 3.5 и менеджер модулей pip:\n\n```bash\nsudo add-apt-repository ppa:deadsnakes\u002Fppa\nsudo apt install -y python3.10\nsudo apt install -y python3-pip\nsudo apt install -y python3.10-distutils\n```\n\nЕсли у нас установлено несколько версий Python, то делаем Python 3.10 основным:\n\n```bash\nsudo update-alternatives --install \u002Fusr\u002Fbin\u002Fpython3 python3 \u002Fusr\u002Fbin\u002Fpython3.12 10\nsudo update-alternatives --install \u002Fusr\u002Fbin\u002Fpython3 python3 \u002Fusr\u002Fbin\u002Fpython3.10 5\nsudo update-alternatives --config python3\n```\n\nи выбираем из списка `\u002Fusr\u002Fbin\u002Fpython3.10`.\n*Возможно в первой строке придётся вместо `python3.12` указать другую версию, которая на данный момент является у вас в системе основной. Проверить можно так: `python3 --version`.*\n\nЗависимости для Python приложений:\n\n```bash\nsudo python3 -m pip install ipaddr\nsudo python3 -m pip install pyyaml\nsudo python3 -m pip install pymysql\n```\n\n*Могут возникнуть проблемы при установке – решение ниже.*\n\n## Проблемы с Python\n\nВозможно, при установке модулей через pip, возникнет одна из ошибок:\n\n- `ImportError: No module named 'setuptools'`\n- `Command ... failed with error code`\n- `cannot import name 'sysconfig' from 'distutils'`\n- `module 'platform' has no attribute 'linux_distribution'`\n\nРешить это можно так:\n\n```bash\nsudo apt remove -y python3-pip\nsudo apt autoremove -y\nsudo apt install -y python3.10-distutils\nsudo curl https:\u002F\u002Fbootstrap.pypa.io\u002Fget-pip.py -o get-pip.py\nsudo python3 get-pip.py\nsudo python3 -m pip install --upgrade pip\nsudo python3 -m pip install setuptools\nsudo python3 -m pip install --upgrade setuptools\n```\n\nИ снова запустить установку модуля, на котором спотыкнулись.\n\n## MySQL\n\nУстанавливаем:\n`sudo apt install -y mysql-server`\n\nДля Ubuntu >=20.04 с репозитория будет скачана MySQL 8.0: `mysql --version`.\n\n## MySQL 5.7\n\nЕсли нужна 5.7, то сначала удаляем 8 версию:\n`sudo apt remove --autoremove mysql-server mysql-client && sudo rm -Rf \u002Fvar\u002Flib\u002Fmysql`\n\nСтавим репозиторий:\n`sudo wget https:\u002F\u002Fdev.mysql.com\u002Fget\u002Fmysql-apt-config_0.8.12-1_all.deb && sudo dpkg -i mysql-apt-config_0.8.12-1_all.deb && rm mysql-apt-config_0.8.12-1_all.deb`\n\nВ процессе надо будет выбрать дистрибутив. Для Ubuntu 18.04 и выше выбираем `bionic`. Далее жмём MySQL Server and Cluster и выбираем нужную версию MySQL (5.7). Жмём Ok.\n\nОбновляем репозитории:\n`sudo apt update`\n\nМожет возникнуть ошибка `Err:1 http:\u002F\u002Frepo.mysql.com\u002Fapt\u002Fubuntu bionic InRelease The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 467B942D3A79BD29`.\n\nНа старых Ubuntu (=20.04) другая команда:\n`sudo gpg --keyserver keyserver.ubuntu.com --recv-keys 467B942D3A79BD29`\n\nИ далее:\n`sudo apt update`\n\nСмотрим какие версии доступны в репозитории:\n`sudo apt-cache policy mysql-server`\n\nКопируем название нужной версии (у меня это `5.7.42-1ubuntu18.04`) и вставляем в команду установки, если она отличается:\n\n```bash\nsudo apt install -y mysql-client=5.7.42-1ubuntu18.04 \\\nmysql-community-server=5.7.42-1ubuntu18.04 \\\nmysql-server=5.7.42-1ubuntu18.04\n```\n\nЗапускаем получившуюся команду.\n\n## Root пользователь MySQL\n\nВ MySQL 8 версии `root` юзер не требует ввода пароля, т.к. root-аутентификация настроена через `auth_socket` вместо `mysql_native_password`, поэтому вход в учётку root возможен только локально из-под системного root-пользователя.\n\nТаким образом, по-умолчанию безопасность повышается, т.к. нет нужды передавать root-пароль в командой строке:\n`--password=\"root_password\"`.\n\nОднако, чтобы иметь второго root юзера, но уже с внешним доступом, вы можете создать его SQL командой, зайдя в MySQL из под рута `mysql -uroot`:\n\n```sql\nCREATE USER 'superroot'@'%' IDENTIFIED BY 'superpassword';\nGRANT ALL PRIVILEGES ON *.* TO 'superroot'@'%' WITH GRANT OPTION;\nFLUSH PRIVILEGES;\n```\n\n*вместо `superroot` укажите нужный логин, а вместо `superpassword` – нужный и сложный пароль.*\n\n## Проблемы с MySQL\n\nЕсть вероятность, что `SQL MODE` будет не тот. От этого MODX будет сыпать ошибки в собственный лог и ТВ не будут сохраняться. Наверняка последствий больше... лечится это так: `sudo touch \u002Fetc\u002Fmysql\u002Fconf.d\u002Fmysqld.cnf && sudo mcedit \u002Fetc\u002Fmysql\u002Fconf.d\u002Fmysqld.cnf` и в конец дописываем:\n\n```ini\n[mysqld]\nsql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION\n```\n\nКомандуем:\n`sudo systemctl restart mysql`\n\nЕсли после этого возникает ошибка с `sql_mode=only_full_group_by`, то скорее всего AppArmor не даёт применить настройки MySQL. Надо прописать в его конфиг `\u002Fetc\u002Fapparmor.d\u002Flocal\u002Fusr.sbin.mysqld` в самый конец:\n\n```\n\u002Fetc\u002Fmysql\u002F** r,\n\u002Fetc\u002Falternatives\u002F** r,\n```\n\nПосле чего командуем:\n\n```bash\nservice apparmor restart\nsudo systemctl restart mysql\n```\n\nЕсли конфиг MySQL до сих пор не применяется, то командуем `mysql` и смотрим, пишет ли он какие-то предупреждения, похожие на `[Warning] World-writable config file '\u002Fetc\u002Fmysql\u002Fmy.cnf' is ignored`. Исправляем так:\n`chmod 0775 \u002Fetc\u002Fmysql\u002Fmy.cnf`\n\nЕсли периодически MODX на посещаемом сайте наполняет лог чем-то типа `Error HY000 executing statement ... errno: 24 - Too many open files`, то надо увеличить кол-во доступных файловых дескрипторов. Для начала выполняем команду где-то в adminer или phpmyadmin `SHOW VARIABLES LIKE 'open_files_limit';` и смотрим, сколько их доступно MySQL на данный момент. После этого прописываем в `\u002Fetc\u002Fmysql\u002Fconf.d\u002Fmysqld.cnf` заведомо большее значение в виде:\n\n```ini\n[mysqld]\nopen_files_limit=32768\n```\n\nОднако этого может быть недостаточно, поэтому командуем:\n`ulimit -n 32768 && ulimit -a | grep \"open files\"`\n\nНо и это может не повлиять на переменную open_files_limit в MySQL, в частности на системах с systemd. Поэтому в `\u002Fetc\u002Fsystemd\u002Fsystem\u002Fmulti-user.target.wants\u002Fmysql.service` (или в `\u002Fusr\u002Flib\u002Fsystemd\u002Fsystem\u002Fmysql.service`, если предыдущий файл является ссылкой) в секцию `[Service]` прописываем:\n`LimitNOFILE=32768`\n*Если данный параметр уже есть в файле, то необходимо заменить его.*\n\nПосле этого командуем:\n\n```bash\nsudo systemctl daemon-reload\nsudo systemctl restart mysql\n```\n\n## Nginx, PHP\n\nСтавим репозиторий новых версий PHP:\n\n```bash\nsudo add-apt-repository ppa:ondrej\u002Fphp\nsudo apt update\n```\n\n> Решение проблемы  `ModuleNotFoundError: No module named 'apt_pkg'`  описано в самом низу статьи.  \n\n> Возможно, возникнет ошибка при попытке обновить список пакетов командой **apt update**, вроде этой:  \n> `Err:4 http:\u002F\u002Fppa.launchpad.net\u002Fondrej\u002Fphp\u002Fubuntu xenial InRelease The following signatures couldn't be verified because the public key is not available: NO_PUBKEY [...]`  \n> Вместо 3 точек будет публичный ключ, копируем его и вставляем в конец команды, вместо трёх точек:  \n> `sudo apt-key adv --recv-keys --keyserver keyserver.ubuntu.com ...`  \n> После этого снова  `apt update` .  \n\nУстанавливаем NGINX:\n`sudo apt install -y nginx`\n\nУстанавливаем PHP 7.x:\n\n```bash\nsudo apt install -y php7.0-fpm php7.0-mcrypt php7.0-mysql php7.0-sqlite3 php7.0-curl php-db php7.0-gd php7.0-xml php7.0-json php7.0-imap php7.0-dev php7.0-zip php7.0-yaml php7.0-mbstring \\\n&& sudo apt install -y php7.1-fpm php7.1-mcrypt php7.1-mysql php7.1-sqlite3 php7.1-curl php7.1-gd php7.1-xml php7.1-json php7.1-imap php7.1-dev php7.1-zip php7.1-yaml php7.1-mbstring \\\n&& sudo apt install -y php7.2-fpm php7.2-mcrypt php7.2-mysql php7.2-sqlite3 php7.2-curl php7.2-gd php7.2-xml php7.2-json php7.2-imap php7.2-dev php7.2-zip php7.2-yaml php7.2-mbstring \\\n&& sudo apt install -y php7.3-fpm php7.3-mcrypt php7.3-mysql php7.3-sqlite3 php7.3-curl php7.3-gd php7.3-xml php7.3-json php7.3-imap php7.3-dev php7.3-zip php7.3-yaml php7.3-mbstring \\\n&& sudo apt install -y php7.4-fpm php7.4-mcrypt php7.4-mysql php7.4-sqlite3 php7.4-curl php7.4-gd php7.4-xml php7.4-json php7.4-imap php7.4-dev php7.4-zip php7.4-yaml php7.4-mbstring\n```\n\nУстанавливаем PHP 8.x:\n\n```bash\nsudo apt install -y php8.0-fpm php8.0-mcrypt php8.0-mysql php8.0-sqlite3 php8.0-curl php-db php8.0-gd php8.0-xml php8.0-imap php8.0-dev php8.0-zip php8.0-yaml php8.0-mbstring \\\n&& sudo apt install -y php8.1-fpm php8.1-mcrypt php8.1-mysql php8.1-sqlite3 php8.1-curl php8.1-gd php8.1-xml php8.1-imap php8.1-dev php8.1-zip php8.1-yaml php8.1-mbstring \\\n&& sudo apt install -y php8.2-fpm php8.2-mcrypt php8.2-mysql php8.2-sqlite3 php8.2-curl php8.2-gd php8.2-xml php8.2-imap php8.2-dev php8.2-zip php8.2-yaml php8.2-mbstring \\\n&& sudo apt install -y php8.3-fpm php8.3-mcrypt php8.3-mysql php8.3-sqlite3 php8.3-curl php8.3-gd php8.3-xml php8.3-imap php8.3-dev php8.3-zip php8.3-yaml php8.3-mbstring \\\n&& sudo apt install -y php8.4-fpm php8.4-mcrypt php8.4-mysql php8.4-sqlite3 php8.4-curl php8.4-gd php8.4-xml php8.4-imap php8.4-dev php8.4-zip php8.4-yaml php8.4-mbstring\n```\n\nСразу выбираем необходимую версию PHP для терминала:\n`sudo update-alternatives --config php`\n*Я пока обычно ставлю 7.4, т.к. многие скрипты для MODX оптимизированы именно под неё.*\n\nНастраиваем:\n\n```bash\nsudo apt update && sudo apt upgrade\nsudo service php7.0-fpm restart && sudo service php7.1-fpm restart && sudo service php7.2-fpm restart && sudo service php7.3-fpm restart && sudo service php7.4-fpm restart\nsudo service php8.0-fpm restart && sudo service php8.1-fpm restart && sudo service php8.2-fpm restart && sudo service php8.3-fpm restart && sudo service php8.4-fpm restart\nsudo nginx -t\nsudo service nginx reload\nsudo mkdir \u002Fetc\u002Fnginx\u002Fconf.sites && sudo mkdir \u002Fetc\u002Fnginx\u002Fconf.inc && sudo mkdir \u002Fetc\u002Fnginx\u002Fconf.inc\u002Fmain && sudo mkdir \u002Fetc\u002Fnginx\u002Fconf.inc\u002Faccess && sudo mkdir \u002Fetc\u002Fnginx\u002Fconf.inc\u002Fdomains && sudo touch \u002Fetc\u002Fnginx\u002Fblockips.conf\n```\n\n> Возможно, придётся установить YAML иначе:  \n>\n>\n>\n> ```bash\n> sudo apt install -y php-pear\n> sudo pecl install yaml\n> ```\n\nВ файле `\u002Fetc\u002Fnginx\u002Fnginx.conf` заменить всё на:\n\n```nginx\nuser www-data;\nworker_processes auto;\npid \u002Frun\u002Fnginx.pid;\ninclude \u002Fetc\u002Fnginx\u002Fmodules-enabled\u002F*.conf;\n\nevents {\n    worker_connections 768;\n    #multi_accept on;\n}\n\nhttp {\n    # >> IP blocks\n    include blockips.conf;\n    # \u003C\u003C IP blocks\n\n    # >> Basic Settings\n    merge_slashes off;\n    sendfile on;\n    tcp_nopush on;\n    tcp_nodelay on;\n    keepalive_timeout 65;\n    types_hash_max_size 2048;\n    client_max_body_size 100M;\n    include \u002Fetc\u002Fnginx\u002Fmime.types;\n    default_type application\u002Foctet-stream;\n    # \u003C\u003C Basic Settings\n\n    # >> SSL Settings\n    ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE\n    ssl_prefer_server_ciphers on;\n    # \u003C\u003C SSL Settings\n\n    # >> Logging Settings\n    access_log \u002Fvar\u002Flog\u002Fnginx\u002Faccess.log;\n    error_log \u002Fvar\u002Flog\u002Fnginx\u002Ferror.log;\n    # \u003C\u003C Logging Settings\n\n    ##\n    # Gzip Settings\n    ##\n    gzip on;\n    gzip_disable \"msie6\";\n    gzip_vary on;\n    gzip_proxied any;\n    gzip_comp_level 6;\n    gzip_buffers 16 8k;\n    gzip_http_version 1.0;\n    gzip_types text\u002Fplain text\u002Fcss application\u002Fjson application\u002Fx-javascript application\u002Fjavascript text\u002Fxml application\u002Fxml application\u002Fxml+rss text\u002Fjavascript;\n\n    # >> Virtual Host Configs\n    include \u002Fetc\u002Fnginx\u002Fconf.d\u002F*.conf;\n    include \u002Fetc\u002Fnginx\u002Fsites-enabled\u002F*;\n    # \u003C\u003C Virtual Host Configs\n}\n```\n\nКомандуем:\n\n```bash\nsudo nginx -t\nsudo service nginx reload\n```\n\nВ файлах `\u002Fetc\u002Fphp\u002F{version}\u002Fcli\u002Fphp.ini` и `\u002Fetc\u002Fphp\u002F{version}\u002Ffpm\u002Fphp.ini` раскомментировать параметр `date.timezone` и установить значение:\n\n```bash\nphp_timezone='Europe\\\u002FMoscow'; \\\nfor version in `ls -F1 \u002Fetc\u002Fphp\u002F | grep -e .\u002F | tr -d \\\u002F`; do \\\n    if [ -f \"\u002Fetc\u002Fphp\u002F${version}\u002Ffpm\u002Fphp.ini\" ]; then \\\n        sed -ri 's\u002F^;?(date\\.timezone =).*$\u002F\\1 '${php_timezone}'\u002F' \u002Fetc\u002Fphp\u002F$version\u002Ffpm\u002Fphp.ini; \\\n    fi; \\\n    if [ -f \"\u002Fetc\u002Fphp\u002F${version}\u002Fcli\u002Fphp.ini\" ]; then \\\n        sed -ri 's\u002F^;?(date\\.timezone =).*$\u002F\\1 '${php_timezone}'\u002F' \u002Fetc\u002Fphp\u002F$version\u002Fcli\u002Fphp.ini; \\\n    fi; \\\ndone\n```\n\n> Также, возможно придется добавить модуль yaml в php конфиг, если в папке  `.\u002Ffpm\u002Fconf.d`  и  `.\u002Fcli\u002Fconf.d`  нет файла  `20-yaml.ini` . Для этого добавим строку рядом с другими подобными:  \n> `extension=yaml.so`  \n\nКомандуем:\n\n```bash\nsudo service php7.0-fpm restart && sudo service php7.1-fpm restart && sudo service php7.2-fpm restart && sudo service php7.3-fpm restart && sudo service php7.4-fpm restart\nsudo service php8.0-fpm restart && sudo service php8.1-fpm restart && sudo service php8.2-fpm restart && sudo service php8.3-fpm restart && sudo service php8.4-fpm restart\n```\n\nComposer глобально:\n`curl -sS https:\u002F\u002Fgetcomposer.org\u002Finstaller -o composer-setup.php && sudo php composer-setup.php --install-dir=\u002Fusr\u002Flocal\u002Fbin --filename=composer && rm composer-setup.php`\n\n## Даймон для хост-панельки\n\n[Качаем](https:\u002F\u002Fgithub.com\u002Fgvozdb\u002FmodxPanelDaemon), располагаем в директории `\u002Froot\u002Fscripts\u002Fpy\u002Fmodxpaneldaemon\u002F`, создаем папки `log` и `tmp` в директории даймона:\n\n```bash\nmkdir -p \u002Froot\u002Fscripts\u002Fpy\u002F \\\n&& curl -L -o modxpaneldaemon.zip \"https:\u002F\u002Fgithub.com\u002Fgvozdb\u002FmodxPanelDaemon\u002Farchive\u002Fmaster.zip\" \\\n&& unzip modxpaneldaemon.zip -d \"\u002Froot\u002Fscripts\u002Fpy\u002F\" \\\n&& mv \u002Froot\u002Fscripts\u002Fpy\u002FmodxPanelDaemon-master \u002Froot\u002Fscripts\u002Fpy\u002Fmodxpaneldaemon \\\n&& rm -f modxpaneldaemon.zip \\\n&& mkdir \u002Froot\u002Fscripts\u002Fpy\u002Fmodxpaneldaemon\u002Flog\u002F \\\n&& mkdir \u002Froot\u002Fscripts\u002Fpy\u002Fmodxpaneldaemon\u002Ftmp\u002F\n```\n\nДалее настраиваем `config.yaml`...\n\nВ конфиге обязательно нужно заменить `secret_key` и `socket_port` – далее их же укажем в системных настройках, после установки компонента `hostPanel`. Порт оптимально выбрать рандомно из диапазона 49152-65535.\n\nПомимо этого, если у вас MySQL root-пользователь с аутентификацией `auth_socket`, то обязательно нужно будет создать пользователя с root-правами (описано выше) и прописать к нему доступ в переменные конфига:\n\n```yaml\nmysql_rootuser: \"superroot\"\nmysql_rootpass: \"superpassword\"\n```\n\n*Заменить на своего like-root-пользователя.*\n\nВыполняем команду для создания сайта хост-панели:\n`\u002Fbin\u002Fbash \u002Froot\u002Fscripts\u002Fpy\u002Fmodxpaneldaemon\u002Fscript\u002Fsh\u002Faddmodx.sh -a 7.4 -v 2.8.8-pl -p \"root_пароль_mysql\" -h host.you_main_domain.ru -u host -d host.you_main_domain.ru`\n\nМожет понадобиться удалить сайт хост-панели:\n`\u002Fbin\u002Fbash \u002Froot\u002Fscripts\u002Fpy\u002Fmodxpaneldaemon\u002Fscript\u002Fsh\u002Fremove.sh \"root_пароль_mysql\" host`\n\nЧтобы даймон стал сервисом (`\u002Fetc\u002Finit.d\u002Fmodxpanel start|stop|restart` или `service modxpanel start|stop|restart`), надо создать файл `\u002Fetc\u002Finit.d\u002Fmodxpanel`:\n`touch \u002Fetc\u002Finit.d\u002Fmodxpanel && mcedit \u002Fetc\u002Finit.d\u002Fmodxpanel`\n\nС таким содержимым:\n\n```bash\n#!\u002Fbin\u002Fbash\n### BEGIN INIT INFO\n# Provides:          ModxPanel\n# Required-Start:    $local_fs $network $named $time $syslog\n# Required-Stop:     $local_fs $network $named $time $syslog\n# Default-Start:     2 3 4 5\n# Default-Stop:      0 1 6\n# Description:       Service of ModxPanelDaemon [Python].\n### END INIT INFO\n\nprog=modxpanel\nRETVAL=0\n\nstart() {\n    echo \"Starting $prog…\"\n    \u002Fusr\u002Fbin\u002Fenv python3 \u002Froot\u002Fscripts\u002Fpy\u002Fmodxpaneldaemon\u002Fmodxpaneldaemon.py start\n    RETVAL=$?\n    return $RETVAL\n}\n\nstop() {\n    echo \"Stopping $prog…\"\n    \u002Fusr\u002Fbin\u002Fenv python3 \u002Froot\u002Fscripts\u002Fpy\u002Fmodxpaneldaemon\u002Fmodxpaneldaemon.py stop\n    RETVAL=$?\n    return $RETVAL\n}\n\ncase \"$1\" in\n    start)\n        start\n        ;;\n    stop)\n        stop\n        ;;\n    restart)\n        stop\n        start\n        ;;\n    *)\n        echo \"Usage: $0 {start|stop|restart}\"\n        exit 1\n    ;;\nesac\n\nexit 0\n```\n\nСделать его исполняемым:\n`sudo chmod +x \u002Fetc\u002Finit.d\u002Fmodxpanel`\n\nДобавить в автозагрузку:\n`update-rc.d \"modxpanel\" defaults`\n\nИ запустить сервис:\n`\u002Fetc\u002Finit.d\u002Fmodxpanel start`\n\n## Проблемы с даймоном хост-панельки\n\nПри запуске сервиса может выдать ошибку `ModuleNotFoundError: No module named '_cffi_backend'`. Решается установкой `cffi`:\n`python3 -m pip install cffi`\n\n## Хост-панель\n\n[Качаем компонент hostPanel](https:\u002F\u002Fgithub.com\u002Fgvozdb\u002FhostPanel) и устанавливаем в систему сайта `h1.you_main_domain.ru`:\n\n```bash\ncurl -L -o hostpanel.zip \"https:\u002F\u002Fgithub.com\u002Fgvozdb\u002FhostPanel\u002Farchive\u002Fmaster.zip\" \\\n&& unzip hostpanel.zip -d \"\u002Fvar\u002Fwww\u002Fhost\u002Fwww\u002F\" \\\n&& mv \u002Fvar\u002Fwww\u002Fhost\u002Fwww\u002FhostPanel-master \u002Fvar\u002Fwww\u002Fhost\u002Fwww\u002Fhostpanel \\\n&& rm -f hostpanel.zip \\\n&& sh \u002Fvar\u002Fwww\u002Fhost\u002Fchmod\n```\n\nЗапускаем из веба УРЛ для установки компонента hostPanel в MODX:\n`http:\u002F\u002Fh1.you_main_domain.ru\u002Fhostpanel\u002F_build\u002Fbuild.transport.php`\n\nВ системных настройках обязательно указываем актуальный `secret_key` и `socket_port` (из `config.yaml` даймона), а также другие настройки, такие как `hostpanel_host_domain`, `hostpanel_domain_mask` и `hostpanel_user_mask` (если это необходимо).\n\nВсё, теперь можно создавать MODX сайты через панель в админке.\n\n## Блокируем попытки брутфорса\n\nУстанавливаем iptables:\n`apt install iptables-persistent`\n\nВставляем два правила командами в консоли:\n\n```bash\niptables -I INPUT -p tcp --dport 22 -i eth0 -m state --state NEW -m recent --set\niptables -I INPUT -p tcp --dport 22 -i eth0 -m state --state NEW -m recent  --update --seconds 600 --hitcount 4 -j DROP\n```\n\n*Если в течение 10 минут будет 4 неуспешные попытки входа по SSH, то заблокировать данный IP.*\n\nСохраняем правила:\n`iptables-save > \u002Fetc\u002Fiptables\u002Frules.v4`\n\nПроверяем:\n`iptables -nvL`\n\nТакже имеет смысл сменить порт SSH. Для этого в `\u002Fetc\u002Fssh\u002Fsshd_config` заменяем `Port 22` на уникальный порт в диапазоне 2001-65535. И перезапускаем службу:\n\n```bash\nsudo systemctl daemon-reexec\nsudo systemctl restart ssh\n```\n\n## Короткая команда chmod\n\nВ корневой директории каждого юзера есть файл `chmod`, который ставит права на файлы и папки. Периодически, после ковыряния рутом надо запускать его, чтобы не было проблем с правами. Можно запускать вручную так:\n`sh \u002Fvar\u002Fwww\u002F{username}\u002Fchmod`\nА можно сократить до безобразия. Для этого идём в `\u002Froot\u002F.bashrc` и в конец добавляем:\n\n```bash\n# Short run chmod for user\nch() {\n    if [ -f \u002Fvar\u002Fwww\u002F$1\u002Fchmod ]; then\n        sh \u002Fvar\u002Fwww\u002F$1\u002Fchmod\n    fi\n    if [ -f \u002Fhome\u002F$1\u002Fchmod ]; then\n        sh \u002Fhome\u002F$1\u002Fchmod\n    fi\n}\n```\n\nТеперь запустить сброс прав на файлы и папки куда быстрее:\n`ch {username}`\n\n## Короткая команда NGINX reload\n\nЧасто при настройке NGINX конфига приходится командовать `nginx -t` и если ошибок нет, то `service nginx reload`. Это можно делать на автомате. Для этого идём в `\u002Froot\u002F.bashrc` и в конец добавляем:\n\n```bash\n# Reload NGINX or print failure message\nnginxreload() {\n    NGINX_TEST=`nginx -t 2>&1`; if [[ $NGINX_TEST =~ .*failed.* ]]; then echo \"$NGINX_TEST\"; else service nginx reload && echo \"OK\"; fi\n}\nngxreload() {\n    nginxreload\n}\nngxrel() {\n    nginxreload\n}\n```\n\nТеперь командуя `nginxreload`, `ngxreload` или `ngxrel` сначала будет происходить тест и только потом релоад конфига, иначе вывод ошибки, если нарушен синтаксис.\n\n## Короткая команда получения размера папки\n\nВ `\u002Froot\u002F.bashrc` в конец добавляем:\n\n```bash\n# Folder size\nfoldersize() {\n    du -chs $1\n}\ndirsize() {\n    foldersize $1\n}\ndsz() {\n    foldersize $1\n}\n```\n\nПроверить размер директории так:\n`dsz \u002Fvar\u002Fwww`\n\n## Docker\n\nСтавим Docker:\n`apt install docker.io`\n\nДобавляем группу docker:\n`sudo groupadd docker`\nВ последующем мы можем разрешить юзеру пользоваться Docker, просто добавив его в данную группу:\n`sudo usermod -aG docker $USERNAME`\n\nПроверяем, что Docker установился:\n`sudo docker run hello-world`\n\n## Sprut.io\n\nСтавим Sprut.io - https:\u002F\u002Fsprut.io\u002Fru\u002Finstall\n\n## Бекапы с Gvozdb\u002FDumper\n\n[Здесь описано подробно](\u002Flinux\u002Fdumper), как настраивать и пользоваться библиотекой.\n\n## SSL сертификаты\n\n[Здесь подробно про SSL сертификаты](\u002Flinux\u002Fssl) от Let's encrypt.\n\n## Возможные проблемы\n\nПри настройке сервера могут возникнуть те или иные проблемы. Я постарался многие из них учесть тут.\n\n### Failed to start apt-news.service\u002Fesm-cache.service ... not found\n\nПри `apt update` может возникать ошибка: `Failed to start apt-news.service: Unit apt-news.service not found` и `Failed to start esm-cache.service: Unit esm-cache.service not found`.\nЧтобы исправить, запустите установку `ubuntu-advantage-tools`:\n`sudo apt install ubuntu-advantage-tools`\n\n### ModuleNotFoundError: No module named apt_pkg\n\nПри добавлении репозитория через `add-apt-repository` может возникать ошибка о ненахождении модуля apt_pkg. Для исправления проблемы надо залить [этот файл](https:\u002F\u002Fbackend.new.gvozdb.ru\u002Fuploads\u002Fapt_pkg_cpython_310_x86_64_linux_gnu_c490da2b1f.so) в `\u002Fusr\u002Flib\u002Fpython3\u002Fdist-packages\u002F`. К сожалению я не нашёл другого решения, сохранив Python3.10. Либо же отказываться от Python3.10 и такой проблемы априори не должно быть.","","Часто настраиваю сервера под MODX, устал держать в памяти шаги. Обычно поднимая сервер по памяти, забудешь какую-нибудь мелочь, с которой провозишься 3 часа. Пусть это руководство будет шпаргалкой. А я, по мере использования, буду его дополнять.","2017-07-06T04:52:00.000Z",false,{"modxId":128,"addToTelegram":126,"editInTelegram":126,"removeFromTelegram":126},130,"2026-05-16T14:27:43.664Z","2026-05-16T20:16:56.203Z","2026-05-16T14:27:43.655Z",{"id":32,"documentId":33,"name":34,"slug":35,"desc":16,"published":17,"uri":36,"showmenu":17,"createdAt":37,"updatedAt":38,"publishedAt":39,"locale":22,"heading":16,"order":40},[134],{"id":135,"documentId":136,"name":137,"slug":138,"textcolor":16,"bgcolor":16,"published":17,"uri":16,"createdAt":139,"updatedAt":139,"publishedAt":140,"locale":22,"heading":16,"desc":16},6,"mau3qzs4gq9pxckgymu674yr","MODX","modx","2026-05-16T10:03:44.164Z","2026-05-16T10:03:44.154Z",{"id":40,"documentId":142,"username":143,"provider":123,"confirmed":17,"blocked":126,"telegramId":144,"telegramData":145,"icon":16,"firstname":149,"lastname":148,"phone":146,"locale":16,"role":150,"avatar":16},"mr9zlrq1858u3k1t8r6dmlly","pavelgvozdb","133652371",{"id":144,"phone":146,"premium":126,"language":147,"lastname":148,"username":143,"firstname":149},"77025551199","ru","Гвоздь","Павел",{"id":105,"documentId":151,"name":152,"description":153,"type":154,"createdAt":155,"updatedAt":155,"publishedAt":155,"locale":16},"agv9d9dnu7pxc9ked3amj647","Admin","Главный админ блога — полный доступ к управлению на фронтенде","admin","2026-05-15T18:45:58.088Z",5,{"like":23,"dislike":23},{"data":159,"body":160,"toc":7830},{"title":123,"description":124},{"type":161,"children":162},"root",[163,170,177,202,208,393,398,468,481,486,628,640,651,672,1100,1106,1111,1207,1212,1311,1346,1351,1444,1452,1458,1463,1504,1509,1717,1722,1728,1739,1751,1757,1768,1779,1792,1803,1815,1826,1836,1847,1860,1916,1921,1927,1955,1967,1979,2119,2142,2148,2169,2217,2228,2249,2259,2264,2310,2336,2365,2404,2415,2455,2460,2502,2508,2513,2551,2568,2619,2630,2635,3100,3105,3543,3559,3564,3942,4002,4015,4764,4769,4810,4839,5204,5245,5249,5454,5465,5471,5506,5684,5697,5725,5737,5781,5789,5800,5811,5846,5851,6379,6390,6401,6412,6418,6444,6450,6469,6598,6609,6657,6662,6668,6679,6684,6869,6877,6888,6899,6919,6962,6968,6997,7166,7177,7183,7210,7454,7478,7484,7496,7621,7632,7638,7649,7668,7679,7685,7696,7702,7713,7719,7730,7736,7741,7748,7788,7794,7824],{"type":164,"tag":165,"props":166,"children":167},"element","p",{},[168],{"type":169,"value":124},"text",{"type":164,"tag":171,"props":172,"children":174},"h2",{"id":173},"арендуем-сервер",[175],{"type":169,"value":176},"Арендуем сервер",{"type":164,"tag":165,"props":178,"children":179},{},[180,182,191,193,200],{"type":169,"value":181},"Можно арендовать VPS на ",{"type":164,"tag":183,"props":184,"children":188},"a",{"href":185,"rel":186},"https:\u002F\u002Fbit.ly\u002FgvoXorekCloud",[187],"nofollow",[189],{"type":169,"value":190},"XorekCloud",{"type":169,"value":192}," в любой предложеной стране или на ",{"type":164,"tag":183,"props":194,"children":197},{"href":195,"rel":196},"https:\u002F\u002Fbit.ly\u002FgvoFirstVds",[187],[198],{"type":169,"value":199},"FirstVDS",{"type":169,"value":201}," в России, с подходящим для вас конфигом. Цены и качество у данных провайдеров самые приемлемые, на мой взгляд.",{"type":164,"tag":171,"props":203,"children":205},{"id":204},"базовый-софт",[206],{"type":169,"value":207},"Базовый софт",{"type":164,"tag":209,"props":210,"children":215},"pre",{"className":211,"code":212,"language":213,"meta":123,"style":214},"language-bash shiki shiki-themes github-light catppuccin-mocha","apt install sudo\nsudo apt update\nsudo apt install -y curl\nsudo apt install -y software-properties-common\nsudo apt install -y language-pack-ru-base\nsudo echo \"ru_RU.CP1251 CP1251\" >>\u002Fvar\u002Flib\u002Flocales\u002Fsupported.d\u002Fru\nsudo locale-gen\nsudo locale-gen en_US.UTF-8\n","bash","--shiki-default:#24292e;--shiki-dark:#cdd6f4;--shiki-default-bg:#fff;--shiki-dark-bg:#1e1e2e",[216],{"type":164,"tag":217,"props":218,"children":219},"code",{"__ignoreMap":123},[220,242,260,286,310,334,362,375],{"type":164,"tag":221,"props":222,"children":224},"span",{"class":223,"line":40},"line",[225,231,237],{"type":164,"tag":221,"props":226,"children":228},{"style":227},"--shiki-default:#6F42C1;--shiki-default-font-style:inherit;--shiki-dark:#89B4FA;--shiki-dark-font-style:italic",[229],{"type":169,"value":230},"apt",{"type":164,"tag":221,"props":232,"children":234},{"style":233},"--shiki-default:#032F62;--shiki-dark:#A6E3A1",[235],{"type":169,"value":236}," install",{"type":164,"tag":221,"props":238,"children":239},{"style":233},[240],{"type":169,"value":241}," sudo\n",{"type":164,"tag":221,"props":243,"children":244},{"class":223,"line":32},[245,250,255],{"type":164,"tag":221,"props":246,"children":247},{"style":227},[248],{"type":169,"value":249},"sudo",{"type":164,"tag":221,"props":251,"children":252},{"style":233},[253],{"type":169,"value":254}," apt",{"type":164,"tag":221,"props":256,"children":257},{"style":233},[258],{"type":169,"value":259}," update\n",{"type":164,"tag":221,"props":261,"children":262},{"class":223,"line":105},[263,267,271,275,281],{"type":164,"tag":221,"props":264,"children":265},{"style":227},[266],{"type":169,"value":249},{"type":164,"tag":221,"props":268,"children":269},{"style":233},[270],{"type":169,"value":254},{"type":164,"tag":221,"props":272,"children":273},{"style":233},[274],{"type":169,"value":236},{"type":164,"tag":221,"props":276,"children":278},{"style":277},"--shiki-default:#005CC5;--shiki-dark:#A6E3A1",[279],{"type":169,"value":280}," -y",{"type":164,"tag":221,"props":282,"children":283},{"style":233},[284],{"type":169,"value":285}," curl\n",{"type":164,"tag":221,"props":287,"children":288},{"class":223,"line":12},[289,293,297,301,305],{"type":164,"tag":221,"props":290,"children":291},{"style":227},[292],{"type":169,"value":249},{"type":164,"tag":221,"props":294,"children":295},{"style":233},[296],{"type":169,"value":254},{"type":164,"tag":221,"props":298,"children":299},{"style":233},[300],{"type":169,"value":236},{"type":164,"tag":221,"props":302,"children":303},{"style":277},[304],{"type":169,"value":280},{"type":164,"tag":221,"props":306,"children":307},{"style":233},[308],{"type":169,"value":309}," software-properties-common\n",{"type":164,"tag":221,"props":311,"children":312},{"class":223,"line":156},[313,317,321,325,329],{"type":164,"tag":221,"props":314,"children":315},{"style":227},[316],{"type":169,"value":249},{"type":164,"tag":221,"props":318,"children":319},{"style":233},[320],{"type":169,"value":254},{"type":164,"tag":221,"props":322,"children":323},{"style":233},[324],{"type":169,"value":236},{"type":164,"tag":221,"props":326,"children":327},{"style":277},[328],{"type":169,"value":280},{"type":164,"tag":221,"props":330,"children":331},{"style":233},[332],{"type":169,"value":333}," language-pack-ru-base\n",{"type":164,"tag":221,"props":335,"children":336},{"class":223,"line":135},[337,341,346,351,357],{"type":164,"tag":221,"props":338,"children":339},{"style":227},[340],{"type":169,"value":249},{"type":164,"tag":221,"props":342,"children":343},{"style":233},[344],{"type":169,"value":345}," echo",{"type":164,"tag":221,"props":347,"children":348},{"style":233},[349],{"type":169,"value":350}," \"ru_RU.CP1251 CP1251\"",{"type":164,"tag":221,"props":352,"children":354},{"style":353},"--shiki-default:#D73A49;--shiki-dark:#94E2D5",[355],{"type":169,"value":356}," >>",{"type":164,"tag":221,"props":358,"children":359},{"style":233},[360],{"type":169,"value":361},"\u002Fvar\u002Flib\u002Flocales\u002Fsupported.d\u002Fru\n",{"type":164,"tag":221,"props":363,"children":365},{"class":223,"line":364},7,[366,370],{"type":164,"tag":221,"props":367,"children":368},{"style":227},[369],{"type":169,"value":249},{"type":164,"tag":221,"props":371,"children":372},{"style":233},[373],{"type":169,"value":374}," locale-gen\n",{"type":164,"tag":221,"props":376,"children":378},{"class":223,"line":377},8,[379,383,388],{"type":164,"tag":221,"props":380,"children":381},{"style":227},[382],{"type":169,"value":249},{"type":164,"tag":221,"props":384,"children":385},{"style":233},[386],{"type":169,"value":387}," locale-gen",{"type":164,"tag":221,"props":389,"children":390},{"style":233},[391],{"type":169,"value":392}," en_US.UTF-8\n",{"type":164,"tag":165,"props":394,"children":395},{},[396],{"type":169,"value":397},"Ставим корректную локаль на сервере:",{"type":164,"tag":209,"props":399,"children":401},{"className":211,"code":400,"language":213,"meta":123,"style":214},"tee \u002Fetc\u002Fdefault\u002Flocale \u003C\u003C'EOF'\nLANGUAGE=en_US.UTF-8\nLC_ALL=en_US.UTF-8\nLANG=en_US.UTF-8\nLC_TYPE=en_US.UTF-8\nEOF\n",[402],{"type":164,"tag":217,"props":403,"children":404},{"__ignoreMap":123},[405,428,436,444,452,460],{"type":164,"tag":221,"props":406,"children":407},{"class":223,"line":40},[408,413,418,423],{"type":164,"tag":221,"props":409,"children":410},{"style":227},[411],{"type":169,"value":412},"tee",{"type":164,"tag":221,"props":414,"children":415},{"style":233},[416],{"type":169,"value":417}," \u002Fetc\u002Fdefault\u002Flocale",{"type":164,"tag":221,"props":419,"children":420},{"style":353},[421],{"type":169,"value":422}," \u003C\u003C",{"type":164,"tag":221,"props":424,"children":425},{"style":233},[426],{"type":169,"value":427},"'EOF'\n",{"type":164,"tag":221,"props":429,"children":430},{"class":223,"line":32},[431],{"type":164,"tag":221,"props":432,"children":433},{"style":233},[434],{"type":169,"value":435},"LANGUAGE=en_US.UTF-8\n",{"type":164,"tag":221,"props":437,"children":438},{"class":223,"line":105},[439],{"type":164,"tag":221,"props":440,"children":441},{"style":233},[442],{"type":169,"value":443},"LC_ALL=en_US.UTF-8\n",{"type":164,"tag":221,"props":445,"children":446},{"class":223,"line":12},[447],{"type":164,"tag":221,"props":448,"children":449},{"style":233},[450],{"type":169,"value":451},"LANG=en_US.UTF-8\n",{"type":164,"tag":221,"props":453,"children":454},{"class":223,"line":156},[455],{"type":164,"tag":221,"props":456,"children":457},{"style":233},[458],{"type":169,"value":459},"LC_TYPE=en_US.UTF-8\n",{"type":164,"tag":221,"props":461,"children":462},{"class":223,"line":135},[463],{"type":164,"tag":221,"props":464,"children":465},{"style":233},[466],{"type":169,"value":467},"EOF\n",{"type":164,"tag":165,"props":469,"children":470},{},[471,473,479],{"type":169,"value":472},"После этого ",{"type":164,"tag":474,"props":475,"children":476},"strong",{},[477],{"type":169,"value":478},"перезаходим на сервер по SSH",{"type":169,"value":480},", чтобы изменения применились.",{"type":164,"tag":165,"props":482,"children":483},{},[484],{"type":169,"value":485},"Ставим nodejs, gulp, pm2:",{"type":164,"tag":209,"props":487,"children":489},{"className":211,"code":488,"language":213,"meta":123,"style":214},"curl -fsSL https:\u002F\u002Fdeb.nodesource.com\u002Fsetup_23.x -o nodesource_setup.sh && sudo -E bash nodesource_setup.sh\nsudo apt-get install -y nodejs && node -v\nnpm install gulp -g\nnpm install pm2 -g\n",[490],{"type":164,"tag":217,"props":491,"children":492},{"__ignoreMap":123},[493,547,586,608],{"type":164,"tag":221,"props":494,"children":495},{"class":223,"line":40},[496,501,506,511,516,521,527,532,537,542],{"type":164,"tag":221,"props":497,"children":498},{"style":227},[499],{"type":169,"value":500},"curl",{"type":164,"tag":221,"props":502,"children":503},{"style":277},[504],{"type":169,"value":505}," -fsSL",{"type":164,"tag":221,"props":507,"children":508},{"style":233},[509],{"type":169,"value":510}," https:\u002F\u002Fdeb.nodesource.com\u002Fsetup_23.x",{"type":164,"tag":221,"props":512,"children":513},{"style":277},[514],{"type":169,"value":515}," -o",{"type":164,"tag":221,"props":517,"children":518},{"style":233},[519],{"type":169,"value":520}," nodesource_setup.sh",{"type":164,"tag":221,"props":522,"children":524},{"style":523},"--shiki-default:#24292E;--shiki-dark:#9399B2",[525],{"type":169,"value":526}," &&",{"type":164,"tag":221,"props":528,"children":529},{"style":227},[530],{"type":169,"value":531}," sudo",{"type":164,"tag":221,"props":533,"children":534},{"style":277},[535],{"type":169,"value":536}," -E",{"type":164,"tag":221,"props":538,"children":539},{"style":233},[540],{"type":169,"value":541}," bash",{"type":164,"tag":221,"props":543,"children":544},{"style":233},[545],{"type":169,"value":546}," nodesource_setup.sh\n",{"type":164,"tag":221,"props":548,"children":549},{"class":223,"line":32},[550,554,559,563,567,572,576,581],{"type":164,"tag":221,"props":551,"children":552},{"style":227},[553],{"type":169,"value":249},{"type":164,"tag":221,"props":555,"children":556},{"style":233},[557],{"type":169,"value":558}," apt-get",{"type":164,"tag":221,"props":560,"children":561},{"style":233},[562],{"type":169,"value":236},{"type":164,"tag":221,"props":564,"children":565},{"style":277},[566],{"type":169,"value":280},{"type":164,"tag":221,"props":568,"children":569},{"style":233},[570],{"type":169,"value":571}," nodejs",{"type":164,"tag":221,"props":573,"children":574},{"style":523},[575],{"type":169,"value":526},{"type":164,"tag":221,"props":577,"children":578},{"style":227},[579],{"type":169,"value":580}," node",{"type":164,"tag":221,"props":582,"children":583},{"style":277},[584],{"type":169,"value":585}," -v\n",{"type":164,"tag":221,"props":587,"children":588},{"class":223,"line":105},[589,594,598,603],{"type":164,"tag":221,"props":590,"children":591},{"style":227},[592],{"type":169,"value":593},"npm",{"type":164,"tag":221,"props":595,"children":596},{"style":233},[597],{"type":169,"value":236},{"type":164,"tag":221,"props":599,"children":600},{"style":233},[601],{"type":169,"value":602}," gulp",{"type":164,"tag":221,"props":604,"children":605},{"style":277},[606],{"type":169,"value":607}," -g\n",{"type":164,"tag":221,"props":609,"children":610},{"class":223,"line":12},[611,615,619,624],{"type":164,"tag":221,"props":612,"children":613},{"style":227},[614],{"type":169,"value":593},{"type":164,"tag":221,"props":616,"children":617},{"style":233},[618],{"type":169,"value":236},{"type":164,"tag":221,"props":620,"children":621},{"style":233},[622],{"type":169,"value":623}," pm2",{"type":164,"tag":221,"props":625,"children":626},{"style":277},[627],{"type":169,"value":607},{"type":164,"tag":165,"props":629,"children":630},{},[631,638],{"type":164,"tag":183,"props":632,"children":635},{"href":633,"rel":634},"https:\u002F\u002Fgithub.com\u002Fnodesource\u002Fdistributions\u002Fblob\u002Fmaster\u002FREADME.md#debinstall",[187],[636],{"type":169,"value":637},"Тут подробнее",{"type":169,"value":639}," про установку на Ubuntu.",{"type":164,"tag":165,"props":641,"children":642},{},[643,645],{"type":169,"value":644},"Git, zip, cron и т.д.:\n",{"type":164,"tag":217,"props":646,"children":648},{"className":647},[],[649],{"type":169,"value":650},"sudo apt install -y git zip unzip mc nano htop cron libyaml-dev",{"type":164,"tag":165,"props":652,"children":653},{},[654,656,662,664,670],{"type":169,"value":655},"Добавляем новую группу юзеров ",{"type":164,"tag":217,"props":657,"children":659},{"className":658},[],[660],{"type":169,"value":661},"sftp",{"type":169,"value":663}," и правим конфиг ",{"type":164,"tag":217,"props":665,"children":667},{"className":666},[],[668],{"type":169,"value":669},"\u002Fetc\u002Fssh\u002Fsshd_config",{"type":169,"value":671},":",{"type":164,"tag":209,"props":673,"children":675},{"className":211,"code":674,"language":213,"meta":123,"style":214},"sudo addgroup sftp; \\\nfile_ssh_config=\u002Fetc\u002Fssh\u002Fsshd_config; \\\nsudo sed -ri 's\u002F^#?\\s?(Subsystem\\ssftp\\s.*)$\u002F#\\1\u002F' $file_ssh_config; \\\nif ! grep -q \"Subsystem sftp internal-sftp\" $file_ssh_config; then \\\n    echo \"\" | sudo tee -a $file_ssh_config; \\\n    echo \"Subsystem sftp internal-sftp\" | sudo tee -a $file_ssh_config; \\\n    echo \"Match Group sftp\" | sudo tee -a $file_ssh_config; \\\n    echo \"    ChrootDirectory %h\" | sudo tee -a $file_ssh_config; \\\n    echo \"    AllowTCPForwarding no\" | sudo tee -a $file_ssh_config; \\\n    echo \"    ForceCommand internal-sftp\" | sudo tee -a $file_ssh_config; \\\nfi; \\\nsudo service ssh restart\n",[676],{"type":164,"tag":217,"props":677,"children":678},{"__ignoreMap":123},[679,707,733,768,814,859,898,938,978,1019,1060,1077],{"type":164,"tag":221,"props":680,"children":681},{"class":223,"line":40},[682,686,691,696,701],{"type":164,"tag":221,"props":683,"children":684},{"style":227},[685],{"type":169,"value":249},{"type":164,"tag":221,"props":687,"children":688},{"style":233},[689],{"type":169,"value":690}," addgroup",{"type":164,"tag":221,"props":692,"children":693},{"style":233},[694],{"type":169,"value":695}," sftp",{"type":164,"tag":221,"props":697,"children":698},{"style":523},[699],{"type":169,"value":700},";",{"type":164,"tag":221,"props":702,"children":704},{"style":703},"--shiki-default:#005CC5;--shiki-dark:#F5C2E7",[705],{"type":169,"value":706}," \\\n",{"type":164,"tag":221,"props":708,"children":709},{"class":223,"line":32},[710,716,721,725,729],{"type":164,"tag":221,"props":711,"children":713},{"style":712},"--shiki-default:#24292E;--shiki-dark:#CDD6F4",[714],{"type":169,"value":715},"file_ssh_config",{"type":164,"tag":221,"props":717,"children":718},{"style":353},[719],{"type":169,"value":720},"=",{"type":164,"tag":221,"props":722,"children":723},{"style":233},[724],{"type":169,"value":669},{"type":164,"tag":221,"props":726,"children":727},{"style":523},[728],{"type":169,"value":700},{"type":164,"tag":221,"props":730,"children":731},{"style":703},[732],{"type":169,"value":706},{"type":164,"tag":221,"props":734,"children":735},{"class":223,"line":105},[736,740,745,750,755,760,764],{"type":164,"tag":221,"props":737,"children":738},{"style":227},[739],{"type":169,"value":249},{"type":164,"tag":221,"props":741,"children":742},{"style":233},[743],{"type":169,"value":744}," sed",{"type":164,"tag":221,"props":746,"children":747},{"style":277},[748],{"type":169,"value":749}," -ri",{"type":164,"tag":221,"props":751,"children":752},{"style":233},[753],{"type":169,"value":754}," 's\u002F^#?\\s?(Subsystem\\ssftp\\s.*)$\u002F#\\1\u002F'",{"type":164,"tag":221,"props":756,"children":757},{"style":712},[758],{"type":169,"value":759}," $file_ssh_config",{"type":164,"tag":221,"props":761,"children":762},{"style":523},[763],{"type":169,"value":700},{"type":164,"tag":221,"props":765,"children":766},{"style":703},[767],{"type":169,"value":706},{"type":164,"tag":221,"props":769,"children":770},{"class":223,"line":12},[771,777,782,787,792,797,801,805,810],{"type":164,"tag":221,"props":772,"children":774},{"style":773},"--shiki-default:#D73A49;--shiki-dark:#CBA6F7",[775],{"type":169,"value":776},"if",{"type":164,"tag":221,"props":778,"children":779},{"style":353},[780],{"type":169,"value":781}," !",{"type":164,"tag":221,"props":783,"children":784},{"style":227},[785],{"type":169,"value":786}," grep",{"type":164,"tag":221,"props":788,"children":789},{"style":277},[790],{"type":169,"value":791}," -q",{"type":164,"tag":221,"props":793,"children":794},{"style":233},[795],{"type":169,"value":796}," \"Subsystem sftp internal-sftp\"",{"type":164,"tag":221,"props":798,"children":799},{"style":712},[800],{"type":169,"value":759},{"type":164,"tag":221,"props":802,"children":803},{"style":523},[804],{"type":169,"value":700},{"type":164,"tag":221,"props":806,"children":807},{"style":773},[808],{"type":169,"value":809}," then",{"type":164,"tag":221,"props":811,"children":812},{"style":703},[813],{"type":169,"value":706},{"type":164,"tag":221,"props":815,"children":816},{"class":223,"line":156},[817,823,828,833,837,842,847,851,855],{"type":164,"tag":221,"props":818,"children":820},{"style":819},"--shiki-default:#005CC5;--shiki-default-font-style:inherit;--shiki-dark:#F38BA8;--shiki-dark-font-style:italic",[821],{"type":169,"value":822},"    echo",{"type":164,"tag":221,"props":824,"children":825},{"style":233},[826],{"type":169,"value":827}," \"\"",{"type":164,"tag":221,"props":829,"children":830},{"style":353},[831],{"type":169,"value":832}," |",{"type":164,"tag":221,"props":834,"children":835},{"style":227},[836],{"type":169,"value":531},{"type":164,"tag":221,"props":838,"children":839},{"style":233},[840],{"type":169,"value":841}," tee",{"type":164,"tag":221,"props":843,"children":844},{"style":277},[845],{"type":169,"value":846}," -a",{"type":164,"tag":221,"props":848,"children":849},{"style":712},[850],{"type":169,"value":759},{"type":164,"tag":221,"props":852,"children":853},{"style":523},[854],{"type":169,"value":700},{"type":164,"tag":221,"props":856,"children":857},{"style":703},[858],{"type":169,"value":706},{"type":164,"tag":221,"props":860,"children":861},{"class":223,"line":135},[862,866,870,874,878,882,886,890,894],{"type":164,"tag":221,"props":863,"children":864},{"style":819},[865],{"type":169,"value":822},{"type":164,"tag":221,"props":867,"children":868},{"style":233},[869],{"type":169,"value":796},{"type":164,"tag":221,"props":871,"children":872},{"style":353},[873],{"type":169,"value":832},{"type":164,"tag":221,"props":875,"children":876},{"style":227},[877],{"type":169,"value":531},{"type":164,"tag":221,"props":879,"children":880},{"style":233},[881],{"type":169,"value":841},{"type":164,"tag":221,"props":883,"children":884},{"style":277},[885],{"type":169,"value":846},{"type":164,"tag":221,"props":887,"children":888},{"style":712},[889],{"type":169,"value":759},{"type":164,"tag":221,"props":891,"children":892},{"style":523},[893],{"type":169,"value":700},{"type":164,"tag":221,"props":895,"children":896},{"style":703},[897],{"type":169,"value":706},{"type":164,"tag":221,"props":899,"children":900},{"class":223,"line":364},[901,905,910,914,918,922,926,930,934],{"type":164,"tag":221,"props":902,"children":903},{"style":819},[904],{"type":169,"value":822},{"type":164,"tag":221,"props":906,"children":907},{"style":233},[908],{"type":169,"value":909}," \"Match Group sftp\"",{"type":164,"tag":221,"props":911,"children":912},{"style":353},[913],{"type":169,"value":832},{"type":164,"tag":221,"props":915,"children":916},{"style":227},[917],{"type":169,"value":531},{"type":164,"tag":221,"props":919,"children":920},{"style":233},[921],{"type":169,"value":841},{"type":164,"tag":221,"props":923,"children":924},{"style":277},[925],{"type":169,"value":846},{"type":164,"tag":221,"props":927,"children":928},{"style":712},[929],{"type":169,"value":759},{"type":164,"tag":221,"props":931,"children":932},{"style":523},[933],{"type":169,"value":700},{"type":164,"tag":221,"props":935,"children":936},{"style":703},[937],{"type":169,"value":706},{"type":164,"tag":221,"props":939,"children":940},{"class":223,"line":377},[941,945,950,954,958,962,966,970,974],{"type":164,"tag":221,"props":942,"children":943},{"style":819},[944],{"type":169,"value":822},{"type":164,"tag":221,"props":946,"children":947},{"style":233},[948],{"type":169,"value":949}," \"    ChrootDirectory %h\"",{"type":164,"tag":221,"props":951,"children":952},{"style":353},[953],{"type":169,"value":832},{"type":164,"tag":221,"props":955,"children":956},{"style":227},[957],{"type":169,"value":531},{"type":164,"tag":221,"props":959,"children":960},{"style":233},[961],{"type":169,"value":841},{"type":164,"tag":221,"props":963,"children":964},{"style":277},[965],{"type":169,"value":846},{"type":164,"tag":221,"props":967,"children":968},{"style":712},[969],{"type":169,"value":759},{"type":164,"tag":221,"props":971,"children":972},{"style":523},[973],{"type":169,"value":700},{"type":164,"tag":221,"props":975,"children":976},{"style":703},[977],{"type":169,"value":706},{"type":164,"tag":221,"props":979,"children":981},{"class":223,"line":980},9,[982,986,991,995,999,1003,1007,1011,1015],{"type":164,"tag":221,"props":983,"children":984},{"style":819},[985],{"type":169,"value":822},{"type":164,"tag":221,"props":987,"children":988},{"style":233},[989],{"type":169,"value":990}," \"    AllowTCPForwarding no\"",{"type":164,"tag":221,"props":992,"children":993},{"style":353},[994],{"type":169,"value":832},{"type":164,"tag":221,"props":996,"children":997},{"style":227},[998],{"type":169,"value":531},{"type":164,"tag":221,"props":1000,"children":1001},{"style":233},[1002],{"type":169,"value":841},{"type":164,"tag":221,"props":1004,"children":1005},{"style":277},[1006],{"type":169,"value":846},{"type":164,"tag":221,"props":1008,"children":1009},{"style":712},[1010],{"type":169,"value":759},{"type":164,"tag":221,"props":1012,"children":1013},{"style":523},[1014],{"type":169,"value":700},{"type":164,"tag":221,"props":1016,"children":1017},{"style":703},[1018],{"type":169,"value":706},{"type":164,"tag":221,"props":1020,"children":1022},{"class":223,"line":1021},10,[1023,1027,1032,1036,1040,1044,1048,1052,1056],{"type":164,"tag":221,"props":1024,"children":1025},{"style":819},[1026],{"type":169,"value":822},{"type":164,"tag":221,"props":1028,"children":1029},{"style":233},[1030],{"type":169,"value":1031}," \"    ForceCommand internal-sftp\"",{"type":164,"tag":221,"props":1033,"children":1034},{"style":353},[1035],{"type":169,"value":832},{"type":164,"tag":221,"props":1037,"children":1038},{"style":227},[1039],{"type":169,"value":531},{"type":164,"tag":221,"props":1041,"children":1042},{"style":233},[1043],{"type":169,"value":841},{"type":164,"tag":221,"props":1045,"children":1046},{"style":277},[1047],{"type":169,"value":846},{"type":164,"tag":221,"props":1049,"children":1050},{"style":712},[1051],{"type":169,"value":759},{"type":164,"tag":221,"props":1053,"children":1054},{"style":523},[1055],{"type":169,"value":700},{"type":164,"tag":221,"props":1057,"children":1058},{"style":703},[1059],{"type":169,"value":706},{"type":164,"tag":221,"props":1061,"children":1063},{"class":223,"line":1062},11,[1064,1069,1073],{"type":164,"tag":221,"props":1065,"children":1066},{"style":227},[1067],{"type":169,"value":1068},"fi",{"type":164,"tag":221,"props":1070,"children":1071},{"style":523},[1072],{"type":169,"value":700},{"type":164,"tag":221,"props":1074,"children":1075},{"style":703},[1076],{"type":169,"value":706},{"type":164,"tag":221,"props":1078,"children":1080},{"class":223,"line":1079},12,[1081,1085,1090,1095],{"type":164,"tag":221,"props":1082,"children":1083},{"style":227},[1084],{"type":169,"value":249},{"type":164,"tag":221,"props":1086,"children":1087},{"style":233},[1088],{"type":169,"value":1089}," service",{"type":164,"tag":221,"props":1091,"children":1092},{"style":233},[1093],{"type":169,"value":1094}," ssh",{"type":164,"tag":221,"props":1096,"children":1097},{"style":233},[1098],{"type":169,"value":1099}," restart\n",{"type":164,"tag":171,"props":1101,"children":1103},{"id":1102},"python",[1104],{"type":169,"value":1105},"Python",{"type":164,"tag":165,"props":1107,"children":1108},{},[1109],{"type":169,"value":1110},"Устанавливаем версию выше 3.5 и менеджер модулей pip:",{"type":164,"tag":209,"props":1112,"children":1114},{"className":211,"code":1113,"language":213,"meta":123,"style":214},"sudo add-apt-repository ppa:deadsnakes\u002Fppa\nsudo apt install -y python3.10\nsudo apt install -y python3-pip\nsudo apt install -y python3.10-distutils\n",[1115],{"type":164,"tag":217,"props":1116,"children":1117},{"__ignoreMap":123},[1118,1135,1159,1183],{"type":164,"tag":221,"props":1119,"children":1120},{"class":223,"line":40},[1121,1125,1130],{"type":164,"tag":221,"props":1122,"children":1123},{"style":227},[1124],{"type":169,"value":249},{"type":164,"tag":221,"props":1126,"children":1127},{"style":233},[1128],{"type":169,"value":1129}," add-apt-repository",{"type":164,"tag":221,"props":1131,"children":1132},{"style":233},[1133],{"type":169,"value":1134}," ppa:deadsnakes\u002Fppa\n",{"type":164,"tag":221,"props":1136,"children":1137},{"class":223,"line":32},[1138,1142,1146,1150,1154],{"type":164,"tag":221,"props":1139,"children":1140},{"style":227},[1141],{"type":169,"value":249},{"type":164,"tag":221,"props":1143,"children":1144},{"style":233},[1145],{"type":169,"value":254},{"type":164,"tag":221,"props":1147,"children":1148},{"style":233},[1149],{"type":169,"value":236},{"type":164,"tag":221,"props":1151,"children":1152},{"style":277},[1153],{"type":169,"value":280},{"type":164,"tag":221,"props":1155,"children":1156},{"style":233},[1157],{"type":169,"value":1158}," python3.10\n",{"type":164,"tag":221,"props":1160,"children":1161},{"class":223,"line":105},[1162,1166,1170,1174,1178],{"type":164,"tag":221,"props":1163,"children":1164},{"style":227},[1165],{"type":169,"value":249},{"type":164,"tag":221,"props":1167,"children":1168},{"style":233},[1169],{"type":169,"value":254},{"type":164,"tag":221,"props":1171,"children":1172},{"style":233},[1173],{"type":169,"value":236},{"type":164,"tag":221,"props":1175,"children":1176},{"style":277},[1177],{"type":169,"value":280},{"type":164,"tag":221,"props":1179,"children":1180},{"style":233},[1181],{"type":169,"value":1182}," python3-pip\n",{"type":164,"tag":221,"props":1184,"children":1185},{"class":223,"line":12},[1186,1190,1194,1198,1202],{"type":164,"tag":221,"props":1187,"children":1188},{"style":227},[1189],{"type":169,"value":249},{"type":164,"tag":221,"props":1191,"children":1192},{"style":233},[1193],{"type":169,"value":254},{"type":164,"tag":221,"props":1195,"children":1196},{"style":233},[1197],{"type":169,"value":236},{"type":164,"tag":221,"props":1199,"children":1200},{"style":277},[1201],{"type":169,"value":280},{"type":164,"tag":221,"props":1203,"children":1204},{"style":233},[1205],{"type":169,"value":1206}," python3.10-distutils\n",{"type":164,"tag":165,"props":1208,"children":1209},{},[1210],{"type":169,"value":1211},"Если у нас установлено несколько версий Python, то делаем Python 3.10 основным:",{"type":164,"tag":209,"props":1213,"children":1215},{"className":211,"code":1214,"language":213,"meta":123,"style":214},"sudo update-alternatives --install \u002Fusr\u002Fbin\u002Fpython3 python3 \u002Fusr\u002Fbin\u002Fpython3.12 10\nsudo update-alternatives --install \u002Fusr\u002Fbin\u002Fpython3 python3 \u002Fusr\u002Fbin\u002Fpython3.10 5\nsudo update-alternatives --config python3\n",[1216],{"type":164,"tag":217,"props":1217,"children":1218},{"__ignoreMap":123},[1219,1257,1290],{"type":164,"tag":221,"props":1220,"children":1221},{"class":223,"line":40},[1222,1226,1231,1236,1241,1246,1251],{"type":164,"tag":221,"props":1223,"children":1224},{"style":227},[1225],{"type":169,"value":249},{"type":164,"tag":221,"props":1227,"children":1228},{"style":233},[1229],{"type":169,"value":1230}," update-alternatives",{"type":164,"tag":221,"props":1232,"children":1233},{"style":277},[1234],{"type":169,"value":1235}," --install",{"type":164,"tag":221,"props":1237,"children":1238},{"style":233},[1239],{"type":169,"value":1240}," \u002Fusr\u002Fbin\u002Fpython3",{"type":164,"tag":221,"props":1242,"children":1243},{"style":233},[1244],{"type":169,"value":1245}," python3",{"type":164,"tag":221,"props":1247,"children":1248},{"style":233},[1249],{"type":169,"value":1250}," \u002Fusr\u002Fbin\u002Fpython3.12",{"type":164,"tag":221,"props":1252,"children":1254},{"style":1253},"--shiki-default:#005CC5;--shiki-dark:#FAB387",[1255],{"type":169,"value":1256}," 10\n",{"type":164,"tag":221,"props":1258,"children":1259},{"class":223,"line":32},[1260,1264,1268,1272,1276,1280,1285],{"type":164,"tag":221,"props":1261,"children":1262},{"style":227},[1263],{"type":169,"value":249},{"type":164,"tag":221,"props":1265,"children":1266},{"style":233},[1267],{"type":169,"value":1230},{"type":164,"tag":221,"props":1269,"children":1270},{"style":277},[1271],{"type":169,"value":1235},{"type":164,"tag":221,"props":1273,"children":1274},{"style":233},[1275],{"type":169,"value":1240},{"type":164,"tag":221,"props":1277,"children":1278},{"style":233},[1279],{"type":169,"value":1245},{"type":164,"tag":221,"props":1281,"children":1282},{"style":233},[1283],{"type":169,"value":1284}," \u002Fusr\u002Fbin\u002Fpython3.10",{"type":164,"tag":221,"props":1286,"children":1287},{"style":1253},[1288],{"type":169,"value":1289}," 5\n",{"type":164,"tag":221,"props":1291,"children":1292},{"class":223,"line":105},[1293,1297,1301,1306],{"type":164,"tag":221,"props":1294,"children":1295},{"style":227},[1296],{"type":169,"value":249},{"type":164,"tag":221,"props":1298,"children":1299},{"style":233},[1300],{"type":169,"value":1230},{"type":164,"tag":221,"props":1302,"children":1303},{"style":277},[1304],{"type":169,"value":1305}," --config",{"type":164,"tag":221,"props":1307,"children":1308},{"style":233},[1309],{"type":169,"value":1310}," python3\n",{"type":164,"tag":165,"props":1312,"children":1313},{},[1314,1316,1322,1324],{"type":169,"value":1315},"и выбираем из списка ",{"type":164,"tag":217,"props":1317,"children":1319},{"className":1318},[],[1320],{"type":169,"value":1321},"\u002Fusr\u002Fbin\u002Fpython3.10",{"type":169,"value":1323},".\n",{"type":164,"tag":1325,"props":1326,"children":1327},"em",{},[1328,1330,1336,1338,1344],{"type":169,"value":1329},"Возможно в первой строке придётся вместо ",{"type":164,"tag":217,"props":1331,"children":1333},{"className":1332},[],[1334],{"type":169,"value":1335},"python3.12",{"type":169,"value":1337}," указать другую версию, которая на данный момент является у вас в системе основной. Проверить можно так: ",{"type":164,"tag":217,"props":1339,"children":1341},{"className":1340},[],[1342],{"type":169,"value":1343},"python3 --version",{"type":169,"value":1345},".",{"type":164,"tag":165,"props":1347,"children":1348},{},[1349],{"type":169,"value":1350},"Зависимости для Python приложений:",{"type":164,"tag":209,"props":1352,"children":1354},{"className":211,"code":1353,"language":213,"meta":123,"style":214},"sudo python3 -m pip install ipaddr\nsudo python3 -m pip install pyyaml\nsudo python3 -m pip install pymysql\n",[1355],{"type":164,"tag":217,"props":1356,"children":1357},{"__ignoreMap":123},[1358,1388,1416],{"type":164,"tag":221,"props":1359,"children":1360},{"class":223,"line":40},[1361,1365,1369,1374,1379,1383],{"type":164,"tag":221,"props":1362,"children":1363},{"style":227},[1364],{"type":169,"value":249},{"type":164,"tag":221,"props":1366,"children":1367},{"style":233},[1368],{"type":169,"value":1245},{"type":164,"tag":221,"props":1370,"children":1371},{"style":277},[1372],{"type":169,"value":1373}," -m",{"type":164,"tag":221,"props":1375,"children":1376},{"style":233},[1377],{"type":169,"value":1378}," pip",{"type":164,"tag":221,"props":1380,"children":1381},{"style":233},[1382],{"type":169,"value":236},{"type":164,"tag":221,"props":1384,"children":1385},{"style":233},[1386],{"type":169,"value":1387}," ipaddr\n",{"type":164,"tag":221,"props":1389,"children":1390},{"class":223,"line":32},[1391,1395,1399,1403,1407,1411],{"type":164,"tag":221,"props":1392,"children":1393},{"style":227},[1394],{"type":169,"value":249},{"type":164,"tag":221,"props":1396,"children":1397},{"style":233},[1398],{"type":169,"value":1245},{"type":164,"tag":221,"props":1400,"children":1401},{"style":277},[1402],{"type":169,"value":1373},{"type":164,"tag":221,"props":1404,"children":1405},{"style":233},[1406],{"type":169,"value":1378},{"type":164,"tag":221,"props":1408,"children":1409},{"style":233},[1410],{"type":169,"value":236},{"type":164,"tag":221,"props":1412,"children":1413},{"style":233},[1414],{"type":169,"value":1415}," pyyaml\n",{"type":164,"tag":221,"props":1417,"children":1418},{"class":223,"line":105},[1419,1423,1427,1431,1435,1439],{"type":164,"tag":221,"props":1420,"children":1421},{"style":227},[1422],{"type":169,"value":249},{"type":164,"tag":221,"props":1424,"children":1425},{"style":233},[1426],{"type":169,"value":1245},{"type":164,"tag":221,"props":1428,"children":1429},{"style":277},[1430],{"type":169,"value":1373},{"type":164,"tag":221,"props":1432,"children":1433},{"style":233},[1434],{"type":169,"value":1378},{"type":164,"tag":221,"props":1436,"children":1437},{"style":233},[1438],{"type":169,"value":236},{"type":164,"tag":221,"props":1440,"children":1441},{"style":233},[1442],{"type":169,"value":1443}," pymysql\n",{"type":164,"tag":165,"props":1445,"children":1446},{},[1447],{"type":164,"tag":1325,"props":1448,"children":1449},{},[1450],{"type":169,"value":1451},"Могут возникнуть проблемы при установке – решение ниже.",{"type":164,"tag":171,"props":1453,"children":1455},{"id":1454},"проблемы-с-python",[1456],{"type":169,"value":1457},"Проблемы с Python",{"type":164,"tag":165,"props":1459,"children":1460},{},[1461],{"type":169,"value":1462},"Возможно, при установке модулей через pip, возникнет одна из ошибок:",{"type":164,"tag":1464,"props":1465,"children":1466},"ul",{},[1467,1477,1486,1495],{"type":164,"tag":1468,"props":1469,"children":1470},"li",{},[1471],{"type":164,"tag":217,"props":1472,"children":1474},{"className":1473},[],[1475],{"type":169,"value":1476},"ImportError: No module named 'setuptools'",{"type":164,"tag":1468,"props":1478,"children":1479},{},[1480],{"type":164,"tag":217,"props":1481,"children":1483},{"className":1482},[],[1484],{"type":169,"value":1485},"Command ... failed with error code",{"type":164,"tag":1468,"props":1487,"children":1488},{},[1489],{"type":164,"tag":217,"props":1490,"children":1492},{"className":1491},[],[1493],{"type":169,"value":1494},"cannot import name 'sysconfig' from 'distutils'",{"type":164,"tag":1468,"props":1496,"children":1497},{},[1498],{"type":164,"tag":217,"props":1499,"children":1501},{"className":1500},[],[1502],{"type":169,"value":1503},"module 'platform' has no attribute 'linux_distribution'",{"type":164,"tag":165,"props":1505,"children":1506},{},[1507],{"type":169,"value":1508},"Решить это можно так:",{"type":164,"tag":209,"props":1510,"children":1512},{"className":211,"code":1511,"language":213,"meta":123,"style":214},"sudo apt remove -y python3-pip\nsudo apt autoremove -y\nsudo apt install -y python3.10-distutils\nsudo curl https:\u002F\u002Fbootstrap.pypa.io\u002Fget-pip.py -o get-pip.py\nsudo python3 get-pip.py\nsudo python3 -m pip install --upgrade pip\nsudo python3 -m pip install setuptools\nsudo python3 -m pip install --upgrade setuptools\n",[1513],{"type":164,"tag":217,"props":1514,"children":1515},{"__ignoreMap":123},[1516,1540,1561,1584,1610,1625,1658,1686],{"type":164,"tag":221,"props":1517,"children":1518},{"class":223,"line":40},[1519,1523,1527,1532,1536],{"type":164,"tag":221,"props":1520,"children":1521},{"style":227},[1522],{"type":169,"value":249},{"type":164,"tag":221,"props":1524,"children":1525},{"style":233},[1526],{"type":169,"value":254},{"type":164,"tag":221,"props":1528,"children":1529},{"style":233},[1530],{"type":169,"value":1531}," remove",{"type":164,"tag":221,"props":1533,"children":1534},{"style":277},[1535],{"type":169,"value":280},{"type":164,"tag":221,"props":1537,"children":1538},{"style":233},[1539],{"type":169,"value":1182},{"type":164,"tag":221,"props":1541,"children":1542},{"class":223,"line":32},[1543,1547,1551,1556],{"type":164,"tag":221,"props":1544,"children":1545},{"style":227},[1546],{"type":169,"value":249},{"type":164,"tag":221,"props":1548,"children":1549},{"style":233},[1550],{"type":169,"value":254},{"type":164,"tag":221,"props":1552,"children":1553},{"style":233},[1554],{"type":169,"value":1555}," autoremove",{"type":164,"tag":221,"props":1557,"children":1558},{"style":277},[1559],{"type":169,"value":1560}," -y\n",{"type":164,"tag":221,"props":1562,"children":1563},{"class":223,"line":105},[1564,1568,1572,1576,1580],{"type":164,"tag":221,"props":1565,"children":1566},{"style":227},[1567],{"type":169,"value":249},{"type":164,"tag":221,"props":1569,"children":1570},{"style":233},[1571],{"type":169,"value":254},{"type":164,"tag":221,"props":1573,"children":1574},{"style":233},[1575],{"type":169,"value":236},{"type":164,"tag":221,"props":1577,"children":1578},{"style":277},[1579],{"type":169,"value":280},{"type":164,"tag":221,"props":1581,"children":1582},{"style":233},[1583],{"type":169,"value":1206},{"type":164,"tag":221,"props":1585,"children":1586},{"class":223,"line":12},[1587,1591,1596,1601,1605],{"type":164,"tag":221,"props":1588,"children":1589},{"style":227},[1590],{"type":169,"value":249},{"type":164,"tag":221,"props":1592,"children":1593},{"style":233},[1594],{"type":169,"value":1595}," curl",{"type":164,"tag":221,"props":1597,"children":1598},{"style":233},[1599],{"type":169,"value":1600}," https:\u002F\u002Fbootstrap.pypa.io\u002Fget-pip.py",{"type":164,"tag":221,"props":1602,"children":1603},{"style":277},[1604],{"type":169,"value":515},{"type":164,"tag":221,"props":1606,"children":1607},{"style":233},[1608],{"type":169,"value":1609}," get-pip.py\n",{"type":164,"tag":221,"props":1611,"children":1612},{"class":223,"line":156},[1613,1617,1621],{"type":164,"tag":221,"props":1614,"children":1615},{"style":227},[1616],{"type":169,"value":249},{"type":164,"tag":221,"props":1618,"children":1619},{"style":233},[1620],{"type":169,"value":1245},{"type":164,"tag":221,"props":1622,"children":1623},{"style":233},[1624],{"type":169,"value":1609},{"type":164,"tag":221,"props":1626,"children":1627},{"class":223,"line":135},[1628,1632,1636,1640,1644,1648,1653],{"type":164,"tag":221,"props":1629,"children":1630},{"style":227},[1631],{"type":169,"value":249},{"type":164,"tag":221,"props":1633,"children":1634},{"style":233},[1635],{"type":169,"value":1245},{"type":164,"tag":221,"props":1637,"children":1638},{"style":277},[1639],{"type":169,"value":1373},{"type":164,"tag":221,"props":1641,"children":1642},{"style":233},[1643],{"type":169,"value":1378},{"type":164,"tag":221,"props":1645,"children":1646},{"style":233},[1647],{"type":169,"value":236},{"type":164,"tag":221,"props":1649,"children":1650},{"style":277},[1651],{"type":169,"value":1652}," --upgrade",{"type":164,"tag":221,"props":1654,"children":1655},{"style":233},[1656],{"type":169,"value":1657}," pip\n",{"type":164,"tag":221,"props":1659,"children":1660},{"class":223,"line":364},[1661,1665,1669,1673,1677,1681],{"type":164,"tag":221,"props":1662,"children":1663},{"style":227},[1664],{"type":169,"value":249},{"type":164,"tag":221,"props":1666,"children":1667},{"style":233},[1668],{"type":169,"value":1245},{"type":164,"tag":221,"props":1670,"children":1671},{"style":277},[1672],{"type":169,"value":1373},{"type":164,"tag":221,"props":1674,"children":1675},{"style":233},[1676],{"type":169,"value":1378},{"type":164,"tag":221,"props":1678,"children":1679},{"style":233},[1680],{"type":169,"value":236},{"type":164,"tag":221,"props":1682,"children":1683},{"style":233},[1684],{"type":169,"value":1685}," setuptools\n",{"type":164,"tag":221,"props":1687,"children":1688},{"class":223,"line":377},[1689,1693,1697,1701,1705,1709,1713],{"type":164,"tag":221,"props":1690,"children":1691},{"style":227},[1692],{"type":169,"value":249},{"type":164,"tag":221,"props":1694,"children":1695},{"style":233},[1696],{"type":169,"value":1245},{"type":164,"tag":221,"props":1698,"children":1699},{"style":277},[1700],{"type":169,"value":1373},{"type":164,"tag":221,"props":1702,"children":1703},{"style":233},[1704],{"type":169,"value":1378},{"type":164,"tag":221,"props":1706,"children":1707},{"style":233},[1708],{"type":169,"value":236},{"type":164,"tag":221,"props":1710,"children":1711},{"style":277},[1712],{"type":169,"value":1652},{"type":164,"tag":221,"props":1714,"children":1715},{"style":233},[1716],{"type":169,"value":1685},{"type":164,"tag":165,"props":1718,"children":1719},{},[1720],{"type":169,"value":1721},"И снова запустить установку модуля, на котором спотыкнулись.",{"type":164,"tag":171,"props":1723,"children":1725},{"id":1724},"mysql",[1726],{"type":169,"value":1727},"MySQL",{"type":164,"tag":165,"props":1729,"children":1730},{},[1731,1733],{"type":169,"value":1732},"Устанавливаем:\n",{"type":164,"tag":217,"props":1734,"children":1736},{"className":1735},[],[1737],{"type":169,"value":1738},"sudo apt install -y mysql-server",{"type":164,"tag":165,"props":1740,"children":1741},{},[1742,1744,1750],{"type":169,"value":1743},"Для Ubuntu >=20.04 с репозитория будет скачана MySQL 8.0: ",{"type":164,"tag":217,"props":1745,"children":1747},{"className":1746},[],[1748],{"type":169,"value":1749},"mysql --version",{"type":169,"value":1345},{"type":164,"tag":171,"props":1752,"children":1754},{"id":1753},"mysql-57",[1755],{"type":169,"value":1756},"MySQL 5.7",{"type":164,"tag":165,"props":1758,"children":1759},{},[1760,1762],{"type":169,"value":1761},"Если нужна 5.7, то сначала удаляем 8 версию:\n",{"type":164,"tag":217,"props":1763,"children":1765},{"className":1764},[],[1766],{"type":169,"value":1767},"sudo apt remove --autoremove mysql-server mysql-client && sudo rm -Rf \u002Fvar\u002Flib\u002Fmysql",{"type":164,"tag":165,"props":1769,"children":1770},{},[1771,1773],{"type":169,"value":1772},"Ставим репозиторий:\n",{"type":164,"tag":217,"props":1774,"children":1776},{"className":1775},[],[1777],{"type":169,"value":1778},"sudo wget https:\u002F\u002Fdev.mysql.com\u002Fget\u002Fmysql-apt-config_0.8.12-1_all.deb && sudo dpkg -i mysql-apt-config_0.8.12-1_all.deb && rm mysql-apt-config_0.8.12-1_all.deb",{"type":164,"tag":165,"props":1780,"children":1781},{},[1782,1784,1790],{"type":169,"value":1783},"В процессе надо будет выбрать дистрибутив. Для Ubuntu 18.04 и выше выбираем ",{"type":164,"tag":217,"props":1785,"children":1787},{"className":1786},[],[1788],{"type":169,"value":1789},"bionic",{"type":169,"value":1791},". Далее жмём MySQL Server and Cluster и выбираем нужную версию MySQL (5.7). Жмём Ok.",{"type":164,"tag":165,"props":1793,"children":1794},{},[1795,1797],{"type":169,"value":1796},"Обновляем репозитории:\n",{"type":164,"tag":217,"props":1798,"children":1800},{"className":1799},[],[1801],{"type":169,"value":1802},"sudo apt update",{"type":164,"tag":165,"props":1804,"children":1805},{},[1806,1808,1814],{"type":169,"value":1807},"Может возникнуть ошибка ",{"type":164,"tag":217,"props":1809,"children":1811},{"className":1810},[],[1812],{"type":169,"value":1813},"Err:1 http:\u002F\u002Frepo.mysql.com\u002Fapt\u002Fubuntu bionic InRelease The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 467B942D3A79BD29",{"type":169,"value":1345},{"type":164,"tag":165,"props":1816,"children":1817},{},[1818,1820],{"type":169,"value":1819},"На старых Ubuntu (=20.04) другая команда:\n",{"type":164,"tag":217,"props":1821,"children":1823},{"className":1822},[],[1824],{"type":169,"value":1825},"sudo gpg --keyserver keyserver.ubuntu.com --recv-keys 467B942D3A79BD29",{"type":164,"tag":165,"props":1827,"children":1828},{},[1829,1831],{"type":169,"value":1830},"И далее:\n",{"type":164,"tag":217,"props":1832,"children":1834},{"className":1833},[],[1835],{"type":169,"value":1802},{"type":164,"tag":165,"props":1837,"children":1838},{},[1839,1841],{"type":169,"value":1840},"Смотрим какие версии доступны в репозитории:\n",{"type":164,"tag":217,"props":1842,"children":1844},{"className":1843},[],[1845],{"type":169,"value":1846},"sudo apt-cache policy mysql-server",{"type":164,"tag":165,"props":1848,"children":1849},{},[1850,1852,1858],{"type":169,"value":1851},"Копируем название нужной версии (у меня это ",{"type":164,"tag":217,"props":1853,"children":1855},{"className":1854},[],[1856],{"type":169,"value":1857},"5.7.42-1ubuntu18.04",{"type":169,"value":1859},") и вставляем в команду установки, если она отличается:",{"type":164,"tag":209,"props":1861,"children":1863},{"className":211,"code":1862,"language":213,"meta":123,"style":214},"sudo apt install -y mysql-client=5.7.42-1ubuntu18.04 \\\nmysql-community-server=5.7.42-1ubuntu18.04 \\\nmysql-server=5.7.42-1ubuntu18.04\n",[1864],{"type":164,"tag":217,"props":1865,"children":1866},{"__ignoreMap":123},[1867,1895,1908],{"type":164,"tag":221,"props":1868,"children":1869},{"class":223,"line":40},[1870,1874,1878,1882,1886,1891],{"type":164,"tag":221,"props":1871,"children":1872},{"style":227},[1873],{"type":169,"value":249},{"type":164,"tag":221,"props":1875,"children":1876},{"style":233},[1877],{"type":169,"value":254},{"type":164,"tag":221,"props":1879,"children":1880},{"style":233},[1881],{"type":169,"value":236},{"type":164,"tag":221,"props":1883,"children":1884},{"style":277},[1885],{"type":169,"value":280},{"type":164,"tag":221,"props":1887,"children":1888},{"style":233},[1889],{"type":169,"value":1890}," mysql-client=5.7.42-1ubuntu18.04",{"type":164,"tag":221,"props":1892,"children":1893},{"style":703},[1894],{"type":169,"value":706},{"type":164,"tag":221,"props":1896,"children":1897},{"class":223,"line":32},[1898,1903],{"type":164,"tag":221,"props":1899,"children":1900},{"style":712},[1901],{"type":169,"value":1902},"mysql-community-server=5.7.42-1ubuntu18.04 ",{"type":164,"tag":221,"props":1904,"children":1905},{"style":703},[1906],{"type":169,"value":1907},"\\\n",{"type":164,"tag":221,"props":1909,"children":1910},{"class":223,"line":105},[1911],{"type":164,"tag":221,"props":1912,"children":1913},{"style":712},[1914],{"type":169,"value":1915},"mysql-server=5.7.42-1ubuntu18.04\n",{"type":164,"tag":165,"props":1917,"children":1918},{},[1919],{"type":169,"value":1920},"Запускаем получившуюся команду.",{"type":164,"tag":171,"props":1922,"children":1924},{"id":1923},"root-пользователь-mysql",[1925],{"type":169,"value":1926},"Root пользователь MySQL",{"type":164,"tag":165,"props":1928,"children":1929},{},[1930,1932,1937,1939,1945,1947,1953],{"type":169,"value":1931},"В MySQL 8 версии ",{"type":164,"tag":217,"props":1933,"children":1935},{"className":1934},[],[1936],{"type":169,"value":161},{"type":169,"value":1938}," юзер не требует ввода пароля, т.к. root-аутентификация настроена через ",{"type":164,"tag":217,"props":1940,"children":1942},{"className":1941},[],[1943],{"type":169,"value":1944},"auth_socket",{"type":169,"value":1946}," вместо ",{"type":164,"tag":217,"props":1948,"children":1950},{"className":1949},[],[1951],{"type":169,"value":1952},"mysql_native_password",{"type":169,"value":1954},", поэтому вход в учётку root возможен только локально из-под системного root-пользователя.",{"type":164,"tag":165,"props":1956,"children":1957},{},[1958,1960,1966],{"type":169,"value":1959},"Таким образом, по-умолчанию безопасность повышается, т.к. нет нужды передавать root-пароль в командой строке:\n",{"type":164,"tag":217,"props":1961,"children":1963},{"className":1962},[],[1964],{"type":169,"value":1965},"--password=\"root_password\"",{"type":169,"value":1345},{"type":164,"tag":165,"props":1968,"children":1969},{},[1970,1972,1978],{"type":169,"value":1971},"Однако, чтобы иметь второго root юзера, но уже с внешним доступом, вы можете создать его SQL командой, зайдя в MySQL из под рута ",{"type":164,"tag":217,"props":1973,"children":1975},{"className":1974},[],[1976],{"type":169,"value":1977},"mysql -uroot",{"type":169,"value":671},{"type":164,"tag":209,"props":1980,"children":1984},{"className":1981,"code":1982,"language":1983,"meta":123,"style":214},"language-sql shiki shiki-themes github-light catppuccin-mocha","CREATE USER 'superroot'@'%' IDENTIFIED BY 'superpassword';\nGRANT ALL PRIVILEGES ON *.* TO 'superroot'@'%' WITH GRANT OPTION;\nFLUSH PRIVILEGES;\n","sql",[1985],{"type":164,"tag":217,"props":1986,"children":1987},{"__ignoreMap":123},[1988,2041,2111],{"type":164,"tag":221,"props":1989,"children":1990},{"class":223,"line":40},[1991,1996,2001,2006,2011,2016,2021,2026,2031,2036],{"type":164,"tag":221,"props":1992,"children":1993},{"style":773},[1994],{"type":169,"value":1995},"CREATE",{"type":164,"tag":221,"props":1997,"children":1998},{"style":773},[1999],{"type":169,"value":2000}," USER",{"type":164,"tag":221,"props":2002,"children":2003},{"style":712},[2004],{"type":169,"value":2005}," '",{"type":164,"tag":221,"props":2007,"children":2008},{"style":227},[2009],{"type":169,"value":2010},"superroot",{"type":164,"tag":221,"props":2012,"children":2013},{"style":712},[2014],{"type":169,"value":2015},"'@",{"type":164,"tag":221,"props":2017,"children":2018},{"style":233},[2019],{"type":169,"value":2020},"'%'",{"type":164,"tag":221,"props":2022,"children":2023},{"style":712},[2024],{"type":169,"value":2025}," IDENTIFIED ",{"type":164,"tag":221,"props":2027,"children":2028},{"style":773},[2029],{"type":169,"value":2030},"BY",{"type":164,"tag":221,"props":2032,"children":2033},{"style":233},[2034],{"type":169,"value":2035}," 'superpassword'",{"type":164,"tag":221,"props":2037,"children":2038},{"style":712},[2039],{"type":169,"value":2040},";\n",{"type":164,"tag":221,"props":2042,"children":2043},{"class":223,"line":32},[2044,2049,2054,2059,2064,2068,2073,2078,2083,2088,2092,2097,2102,2107],{"type":164,"tag":221,"props":2045,"children":2046},{"style":773},[2047],{"type":169,"value":2048},"GRANT",{"type":164,"tag":221,"props":2050,"children":2051},{"style":712},[2052],{"type":169,"value":2053}," ALL PRIVILEGES ",{"type":164,"tag":221,"props":2055,"children":2056},{"style":773},[2057],{"type":169,"value":2058},"ON",{"type":164,"tag":221,"props":2060,"children":2061},{"style":353},[2062],{"type":169,"value":2063}," *",{"type":164,"tag":221,"props":2065,"children":2066},{"style":712},[2067],{"type":169,"value":1345},{"type":164,"tag":221,"props":2069,"children":2070},{"style":353},[2071],{"type":169,"value":2072},"*",{"type":164,"tag":221,"props":2074,"children":2075},{"style":773},[2076],{"type":169,"value":2077}," TO",{"type":164,"tag":221,"props":2079,"children":2080},{"style":233},[2081],{"type":169,"value":2082}," 'superroot'",{"type":164,"tag":221,"props":2084,"children":2085},{"style":712},[2086],{"type":169,"value":2087},"@",{"type":164,"tag":221,"props":2089,"children":2090},{"style":233},[2091],{"type":169,"value":2020},{"type":164,"tag":221,"props":2093,"children":2094},{"style":773},[2095],{"type":169,"value":2096}," WITH",{"type":164,"tag":221,"props":2098,"children":2099},{"style":773},[2100],{"type":169,"value":2101}," GRANT",{"type":164,"tag":221,"props":2103,"children":2104},{"style":773},[2105],{"type":169,"value":2106}," OPTION",{"type":164,"tag":221,"props":2108,"children":2109},{"style":712},[2110],{"type":169,"value":2040},{"type":164,"tag":221,"props":2112,"children":2113},{"class":223,"line":105},[2114],{"type":164,"tag":221,"props":2115,"children":2116},{"style":712},[2117],{"type":169,"value":2118},"FLUSH PRIVILEGES;\n",{"type":164,"tag":165,"props":2120,"children":2121},{},[2122],{"type":164,"tag":1325,"props":2123,"children":2124},{},[2125,2127,2132,2134,2140],{"type":169,"value":2126},"вместо ",{"type":164,"tag":217,"props":2128,"children":2130},{"className":2129},[],[2131],{"type":169,"value":2010},{"type":169,"value":2133}," укажите нужный логин, а вместо ",{"type":164,"tag":217,"props":2135,"children":2137},{"className":2136},[],[2138],{"type":169,"value":2139},"superpassword",{"type":169,"value":2141}," – нужный и сложный пароль.",{"type":164,"tag":171,"props":2143,"children":2145},{"id":2144},"проблемы-с-mysql",[2146],{"type":169,"value":2147},"Проблемы с MySQL",{"type":164,"tag":165,"props":2149,"children":2150},{},[2151,2153,2159,2161,2167],{"type":169,"value":2152},"Есть вероятность, что ",{"type":164,"tag":217,"props":2154,"children":2156},{"className":2155},[],[2157],{"type":169,"value":2158},"SQL MODE",{"type":169,"value":2160}," будет не тот. От этого MODX будет сыпать ошибки в собственный лог и ТВ не будут сохраняться. Наверняка последствий больше... лечится это так: ",{"type":164,"tag":217,"props":2162,"children":2164},{"className":2163},[],[2165],{"type":169,"value":2166},"sudo touch \u002Fetc\u002Fmysql\u002Fconf.d\u002Fmysqld.cnf && sudo mcedit \u002Fetc\u002Fmysql\u002Fconf.d\u002Fmysqld.cnf",{"type":169,"value":2168}," и в конец дописываем:",{"type":164,"tag":209,"props":2170,"children":2174},{"className":2171,"code":2172,"language":2173,"meta":123,"style":214},"language-ini shiki shiki-themes github-light catppuccin-mocha","[mysqld]\nsql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION\n","ini",[2175],{"type":164,"tag":217,"props":2176,"children":2177},{"__ignoreMap":123},[2178,2198],{"type":164,"tag":221,"props":2179,"children":2180},{"class":223,"line":40},[2181,2187,2193],{"type":164,"tag":221,"props":2182,"children":2184},{"style":2183},"--shiki-default:#6F42C1;--shiki-dark:#9399B2",[2185],{"type":169,"value":2186},"[",{"type":164,"tag":221,"props":2188,"children":2190},{"style":2189},"--shiki-default:#6F42C1;--shiki-dark:#F9E2AF",[2191],{"type":169,"value":2192},"mysqld",{"type":164,"tag":221,"props":2194,"children":2195},{"style":2183},[2196],{"type":169,"value":2197},"]\n",{"type":164,"tag":221,"props":2199,"children":2200},{"class":223,"line":32},[2201,2207,2212],{"type":164,"tag":221,"props":2202,"children":2204},{"style":2203},"--shiki-default:#D73A49;--shiki-dark:#89B4FA",[2205],{"type":169,"value":2206},"sql_mode",{"type":164,"tag":221,"props":2208,"children":2210},{"style":2209},"--shiki-default:#24292E;--shiki-dark:#94E2D5",[2211],{"type":169,"value":720},{"type":164,"tag":221,"props":2213,"children":2214},{"style":712},[2215],{"type":169,"value":2216},"STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION\n",{"type":164,"tag":165,"props":2218,"children":2219},{},[2220,2222],{"type":169,"value":2221},"Командуем:\n",{"type":164,"tag":217,"props":2223,"children":2225},{"className":2224},[],[2226],{"type":169,"value":2227},"sudo systemctl restart mysql",{"type":164,"tag":165,"props":2229,"children":2230},{},[2231,2233,2239,2241,2247],{"type":169,"value":2232},"Если после этого возникает ошибка с ",{"type":164,"tag":217,"props":2234,"children":2236},{"className":2235},[],[2237],{"type":169,"value":2238},"sql_mode=only_full_group_by",{"type":169,"value":2240},", то скорее всего AppArmor не даёт применить настройки MySQL. Надо прописать в его конфиг ",{"type":164,"tag":217,"props":2242,"children":2244},{"className":2243},[],[2245],{"type":169,"value":2246},"\u002Fetc\u002Fapparmor.d\u002Flocal\u002Fusr.sbin.mysqld",{"type":169,"value":2248}," в самый конец:",{"type":164,"tag":209,"props":2250,"children":2254},{"className":2251,"code":2253,"language":169},[2252],"language-text","\u002Fetc\u002Fmysql\u002F** r,\n\u002Fetc\u002Falternatives\u002F** r,\n",[2255],{"type":164,"tag":217,"props":2256,"children":2257},{"__ignoreMap":123},[2258],{"type":169,"value":2253},{"type":164,"tag":165,"props":2260,"children":2261},{},[2262],{"type":169,"value":2263},"После чего командуем:",{"type":164,"tag":209,"props":2265,"children":2267},{"className":211,"code":2266,"language":213,"meta":123,"style":214},"service apparmor restart\nsudo systemctl restart mysql\n",[2268],{"type":164,"tag":217,"props":2269,"children":2270},{"__ignoreMap":123},[2271,2288],{"type":164,"tag":221,"props":2272,"children":2273},{"class":223,"line":40},[2274,2279,2284],{"type":164,"tag":221,"props":2275,"children":2276},{"style":227},[2277],{"type":169,"value":2278},"service",{"type":164,"tag":221,"props":2280,"children":2281},{"style":233},[2282],{"type":169,"value":2283}," apparmor",{"type":164,"tag":221,"props":2285,"children":2286},{"style":233},[2287],{"type":169,"value":1099},{"type":164,"tag":221,"props":2289,"children":2290},{"class":223,"line":32},[2291,2295,2300,2305],{"type":164,"tag":221,"props":2292,"children":2293},{"style":227},[2294],{"type":169,"value":249},{"type":164,"tag":221,"props":2296,"children":2297},{"style":233},[2298],{"type":169,"value":2299}," systemctl",{"type":164,"tag":221,"props":2301,"children":2302},{"style":233},[2303],{"type":169,"value":2304}," restart",{"type":164,"tag":221,"props":2306,"children":2307},{"style":233},[2308],{"type":169,"value":2309}," mysql\n",{"type":164,"tag":165,"props":2311,"children":2312},{},[2313,2315,2320,2322,2328,2330],{"type":169,"value":2314},"Если конфиг MySQL до сих пор не применяется, то командуем ",{"type":164,"tag":217,"props":2316,"children":2318},{"className":2317},[],[2319],{"type":169,"value":1724},{"type":169,"value":2321}," и смотрим, пишет ли он какие-то предупреждения, похожие на ",{"type":164,"tag":217,"props":2323,"children":2325},{"className":2324},[],[2326],{"type":169,"value":2327},"[Warning] World-writable config file '\u002Fetc\u002Fmysql\u002Fmy.cnf' is ignored",{"type":169,"value":2329},". Исправляем так:\n",{"type":164,"tag":217,"props":2331,"children":2333},{"className":2332},[],[2334],{"type":169,"value":2335},"chmod 0775 \u002Fetc\u002Fmysql\u002Fmy.cnf",{"type":164,"tag":165,"props":2337,"children":2338},{},[2339,2341,2347,2349,2355,2357,2363],{"type":169,"value":2340},"Если периодически MODX на посещаемом сайте наполняет лог чем-то типа ",{"type":164,"tag":217,"props":2342,"children":2344},{"className":2343},[],[2345],{"type":169,"value":2346},"Error HY000 executing statement ... errno: 24 - Too many open files",{"type":169,"value":2348},", то надо увеличить кол-во доступных файловых дескрипторов. Для начала выполняем команду где-то в adminer или phpmyadmin ",{"type":164,"tag":217,"props":2350,"children":2352},{"className":2351},[],[2353],{"type":169,"value":2354},"SHOW VARIABLES LIKE 'open_files_limit';",{"type":169,"value":2356}," и смотрим, сколько их доступно MySQL на данный момент. После этого прописываем в ",{"type":164,"tag":217,"props":2358,"children":2360},{"className":2359},[],[2361],{"type":169,"value":2362},"\u002Fetc\u002Fmysql\u002Fconf.d\u002Fmysqld.cnf",{"type":169,"value":2364}," заведомо большее значение в виде:",{"type":164,"tag":209,"props":2366,"children":2368},{"className":2171,"code":2367,"language":2173,"meta":123,"style":214},"[mysqld]\nopen_files_limit=32768\n",[2369],{"type":164,"tag":217,"props":2370,"children":2371},{"__ignoreMap":123},[2372,2387],{"type":164,"tag":221,"props":2373,"children":2374},{"class":223,"line":40},[2375,2379,2383],{"type":164,"tag":221,"props":2376,"children":2377},{"style":2183},[2378],{"type":169,"value":2186},{"type":164,"tag":221,"props":2380,"children":2381},{"style":2189},[2382],{"type":169,"value":2192},{"type":164,"tag":221,"props":2384,"children":2385},{"style":2183},[2386],{"type":169,"value":2197},{"type":164,"tag":221,"props":2388,"children":2389},{"class":223,"line":32},[2390,2395,2399],{"type":164,"tag":221,"props":2391,"children":2392},{"style":2203},[2393],{"type":169,"value":2394},"open_files_limit",{"type":164,"tag":221,"props":2396,"children":2397},{"style":2209},[2398],{"type":169,"value":720},{"type":164,"tag":221,"props":2400,"children":2401},{"style":712},[2402],{"type":169,"value":2403},"32768\n",{"type":164,"tag":165,"props":2405,"children":2406},{},[2407,2409],{"type":169,"value":2408},"Однако этого может быть недостаточно, поэтому командуем:\n",{"type":164,"tag":217,"props":2410,"children":2412},{"className":2411},[],[2413],{"type":169,"value":2414},"ulimit -n 32768 && ulimit -a | grep \"open files\"",{"type":164,"tag":165,"props":2416,"children":2417},{},[2418,2420,2426,2428,2434,2436,2442,2444,2450],{"type":169,"value":2419},"Но и это может не повлиять на переменную open_files_limit в MySQL, в частности на системах с systemd. Поэтому в ",{"type":164,"tag":217,"props":2421,"children":2423},{"className":2422},[],[2424],{"type":169,"value":2425},"\u002Fetc\u002Fsystemd\u002Fsystem\u002Fmulti-user.target.wants\u002Fmysql.service",{"type":169,"value":2427}," (или в ",{"type":164,"tag":217,"props":2429,"children":2431},{"className":2430},[],[2432],{"type":169,"value":2433},"\u002Fusr\u002Flib\u002Fsystemd\u002Fsystem\u002Fmysql.service",{"type":169,"value":2435},", если предыдущий файл является ссылкой) в секцию ",{"type":164,"tag":217,"props":2437,"children":2439},{"className":2438},[],[2440],{"type":169,"value":2441},"[Service]",{"type":169,"value":2443}," прописываем:\n",{"type":164,"tag":217,"props":2445,"children":2447},{"className":2446},[],[2448],{"type":169,"value":2449},"LimitNOFILE=32768",{"type":164,"tag":1325,"props":2451,"children":2452},{},[2453],{"type":169,"value":2454},"Если данный параметр уже есть в файле, то необходимо заменить его.",{"type":164,"tag":165,"props":2456,"children":2457},{},[2458],{"type":169,"value":2459},"После этого командуем:",{"type":164,"tag":209,"props":2461,"children":2463},{"className":211,"code":2462,"language":213,"meta":123,"style":214},"sudo systemctl daemon-reload\nsudo systemctl restart mysql\n",[2464],{"type":164,"tag":217,"props":2465,"children":2466},{"__ignoreMap":123},[2467,2483],{"type":164,"tag":221,"props":2468,"children":2469},{"class":223,"line":40},[2470,2474,2478],{"type":164,"tag":221,"props":2471,"children":2472},{"style":227},[2473],{"type":169,"value":249},{"type":164,"tag":221,"props":2475,"children":2476},{"style":233},[2477],{"type":169,"value":2299},{"type":164,"tag":221,"props":2479,"children":2480},{"style":233},[2481],{"type":169,"value":2482}," daemon-reload\n",{"type":164,"tag":221,"props":2484,"children":2485},{"class":223,"line":32},[2486,2490,2494,2498],{"type":164,"tag":221,"props":2487,"children":2488},{"style":227},[2489],{"type":169,"value":249},{"type":164,"tag":221,"props":2491,"children":2492},{"style":233},[2493],{"type":169,"value":2299},{"type":164,"tag":221,"props":2495,"children":2496},{"style":233},[2497],{"type":169,"value":2304},{"type":164,"tag":221,"props":2499,"children":2500},{"style":233},[2501],{"type":169,"value":2309},{"type":164,"tag":171,"props":2503,"children":2505},{"id":2504},"nginx-php",[2506],{"type":169,"value":2507},"Nginx, PHP",{"type":164,"tag":165,"props":2509,"children":2510},{},[2511],{"type":169,"value":2512},"Ставим репозиторий новых версий PHP:",{"type":164,"tag":209,"props":2514,"children":2516},{"className":211,"code":2515,"language":213,"meta":123,"style":214},"sudo add-apt-repository ppa:ondrej\u002Fphp\nsudo apt update\n",[2517],{"type":164,"tag":217,"props":2518,"children":2519},{"__ignoreMap":123},[2520,2536],{"type":164,"tag":221,"props":2521,"children":2522},{"class":223,"line":40},[2523,2527,2531],{"type":164,"tag":221,"props":2524,"children":2525},{"style":227},[2526],{"type":169,"value":249},{"type":164,"tag":221,"props":2528,"children":2529},{"style":233},[2530],{"type":169,"value":1129},{"type":164,"tag":221,"props":2532,"children":2533},{"style":233},[2534],{"type":169,"value":2535}," ppa:ondrej\u002Fphp\n",{"type":164,"tag":221,"props":2537,"children":2538},{"class":223,"line":32},[2539,2543,2547],{"type":164,"tag":221,"props":2540,"children":2541},{"style":227},[2542],{"type":169,"value":249},{"type":164,"tag":221,"props":2544,"children":2545},{"style":233},[2546],{"type":169,"value":254},{"type":164,"tag":221,"props":2548,"children":2549},{"style":233},[2550],{"type":169,"value":259},{"type":164,"tag":2552,"props":2553,"children":2554},"blockquote",{},[2555],{"type":164,"tag":165,"props":2556,"children":2557},{},[2558,2560,2566],{"type":169,"value":2559},"Решение проблемы  ",{"type":164,"tag":217,"props":2561,"children":2563},{"className":2562},[],[2564],{"type":169,"value":2565},"ModuleNotFoundError: No module named 'apt_pkg'",{"type":169,"value":2567},"  описано в самом низу статьи.",{"type":164,"tag":2552,"props":2569,"children":2570},{},[2571],{"type":164,"tag":165,"props":2572,"children":2573},{},[2574,2576,2581,2583,2587,2593,2596,2598,2601,2607,2610,2612,2617],{"type":169,"value":2575},"Возможно, возникнет ошибка при попытке обновить список пакетов командой ",{"type":164,"tag":474,"props":2577,"children":2578},{},[2579],{"type":169,"value":2580},"apt update",{"type":169,"value":2582},", вроде этой:",{"type":164,"tag":2584,"props":2585,"children":2586},"br",{},[],{"type":164,"tag":217,"props":2588,"children":2590},{"className":2589},[],[2591],{"type":169,"value":2592},"Err:4 http:\u002F\u002Fppa.launchpad.net\u002Fondrej\u002Fphp\u002Fubuntu xenial InRelease The following signatures couldn't be verified because the public key is not available: NO_PUBKEY [...]",{"type":164,"tag":2584,"props":2594,"children":2595},{},[],{"type":169,"value":2597},"\nВместо 3 точек будет публичный ключ, копируем его и вставляем в конец команды, вместо трёх точек:",{"type":164,"tag":2584,"props":2599,"children":2600},{},[],{"type":164,"tag":217,"props":2602,"children":2604},{"className":2603},[],[2605],{"type":169,"value":2606},"sudo apt-key adv --recv-keys --keyserver keyserver.ubuntu.com ...",{"type":164,"tag":2584,"props":2608,"children":2609},{},[],{"type":169,"value":2611},"\nПосле этого снова  ",{"type":164,"tag":217,"props":2613,"children":2615},{"className":2614},[],[2616],{"type":169,"value":2580},{"type":169,"value":2618}," .",{"type":164,"tag":165,"props":2620,"children":2621},{},[2622,2624],{"type":169,"value":2623},"Устанавливаем NGINX:\n",{"type":164,"tag":217,"props":2625,"children":2627},{"className":2626},[],[2628],{"type":169,"value":2629},"sudo apt install -y nginx",{"type":164,"tag":165,"props":2631,"children":2632},{},[2633],{"type":169,"value":2634},"Устанавливаем PHP 7.x:",{"type":164,"tag":209,"props":2636,"children":2638},{"className":211,"code":2637,"language":213,"meta":123,"style":214},"sudo apt install -y php7.0-fpm php7.0-mcrypt php7.0-mysql php7.0-sqlite3 php7.0-curl php-db php7.0-gd php7.0-xml php7.0-json php7.0-imap php7.0-dev php7.0-zip php7.0-yaml php7.0-mbstring \\\n&& sudo apt install -y php7.1-fpm php7.1-mcrypt php7.1-mysql php7.1-sqlite3 php7.1-curl php7.1-gd php7.1-xml php7.1-json php7.1-imap php7.1-dev php7.1-zip php7.1-yaml php7.1-mbstring \\\n&& sudo apt install -y php7.2-fpm php7.2-mcrypt php7.2-mysql php7.2-sqlite3 php7.2-curl php7.2-gd php7.2-xml php7.2-json php7.2-imap php7.2-dev php7.2-zip php7.2-yaml php7.2-mbstring \\\n&& sudo apt install -y php7.3-fpm php7.3-mcrypt php7.3-mysql php7.3-sqlite3 php7.3-curl php7.3-gd php7.3-xml php7.3-json php7.3-imap php7.3-dev php7.3-zip php7.3-yaml php7.3-mbstring \\\n&& sudo apt install -y php7.4-fpm php7.4-mcrypt php7.4-mysql php7.4-sqlite3 php7.4-curl php7.4-gd php7.4-xml php7.4-json php7.4-imap php7.4-dev php7.4-zip php7.4-yaml php7.4-mbstring\n",[2639],{"type":164,"tag":217,"props":2640,"children":2641},{"__ignoreMap":123},[2642,2735,2828,2920,3012],{"type":164,"tag":221,"props":2643,"children":2644},{"class":223,"line":40},[2645,2649,2653,2657,2661,2666,2671,2676,2681,2686,2691,2696,2701,2706,2711,2716,2721,2726,2731],{"type":164,"tag":221,"props":2646,"children":2647},{"style":227},[2648],{"type":169,"value":249},{"type":164,"tag":221,"props":2650,"children":2651},{"style":233},[2652],{"type":169,"value":254},{"type":164,"tag":221,"props":2654,"children":2655},{"style":233},[2656],{"type":169,"value":236},{"type":164,"tag":221,"props":2658,"children":2659},{"style":277},[2660],{"type":169,"value":280},{"type":164,"tag":221,"props":2662,"children":2663},{"style":233},[2664],{"type":169,"value":2665}," php7.0-fpm",{"type":164,"tag":221,"props":2667,"children":2668},{"style":233},[2669],{"type":169,"value":2670}," php7.0-mcrypt",{"type":164,"tag":221,"props":2672,"children":2673},{"style":233},[2674],{"type":169,"value":2675}," php7.0-mysql",{"type":164,"tag":221,"props":2677,"children":2678},{"style":233},[2679],{"type":169,"value":2680}," php7.0-sqlite3",{"type":164,"tag":221,"props":2682,"children":2683},{"style":233},[2684],{"type":169,"value":2685}," php7.0-curl",{"type":164,"tag":221,"props":2687,"children":2688},{"style":233},[2689],{"type":169,"value":2690}," php-db",{"type":164,"tag":221,"props":2692,"children":2693},{"style":233},[2694],{"type":169,"value":2695}," php7.0-gd",{"type":164,"tag":221,"props":2697,"children":2698},{"style":233},[2699],{"type":169,"value":2700}," php7.0-xml",{"type":164,"tag":221,"props":2702,"children":2703},{"style":233},[2704],{"type":169,"value":2705}," php7.0-json",{"type":164,"tag":221,"props":2707,"children":2708},{"style":233},[2709],{"type":169,"value":2710}," php7.0-imap",{"type":164,"tag":221,"props":2712,"children":2713},{"style":233},[2714],{"type":169,"value":2715}," php7.0-dev",{"type":164,"tag":221,"props":2717,"children":2718},{"style":233},[2719],{"type":169,"value":2720}," php7.0-zip",{"type":164,"tag":221,"props":2722,"children":2723},{"style":233},[2724],{"type":169,"value":2725}," php7.0-yaml",{"type":164,"tag":221,"props":2727,"children":2728},{"style":233},[2729],{"type":169,"value":2730}," php7.0-mbstring",{"type":164,"tag":221,"props":2732,"children":2733},{"style":703},[2734],{"type":169,"value":706},{"type":164,"tag":221,"props":2736,"children":2737},{"class":223,"line":32},[2738,2743,2747,2751,2755,2759,2764,2769,2774,2779,2784,2789,2794,2799,2804,2809,2814,2819,2824],{"type":164,"tag":221,"props":2739,"children":2740},{"style":523},[2741],{"type":169,"value":2742},"&&",{"type":164,"tag":221,"props":2744,"children":2745},{"style":227},[2746],{"type":169,"value":531},{"type":164,"tag":221,"props":2748,"children":2749},{"style":233},[2750],{"type":169,"value":254},{"type":164,"tag":221,"props":2752,"children":2753},{"style":233},[2754],{"type":169,"value":236},{"type":164,"tag":221,"props":2756,"children":2757},{"style":277},[2758],{"type":169,"value":280},{"type":164,"tag":221,"props":2760,"children":2761},{"style":233},[2762],{"type":169,"value":2763}," php7.1-fpm",{"type":164,"tag":221,"props":2765,"children":2766},{"style":233},[2767],{"type":169,"value":2768}," php7.1-mcrypt",{"type":164,"tag":221,"props":2770,"children":2771},{"style":233},[2772],{"type":169,"value":2773}," php7.1-mysql",{"type":164,"tag":221,"props":2775,"children":2776},{"style":233},[2777],{"type":169,"value":2778}," php7.1-sqlite3",{"type":164,"tag":221,"props":2780,"children":2781},{"style":233},[2782],{"type":169,"value":2783}," php7.1-curl",{"type":164,"tag":221,"props":2785,"children":2786},{"style":233},[2787],{"type":169,"value":2788}," php7.1-gd",{"type":164,"tag":221,"props":2790,"children":2791},{"style":233},[2792],{"type":169,"value":2793}," php7.1-xml",{"type":164,"tag":221,"props":2795,"children":2796},{"style":233},[2797],{"type":169,"value":2798}," php7.1-json",{"type":164,"tag":221,"props":2800,"children":2801},{"style":233},[2802],{"type":169,"value":2803}," php7.1-imap",{"type":164,"tag":221,"props":2805,"children":2806},{"style":233},[2807],{"type":169,"value":2808}," php7.1-dev",{"type":164,"tag":221,"props":2810,"children":2811},{"style":233},[2812],{"type":169,"value":2813}," php7.1-zip",{"type":164,"tag":221,"props":2815,"children":2816},{"style":233},[2817],{"type":169,"value":2818}," php7.1-yaml",{"type":164,"tag":221,"props":2820,"children":2821},{"style":233},[2822],{"type":169,"value":2823}," php7.1-mbstring",{"type":164,"tag":221,"props":2825,"children":2826},{"style":703},[2827],{"type":169,"value":706},{"type":164,"tag":221,"props":2829,"children":2830},{"class":223,"line":105},[2831,2835,2839,2843,2847,2851,2856,2861,2866,2871,2876,2881,2886,2891,2896,2901,2906,2911,2916],{"type":164,"tag":221,"props":2832,"children":2833},{"style":523},[2834],{"type":169,"value":2742},{"type":164,"tag":221,"props":2836,"children":2837},{"style":227},[2838],{"type":169,"value":531},{"type":164,"tag":221,"props":2840,"children":2841},{"style":233},[2842],{"type":169,"value":254},{"type":164,"tag":221,"props":2844,"children":2845},{"style":233},[2846],{"type":169,"value":236},{"type":164,"tag":221,"props":2848,"children":2849},{"style":277},[2850],{"type":169,"value":280},{"type":164,"tag":221,"props":2852,"children":2853},{"style":233},[2854],{"type":169,"value":2855}," php7.2-fpm",{"type":164,"tag":221,"props":2857,"children":2858},{"style":233},[2859],{"type":169,"value":2860}," php7.2-mcrypt",{"type":164,"tag":221,"props":2862,"children":2863},{"style":233},[2864],{"type":169,"value":2865}," php7.2-mysql",{"type":164,"tag":221,"props":2867,"children":2868},{"style":233},[2869],{"type":169,"value":2870}," php7.2-sqlite3",{"type":164,"tag":221,"props":2872,"children":2873},{"style":233},[2874],{"type":169,"value":2875}," php7.2-curl",{"type":164,"tag":221,"props":2877,"children":2878},{"style":233},[2879],{"type":169,"value":2880}," php7.2-gd",{"type":164,"tag":221,"props":2882,"children":2883},{"style":233},[2884],{"type":169,"value":2885}," php7.2-xml",{"type":164,"tag":221,"props":2887,"children":2888},{"style":233},[2889],{"type":169,"value":2890}," php7.2-json",{"type":164,"tag":221,"props":2892,"children":2893},{"style":233},[2894],{"type":169,"value":2895}," php7.2-imap",{"type":164,"tag":221,"props":2897,"children":2898},{"style":233},[2899],{"type":169,"value":2900}," php7.2-dev",{"type":164,"tag":221,"props":2902,"children":2903},{"style":233},[2904],{"type":169,"value":2905}," php7.2-zip",{"type":164,"tag":221,"props":2907,"children":2908},{"style":233},[2909],{"type":169,"value":2910}," php7.2-yaml",{"type":164,"tag":221,"props":2912,"children":2913},{"style":233},[2914],{"type":169,"value":2915}," php7.2-mbstring",{"type":164,"tag":221,"props":2917,"children":2918},{"style":703},[2919],{"type":169,"value":706},{"type":164,"tag":221,"props":2921,"children":2922},{"class":223,"line":12},[2923,2927,2931,2935,2939,2943,2948,2953,2958,2963,2968,2973,2978,2983,2988,2993,2998,3003,3008],{"type":164,"tag":221,"props":2924,"children":2925},{"style":523},[2926],{"type":169,"value":2742},{"type":164,"tag":221,"props":2928,"children":2929},{"style":227},[2930],{"type":169,"value":531},{"type":164,"tag":221,"props":2932,"children":2933},{"style":233},[2934],{"type":169,"value":254},{"type":164,"tag":221,"props":2936,"children":2937},{"style":233},[2938],{"type":169,"value":236},{"type":164,"tag":221,"props":2940,"children":2941},{"style":277},[2942],{"type":169,"value":280},{"type":164,"tag":221,"props":2944,"children":2945},{"style":233},[2946],{"type":169,"value":2947}," php7.3-fpm",{"type":164,"tag":221,"props":2949,"children":2950},{"style":233},[2951],{"type":169,"value":2952}," php7.3-mcrypt",{"type":164,"tag":221,"props":2954,"children":2955},{"style":233},[2956],{"type":169,"value":2957}," php7.3-mysql",{"type":164,"tag":221,"props":2959,"children":2960},{"style":233},[2961],{"type":169,"value":2962}," php7.3-sqlite3",{"type":164,"tag":221,"props":2964,"children":2965},{"style":233},[2966],{"type":169,"value":2967}," php7.3-curl",{"type":164,"tag":221,"props":2969,"children":2970},{"style":233},[2971],{"type":169,"value":2972}," php7.3-gd",{"type":164,"tag":221,"props":2974,"children":2975},{"style":233},[2976],{"type":169,"value":2977}," php7.3-xml",{"type":164,"tag":221,"props":2979,"children":2980},{"style":233},[2981],{"type":169,"value":2982}," php7.3-json",{"type":164,"tag":221,"props":2984,"children":2985},{"style":233},[2986],{"type":169,"value":2987}," php7.3-imap",{"type":164,"tag":221,"props":2989,"children":2990},{"style":233},[2991],{"type":169,"value":2992}," php7.3-dev",{"type":164,"tag":221,"props":2994,"children":2995},{"style":233},[2996],{"type":169,"value":2997}," php7.3-zip",{"type":164,"tag":221,"props":2999,"children":3000},{"style":233},[3001],{"type":169,"value":3002}," php7.3-yaml",{"type":164,"tag":221,"props":3004,"children":3005},{"style":233},[3006],{"type":169,"value":3007}," php7.3-mbstring",{"type":164,"tag":221,"props":3009,"children":3010},{"style":703},[3011],{"type":169,"value":706},{"type":164,"tag":221,"props":3013,"children":3014},{"class":223,"line":156},[3015,3019,3023,3027,3031,3035,3040,3045,3050,3055,3060,3065,3070,3075,3080,3085,3090,3095],{"type":164,"tag":221,"props":3016,"children":3017},{"style":523},[3018],{"type":169,"value":2742},{"type":164,"tag":221,"props":3020,"children":3021},{"style":227},[3022],{"type":169,"value":531},{"type":164,"tag":221,"props":3024,"children":3025},{"style":233},[3026],{"type":169,"value":254},{"type":164,"tag":221,"props":3028,"children":3029},{"style":233},[3030],{"type":169,"value":236},{"type":164,"tag":221,"props":3032,"children":3033},{"style":277},[3034],{"type":169,"value":280},{"type":164,"tag":221,"props":3036,"children":3037},{"style":233},[3038],{"type":169,"value":3039}," php7.4-fpm",{"type":164,"tag":221,"props":3041,"children":3042},{"style":233},[3043],{"type":169,"value":3044}," php7.4-mcrypt",{"type":164,"tag":221,"props":3046,"children":3047},{"style":233},[3048],{"type":169,"value":3049}," php7.4-mysql",{"type":164,"tag":221,"props":3051,"children":3052},{"style":233},[3053],{"type":169,"value":3054}," php7.4-sqlite3",{"type":164,"tag":221,"props":3056,"children":3057},{"style":233},[3058],{"type":169,"value":3059}," php7.4-curl",{"type":164,"tag":221,"props":3061,"children":3062},{"style":233},[3063],{"type":169,"value":3064}," php7.4-gd",{"type":164,"tag":221,"props":3066,"children":3067},{"style":233},[3068],{"type":169,"value":3069}," php7.4-xml",{"type":164,"tag":221,"props":3071,"children":3072},{"style":233},[3073],{"type":169,"value":3074}," php7.4-json",{"type":164,"tag":221,"props":3076,"children":3077},{"style":233},[3078],{"type":169,"value":3079}," php7.4-imap",{"type":164,"tag":221,"props":3081,"children":3082},{"style":233},[3083],{"type":169,"value":3084}," php7.4-dev",{"type":164,"tag":221,"props":3086,"children":3087},{"style":233},[3088],{"type":169,"value":3089}," php7.4-zip",{"type":164,"tag":221,"props":3091,"children":3092},{"style":233},[3093],{"type":169,"value":3094}," php7.4-yaml",{"type":164,"tag":221,"props":3096,"children":3097},{"style":233},[3098],{"type":169,"value":3099}," php7.4-mbstring\n",{"type":164,"tag":165,"props":3101,"children":3102},{},[3103],{"type":169,"value":3104},"Устанавливаем PHP 8.x:",{"type":164,"tag":209,"props":3106,"children":3108},{"className":211,"code":3107,"language":213,"meta":123,"style":214},"sudo apt install -y php8.0-fpm php8.0-mcrypt php8.0-mysql php8.0-sqlite3 php8.0-curl php-db php8.0-gd php8.0-xml php8.0-imap php8.0-dev php8.0-zip php8.0-yaml php8.0-mbstring \\\n&& sudo apt install -y php8.1-fpm php8.1-mcrypt php8.1-mysql php8.1-sqlite3 php8.1-curl php8.1-gd php8.1-xml php8.1-imap php8.1-dev php8.1-zip php8.1-yaml php8.1-mbstring \\\n&& sudo apt install -y php8.2-fpm php8.2-mcrypt php8.2-mysql php8.2-sqlite3 php8.2-curl php8.2-gd php8.2-xml php8.2-imap php8.2-dev php8.2-zip php8.2-yaml php8.2-mbstring \\\n&& sudo apt install -y php8.3-fpm php8.3-mcrypt php8.3-mysql php8.3-sqlite3 php8.3-curl php8.3-gd php8.3-xml php8.3-imap php8.3-dev php8.3-zip php8.3-yaml php8.3-mbstring \\\n&& sudo apt install -y php8.4-fpm php8.4-mcrypt php8.4-mysql php8.4-sqlite3 php8.4-curl php8.4-gd php8.4-xml php8.4-imap php8.4-dev php8.4-zip php8.4-yaml php8.4-mbstring\n",[3109],{"type":164,"tag":217,"props":3110,"children":3111},{"__ignoreMap":123},[3112,3199,3286,3373,3460],{"type":164,"tag":221,"props":3113,"children":3114},{"class":223,"line":40},[3115,3119,3123,3127,3131,3136,3141,3146,3151,3156,3160,3165,3170,3175,3180,3185,3190,3195],{"type":164,"tag":221,"props":3116,"children":3117},{"style":227},[3118],{"type":169,"value":249},{"type":164,"tag":221,"props":3120,"children":3121},{"style":233},[3122],{"type":169,"value":254},{"type":164,"tag":221,"props":3124,"children":3125},{"style":233},[3126],{"type":169,"value":236},{"type":164,"tag":221,"props":3128,"children":3129},{"style":277},[3130],{"type":169,"value":280},{"type":164,"tag":221,"props":3132,"children":3133},{"style":233},[3134],{"type":169,"value":3135}," php8.0-fpm",{"type":164,"tag":221,"props":3137,"children":3138},{"style":233},[3139],{"type":169,"value":3140}," php8.0-mcrypt",{"type":164,"tag":221,"props":3142,"children":3143},{"style":233},[3144],{"type":169,"value":3145}," php8.0-mysql",{"type":164,"tag":221,"props":3147,"children":3148},{"style":233},[3149],{"type":169,"value":3150}," php8.0-sqlite3",{"type":164,"tag":221,"props":3152,"children":3153},{"style":233},[3154],{"type":169,"value":3155}," php8.0-curl",{"type":164,"tag":221,"props":3157,"children":3158},{"style":233},[3159],{"type":169,"value":2690},{"type":164,"tag":221,"props":3161,"children":3162},{"style":233},[3163],{"type":169,"value":3164}," php8.0-gd",{"type":164,"tag":221,"props":3166,"children":3167},{"style":233},[3168],{"type":169,"value":3169}," php8.0-xml",{"type":164,"tag":221,"props":3171,"children":3172},{"style":233},[3173],{"type":169,"value":3174}," php8.0-imap",{"type":164,"tag":221,"props":3176,"children":3177},{"style":233},[3178],{"type":169,"value":3179}," php8.0-dev",{"type":164,"tag":221,"props":3181,"children":3182},{"style":233},[3183],{"type":169,"value":3184}," php8.0-zip",{"type":164,"tag":221,"props":3186,"children":3187},{"style":233},[3188],{"type":169,"value":3189}," php8.0-yaml",{"type":164,"tag":221,"props":3191,"children":3192},{"style":233},[3193],{"type":169,"value":3194}," php8.0-mbstring",{"type":164,"tag":221,"props":3196,"children":3197},{"style":703},[3198],{"type":169,"value":706},{"type":164,"tag":221,"props":3200,"children":3201},{"class":223,"line":32},[3202,3206,3210,3214,3218,3222,3227,3232,3237,3242,3247,3252,3257,3262,3267,3272,3277,3282],{"type":164,"tag":221,"props":3203,"children":3204},{"style":523},[3205],{"type":169,"value":2742},{"type":164,"tag":221,"props":3207,"children":3208},{"style":227},[3209],{"type":169,"value":531},{"type":164,"tag":221,"props":3211,"children":3212},{"style":233},[3213],{"type":169,"value":254},{"type":164,"tag":221,"props":3215,"children":3216},{"style":233},[3217],{"type":169,"value":236},{"type":164,"tag":221,"props":3219,"children":3220},{"style":277},[3221],{"type":169,"value":280},{"type":164,"tag":221,"props":3223,"children":3224},{"style":233},[3225],{"type":169,"value":3226}," php8.1-fpm",{"type":164,"tag":221,"props":3228,"children":3229},{"style":233},[3230],{"type":169,"value":3231}," php8.1-mcrypt",{"type":164,"tag":221,"props":3233,"children":3234},{"style":233},[3235],{"type":169,"value":3236}," php8.1-mysql",{"type":164,"tag":221,"props":3238,"children":3239},{"style":233},[3240],{"type":169,"value":3241}," php8.1-sqlite3",{"type":164,"tag":221,"props":3243,"children":3244},{"style":233},[3245],{"type":169,"value":3246}," php8.1-curl",{"type":164,"tag":221,"props":3248,"children":3249},{"style":233},[3250],{"type":169,"value":3251}," php8.1-gd",{"type":164,"tag":221,"props":3253,"children":3254},{"style":233},[3255],{"type":169,"value":3256}," php8.1-xml",{"type":164,"tag":221,"props":3258,"children":3259},{"style":233},[3260],{"type":169,"value":3261}," php8.1-imap",{"type":164,"tag":221,"props":3263,"children":3264},{"style":233},[3265],{"type":169,"value":3266}," php8.1-dev",{"type":164,"tag":221,"props":3268,"children":3269},{"style":233},[3270],{"type":169,"value":3271}," php8.1-zip",{"type":164,"tag":221,"props":3273,"children":3274},{"style":233},[3275],{"type":169,"value":3276}," php8.1-yaml",{"type":164,"tag":221,"props":3278,"children":3279},{"style":233},[3280],{"type":169,"value":3281}," php8.1-mbstring",{"type":164,"tag":221,"props":3283,"children":3284},{"style":703},[3285],{"type":169,"value":706},{"type":164,"tag":221,"props":3287,"children":3288},{"class":223,"line":105},[3289,3293,3297,3301,3305,3309,3314,3319,3324,3329,3334,3339,3344,3349,3354,3359,3364,3369],{"type":164,"tag":221,"props":3290,"children":3291},{"style":523},[3292],{"type":169,"value":2742},{"type":164,"tag":221,"props":3294,"children":3295},{"style":227},[3296],{"type":169,"value":531},{"type":164,"tag":221,"props":3298,"children":3299},{"style":233},[3300],{"type":169,"value":254},{"type":164,"tag":221,"props":3302,"children":3303},{"style":233},[3304],{"type":169,"value":236},{"type":164,"tag":221,"props":3306,"children":3307},{"style":277},[3308],{"type":169,"value":280},{"type":164,"tag":221,"props":3310,"children":3311},{"style":233},[3312],{"type":169,"value":3313}," php8.2-fpm",{"type":164,"tag":221,"props":3315,"children":3316},{"style":233},[3317],{"type":169,"value":3318}," php8.2-mcrypt",{"type":164,"tag":221,"props":3320,"children":3321},{"style":233},[3322],{"type":169,"value":3323}," php8.2-mysql",{"type":164,"tag":221,"props":3325,"children":3326},{"style":233},[3327],{"type":169,"value":3328}," php8.2-sqlite3",{"type":164,"tag":221,"props":3330,"children":3331},{"style":233},[3332],{"type":169,"value":3333}," php8.2-curl",{"type":164,"tag":221,"props":3335,"children":3336},{"style":233},[3337],{"type":169,"value":3338}," php8.2-gd",{"type":164,"tag":221,"props":3340,"children":3341},{"style":233},[3342],{"type":169,"value":3343}," php8.2-xml",{"type":164,"tag":221,"props":3345,"children":3346},{"style":233},[3347],{"type":169,"value":3348}," php8.2-imap",{"type":164,"tag":221,"props":3350,"children":3351},{"style":233},[3352],{"type":169,"value":3353}," php8.2-dev",{"type":164,"tag":221,"props":3355,"children":3356},{"style":233},[3357],{"type":169,"value":3358}," php8.2-zip",{"type":164,"tag":221,"props":3360,"children":3361},{"style":233},[3362],{"type":169,"value":3363}," php8.2-yaml",{"type":164,"tag":221,"props":3365,"children":3366},{"style":233},[3367],{"type":169,"value":3368}," php8.2-mbstring",{"type":164,"tag":221,"props":3370,"children":3371},{"style":703},[3372],{"type":169,"value":706},{"type":164,"tag":221,"props":3374,"children":3375},{"class":223,"line":12},[3376,3380,3384,3388,3392,3396,3401,3406,3411,3416,3421,3426,3431,3436,3441,3446,3451,3456],{"type":164,"tag":221,"props":3377,"children":3378},{"style":523},[3379],{"type":169,"value":2742},{"type":164,"tag":221,"props":3381,"children":3382},{"style":227},[3383],{"type":169,"value":531},{"type":164,"tag":221,"props":3385,"children":3386},{"style":233},[3387],{"type":169,"value":254},{"type":164,"tag":221,"props":3389,"children":3390},{"style":233},[3391],{"type":169,"value":236},{"type":164,"tag":221,"props":3393,"children":3394},{"style":277},[3395],{"type":169,"value":280},{"type":164,"tag":221,"props":3397,"children":3398},{"style":233},[3399],{"type":169,"value":3400}," php8.3-fpm",{"type":164,"tag":221,"props":3402,"children":3403},{"style":233},[3404],{"type":169,"value":3405}," php8.3-mcrypt",{"type":164,"tag":221,"props":3407,"children":3408},{"style":233},[3409],{"type":169,"value":3410}," php8.3-mysql",{"type":164,"tag":221,"props":3412,"children":3413},{"style":233},[3414],{"type":169,"value":3415}," php8.3-sqlite3",{"type":164,"tag":221,"props":3417,"children":3418},{"style":233},[3419],{"type":169,"value":3420}," php8.3-curl",{"type":164,"tag":221,"props":3422,"children":3423},{"style":233},[3424],{"type":169,"value":3425}," php8.3-gd",{"type":164,"tag":221,"props":3427,"children":3428},{"style":233},[3429],{"type":169,"value":3430}," php8.3-xml",{"type":164,"tag":221,"props":3432,"children":3433},{"style":233},[3434],{"type":169,"value":3435}," php8.3-imap",{"type":164,"tag":221,"props":3437,"children":3438},{"style":233},[3439],{"type":169,"value":3440}," php8.3-dev",{"type":164,"tag":221,"props":3442,"children":3443},{"style":233},[3444],{"type":169,"value":3445}," php8.3-zip",{"type":164,"tag":221,"props":3447,"children":3448},{"style":233},[3449],{"type":169,"value":3450}," php8.3-yaml",{"type":164,"tag":221,"props":3452,"children":3453},{"style":233},[3454],{"type":169,"value":3455}," php8.3-mbstring",{"type":164,"tag":221,"props":3457,"children":3458},{"style":703},[3459],{"type":169,"value":706},{"type":164,"tag":221,"props":3461,"children":3462},{"class":223,"line":156},[3463,3467,3471,3475,3479,3483,3488,3493,3498,3503,3508,3513,3518,3523,3528,3533,3538],{"type":164,"tag":221,"props":3464,"children":3465},{"style":523},[3466],{"type":169,"value":2742},{"type":164,"tag":221,"props":3468,"children":3469},{"style":227},[3470],{"type":169,"value":531},{"type":164,"tag":221,"props":3472,"children":3473},{"style":233},[3474],{"type":169,"value":254},{"type":164,"tag":221,"props":3476,"children":3477},{"style":233},[3478],{"type":169,"value":236},{"type":164,"tag":221,"props":3480,"children":3481},{"style":277},[3482],{"type":169,"value":280},{"type":164,"tag":221,"props":3484,"children":3485},{"style":233},[3486],{"type":169,"value":3487}," php8.4-fpm",{"type":164,"tag":221,"props":3489,"children":3490},{"style":233},[3491],{"type":169,"value":3492}," php8.4-mcrypt",{"type":164,"tag":221,"props":3494,"children":3495},{"style":233},[3496],{"type":169,"value":3497}," php8.4-mysql",{"type":164,"tag":221,"props":3499,"children":3500},{"style":233},[3501],{"type":169,"value":3502}," php8.4-sqlite3",{"type":164,"tag":221,"props":3504,"children":3505},{"style":233},[3506],{"type":169,"value":3507}," php8.4-curl",{"type":164,"tag":221,"props":3509,"children":3510},{"style":233},[3511],{"type":169,"value":3512}," php8.4-gd",{"type":164,"tag":221,"props":3514,"children":3515},{"style":233},[3516],{"type":169,"value":3517}," php8.4-xml",{"type":164,"tag":221,"props":3519,"children":3520},{"style":233},[3521],{"type":169,"value":3522}," php8.4-imap",{"type":164,"tag":221,"props":3524,"children":3525},{"style":233},[3526],{"type":169,"value":3527}," php8.4-dev",{"type":164,"tag":221,"props":3529,"children":3530},{"style":233},[3531],{"type":169,"value":3532}," php8.4-zip",{"type":164,"tag":221,"props":3534,"children":3535},{"style":233},[3536],{"type":169,"value":3537}," php8.4-yaml",{"type":164,"tag":221,"props":3539,"children":3540},{"style":233},[3541],{"type":169,"value":3542}," php8.4-mbstring\n",{"type":164,"tag":165,"props":3544,"children":3545},{},[3546,3548,3554],{"type":169,"value":3547},"Сразу выбираем необходимую версию PHP для терминала:\n",{"type":164,"tag":217,"props":3549,"children":3551},{"className":3550},[],[3552],{"type":169,"value":3553},"sudo update-alternatives --config php",{"type":164,"tag":1325,"props":3555,"children":3556},{},[3557],{"type":169,"value":3558},"Я пока обычно ставлю 7.4, т.к. многие скрипты для MODX оптимизированы именно под неё.",{"type":164,"tag":165,"props":3560,"children":3561},{},[3562],{"type":169,"value":3563},"Настраиваем:",{"type":164,"tag":209,"props":3565,"children":3567},{"className":211,"code":3566,"language":213,"meta":123,"style":214},"sudo apt update && sudo apt upgrade\nsudo service php7.0-fpm restart && sudo service php7.1-fpm restart && sudo service php7.2-fpm restart && sudo service php7.3-fpm restart && sudo service php7.4-fpm restart\nsudo service php8.0-fpm restart && sudo service php8.1-fpm restart && sudo service php8.2-fpm restart && sudo service php8.3-fpm restart && sudo service php8.4-fpm restart\nsudo nginx -t\nsudo service nginx reload\nsudo mkdir \u002Fetc\u002Fnginx\u002Fconf.sites && sudo mkdir \u002Fetc\u002Fnginx\u002Fconf.inc && sudo mkdir \u002Fetc\u002Fnginx\u002Fconf.inc\u002Fmain && sudo mkdir \u002Fetc\u002Fnginx\u002Fconf.inc\u002Faccess && sudo mkdir \u002Fetc\u002Fnginx\u002Fconf.inc\u002Fdomains && sudo touch \u002Fetc\u002Fnginx\u002Fblockips.conf\n",[3568],{"type":164,"tag":217,"props":3569,"children":3570},{"__ignoreMap":123},[3571,3604,3703,3802,3819,3839],{"type":164,"tag":221,"props":3572,"children":3573},{"class":223,"line":40},[3574,3578,3582,3587,3591,3595,3599],{"type":164,"tag":221,"props":3575,"children":3576},{"style":227},[3577],{"type":169,"value":249},{"type":164,"tag":221,"props":3579,"children":3580},{"style":233},[3581],{"type":169,"value":254},{"type":164,"tag":221,"props":3583,"children":3584},{"style":233},[3585],{"type":169,"value":3586}," update",{"type":164,"tag":221,"props":3588,"children":3589},{"style":523},[3590],{"type":169,"value":526},{"type":164,"tag":221,"props":3592,"children":3593},{"style":227},[3594],{"type":169,"value":531},{"type":164,"tag":221,"props":3596,"children":3597},{"style":233},[3598],{"type":169,"value":254},{"type":164,"tag":221,"props":3600,"children":3601},{"style":233},[3602],{"type":169,"value":3603}," upgrade\n",{"type":164,"tag":221,"props":3605,"children":3606},{"class":223,"line":32},[3607,3611,3615,3619,3623,3627,3631,3635,3639,3643,3647,3651,3655,3659,3663,3667,3671,3675,3679,3683,3687,3691,3695,3699],{"type":164,"tag":221,"props":3608,"children":3609},{"style":227},[3610],{"type":169,"value":249},{"type":164,"tag":221,"props":3612,"children":3613},{"style":233},[3614],{"type":169,"value":1089},{"type":164,"tag":221,"props":3616,"children":3617},{"style":233},[3618],{"type":169,"value":2665},{"type":164,"tag":221,"props":3620,"children":3621},{"style":233},[3622],{"type":169,"value":2304},{"type":164,"tag":221,"props":3624,"children":3625},{"style":523},[3626],{"type":169,"value":526},{"type":164,"tag":221,"props":3628,"children":3629},{"style":227},[3630],{"type":169,"value":531},{"type":164,"tag":221,"props":3632,"children":3633},{"style":233},[3634],{"type":169,"value":1089},{"type":164,"tag":221,"props":3636,"children":3637},{"style":233},[3638],{"type":169,"value":2763},{"type":164,"tag":221,"props":3640,"children":3641},{"style":233},[3642],{"type":169,"value":2304},{"type":164,"tag":221,"props":3644,"children":3645},{"style":523},[3646],{"type":169,"value":526},{"type":164,"tag":221,"props":3648,"children":3649},{"style":227},[3650],{"type":169,"value":531},{"type":164,"tag":221,"props":3652,"children":3653},{"style":233},[3654],{"type":169,"value":1089},{"type":164,"tag":221,"props":3656,"children":3657},{"style":233},[3658],{"type":169,"value":2855},{"type":164,"tag":221,"props":3660,"children":3661},{"style":233},[3662],{"type":169,"value":2304},{"type":164,"tag":221,"props":3664,"children":3665},{"style":523},[3666],{"type":169,"value":526},{"type":164,"tag":221,"props":3668,"children":3669},{"style":227},[3670],{"type":169,"value":531},{"type":164,"tag":221,"props":3672,"children":3673},{"style":233},[3674],{"type":169,"value":1089},{"type":164,"tag":221,"props":3676,"children":3677},{"style":233},[3678],{"type":169,"value":2947},{"type":164,"tag":221,"props":3680,"children":3681},{"style":233},[3682],{"type":169,"value":2304},{"type":164,"tag":221,"props":3684,"children":3685},{"style":523},[3686],{"type":169,"value":526},{"type":164,"tag":221,"props":3688,"children":3689},{"style":227},[3690],{"type":169,"value":531},{"type":164,"tag":221,"props":3692,"children":3693},{"style":233},[3694],{"type":169,"value":1089},{"type":164,"tag":221,"props":3696,"children":3697},{"style":233},[3698],{"type":169,"value":3039},{"type":164,"tag":221,"props":3700,"children":3701},{"style":233},[3702],{"type":169,"value":1099},{"type":164,"tag":221,"props":3704,"children":3705},{"class":223,"line":105},[3706,3710,3714,3718,3722,3726,3730,3734,3738,3742,3746,3750,3754,3758,3762,3766,3770,3774,3778,3782,3786,3790,3794,3798],{"type":164,"tag":221,"props":3707,"children":3708},{"style":227},[3709],{"type":169,"value":249},{"type":164,"tag":221,"props":3711,"children":3712},{"style":233},[3713],{"type":169,"value":1089},{"type":164,"tag":221,"props":3715,"children":3716},{"style":233},[3717],{"type":169,"value":3135},{"type":164,"tag":221,"props":3719,"children":3720},{"style":233},[3721],{"type":169,"value":2304},{"type":164,"tag":221,"props":3723,"children":3724},{"style":523},[3725],{"type":169,"value":526},{"type":164,"tag":221,"props":3727,"children":3728},{"style":227},[3729],{"type":169,"value":531},{"type":164,"tag":221,"props":3731,"children":3732},{"style":233},[3733],{"type":169,"value":1089},{"type":164,"tag":221,"props":3735,"children":3736},{"style":233},[3737],{"type":169,"value":3226},{"type":164,"tag":221,"props":3739,"children":3740},{"style":233},[3741],{"type":169,"value":2304},{"type":164,"tag":221,"props":3743,"children":3744},{"style":523},[3745],{"type":169,"value":526},{"type":164,"tag":221,"props":3747,"children":3748},{"style":227},[3749],{"type":169,"value":531},{"type":164,"tag":221,"props":3751,"children":3752},{"style":233},[3753],{"type":169,"value":1089},{"type":164,"tag":221,"props":3755,"children":3756},{"style":233},[3757],{"type":169,"value":3313},{"type":164,"tag":221,"props":3759,"children":3760},{"style":233},[3761],{"type":169,"value":2304},{"type":164,"tag":221,"props":3763,"children":3764},{"style":523},[3765],{"type":169,"value":526},{"type":164,"tag":221,"props":3767,"children":3768},{"style":227},[3769],{"type":169,"value":531},{"type":164,"tag":221,"props":3771,"children":3772},{"style":233},[3773],{"type":169,"value":1089},{"type":164,"tag":221,"props":3775,"children":3776},{"style":233},[3777],{"type":169,"value":3400},{"type":164,"tag":221,"props":3779,"children":3780},{"style":233},[3781],{"type":169,"value":2304},{"type":164,"tag":221,"props":3783,"children":3784},{"style":523},[3785],{"type":169,"value":526},{"type":164,"tag":221,"props":3787,"children":3788},{"style":227},[3789],{"type":169,"value":531},{"type":164,"tag":221,"props":3791,"children":3792},{"style":233},[3793],{"type":169,"value":1089},{"type":164,"tag":221,"props":3795,"children":3796},{"style":233},[3797],{"type":169,"value":3487},{"type":164,"tag":221,"props":3799,"children":3800},{"style":233},[3801],{"type":169,"value":1099},{"type":164,"tag":221,"props":3803,"children":3804},{"class":223,"line":12},[3805,3809,3814],{"type":164,"tag":221,"props":3806,"children":3807},{"style":227},[3808],{"type":169,"value":249},{"type":164,"tag":221,"props":3810,"children":3811},{"style":233},[3812],{"type":169,"value":3813}," nginx",{"type":164,"tag":221,"props":3815,"children":3816},{"style":277},[3817],{"type":169,"value":3818}," -t\n",{"type":164,"tag":221,"props":3820,"children":3821},{"class":223,"line":156},[3822,3826,3830,3834],{"type":164,"tag":221,"props":3823,"children":3824},{"style":227},[3825],{"type":169,"value":249},{"type":164,"tag":221,"props":3827,"children":3828},{"style":233},[3829],{"type":169,"value":1089},{"type":164,"tag":221,"props":3831,"children":3832},{"style":233},[3833],{"type":169,"value":3813},{"type":164,"tag":221,"props":3835,"children":3836},{"style":233},[3837],{"type":169,"value":3838}," reload\n",{"type":164,"tag":221,"props":3840,"children":3841},{"class":223,"line":135},[3842,3846,3851,3856,3860,3864,3868,3873,3877,3881,3885,3890,3894,3898,3902,3907,3911,3915,3919,3924,3928,3932,3937],{"type":164,"tag":221,"props":3843,"children":3844},{"style":227},[3845],{"type":169,"value":249},{"type":164,"tag":221,"props":3847,"children":3848},{"style":233},[3849],{"type":169,"value":3850}," mkdir",{"type":164,"tag":221,"props":3852,"children":3853},{"style":233},[3854],{"type":169,"value":3855}," \u002Fetc\u002Fnginx\u002Fconf.sites",{"type":164,"tag":221,"props":3857,"children":3858},{"style":523},[3859],{"type":169,"value":526},{"type":164,"tag":221,"props":3861,"children":3862},{"style":227},[3863],{"type":169,"value":531},{"type":164,"tag":221,"props":3865,"children":3866},{"style":233},[3867],{"type":169,"value":3850},{"type":164,"tag":221,"props":3869,"children":3870},{"style":233},[3871],{"type":169,"value":3872}," \u002Fetc\u002Fnginx\u002Fconf.inc",{"type":164,"tag":221,"props":3874,"children":3875},{"style":523},[3876],{"type":169,"value":526},{"type":164,"tag":221,"props":3878,"children":3879},{"style":227},[3880],{"type":169,"value":531},{"type":164,"tag":221,"props":3882,"children":3883},{"style":233},[3884],{"type":169,"value":3850},{"type":164,"tag":221,"props":3886,"children":3887},{"style":233},[3888],{"type":169,"value":3889}," \u002Fetc\u002Fnginx\u002Fconf.inc\u002Fmain",{"type":164,"tag":221,"props":3891,"children":3892},{"style":523},[3893],{"type":169,"value":526},{"type":164,"tag":221,"props":3895,"children":3896},{"style":227},[3897],{"type":169,"value":531},{"type":164,"tag":221,"props":3899,"children":3900},{"style":233},[3901],{"type":169,"value":3850},{"type":164,"tag":221,"props":3903,"children":3904},{"style":233},[3905],{"type":169,"value":3906}," \u002Fetc\u002Fnginx\u002Fconf.inc\u002Faccess",{"type":164,"tag":221,"props":3908,"children":3909},{"style":523},[3910],{"type":169,"value":526},{"type":164,"tag":221,"props":3912,"children":3913},{"style":227},[3914],{"type":169,"value":531},{"type":164,"tag":221,"props":3916,"children":3917},{"style":233},[3918],{"type":169,"value":3850},{"type":164,"tag":221,"props":3920,"children":3921},{"style":233},[3922],{"type":169,"value":3923}," \u002Fetc\u002Fnginx\u002Fconf.inc\u002Fdomains",{"type":164,"tag":221,"props":3925,"children":3926},{"style":523},[3927],{"type":169,"value":526},{"type":164,"tag":221,"props":3929,"children":3930},{"style":227},[3931],{"type":169,"value":531},{"type":164,"tag":221,"props":3933,"children":3934},{"style":233},[3935],{"type":169,"value":3936}," touch",{"type":164,"tag":221,"props":3938,"children":3939},{"style":233},[3940],{"type":169,"value":3941}," \u002Fetc\u002Fnginx\u002Fblockips.conf\n",{"type":164,"tag":2552,"props":3943,"children":3944},{},[3945,3950],{"type":164,"tag":165,"props":3946,"children":3947},{},[3948],{"type":169,"value":3949},"Возможно, придётся установить YAML иначе:",{"type":164,"tag":209,"props":3951,"children":3953},{"className":211,"code":3952,"language":213,"meta":123,"style":214},"sudo apt install -y php-pear\nsudo pecl install yaml\n",[3954],{"type":164,"tag":217,"props":3955,"children":3956},{"__ignoreMap":123},[3957,3981],{"type":164,"tag":221,"props":3958,"children":3959},{"class":223,"line":40},[3960,3964,3968,3972,3976],{"type":164,"tag":221,"props":3961,"children":3962},{"style":227},[3963],{"type":169,"value":249},{"type":164,"tag":221,"props":3965,"children":3966},{"style":233},[3967],{"type":169,"value":254},{"type":164,"tag":221,"props":3969,"children":3970},{"style":233},[3971],{"type":169,"value":236},{"type":164,"tag":221,"props":3973,"children":3974},{"style":277},[3975],{"type":169,"value":280},{"type":164,"tag":221,"props":3977,"children":3978},{"style":233},[3979],{"type":169,"value":3980}," php-pear\n",{"type":164,"tag":221,"props":3982,"children":3983},{"class":223,"line":32},[3984,3988,3993,3997],{"type":164,"tag":221,"props":3985,"children":3986},{"style":227},[3987],{"type":169,"value":249},{"type":164,"tag":221,"props":3989,"children":3990},{"style":233},[3991],{"type":169,"value":3992}," pecl",{"type":164,"tag":221,"props":3994,"children":3995},{"style":233},[3996],{"type":169,"value":236},{"type":164,"tag":221,"props":3998,"children":3999},{"style":233},[4000],{"type":169,"value":4001}," yaml\n",{"type":164,"tag":165,"props":4003,"children":4004},{},[4005,4007,4013],{"type":169,"value":4006},"В файле ",{"type":164,"tag":217,"props":4008,"children":4010},{"className":4009},[],[4011],{"type":169,"value":4012},"\u002Fetc\u002Fnginx\u002Fnginx.conf",{"type":169,"value":4014}," заменить всё на:",{"type":164,"tag":209,"props":4016,"children":4020},{"className":4017,"code":4018,"language":4019,"meta":123,"style":214},"language-nginx shiki shiki-themes github-light catppuccin-mocha","user www-data;\nworker_processes auto;\npid \u002Frun\u002Fnginx.pid;\ninclude \u002Fetc\u002Fnginx\u002Fmodules-enabled\u002F*.conf;\n\nevents {\n    worker_connections 768;\n    #multi_accept on;\n}\n\nhttp {\n    # >> IP blocks\n    include blockips.conf;\n    # \u003C\u003C IP blocks\n\n    # >> Basic Settings\n    merge_slashes off;\n    sendfile on;\n    tcp_nopush on;\n    tcp_nodelay on;\n    keepalive_timeout 65;\n    types_hash_max_size 2048;\n    client_max_body_size 100M;\n    include \u002Fetc\u002Fnginx\u002Fmime.types;\n    default_type application\u002Foctet-stream;\n    # \u003C\u003C Basic Settings\n\n    # >> SSL Settings\n    ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE\n    ssl_prefer_server_ciphers on;\n    # \u003C\u003C SSL Settings\n\n    # >> Logging Settings\n    access_log \u002Fvar\u002Flog\u002Fnginx\u002Faccess.log;\n    error_log \u002Fvar\u002Flog\u002Fnginx\u002Ferror.log;\n    # \u003C\u003C Logging Settings\n\n    ##\n    # Gzip Settings\n    ##\n    gzip on;\n    gzip_disable \"msie6\";\n    gzip_vary on;\n    gzip_proxied any;\n    gzip_comp_level 6;\n    gzip_buffers 16 8k;\n    gzip_http_version 1.0;\n    gzip_types text\u002Fplain text\u002Fcss application\u002Fjson application\u002Fx-javascript application\u002Fjavascript text\u002Fxml application\u002Fxml application\u002Fxml+rss text\u002Fjavascript;\n\n    # >> Virtual Host Configs\n    include \u002Fetc\u002Fnginx\u002Fconf.d\u002F*.conf;\n    include \u002Fetc\u002Fnginx\u002Fsites-enabled\u002F*;\n    # \u003C\u003C Virtual Host Configs\n}\n","nginx",[4021],{"type":164,"tag":217,"props":4022,"children":4023},{"__ignoreMap":123},[4024,4041,4058,4075,4092,4100,4113,4130,4139,4147,4154,4166,4174,4192,4201,4209,4218,4237,4255,4272,4289,4307,4325,4343,4360,4378,4387,4395,4404,4427,4444,4453,4461,4470,4488,4506,4515,4523,4532,4541,4549,4566,4584,4601,4619,4637,4660,4678,4696,4704,4713,4730,4747,4756],{"type":164,"tag":221,"props":4025,"children":4026},{"class":223,"line":40},[4027,4032,4037],{"type":164,"tag":221,"props":4028,"children":4029},{"style":773},[4030],{"type":169,"value":4031},"user ",{"type":164,"tag":221,"props":4033,"children":4034},{"style":712},[4035],{"type":169,"value":4036},"www-data",{"type":164,"tag":221,"props":4038,"children":4039},{"style":523},[4040],{"type":169,"value":2040},{"type":164,"tag":221,"props":4042,"children":4043},{"class":223,"line":32},[4044,4049,4054],{"type":164,"tag":221,"props":4045,"children":4046},{"style":773},[4047],{"type":169,"value":4048},"worker_processes ",{"type":164,"tag":221,"props":4050,"children":4051},{"style":712},[4052],{"type":169,"value":4053},"auto",{"type":164,"tag":221,"props":4055,"children":4056},{"style":523},[4057],{"type":169,"value":2040},{"type":164,"tag":221,"props":4059,"children":4060},{"class":223,"line":105},[4061,4066,4071],{"type":164,"tag":221,"props":4062,"children":4063},{"style":773},[4064],{"type":169,"value":4065},"pid ",{"type":164,"tag":221,"props":4067,"children":4068},{"style":712},[4069],{"type":169,"value":4070},"\u002Frun\u002Fnginx.pid",{"type":164,"tag":221,"props":4072,"children":4073},{"style":523},[4074],{"type":169,"value":2040},{"type":164,"tag":221,"props":4076,"children":4077},{"class":223,"line":12},[4078,4083,4088],{"type":164,"tag":221,"props":4079,"children":4080},{"style":773},[4081],{"type":169,"value":4082},"include ",{"type":164,"tag":221,"props":4084,"children":4085},{"style":712},[4086],{"type":169,"value":4087},"\u002Fetc\u002Fnginx\u002Fmodules-enabled\u002F*.conf",{"type":164,"tag":221,"props":4089,"children":4090},{"style":523},[4091],{"type":169,"value":2040},{"type":164,"tag":221,"props":4093,"children":4094},{"class":223,"line":156},[4095],{"type":164,"tag":221,"props":4096,"children":4097},{"emptyLinePlaceholder":17},[4098],{"type":169,"value":4099},"\n",{"type":164,"tag":221,"props":4101,"children":4102},{"class":223,"line":135},[4103,4108],{"type":164,"tag":221,"props":4104,"children":4105},{"style":773},[4106],{"type":169,"value":4107},"events",{"type":164,"tag":221,"props":4109,"children":4110},{"style":712},[4111],{"type":169,"value":4112}," {\n",{"type":164,"tag":221,"props":4114,"children":4115},{"class":223,"line":364},[4116,4121,4126],{"type":164,"tag":221,"props":4117,"children":4118},{"style":773},[4119],{"type":169,"value":4120},"    worker_connections ",{"type":164,"tag":221,"props":4122,"children":4123},{"style":1253},[4124],{"type":169,"value":4125},"768",{"type":164,"tag":221,"props":4127,"children":4128},{"style":523},[4129],{"type":169,"value":2040},{"type":164,"tag":221,"props":4131,"children":4132},{"class":223,"line":377},[4133],{"type":164,"tag":221,"props":4134,"children":4136},{"style":4135},"--shiki-default:#6A737D;--shiki-default-font-style:inherit;--shiki-dark:#9399B2;--shiki-dark-font-style:italic",[4137],{"type":169,"value":4138},"    #multi_accept on;\n",{"type":164,"tag":221,"props":4140,"children":4141},{"class":223,"line":980},[4142],{"type":164,"tag":221,"props":4143,"children":4144},{"style":712},[4145],{"type":169,"value":4146},"}\n",{"type":164,"tag":221,"props":4148,"children":4149},{"class":223,"line":1021},[4150],{"type":164,"tag":221,"props":4151,"children":4152},{"emptyLinePlaceholder":17},[4153],{"type":169,"value":4099},{"type":164,"tag":221,"props":4155,"children":4156},{"class":223,"line":1062},[4157,4162],{"type":164,"tag":221,"props":4158,"children":4159},{"style":773},[4160],{"type":169,"value":4161},"http",{"type":164,"tag":221,"props":4163,"children":4164},{"style":712},[4165],{"type":169,"value":4112},{"type":164,"tag":221,"props":4167,"children":4168},{"class":223,"line":1079},[4169],{"type":164,"tag":221,"props":4170,"children":4171},{"style":4135},[4172],{"type":169,"value":4173},"    # >> IP blocks\n",{"type":164,"tag":221,"props":4175,"children":4177},{"class":223,"line":4176},13,[4178,4183,4188],{"type":164,"tag":221,"props":4179,"children":4180},{"style":773},[4181],{"type":169,"value":4182},"    include ",{"type":164,"tag":221,"props":4184,"children":4185},{"style":712},[4186],{"type":169,"value":4187},"blockips.conf",{"type":164,"tag":221,"props":4189,"children":4190},{"style":523},[4191],{"type":169,"value":2040},{"type":164,"tag":221,"props":4193,"children":4195},{"class":223,"line":4194},14,[4196],{"type":164,"tag":221,"props":4197,"children":4198},{"style":4135},[4199],{"type":169,"value":4200},"    # \u003C\u003C IP blocks\n",{"type":164,"tag":221,"props":4202,"children":4204},{"class":223,"line":4203},15,[4205],{"type":164,"tag":221,"props":4206,"children":4207},{"emptyLinePlaceholder":17},[4208],{"type":169,"value":4099},{"type":164,"tag":221,"props":4210,"children":4212},{"class":223,"line":4211},16,[4213],{"type":164,"tag":221,"props":4214,"children":4215},{"style":4135},[4216],{"type":169,"value":4217},"    # >> Basic Settings\n",{"type":164,"tag":221,"props":4219,"children":4221},{"class":223,"line":4220},17,[4222,4227,4233],{"type":164,"tag":221,"props":4223,"children":4224},{"style":773},[4225],{"type":169,"value":4226},"    merge_slashes ",{"type":164,"tag":221,"props":4228,"children":4230},{"style":4229},"--shiki-default:#005CC5;--shiki-dark:#F38BA8",[4231],{"type":169,"value":4232},"off",{"type":164,"tag":221,"props":4234,"children":4235},{"style":523},[4236],{"type":169,"value":2040},{"type":164,"tag":221,"props":4238,"children":4240},{"class":223,"line":4239},18,[4241,4246,4251],{"type":164,"tag":221,"props":4242,"children":4243},{"style":773},[4244],{"type":169,"value":4245},"    sendfile ",{"type":164,"tag":221,"props":4247,"children":4248},{"style":4229},[4249],{"type":169,"value":4250},"on",{"type":164,"tag":221,"props":4252,"children":4253},{"style":523},[4254],{"type":169,"value":2040},{"type":164,"tag":221,"props":4256,"children":4258},{"class":223,"line":4257},19,[4259,4264,4268],{"type":164,"tag":221,"props":4260,"children":4261},{"style":773},[4262],{"type":169,"value":4263},"    tcp_nopush ",{"type":164,"tag":221,"props":4265,"children":4266},{"style":4229},[4267],{"type":169,"value":4250},{"type":164,"tag":221,"props":4269,"children":4270},{"style":523},[4271],{"type":169,"value":2040},{"type":164,"tag":221,"props":4273,"children":4275},{"class":223,"line":4274},20,[4276,4281,4285],{"type":164,"tag":221,"props":4277,"children":4278},{"style":773},[4279],{"type":169,"value":4280},"    tcp_nodelay ",{"type":164,"tag":221,"props":4282,"children":4283},{"style":4229},[4284],{"type":169,"value":4250},{"type":164,"tag":221,"props":4286,"children":4287},{"style":523},[4288],{"type":169,"value":2040},{"type":164,"tag":221,"props":4290,"children":4292},{"class":223,"line":4291},21,[4293,4298,4303],{"type":164,"tag":221,"props":4294,"children":4295},{"style":773},[4296],{"type":169,"value":4297},"    keepalive_timeout ",{"type":164,"tag":221,"props":4299,"children":4300},{"style":1253},[4301],{"type":169,"value":4302},"65",{"type":164,"tag":221,"props":4304,"children":4305},{"style":523},[4306],{"type":169,"value":2040},{"type":164,"tag":221,"props":4308,"children":4310},{"class":223,"line":4309},22,[4311,4316,4321],{"type":164,"tag":221,"props":4312,"children":4313},{"style":773},[4314],{"type":169,"value":4315},"    types_hash_max_size ",{"type":164,"tag":221,"props":4317,"children":4318},{"style":1253},[4319],{"type":169,"value":4320},"2048",{"type":164,"tag":221,"props":4322,"children":4323},{"style":523},[4324],{"type":169,"value":2040},{"type":164,"tag":221,"props":4326,"children":4328},{"class":223,"line":4327},23,[4329,4334,4339],{"type":164,"tag":221,"props":4330,"children":4331},{"style":773},[4332],{"type":169,"value":4333},"    client_max_body_size ",{"type":164,"tag":221,"props":4335,"children":4336},{"style":1253},[4337],{"type":169,"value":4338},"100M",{"type":164,"tag":221,"props":4340,"children":4341},{"style":523},[4342],{"type":169,"value":2040},{"type":164,"tag":221,"props":4344,"children":4346},{"class":223,"line":4345},24,[4347,4351,4356],{"type":164,"tag":221,"props":4348,"children":4349},{"style":773},[4350],{"type":169,"value":4182},{"type":164,"tag":221,"props":4352,"children":4353},{"style":712},[4354],{"type":169,"value":4355},"\u002Fetc\u002Fnginx\u002Fmime.types",{"type":164,"tag":221,"props":4357,"children":4358},{"style":523},[4359],{"type":169,"value":2040},{"type":164,"tag":221,"props":4361,"children":4363},{"class":223,"line":4362},25,[4364,4369,4374],{"type":164,"tag":221,"props":4365,"children":4366},{"style":773},[4367],{"type":169,"value":4368},"    default_type ",{"type":164,"tag":221,"props":4370,"children":4371},{"style":712},[4372],{"type":169,"value":4373},"application\u002Foctet-stream",{"type":164,"tag":221,"props":4375,"children":4376},{"style":523},[4377],{"type":169,"value":2040},{"type":164,"tag":221,"props":4379,"children":4381},{"class":223,"line":4380},26,[4382],{"type":164,"tag":221,"props":4383,"children":4384},{"style":4135},[4385],{"type":169,"value":4386},"    # \u003C\u003C Basic Settings\n",{"type":164,"tag":221,"props":4388,"children":4390},{"class":223,"line":4389},27,[4391],{"type":164,"tag":221,"props":4392,"children":4393},{"emptyLinePlaceholder":17},[4394],{"type":169,"value":4099},{"type":164,"tag":221,"props":4396,"children":4398},{"class":223,"line":4397},28,[4399],{"type":164,"tag":221,"props":4400,"children":4401},{"style":4135},[4402],{"type":169,"value":4403},"    # >> SSL Settings\n",{"type":164,"tag":221,"props":4405,"children":4407},{"class":223,"line":4406},29,[4408,4413,4418,4422],{"type":164,"tag":221,"props":4409,"children":4410},{"style":773},[4411],{"type":169,"value":4412},"    ssl_protocols ",{"type":164,"tag":221,"props":4414,"children":4415},{"style":712},[4416],{"type":169,"value":4417},"TLSv1 TLSv1.1 TLSv1.2",{"type":164,"tag":221,"props":4419,"children":4420},{"style":523},[4421],{"type":169,"value":700},{"type":164,"tag":221,"props":4423,"children":4424},{"style":4135},[4425],{"type":169,"value":4426}," # Dropping SSLv3, ref: POODLE\n",{"type":164,"tag":221,"props":4428,"children":4430},{"class":223,"line":4429},30,[4431,4436,4440],{"type":164,"tag":221,"props":4432,"children":4433},{"style":773},[4434],{"type":169,"value":4435},"    ssl_prefer_server_ciphers ",{"type":164,"tag":221,"props":4437,"children":4438},{"style":4229},[4439],{"type":169,"value":4250},{"type":164,"tag":221,"props":4441,"children":4442},{"style":523},[4443],{"type":169,"value":2040},{"type":164,"tag":221,"props":4445,"children":4447},{"class":223,"line":4446},31,[4448],{"type":164,"tag":221,"props":4449,"children":4450},{"style":4135},[4451],{"type":169,"value":4452},"    # \u003C\u003C SSL Settings\n",{"type":164,"tag":221,"props":4454,"children":4456},{"class":223,"line":4455},32,[4457],{"type":164,"tag":221,"props":4458,"children":4459},{"emptyLinePlaceholder":17},[4460],{"type":169,"value":4099},{"type":164,"tag":221,"props":4462,"children":4464},{"class":223,"line":4463},33,[4465],{"type":164,"tag":221,"props":4466,"children":4467},{"style":4135},[4468],{"type":169,"value":4469},"    # >> Logging Settings\n",{"type":164,"tag":221,"props":4471,"children":4473},{"class":223,"line":4472},34,[4474,4479,4484],{"type":164,"tag":221,"props":4475,"children":4476},{"style":773},[4477],{"type":169,"value":4478},"    access_log ",{"type":164,"tag":221,"props":4480,"children":4481},{"style":712},[4482],{"type":169,"value":4483},"\u002Fvar\u002Flog\u002Fnginx\u002Faccess.log",{"type":164,"tag":221,"props":4485,"children":4486},{"style":523},[4487],{"type":169,"value":2040},{"type":164,"tag":221,"props":4489,"children":4491},{"class":223,"line":4490},35,[4492,4497,4502],{"type":164,"tag":221,"props":4493,"children":4494},{"style":773},[4495],{"type":169,"value":4496},"    error_log ",{"type":164,"tag":221,"props":4498,"children":4499},{"style":712},[4500],{"type":169,"value":4501},"\u002Fvar\u002Flog\u002Fnginx\u002Ferror.log",{"type":164,"tag":221,"props":4503,"children":4504},{"style":523},[4505],{"type":169,"value":2040},{"type":164,"tag":221,"props":4507,"children":4509},{"class":223,"line":4508},36,[4510],{"type":164,"tag":221,"props":4511,"children":4512},{"style":4135},[4513],{"type":169,"value":4514},"    # \u003C\u003C Logging Settings\n",{"type":164,"tag":221,"props":4516,"children":4518},{"class":223,"line":4517},37,[4519],{"type":164,"tag":221,"props":4520,"children":4521},{"emptyLinePlaceholder":17},[4522],{"type":169,"value":4099},{"type":164,"tag":221,"props":4524,"children":4526},{"class":223,"line":4525},38,[4527],{"type":164,"tag":221,"props":4528,"children":4529},{"style":4135},[4530],{"type":169,"value":4531},"    ##\n",{"type":164,"tag":221,"props":4533,"children":4535},{"class":223,"line":4534},39,[4536],{"type":164,"tag":221,"props":4537,"children":4538},{"style":4135},[4539],{"type":169,"value":4540},"    # Gzip Settings\n",{"type":164,"tag":221,"props":4542,"children":4544},{"class":223,"line":4543},40,[4545],{"type":164,"tag":221,"props":4546,"children":4547},{"style":4135},[4548],{"type":169,"value":4531},{"type":164,"tag":221,"props":4550,"children":4552},{"class":223,"line":4551},41,[4553,4558,4562],{"type":164,"tag":221,"props":4554,"children":4555},{"style":773},[4556],{"type":169,"value":4557},"    gzip ",{"type":164,"tag":221,"props":4559,"children":4560},{"style":4229},[4561],{"type":169,"value":4250},{"type":164,"tag":221,"props":4563,"children":4564},{"style":523},[4565],{"type":169,"value":2040},{"type":164,"tag":221,"props":4567,"children":4569},{"class":223,"line":4568},42,[4570,4575,4580],{"type":164,"tag":221,"props":4571,"children":4572},{"style":773},[4573],{"type":169,"value":4574},"    gzip_disable ",{"type":164,"tag":221,"props":4576,"children":4577},{"style":233},[4578],{"type":169,"value":4579},"\"msie6\"",{"type":164,"tag":221,"props":4581,"children":4582},{"style":523},[4583],{"type":169,"value":2040},{"type":164,"tag":221,"props":4585,"children":4587},{"class":223,"line":4586},43,[4588,4593,4597],{"type":164,"tag":221,"props":4589,"children":4590},{"style":773},[4591],{"type":169,"value":4592},"    gzip_vary ",{"type":164,"tag":221,"props":4594,"children":4595},{"style":4229},[4596],{"type":169,"value":4250},{"type":164,"tag":221,"props":4598,"children":4599},{"style":523},[4600],{"type":169,"value":2040},{"type":164,"tag":221,"props":4602,"children":4604},{"class":223,"line":4603},44,[4605,4610,4615],{"type":164,"tag":221,"props":4606,"children":4607},{"style":773},[4608],{"type":169,"value":4609},"    gzip_proxied ",{"type":164,"tag":221,"props":4611,"children":4612},{"style":712},[4613],{"type":169,"value":4614},"any",{"type":164,"tag":221,"props":4616,"children":4617},{"style":523},[4618],{"type":169,"value":2040},{"type":164,"tag":221,"props":4620,"children":4622},{"class":223,"line":4621},45,[4623,4628,4633],{"type":164,"tag":221,"props":4624,"children":4625},{"style":773},[4626],{"type":169,"value":4627},"    gzip_comp_level ",{"type":164,"tag":221,"props":4629,"children":4630},{"style":1253},[4631],{"type":169,"value":4632},"6",{"type":164,"tag":221,"props":4634,"children":4635},{"style":523},[4636],{"type":169,"value":2040},{"type":164,"tag":221,"props":4638,"children":4640},{"class":223,"line":4639},46,[4641,4646,4651,4656],{"type":164,"tag":221,"props":4642,"children":4643},{"style":773},[4644],{"type":169,"value":4645},"    gzip_buffers ",{"type":164,"tag":221,"props":4647,"children":4648},{"style":1253},[4649],{"type":169,"value":4650},"16",{"type":164,"tag":221,"props":4652,"children":4653},{"style":1253},[4654],{"type":169,"value":4655}," 8k",{"type":164,"tag":221,"props":4657,"children":4658},{"style":523},[4659],{"type":169,"value":2040},{"type":164,"tag":221,"props":4661,"children":4663},{"class":223,"line":4662},47,[4664,4669,4674],{"type":164,"tag":221,"props":4665,"children":4666},{"style":773},[4667],{"type":169,"value":4668},"    gzip_http_version ",{"type":164,"tag":221,"props":4670,"children":4671},{"style":1253},[4672],{"type":169,"value":4673},"1.0",{"type":164,"tag":221,"props":4675,"children":4676},{"style":523},[4677],{"type":169,"value":2040},{"type":164,"tag":221,"props":4679,"children":4681},{"class":223,"line":4680},48,[4682,4687,4692],{"type":164,"tag":221,"props":4683,"children":4684},{"style":773},[4685],{"type":169,"value":4686},"    gzip_types ",{"type":164,"tag":221,"props":4688,"children":4689},{"style":712},[4690],{"type":169,"value":4691},"text\u002Fplain text\u002Fcss application\u002Fjson application\u002Fx-javascript application\u002Fjavascript text\u002Fxml application\u002Fxml application\u002Fxml+rss text\u002Fjavascript",{"type":164,"tag":221,"props":4693,"children":4694},{"style":523},[4695],{"type":169,"value":2040},{"type":164,"tag":221,"props":4697,"children":4699},{"class":223,"line":4698},49,[4700],{"type":164,"tag":221,"props":4701,"children":4702},{"emptyLinePlaceholder":17},[4703],{"type":169,"value":4099},{"type":164,"tag":221,"props":4705,"children":4707},{"class":223,"line":4706},50,[4708],{"type":164,"tag":221,"props":4709,"children":4710},{"style":4135},[4711],{"type":169,"value":4712},"    # >> Virtual Host Configs\n",{"type":164,"tag":221,"props":4714,"children":4716},{"class":223,"line":4715},51,[4717,4721,4726],{"type":164,"tag":221,"props":4718,"children":4719},{"style":773},[4720],{"type":169,"value":4182},{"type":164,"tag":221,"props":4722,"children":4723},{"style":712},[4724],{"type":169,"value":4725},"\u002Fetc\u002Fnginx\u002Fconf.d\u002F*.conf",{"type":164,"tag":221,"props":4727,"children":4728},{"style":523},[4729],{"type":169,"value":2040},{"type":164,"tag":221,"props":4731,"children":4733},{"class":223,"line":4732},52,[4734,4738,4743],{"type":164,"tag":221,"props":4735,"children":4736},{"style":773},[4737],{"type":169,"value":4182},{"type":164,"tag":221,"props":4739,"children":4740},{"style":712},[4741],{"type":169,"value":4742},"\u002Fetc\u002Fnginx\u002Fsites-enabled\u002F*",{"type":164,"tag":221,"props":4744,"children":4745},{"style":523},[4746],{"type":169,"value":2040},{"type":164,"tag":221,"props":4748,"children":4750},{"class":223,"line":4749},53,[4751],{"type":164,"tag":221,"props":4752,"children":4753},{"style":4135},[4754],{"type":169,"value":4755},"    # \u003C\u003C Virtual Host Configs\n",{"type":164,"tag":221,"props":4757,"children":4759},{"class":223,"line":4758},54,[4760],{"type":164,"tag":221,"props":4761,"children":4762},{"style":712},[4763],{"type":169,"value":4146},{"type":164,"tag":165,"props":4765,"children":4766},{},[4767],{"type":169,"value":4768},"Командуем:",{"type":164,"tag":209,"props":4770,"children":4772},{"className":211,"code":4771,"language":213,"meta":123,"style":214},"sudo nginx -t\nsudo service nginx reload\n",[4773],{"type":164,"tag":217,"props":4774,"children":4775},{"__ignoreMap":123},[4776,4791],{"type":164,"tag":221,"props":4777,"children":4778},{"class":223,"line":40},[4779,4783,4787],{"type":164,"tag":221,"props":4780,"children":4781},{"style":227},[4782],{"type":169,"value":249},{"type":164,"tag":221,"props":4784,"children":4785},{"style":233},[4786],{"type":169,"value":3813},{"type":164,"tag":221,"props":4788,"children":4789},{"style":277},[4790],{"type":169,"value":3818},{"type":164,"tag":221,"props":4792,"children":4793},{"class":223,"line":32},[4794,4798,4802,4806],{"type":164,"tag":221,"props":4795,"children":4796},{"style":227},[4797],{"type":169,"value":249},{"type":164,"tag":221,"props":4799,"children":4800},{"style":233},[4801],{"type":169,"value":1089},{"type":164,"tag":221,"props":4803,"children":4804},{"style":233},[4805],{"type":169,"value":3813},{"type":164,"tag":221,"props":4807,"children":4808},{"style":233},[4809],{"type":169,"value":3838},{"type":164,"tag":165,"props":4811,"children":4812},{},[4813,4815,4821,4823,4829,4831,4837],{"type":169,"value":4814},"В файлах ",{"type":164,"tag":217,"props":4816,"children":4818},{"className":4817},[],[4819],{"type":169,"value":4820},"\u002Fetc\u002Fphp\u002F{version}\u002Fcli\u002Fphp.ini",{"type":169,"value":4822}," и ",{"type":164,"tag":217,"props":4824,"children":4826},{"className":4825},[],[4827],{"type":169,"value":4828},"\u002Fetc\u002Fphp\u002F{version}\u002Ffpm\u002Fphp.ini",{"type":169,"value":4830}," раскомментировать параметр ",{"type":164,"tag":217,"props":4832,"children":4834},{"className":4833},[],[4835],{"type":169,"value":4836},"date.timezone",{"type":169,"value":4838}," и установить значение:",{"type":164,"tag":209,"props":4840,"children":4842},{"className":211,"code":4841,"language":213,"meta":123,"style":214},"php_timezone='Europe\\\u002FMoscow'; \\\nfor version in `ls -F1 \u002Fetc\u002Fphp\u002F | grep -e .\u002F | tr -d \\\u002F`; do \\\n    if [ -f \"\u002Fetc\u002Fphp\u002F${version}\u002Ffpm\u002Fphp.ini\" ]; then \\\n        sed -ri 's\u002F^;?(date\\.timezone =).*$\u002F\\1 '${php_timezone}'\u002F' \u002Fetc\u002Fphp\u002F$version\u002Ffpm\u002Fphp.ini; \\\n    fi; \\\n    if [ -f \"\u002Fetc\u002Fphp\u002F${version}\u002Fcli\u002Fphp.ini\" ]; then \\\n        sed -ri 's\u002F^;?(date\\.timezone =).*$\u002F\\1 '${php_timezone}'\u002F' \u002Fetc\u002Fphp\u002F$version\u002Fcli\u002Fphp.ini; \\\n    fi; \\\ndone\n",[4843],{"type":164,"tag":217,"props":4844,"children":4845},{"__ignoreMap":123},[4846,4871,4966,5023,5073,5089,5137,5181,5196],{"type":164,"tag":221,"props":4847,"children":4848},{"class":223,"line":40},[4849,4854,4858,4863,4867],{"type":164,"tag":221,"props":4850,"children":4851},{"style":712},[4852],{"type":169,"value":4853},"php_timezone",{"type":164,"tag":221,"props":4855,"children":4856},{"style":353},[4857],{"type":169,"value":720},{"type":164,"tag":221,"props":4859,"children":4860},{"style":233},[4861],{"type":169,"value":4862},"'Europe\\\u002FMoscow'",{"type":164,"tag":221,"props":4864,"children":4865},{"style":523},[4866],{"type":169,"value":700},{"type":164,"tag":221,"props":4868,"children":4869},{"style":703},[4870],{"type":169,"value":706},{"type":164,"tag":221,"props":4872,"children":4873},{"class":223,"line":32},[4874,4879,4884,4889,4895,4900,4905,4910,4915,4919,4924,4929,4933,4938,4943,4948,4953,4957,4962],{"type":164,"tag":221,"props":4875,"children":4876},{"style":773},[4877],{"type":169,"value":4878},"for",{"type":164,"tag":221,"props":4880,"children":4881},{"style":712},[4882],{"type":169,"value":4883}," version ",{"type":164,"tag":221,"props":4885,"children":4886},{"style":773},[4887],{"type":169,"value":4888},"in",{"type":164,"tag":221,"props":4890,"children":4892},{"style":4891},"--shiki-default:#032F62;--shiki-dark:#94E2D5",[4893],{"type":169,"value":4894}," `",{"type":164,"tag":221,"props":4896,"children":4897},{"style":227},[4898],{"type":169,"value":4899},"ls",{"type":164,"tag":221,"props":4901,"children":4902},{"style":277},[4903],{"type":169,"value":4904}," -F1",{"type":164,"tag":221,"props":4906,"children":4907},{"style":233},[4908],{"type":169,"value":4909}," \u002Fetc\u002Fphp\u002F ",{"type":164,"tag":221,"props":4911,"children":4912},{"style":353},[4913],{"type":169,"value":4914},"|",{"type":164,"tag":221,"props":4916,"children":4917},{"style":227},[4918],{"type":169,"value":786},{"type":164,"tag":221,"props":4920,"children":4921},{"style":277},[4922],{"type":169,"value":4923}," -e",{"type":164,"tag":221,"props":4925,"children":4926},{"style":233},[4927],{"type":169,"value":4928}," .\u002F ",{"type":164,"tag":221,"props":4930,"children":4931},{"style":353},[4932],{"type":169,"value":4914},{"type":164,"tag":221,"props":4934,"children":4935},{"style":227},[4936],{"type":169,"value":4937}," tr",{"type":164,"tag":221,"props":4939,"children":4940},{"style":277},[4941],{"type":169,"value":4942}," -d",{"type":164,"tag":221,"props":4944,"children":4945},{"style":703},[4946],{"type":169,"value":4947}," \\\u002F",{"type":164,"tag":221,"props":4949,"children":4950},{"style":4891},[4951],{"type":169,"value":4952},"`",{"type":164,"tag":221,"props":4954,"children":4955},{"style":523},[4956],{"type":169,"value":700},{"type":164,"tag":221,"props":4958,"children":4959},{"style":773},[4960],{"type":169,"value":4961}," do",{"type":164,"tag":221,"props":4963,"children":4964},{"style":703},[4965],{"type":169,"value":706},{"type":164,"tag":221,"props":4967,"children":4968},{"class":223,"line":105},[4969,4974,4979,4984,4989,4995,5000,5005,5010,5015,5019],{"type":164,"tag":221,"props":4970,"children":4971},{"style":773},[4972],{"type":169,"value":4973},"    if",{"type":164,"tag":221,"props":4975,"children":4976},{"style":523},[4977],{"type":169,"value":4978}," [",{"type":164,"tag":221,"props":4980,"children":4981},{"style":353},[4982],{"type":169,"value":4983}," -f",{"type":164,"tag":221,"props":4985,"children":4986},{"style":233},[4987],{"type":169,"value":4988}," \"\u002Fetc\u002Fphp\u002F",{"type":164,"tag":221,"props":4990,"children":4992},{"style":4991},"--shiki-default:#032F62;--shiki-dark:#CDD6F4",[4993],{"type":169,"value":4994},"${",{"type":164,"tag":221,"props":4996,"children":4997},{"style":712},[4998],{"type":169,"value":4999},"version",{"type":164,"tag":221,"props":5001,"children":5002},{"style":4991},[5003],{"type":169,"value":5004},"}",{"type":164,"tag":221,"props":5006,"children":5007},{"style":233},[5008],{"type":169,"value":5009},"\u002Ffpm\u002Fphp.ini\"",{"type":164,"tag":221,"props":5011,"children":5012},{"style":523},[5013],{"type":169,"value":5014}," ];",{"type":164,"tag":221,"props":5016,"children":5017},{"style":773},[5018],{"type":169,"value":809},{"type":164,"tag":221,"props":5020,"children":5021},{"style":703},[5022],{"type":169,"value":706},{"type":164,"tag":221,"props":5024,"children":5025},{"class":223,"line":12},[5026,5031,5035,5040,5045,5050,5055,5060,5065,5069],{"type":164,"tag":221,"props":5027,"children":5028},{"style":227},[5029],{"type":169,"value":5030},"        sed",{"type":164,"tag":221,"props":5032,"children":5033},{"style":277},[5034],{"type":169,"value":749},{"type":164,"tag":221,"props":5036,"children":5037},{"style":233},[5038],{"type":169,"value":5039}," 's\u002F^;?(date\\.timezone =).*$\u002F\\1 '",{"type":164,"tag":221,"props":5041,"children":5042},{"style":712},[5043],{"type":169,"value":5044},"${php_timezone}",{"type":164,"tag":221,"props":5046,"children":5047},{"style":233},[5048],{"type":169,"value":5049},"'\u002F'",{"type":164,"tag":221,"props":5051,"children":5052},{"style":233},[5053],{"type":169,"value":5054}," \u002Fetc\u002Fphp\u002F",{"type":164,"tag":221,"props":5056,"children":5057},{"style":712},[5058],{"type":169,"value":5059},"$version",{"type":164,"tag":221,"props":5061,"children":5062},{"style":233},[5063],{"type":169,"value":5064},"\u002Ffpm\u002Fphp.ini",{"type":164,"tag":221,"props":5066,"children":5067},{"style":523},[5068],{"type":169,"value":700},{"type":164,"tag":221,"props":5070,"children":5071},{"style":703},[5072],{"type":169,"value":706},{"type":164,"tag":221,"props":5074,"children":5075},{"class":223,"line":156},[5076,5081,5085],{"type":164,"tag":221,"props":5077,"children":5078},{"style":227},[5079],{"type":169,"value":5080},"    fi",{"type":164,"tag":221,"props":5082,"children":5083},{"style":523},[5084],{"type":169,"value":700},{"type":164,"tag":221,"props":5086,"children":5087},{"style":703},[5088],{"type":169,"value":706},{"type":164,"tag":221,"props":5090,"children":5091},{"class":223,"line":135},[5092,5096,5100,5104,5108,5112,5116,5120,5125,5129,5133],{"type":164,"tag":221,"props":5093,"children":5094},{"style":773},[5095],{"type":169,"value":4973},{"type":164,"tag":221,"props":5097,"children":5098},{"style":523},[5099],{"type":169,"value":4978},{"type":164,"tag":221,"props":5101,"children":5102},{"style":353},[5103],{"type":169,"value":4983},{"type":164,"tag":221,"props":5105,"children":5106},{"style":233},[5107],{"type":169,"value":4988},{"type":164,"tag":221,"props":5109,"children":5110},{"style":4991},[5111],{"type":169,"value":4994},{"type":164,"tag":221,"props":5113,"children":5114},{"style":712},[5115],{"type":169,"value":4999},{"type":164,"tag":221,"props":5117,"children":5118},{"style":4991},[5119],{"type":169,"value":5004},{"type":164,"tag":221,"props":5121,"children":5122},{"style":233},[5123],{"type":169,"value":5124},"\u002Fcli\u002Fphp.ini\"",{"type":164,"tag":221,"props":5126,"children":5127},{"style":523},[5128],{"type":169,"value":5014},{"type":164,"tag":221,"props":5130,"children":5131},{"style":773},[5132],{"type":169,"value":809},{"type":164,"tag":221,"props":5134,"children":5135},{"style":703},[5136],{"type":169,"value":706},{"type":164,"tag":221,"props":5138,"children":5139},{"class":223,"line":364},[5140,5144,5148,5152,5156,5160,5164,5168,5173,5177],{"type":164,"tag":221,"props":5141,"children":5142},{"style":227},[5143],{"type":169,"value":5030},{"type":164,"tag":221,"props":5145,"children":5146},{"style":277},[5147],{"type":169,"value":749},{"type":164,"tag":221,"props":5149,"children":5150},{"style":233},[5151],{"type":169,"value":5039},{"type":164,"tag":221,"props":5153,"children":5154},{"style":712},[5155],{"type":169,"value":5044},{"type":164,"tag":221,"props":5157,"children":5158},{"style":233},[5159],{"type":169,"value":5049},{"type":164,"tag":221,"props":5161,"children":5162},{"style":233},[5163],{"type":169,"value":5054},{"type":164,"tag":221,"props":5165,"children":5166},{"style":712},[5167],{"type":169,"value":5059},{"type":164,"tag":221,"props":5169,"children":5170},{"style":233},[5171],{"type":169,"value":5172},"\u002Fcli\u002Fphp.ini",{"type":164,"tag":221,"props":5174,"children":5175},{"style":523},[5176],{"type":169,"value":700},{"type":164,"tag":221,"props":5178,"children":5179},{"style":703},[5180],{"type":169,"value":706},{"type":164,"tag":221,"props":5182,"children":5183},{"class":223,"line":377},[5184,5188,5192],{"type":164,"tag":221,"props":5185,"children":5186},{"style":227},[5187],{"type":169,"value":5080},{"type":164,"tag":221,"props":5189,"children":5190},{"style":523},[5191],{"type":169,"value":700},{"type":164,"tag":221,"props":5193,"children":5194},{"style":703},[5195],{"type":169,"value":706},{"type":164,"tag":221,"props":5197,"children":5198},{"class":223,"line":980},[5199],{"type":164,"tag":221,"props":5200,"children":5201},{"style":773},[5202],{"type":169,"value":5203},"done\n",{"type":164,"tag":2552,"props":5205,"children":5206},{},[5207],{"type":164,"tag":165,"props":5208,"children":5209},{},[5210,5212,5218,5220,5226,5228,5234,5236,5239],{"type":169,"value":5211},"Также, возможно придется добавить модуль yaml в php конфиг, если в папке  ",{"type":164,"tag":217,"props":5213,"children":5215},{"className":5214},[],[5216],{"type":169,"value":5217},".\u002Ffpm\u002Fconf.d",{"type":169,"value":5219},"  и  ",{"type":164,"tag":217,"props":5221,"children":5223},{"className":5222},[],[5224],{"type":169,"value":5225},".\u002Fcli\u002Fconf.d",{"type":169,"value":5227},"  нет файла  ",{"type":164,"tag":217,"props":5229,"children":5231},{"className":5230},[],[5232],{"type":169,"value":5233},"20-yaml.ini",{"type":169,"value":5235}," . Для этого добавим строку рядом с другими подобными:",{"type":164,"tag":2584,"props":5237,"children":5238},{},[],{"type":164,"tag":217,"props":5240,"children":5242},{"className":5241},[],[5243],{"type":169,"value":5244},"extension=yaml.so",{"type":164,"tag":165,"props":5246,"children":5247},{},[5248],{"type":169,"value":4768},{"type":164,"tag":209,"props":5250,"children":5252},{"className":211,"code":5251,"language":213,"meta":123,"style":214},"sudo service php7.0-fpm restart && sudo service php7.1-fpm restart && sudo service php7.2-fpm restart && sudo service php7.3-fpm restart && sudo service php7.4-fpm restart\nsudo service php8.0-fpm restart && sudo service php8.1-fpm restart && sudo service php8.2-fpm restart && sudo service php8.3-fpm restart && sudo service php8.4-fpm restart\n",[5253],{"type":164,"tag":217,"props":5254,"children":5255},{"__ignoreMap":123},[5256,5355],{"type":164,"tag":221,"props":5257,"children":5258},{"class":223,"line":40},[5259,5263,5267,5271,5275,5279,5283,5287,5291,5295,5299,5303,5307,5311,5315,5319,5323,5327,5331,5335,5339,5343,5347,5351],{"type":164,"tag":221,"props":5260,"children":5261},{"style":227},[5262],{"type":169,"value":249},{"type":164,"tag":221,"props":5264,"children":5265},{"style":233},[5266],{"type":169,"value":1089},{"type":164,"tag":221,"props":5268,"children":5269},{"style":233},[5270],{"type":169,"value":2665},{"type":164,"tag":221,"props":5272,"children":5273},{"style":233},[5274],{"type":169,"value":2304},{"type":164,"tag":221,"props":5276,"children":5277},{"style":523},[5278],{"type":169,"value":526},{"type":164,"tag":221,"props":5280,"children":5281},{"style":227},[5282],{"type":169,"value":531},{"type":164,"tag":221,"props":5284,"children":5285},{"style":233},[5286],{"type":169,"value":1089},{"type":164,"tag":221,"props":5288,"children":5289},{"style":233},[5290],{"type":169,"value":2763},{"type":164,"tag":221,"props":5292,"children":5293},{"style":233},[5294],{"type":169,"value":2304},{"type":164,"tag":221,"props":5296,"children":5297},{"style":523},[5298],{"type":169,"value":526},{"type":164,"tag":221,"props":5300,"children":5301},{"style":227},[5302],{"type":169,"value":531},{"type":164,"tag":221,"props":5304,"children":5305},{"style":233},[5306],{"type":169,"value":1089},{"type":164,"tag":221,"props":5308,"children":5309},{"style":233},[5310],{"type":169,"value":2855},{"type":164,"tag":221,"props":5312,"children":5313},{"style":233},[5314],{"type":169,"value":2304},{"type":164,"tag":221,"props":5316,"children":5317},{"style":523},[5318],{"type":169,"value":526},{"type":164,"tag":221,"props":5320,"children":5321},{"style":227},[5322],{"type":169,"value":531},{"type":164,"tag":221,"props":5324,"children":5325},{"style":233},[5326],{"type":169,"value":1089},{"type":164,"tag":221,"props":5328,"children":5329},{"style":233},[5330],{"type":169,"value":2947},{"type":164,"tag":221,"props":5332,"children":5333},{"style":233},[5334],{"type":169,"value":2304},{"type":164,"tag":221,"props":5336,"children":5337},{"style":523},[5338],{"type":169,"value":526},{"type":164,"tag":221,"props":5340,"children":5341},{"style":227},[5342],{"type":169,"value":531},{"type":164,"tag":221,"props":5344,"children":5345},{"style":233},[5346],{"type":169,"value":1089},{"type":164,"tag":221,"props":5348,"children":5349},{"style":233},[5350],{"type":169,"value":3039},{"type":164,"tag":221,"props":5352,"children":5353},{"style":233},[5354],{"type":169,"value":1099},{"type":164,"tag":221,"props":5356,"children":5357},{"class":223,"line":32},[5358,5362,5366,5370,5374,5378,5382,5386,5390,5394,5398,5402,5406,5410,5414,5418,5422,5426,5430,5434,5438,5442,5446,5450],{"type":164,"tag":221,"props":5359,"children":5360},{"style":227},[5361],{"type":169,"value":249},{"type":164,"tag":221,"props":5363,"children":5364},{"style":233},[5365],{"type":169,"value":1089},{"type":164,"tag":221,"props":5367,"children":5368},{"style":233},[5369],{"type":169,"value":3135},{"type":164,"tag":221,"props":5371,"children":5372},{"style":233},[5373],{"type":169,"value":2304},{"type":164,"tag":221,"props":5375,"children":5376},{"style":523},[5377],{"type":169,"value":526},{"type":164,"tag":221,"props":5379,"children":5380},{"style":227},[5381],{"type":169,"value":531},{"type":164,"tag":221,"props":5383,"children":5384},{"style":233},[5385],{"type":169,"value":1089},{"type":164,"tag":221,"props":5387,"children":5388},{"style":233},[5389],{"type":169,"value":3226},{"type":164,"tag":221,"props":5391,"children":5392},{"style":233},[5393],{"type":169,"value":2304},{"type":164,"tag":221,"props":5395,"children":5396},{"style":523},[5397],{"type":169,"value":526},{"type":164,"tag":221,"props":5399,"children":5400},{"style":227},[5401],{"type":169,"value":531},{"type":164,"tag":221,"props":5403,"children":5404},{"style":233},[5405],{"type":169,"value":1089},{"type":164,"tag":221,"props":5407,"children":5408},{"style":233},[5409],{"type":169,"value":3313},{"type":164,"tag":221,"props":5411,"children":5412},{"style":233},[5413],{"type":169,"value":2304},{"type":164,"tag":221,"props":5415,"children":5416},{"style":523},[5417],{"type":169,"value":526},{"type":164,"tag":221,"props":5419,"children":5420},{"style":227},[5421],{"type":169,"value":531},{"type":164,"tag":221,"props":5423,"children":5424},{"style":233},[5425],{"type":169,"value":1089},{"type":164,"tag":221,"props":5427,"children":5428},{"style":233},[5429],{"type":169,"value":3400},{"type":164,"tag":221,"props":5431,"children":5432},{"style":233},[5433],{"type":169,"value":2304},{"type":164,"tag":221,"props":5435,"children":5436},{"style":523},[5437],{"type":169,"value":526},{"type":164,"tag":221,"props":5439,"children":5440},{"style":227},[5441],{"type":169,"value":531},{"type":164,"tag":221,"props":5443,"children":5444},{"style":233},[5445],{"type":169,"value":1089},{"type":164,"tag":221,"props":5447,"children":5448},{"style":233},[5449],{"type":169,"value":3487},{"type":164,"tag":221,"props":5451,"children":5452},{"style":233},[5453],{"type":169,"value":1099},{"type":164,"tag":165,"props":5455,"children":5456},{},[5457,5459],{"type":169,"value":5458},"Composer глобально:\n",{"type":164,"tag":217,"props":5460,"children":5462},{"className":5461},[],[5463],{"type":169,"value":5464},"curl -sS https:\u002F\u002Fgetcomposer.org\u002Finstaller -o composer-setup.php && sudo php composer-setup.php --install-dir=\u002Fusr\u002Flocal\u002Fbin --filename=composer && rm composer-setup.php",{"type":164,"tag":171,"props":5466,"children":5468},{"id":5467},"даймон-для-хост-панельки",[5469],{"type":169,"value":5470},"Даймон для хост-панельки",{"type":164,"tag":165,"props":5472,"children":5473},{},[5474,5481,5483,5489,5491,5497,5498,5504],{"type":164,"tag":183,"props":5475,"children":5478},{"href":5476,"rel":5477},"https:\u002F\u002Fgithub.com\u002Fgvozdb\u002FmodxPanelDaemon",[187],[5479],{"type":169,"value":5480},"Качаем",{"type":169,"value":5482},", располагаем в директории ",{"type":164,"tag":217,"props":5484,"children":5486},{"className":5485},[],[5487],{"type":169,"value":5488},"\u002Froot\u002Fscripts\u002Fpy\u002Fmodxpaneldaemon\u002F",{"type":169,"value":5490},", создаем папки ",{"type":164,"tag":217,"props":5492,"children":5494},{"className":5493},[],[5495],{"type":169,"value":5496},"log",{"type":169,"value":4822},{"type":164,"tag":217,"props":5499,"children":5501},{"className":5500},[],[5502],{"type":169,"value":5503},"tmp",{"type":169,"value":5505}," в директории даймона:",{"type":164,"tag":209,"props":5507,"children":5509},{"className":211,"code":5508,"language":213,"meta":123,"style":214},"mkdir -p \u002Froot\u002Fscripts\u002Fpy\u002F \\\n&& curl -L -o modxpaneldaemon.zip \"https:\u002F\u002Fgithub.com\u002Fgvozdb\u002FmodxPanelDaemon\u002Farchive\u002Fmaster.zip\" \\\n&& unzip modxpaneldaemon.zip -d \"\u002Froot\u002Fscripts\u002Fpy\u002F\" \\\n&& mv \u002Froot\u002Fscripts\u002Fpy\u002FmodxPanelDaemon-master \u002Froot\u002Fscripts\u002Fpy\u002Fmodxpaneldaemon \\\n&& rm -f modxpaneldaemon.zip \\\n&& mkdir \u002Froot\u002Fscripts\u002Fpy\u002Fmodxpaneldaemon\u002Flog\u002F \\\n&& mkdir \u002Froot\u002Fscripts\u002Fpy\u002Fmodxpaneldaemon\u002Ftmp\u002F\n",[5510],{"type":164,"tag":217,"props":5511,"children":5512},{"__ignoreMap":123},[5513,5535,5569,5598,5624,5648,5668],{"type":164,"tag":221,"props":5514,"children":5515},{"class":223,"line":40},[5516,5521,5526,5531],{"type":164,"tag":221,"props":5517,"children":5518},{"style":227},[5519],{"type":169,"value":5520},"mkdir",{"type":164,"tag":221,"props":5522,"children":5523},{"style":277},[5524],{"type":169,"value":5525}," -p",{"type":164,"tag":221,"props":5527,"children":5528},{"style":233},[5529],{"type":169,"value":5530}," \u002Froot\u002Fscripts\u002Fpy\u002F",{"type":164,"tag":221,"props":5532,"children":5533},{"style":703},[5534],{"type":169,"value":706},{"type":164,"tag":221,"props":5536,"children":5537},{"class":223,"line":32},[5538,5542,5546,5551,5555,5560,5565],{"type":164,"tag":221,"props":5539,"children":5540},{"style":523},[5541],{"type":169,"value":2742},{"type":164,"tag":221,"props":5543,"children":5544},{"style":227},[5545],{"type":169,"value":1595},{"type":164,"tag":221,"props":5547,"children":5548},{"style":277},[5549],{"type":169,"value":5550}," -L",{"type":164,"tag":221,"props":5552,"children":5553},{"style":277},[5554],{"type":169,"value":515},{"type":164,"tag":221,"props":5556,"children":5557},{"style":233},[5558],{"type":169,"value":5559}," modxpaneldaemon.zip",{"type":164,"tag":221,"props":5561,"children":5562},{"style":233},[5563],{"type":169,"value":5564}," \"https:\u002F\u002Fgithub.com\u002Fgvozdb\u002FmodxPanelDaemon\u002Farchive\u002Fmaster.zip\"",{"type":164,"tag":221,"props":5566,"children":5567},{"style":703},[5568],{"type":169,"value":706},{"type":164,"tag":221,"props":5570,"children":5571},{"class":223,"line":105},[5572,5576,5581,5585,5589,5594],{"type":164,"tag":221,"props":5573,"children":5574},{"style":523},[5575],{"type":169,"value":2742},{"type":164,"tag":221,"props":5577,"children":5578},{"style":227},[5579],{"type":169,"value":5580}," unzip",{"type":164,"tag":221,"props":5582,"children":5583},{"style":233},[5584],{"type":169,"value":5559},{"type":164,"tag":221,"props":5586,"children":5587},{"style":277},[5588],{"type":169,"value":4942},{"type":164,"tag":221,"props":5590,"children":5591},{"style":233},[5592],{"type":169,"value":5593}," \"\u002Froot\u002Fscripts\u002Fpy\u002F\"",{"type":164,"tag":221,"props":5595,"children":5596},{"style":703},[5597],{"type":169,"value":706},{"type":164,"tag":221,"props":5599,"children":5600},{"class":223,"line":12},[5601,5605,5610,5615,5620],{"type":164,"tag":221,"props":5602,"children":5603},{"style":523},[5604],{"type":169,"value":2742},{"type":164,"tag":221,"props":5606,"children":5607},{"style":227},[5608],{"type":169,"value":5609}," mv",{"type":164,"tag":221,"props":5611,"children":5612},{"style":233},[5613],{"type":169,"value":5614}," \u002Froot\u002Fscripts\u002Fpy\u002FmodxPanelDaemon-master",{"type":164,"tag":221,"props":5616,"children":5617},{"style":233},[5618],{"type":169,"value":5619}," \u002Froot\u002Fscripts\u002Fpy\u002Fmodxpaneldaemon",{"type":164,"tag":221,"props":5621,"children":5622},{"style":703},[5623],{"type":169,"value":706},{"type":164,"tag":221,"props":5625,"children":5626},{"class":223,"line":156},[5627,5631,5636,5640,5644],{"type":164,"tag":221,"props":5628,"children":5629},{"style":523},[5630],{"type":169,"value":2742},{"type":164,"tag":221,"props":5632,"children":5633},{"style":227},[5634],{"type":169,"value":5635}," rm",{"type":164,"tag":221,"props":5637,"children":5638},{"style":277},[5639],{"type":169,"value":4983},{"type":164,"tag":221,"props":5641,"children":5642},{"style":233},[5643],{"type":169,"value":5559},{"type":164,"tag":221,"props":5645,"children":5646},{"style":703},[5647],{"type":169,"value":706},{"type":164,"tag":221,"props":5649,"children":5650},{"class":223,"line":135},[5651,5655,5659,5664],{"type":164,"tag":221,"props":5652,"children":5653},{"style":523},[5654],{"type":169,"value":2742},{"type":164,"tag":221,"props":5656,"children":5657},{"style":227},[5658],{"type":169,"value":3850},{"type":164,"tag":221,"props":5660,"children":5661},{"style":233},[5662],{"type":169,"value":5663}," \u002Froot\u002Fscripts\u002Fpy\u002Fmodxpaneldaemon\u002Flog\u002F",{"type":164,"tag":221,"props":5665,"children":5666},{"style":703},[5667],{"type":169,"value":706},{"type":164,"tag":221,"props":5669,"children":5670},{"class":223,"line":364},[5671,5675,5679],{"type":164,"tag":221,"props":5672,"children":5673},{"style":523},[5674],{"type":169,"value":2742},{"type":164,"tag":221,"props":5676,"children":5677},{"style":227},[5678],{"type":169,"value":3850},{"type":164,"tag":221,"props":5680,"children":5681},{"style":233},[5682],{"type":169,"value":5683}," \u002Froot\u002Fscripts\u002Fpy\u002Fmodxpaneldaemon\u002Ftmp\u002F\n",{"type":164,"tag":165,"props":5685,"children":5686},{},[5687,5689,5695],{"type":169,"value":5688},"Далее настраиваем ",{"type":164,"tag":217,"props":5690,"children":5692},{"className":5691},[],[5693],{"type":169,"value":5694},"config.yaml",{"type":169,"value":5696},"...",{"type":164,"tag":165,"props":5698,"children":5699},{},[5700,5702,5708,5709,5715,5717,5723],{"type":169,"value":5701},"В конфиге обязательно нужно заменить ",{"type":164,"tag":217,"props":5703,"children":5705},{"className":5704},[],[5706],{"type":169,"value":5707},"secret_key",{"type":169,"value":4822},{"type":164,"tag":217,"props":5710,"children":5712},{"className":5711},[],[5713],{"type":169,"value":5714},"socket_port",{"type":169,"value":5716}," – далее их же укажем в системных настройках, после установки компонента ",{"type":164,"tag":217,"props":5718,"children":5720},{"className":5719},[],[5721],{"type":169,"value":5722},"hostPanel",{"type":169,"value":5724},". Порт оптимально выбрать рандомно из диапазона 49152-65535.",{"type":164,"tag":165,"props":5726,"children":5727},{},[5728,5730,5735],{"type":169,"value":5729},"Помимо этого, если у вас MySQL root-пользователь с аутентификацией ",{"type":164,"tag":217,"props":5731,"children":5733},{"className":5732},[],[5734],{"type":169,"value":1944},{"type":169,"value":5736},", то обязательно нужно будет создать пользователя с root-правами (описано выше) и прописать к нему доступ в переменные конфига:",{"type":164,"tag":209,"props":5738,"children":5742},{"className":5739,"code":5740,"language":5741,"meta":123,"style":214},"language-yaml shiki shiki-themes github-light catppuccin-mocha","mysql_rootuser: \"superroot\"\nmysql_rootpass: \"superpassword\"\n","yaml",[5743],{"type":164,"tag":217,"props":5744,"children":5745},{"__ignoreMap":123},[5746,5764],{"type":164,"tag":221,"props":5747,"children":5748},{"class":223,"line":40},[5749,5755,5759],{"type":164,"tag":221,"props":5750,"children":5752},{"style":5751},"--shiki-default:#22863A;--shiki-dark:#89B4FA",[5753],{"type":169,"value":5754},"mysql_rootuser",{"type":164,"tag":221,"props":5756,"children":5757},{"style":2209},[5758],{"type":169,"value":671},{"type":164,"tag":221,"props":5760,"children":5761},{"style":233},[5762],{"type":169,"value":5763}," \"superroot\"\n",{"type":164,"tag":221,"props":5765,"children":5766},{"class":223,"line":32},[5767,5772,5776],{"type":164,"tag":221,"props":5768,"children":5769},{"style":5751},[5770],{"type":169,"value":5771},"mysql_rootpass",{"type":164,"tag":221,"props":5773,"children":5774},{"style":2209},[5775],{"type":169,"value":671},{"type":164,"tag":221,"props":5777,"children":5778},{"style":233},[5779],{"type":169,"value":5780}," \"superpassword\"\n",{"type":164,"tag":165,"props":5782,"children":5783},{},[5784],{"type":164,"tag":1325,"props":5785,"children":5786},{},[5787],{"type":169,"value":5788},"Заменить на своего like-root-пользователя.",{"type":164,"tag":165,"props":5790,"children":5791},{},[5792,5794],{"type":169,"value":5793},"Выполняем команду для создания сайта хост-панели:\n",{"type":164,"tag":217,"props":5795,"children":5797},{"className":5796},[],[5798],{"type":169,"value":5799},"\u002Fbin\u002Fbash \u002Froot\u002Fscripts\u002Fpy\u002Fmodxpaneldaemon\u002Fscript\u002Fsh\u002Faddmodx.sh -a 7.4 -v 2.8.8-pl -p \"root_пароль_mysql\" -h host.you_main_domain.ru -u host -d host.you_main_domain.ru",{"type":164,"tag":165,"props":5801,"children":5802},{},[5803,5805],{"type":169,"value":5804},"Может понадобиться удалить сайт хост-панели:\n",{"type":164,"tag":217,"props":5806,"children":5808},{"className":5807},[],[5809],{"type":169,"value":5810},"\u002Fbin\u002Fbash \u002Froot\u002Fscripts\u002Fpy\u002Fmodxpaneldaemon\u002Fscript\u002Fsh\u002Fremove.sh \"root_пароль_mysql\" host",{"type":164,"tag":165,"props":5812,"children":5813},{},[5814,5816,5822,5824,5830,5832,5838,5840],{"type":169,"value":5815},"Чтобы даймон стал сервисом (",{"type":164,"tag":217,"props":5817,"children":5819},{"className":5818},[],[5820],{"type":169,"value":5821},"\u002Fetc\u002Finit.d\u002Fmodxpanel start|stop|restart",{"type":169,"value":5823}," или ",{"type":164,"tag":217,"props":5825,"children":5827},{"className":5826},[],[5828],{"type":169,"value":5829},"service modxpanel start|stop|restart",{"type":169,"value":5831},"), надо создать файл ",{"type":164,"tag":217,"props":5833,"children":5835},{"className":5834},[],[5836],{"type":169,"value":5837},"\u002Fetc\u002Finit.d\u002Fmodxpanel",{"type":169,"value":5839},":\n",{"type":164,"tag":217,"props":5841,"children":5843},{"className":5842},[],[5844],{"type":169,"value":5845},"touch \u002Fetc\u002Finit.d\u002Fmodxpanel && mcedit \u002Fetc\u002Finit.d\u002Fmodxpanel",{"type":164,"tag":165,"props":5847,"children":5848},{},[5849],{"type":169,"value":5850},"С таким содержимым:",{"type":164,"tag":209,"props":5852,"children":5854},{"className":211,"code":5853,"language":213,"meta":123,"style":214},"#!\u002Fbin\u002Fbash\n### BEGIN INIT INFO\n# Provides:          ModxPanel\n# Required-Start:    $local_fs $network $named $time $syslog\n# Required-Stop:     $local_fs $network $named $time $syslog\n# Default-Start:     2 3 4 5\n# Default-Stop:      0 1 6\n# Description:       Service of ModxPanelDaemon [Python].\n### END INIT INFO\n\nprog=modxpanel\nRETVAL=0\n\nstart() {\n    echo \"Starting $prog…\"\n    \u002Fusr\u002Fbin\u002Fenv python3 \u002Froot\u002Fscripts\u002Fpy\u002Fmodxpaneldaemon\u002Fmodxpaneldaemon.py start\n    RETVAL=$?\n    return $RETVAL\n}\n\nstop() {\n    echo \"Stopping $prog…\"\n    \u002Fusr\u002Fbin\u002Fenv python3 \u002Froot\u002Fscripts\u002Fpy\u002Fmodxpaneldaemon\u002Fmodxpaneldaemon.py stop\n    RETVAL=$?\n    return $RETVAL\n}\n\ncase \"$1\" in\n    start)\n        start\n        ;;\n    stop)\n        stop\n        ;;\n    restart)\n        stop\n        start\n        ;;\n    *)\n        echo \"Usage: $0 {start|stop|restart}\"\n        exit 1\n    ;;\nesac\n\nexit 0\n",[5855],{"type":164,"tag":217,"props":5856,"children":5857},{"__ignoreMap":123},[5858,5867,5875,5883,5891,5899,5907,5915,5923,5931,5938,5955,5972,5979,5996,6018,6040,6058,6071,6078,6085,6101,6121,6141,6156,6167,6174,6181,6210,6223,6231,6239,6251,6259,6266,6278,6285,6292,6299,6307,6330,6343,6351,6359,6366],{"type":164,"tag":221,"props":5859,"children":5860},{"class":223,"line":40},[5861],{"type":164,"tag":221,"props":5862,"children":5864},{"style":5863},"--shiki-default:#6A737D;--shiki-default-font-style:inherit;--shiki-dark:#F5C2E7;--shiki-dark-font-style:italic",[5865],{"type":169,"value":5866},"#!\u002Fbin\u002Fbash\n",{"type":164,"tag":221,"props":5868,"children":5869},{"class":223,"line":32},[5870],{"type":164,"tag":221,"props":5871,"children":5872},{"style":4135},[5873],{"type":169,"value":5874},"### BEGIN INIT INFO\n",{"type":164,"tag":221,"props":5876,"children":5877},{"class":223,"line":105},[5878],{"type":164,"tag":221,"props":5879,"children":5880},{"style":4135},[5881],{"type":169,"value":5882},"# Provides:          ModxPanel\n",{"type":164,"tag":221,"props":5884,"children":5885},{"class":223,"line":12},[5886],{"type":164,"tag":221,"props":5887,"children":5888},{"style":4135},[5889],{"type":169,"value":5890},"# Required-Start:    $local_fs $network $named $time $syslog\n",{"type":164,"tag":221,"props":5892,"children":5893},{"class":223,"line":156},[5894],{"type":164,"tag":221,"props":5895,"children":5896},{"style":4135},[5897],{"type":169,"value":5898},"# Required-Stop:     $local_fs $network $named $time $syslog\n",{"type":164,"tag":221,"props":5900,"children":5901},{"class":223,"line":135},[5902],{"type":164,"tag":221,"props":5903,"children":5904},{"style":4135},[5905],{"type":169,"value":5906},"# Default-Start:     2 3 4 5\n",{"type":164,"tag":221,"props":5908,"children":5909},{"class":223,"line":364},[5910],{"type":164,"tag":221,"props":5911,"children":5912},{"style":4135},[5913],{"type":169,"value":5914},"# Default-Stop:      0 1 6\n",{"type":164,"tag":221,"props":5916,"children":5917},{"class":223,"line":377},[5918],{"type":164,"tag":221,"props":5919,"children":5920},{"style":4135},[5921],{"type":169,"value":5922},"# Description:       Service of ModxPanelDaemon [Python].\n",{"type":164,"tag":221,"props":5924,"children":5925},{"class":223,"line":980},[5926],{"type":164,"tag":221,"props":5927,"children":5928},{"style":4135},[5929],{"type":169,"value":5930},"### END INIT INFO\n",{"type":164,"tag":221,"props":5932,"children":5933},{"class":223,"line":1021},[5934],{"type":164,"tag":221,"props":5935,"children":5936},{"emptyLinePlaceholder":17},[5937],{"type":169,"value":4099},{"type":164,"tag":221,"props":5939,"children":5940},{"class":223,"line":1062},[5941,5946,5950],{"type":164,"tag":221,"props":5942,"children":5943},{"style":712},[5944],{"type":169,"value":5945},"prog",{"type":164,"tag":221,"props":5947,"children":5948},{"style":353},[5949],{"type":169,"value":720},{"type":164,"tag":221,"props":5951,"children":5952},{"style":233},[5953],{"type":169,"value":5954},"modxpanel\n",{"type":164,"tag":221,"props":5956,"children":5957},{"class":223,"line":1079},[5958,5963,5967],{"type":164,"tag":221,"props":5959,"children":5960},{"style":712},[5961],{"type":169,"value":5962},"RETVAL",{"type":164,"tag":221,"props":5964,"children":5965},{"style":353},[5966],{"type":169,"value":720},{"type":164,"tag":221,"props":5968,"children":5969},{"style":233},[5970],{"type":169,"value":5971},"0\n",{"type":164,"tag":221,"props":5973,"children":5974},{"class":223,"line":4176},[5975],{"type":164,"tag":221,"props":5976,"children":5977},{"emptyLinePlaceholder":17},[5978],{"type":169,"value":4099},{"type":164,"tag":221,"props":5980,"children":5981},{"class":223,"line":4194},[5982,5987,5992],{"type":164,"tag":221,"props":5983,"children":5984},{"style":227},[5985],{"type":169,"value":5986},"start",{"type":164,"tag":221,"props":5988,"children":5989},{"style":523},[5990],{"type":169,"value":5991},"()",{"type":164,"tag":221,"props":5993,"children":5994},{"style":523},[5995],{"type":169,"value":4112},{"type":164,"tag":221,"props":5997,"children":5998},{"class":223,"line":4203},[5999,6003,6008,6013],{"type":164,"tag":221,"props":6000,"children":6001},{"style":819},[6002],{"type":169,"value":822},{"type":164,"tag":221,"props":6004,"children":6005},{"style":233},[6006],{"type":169,"value":6007}," \"Starting ",{"type":164,"tag":221,"props":6009,"children":6010},{"style":712},[6011],{"type":169,"value":6012},"$prog",{"type":164,"tag":221,"props":6014,"children":6015},{"style":233},[6016],{"type":169,"value":6017},"…\"\n",{"type":164,"tag":221,"props":6019,"children":6020},{"class":223,"line":4211},[6021,6026,6030,6035],{"type":164,"tag":221,"props":6022,"children":6023},{"style":227},[6024],{"type":169,"value":6025},"    \u002Fusr\u002Fbin\u002Fenv",{"type":164,"tag":221,"props":6027,"children":6028},{"style":233},[6029],{"type":169,"value":1245},{"type":164,"tag":221,"props":6031,"children":6032},{"style":233},[6033],{"type":169,"value":6034}," \u002Froot\u002Fscripts\u002Fpy\u002Fmodxpaneldaemon\u002Fmodxpaneldaemon.py",{"type":164,"tag":221,"props":6036,"children":6037},{"style":233},[6038],{"type":169,"value":6039}," start\n",{"type":164,"tag":221,"props":6041,"children":6042},{"class":223,"line":4220},[6043,6048,6052],{"type":164,"tag":221,"props":6044,"children":6045},{"style":712},[6046],{"type":169,"value":6047},"    RETVAL",{"type":164,"tag":221,"props":6049,"children":6050},{"style":353},[6051],{"type":169,"value":720},{"type":164,"tag":221,"props":6053,"children":6055},{"style":6054},"--shiki-default:#005CC5;--shiki-dark:#CDD6F4",[6056],{"type":169,"value":6057},"$?\n",{"type":164,"tag":221,"props":6059,"children":6060},{"class":223,"line":4239},[6061,6066],{"type":164,"tag":221,"props":6062,"children":6063},{"style":773},[6064],{"type":169,"value":6065},"    return",{"type":164,"tag":221,"props":6067,"children":6068},{"style":712},[6069],{"type":169,"value":6070}," $RETVAL\n",{"type":164,"tag":221,"props":6072,"children":6073},{"class":223,"line":4257},[6074],{"type":164,"tag":221,"props":6075,"children":6076},{"style":523},[6077],{"type":169,"value":4146},{"type":164,"tag":221,"props":6079,"children":6080},{"class":223,"line":4274},[6081],{"type":164,"tag":221,"props":6082,"children":6083},{"emptyLinePlaceholder":17},[6084],{"type":169,"value":4099},{"type":164,"tag":221,"props":6086,"children":6087},{"class":223,"line":4291},[6088,6093,6097],{"type":164,"tag":221,"props":6089,"children":6090},{"style":227},[6091],{"type":169,"value":6092},"stop",{"type":164,"tag":221,"props":6094,"children":6095},{"style":523},[6096],{"type":169,"value":5991},{"type":164,"tag":221,"props":6098,"children":6099},{"style":523},[6100],{"type":169,"value":4112},{"type":164,"tag":221,"props":6102,"children":6103},{"class":223,"line":4309},[6104,6108,6113,6117],{"type":164,"tag":221,"props":6105,"children":6106},{"style":819},[6107],{"type":169,"value":822},{"type":164,"tag":221,"props":6109,"children":6110},{"style":233},[6111],{"type":169,"value":6112}," \"Stopping ",{"type":164,"tag":221,"props":6114,"children":6115},{"style":712},[6116],{"type":169,"value":6012},{"type":164,"tag":221,"props":6118,"children":6119},{"style":233},[6120],{"type":169,"value":6017},{"type":164,"tag":221,"props":6122,"children":6123},{"class":223,"line":4327},[6124,6128,6132,6136],{"type":164,"tag":221,"props":6125,"children":6126},{"style":227},[6127],{"type":169,"value":6025},{"type":164,"tag":221,"props":6129,"children":6130},{"style":233},[6131],{"type":169,"value":1245},{"type":164,"tag":221,"props":6133,"children":6134},{"style":233},[6135],{"type":169,"value":6034},{"type":164,"tag":221,"props":6137,"children":6138},{"style":233},[6139],{"type":169,"value":6140}," stop\n",{"type":164,"tag":221,"props":6142,"children":6143},{"class":223,"line":4345},[6144,6148,6152],{"type":164,"tag":221,"props":6145,"children":6146},{"style":712},[6147],{"type":169,"value":6047},{"type":164,"tag":221,"props":6149,"children":6150},{"style":353},[6151],{"type":169,"value":720},{"type":164,"tag":221,"props":6153,"children":6154},{"style":6054},[6155],{"type":169,"value":6057},{"type":164,"tag":221,"props":6157,"children":6158},{"class":223,"line":4362},[6159,6163],{"type":164,"tag":221,"props":6160,"children":6161},{"style":773},[6162],{"type":169,"value":6065},{"type":164,"tag":221,"props":6164,"children":6165},{"style":712},[6166],{"type":169,"value":6070},{"type":164,"tag":221,"props":6168,"children":6169},{"class":223,"line":4380},[6170],{"type":164,"tag":221,"props":6171,"children":6172},{"style":523},[6173],{"type":169,"value":4146},{"type":164,"tag":221,"props":6175,"children":6176},{"class":223,"line":4389},[6177],{"type":164,"tag":221,"props":6178,"children":6179},{"emptyLinePlaceholder":17},[6180],{"type":169,"value":4099},{"type":164,"tag":221,"props":6182,"children":6183},{"class":223,"line":4397},[6184,6189,6194,6200,6205],{"type":164,"tag":221,"props":6185,"children":6186},{"style":773},[6187],{"type":169,"value":6188},"case",{"type":164,"tag":221,"props":6190,"children":6191},{"style":233},[6192],{"type":169,"value":6193}," \"",{"type":164,"tag":221,"props":6195,"children":6197},{"style":6196},"--shiki-default:#005CC5;--shiki-default-font-style:inherit;--shiki-dark:#EBA0AC;--shiki-dark-font-style:italic",[6198],{"type":169,"value":6199},"$1",{"type":164,"tag":221,"props":6201,"children":6202},{"style":233},[6203],{"type":169,"value":6204},"\"",{"type":164,"tag":221,"props":6206,"children":6207},{"style":773},[6208],{"type":169,"value":6209}," in\n",{"type":164,"tag":221,"props":6211,"children":6212},{"class":223,"line":4406},[6213,6218],{"type":164,"tag":221,"props":6214,"children":6215},{"style":233},[6216],{"type":169,"value":6217},"    start",{"type":164,"tag":221,"props":6219,"children":6220},{"style":353},[6221],{"type":169,"value":6222},")\n",{"type":164,"tag":221,"props":6224,"children":6225},{"class":223,"line":4429},[6226],{"type":164,"tag":221,"props":6227,"children":6228},{"style":227},[6229],{"type":169,"value":6230},"        start\n",{"type":164,"tag":221,"props":6232,"children":6233},{"class":223,"line":4446},[6234],{"type":164,"tag":221,"props":6235,"children":6236},{"style":523},[6237],{"type":169,"value":6238},"        ;;\n",{"type":164,"tag":221,"props":6240,"children":6241},{"class":223,"line":4455},[6242,6247],{"type":164,"tag":221,"props":6243,"children":6244},{"style":233},[6245],{"type":169,"value":6246},"    stop",{"type":164,"tag":221,"props":6248,"children":6249},{"style":353},[6250],{"type":169,"value":6222},{"type":164,"tag":221,"props":6252,"children":6253},{"class":223,"line":4463},[6254],{"type":164,"tag":221,"props":6255,"children":6256},{"style":227},[6257],{"type":169,"value":6258},"        stop\n",{"type":164,"tag":221,"props":6260,"children":6261},{"class":223,"line":4472},[6262],{"type":164,"tag":221,"props":6263,"children":6264},{"style":523},[6265],{"type":169,"value":6238},{"type":164,"tag":221,"props":6267,"children":6268},{"class":223,"line":4490},[6269,6274],{"type":164,"tag":221,"props":6270,"children":6271},{"style":233},[6272],{"type":169,"value":6273},"    restart",{"type":164,"tag":221,"props":6275,"children":6276},{"style":353},[6277],{"type":169,"value":6222},{"type":164,"tag":221,"props":6279,"children":6280},{"class":223,"line":4508},[6281],{"type":164,"tag":221,"props":6282,"children":6283},{"style":227},[6284],{"type":169,"value":6258},{"type":164,"tag":221,"props":6286,"children":6287},{"class":223,"line":4517},[6288],{"type":164,"tag":221,"props":6289,"children":6290},{"style":227},[6291],{"type":169,"value":6230},{"type":164,"tag":221,"props":6293,"children":6294},{"class":223,"line":4525},[6295],{"type":164,"tag":221,"props":6296,"children":6297},{"style":523},[6298],{"type":169,"value":6238},{"type":164,"tag":221,"props":6300,"children":6301},{"class":223,"line":4534},[6302],{"type":164,"tag":221,"props":6303,"children":6304},{"style":353},[6305],{"type":169,"value":6306},"    *)\n",{"type":164,"tag":221,"props":6308,"children":6309},{"class":223,"line":4543},[6310,6315,6320,6325],{"type":164,"tag":221,"props":6311,"children":6312},{"style":819},[6313],{"type":169,"value":6314},"        echo",{"type":164,"tag":221,"props":6316,"children":6317},{"style":233},[6318],{"type":169,"value":6319}," \"Usage: ",{"type":164,"tag":221,"props":6321,"children":6322},{"style":6196},[6323],{"type":169,"value":6324},"$0",{"type":164,"tag":221,"props":6326,"children":6327},{"style":233},[6328],{"type":169,"value":6329}," {start|stop|restart}\"\n",{"type":164,"tag":221,"props":6331,"children":6332},{"class":223,"line":4551},[6333,6338],{"type":164,"tag":221,"props":6334,"children":6335},{"style":819},[6336],{"type":169,"value":6337},"        exit",{"type":164,"tag":221,"props":6339,"children":6340},{"style":1253},[6341],{"type":169,"value":6342}," 1\n",{"type":164,"tag":221,"props":6344,"children":6345},{"class":223,"line":4568},[6346],{"type":164,"tag":221,"props":6347,"children":6348},{"style":523},[6349],{"type":169,"value":6350},"    ;;\n",{"type":164,"tag":221,"props":6352,"children":6353},{"class":223,"line":4586},[6354],{"type":164,"tag":221,"props":6355,"children":6356},{"style":773},[6357],{"type":169,"value":6358},"esac\n",{"type":164,"tag":221,"props":6360,"children":6361},{"class":223,"line":4603},[6362],{"type":164,"tag":221,"props":6363,"children":6364},{"emptyLinePlaceholder":17},[6365],{"type":169,"value":4099},{"type":164,"tag":221,"props":6367,"children":6368},{"class":223,"line":4621},[6369,6374],{"type":164,"tag":221,"props":6370,"children":6371},{"style":819},[6372],{"type":169,"value":6373},"exit",{"type":164,"tag":221,"props":6375,"children":6376},{"style":1253},[6377],{"type":169,"value":6378}," 0\n",{"type":164,"tag":165,"props":6380,"children":6381},{},[6382,6384],{"type":169,"value":6383},"Сделать его исполняемым:\n",{"type":164,"tag":217,"props":6385,"children":6387},{"className":6386},[],[6388],{"type":169,"value":6389},"sudo chmod +x \u002Fetc\u002Finit.d\u002Fmodxpanel",{"type":164,"tag":165,"props":6391,"children":6392},{},[6393,6395],{"type":169,"value":6394},"Добавить в автозагрузку:\n",{"type":164,"tag":217,"props":6396,"children":6398},{"className":6397},[],[6399],{"type":169,"value":6400},"update-rc.d \"modxpanel\" defaults",{"type":164,"tag":165,"props":6402,"children":6403},{},[6404,6406],{"type":169,"value":6405},"И запустить сервис:\n",{"type":164,"tag":217,"props":6407,"children":6409},{"className":6408},[],[6410],{"type":169,"value":6411},"\u002Fetc\u002Finit.d\u002Fmodxpanel start",{"type":164,"tag":171,"props":6413,"children":6415},{"id":6414},"проблемы-с-даймоном-хост-панельки",[6416],{"type":169,"value":6417},"Проблемы с даймоном хост-панельки",{"type":164,"tag":165,"props":6419,"children":6420},{},[6421,6423,6429,6431,6437,6438],{"type":169,"value":6422},"При запуске сервиса может выдать ошибку ",{"type":164,"tag":217,"props":6424,"children":6426},{"className":6425},[],[6427],{"type":169,"value":6428},"ModuleNotFoundError: No module named '_cffi_backend'",{"type":169,"value":6430},". Решается установкой ",{"type":164,"tag":217,"props":6432,"children":6434},{"className":6433},[],[6435],{"type":169,"value":6436},"cffi",{"type":169,"value":5839},{"type":164,"tag":217,"props":6439,"children":6441},{"className":6440},[],[6442],{"type":169,"value":6443},"python3 -m pip install cffi",{"type":164,"tag":171,"props":6445,"children":6447},{"id":6446},"хост-панель",[6448],{"type":169,"value":6449},"Хост-панель",{"type":164,"tag":165,"props":6451,"children":6452},{},[6453,6460,6462,6468],{"type":164,"tag":183,"props":6454,"children":6457},{"href":6455,"rel":6456},"https:\u002F\u002Fgithub.com\u002Fgvozdb\u002FhostPanel",[187],[6458],{"type":169,"value":6459},"Качаем компонент hostPanel",{"type":169,"value":6461}," и устанавливаем в систему сайта ",{"type":164,"tag":217,"props":6463,"children":6465},{"className":6464},[],[6466],{"type":169,"value":6467},"h1.you_main_domain.ru",{"type":169,"value":671},{"type":164,"tag":209,"props":6470,"children":6472},{"className":211,"code":6471,"language":213,"meta":123,"style":214},"curl -L -o hostpanel.zip \"https:\u002F\u002Fgithub.com\u002Fgvozdb\u002FhostPanel\u002Farchive\u002Fmaster.zip\" \\\n&& unzip hostpanel.zip -d \"\u002Fvar\u002Fwww\u002Fhost\u002Fwww\u002F\" \\\n&& mv \u002Fvar\u002Fwww\u002Fhost\u002Fwww\u002FhostPanel-master \u002Fvar\u002Fwww\u002Fhost\u002Fwww\u002Fhostpanel \\\n&& rm -f hostpanel.zip \\\n&& sh \u002Fvar\u002Fwww\u002Fhost\u002Fchmod\n",[6473],{"type":164,"tag":217,"props":6474,"children":6475},{"__ignoreMap":123},[6476,6505,6533,6558,6581],{"type":164,"tag":221,"props":6477,"children":6478},{"class":223,"line":40},[6479,6483,6487,6491,6496,6501],{"type":164,"tag":221,"props":6480,"children":6481},{"style":227},[6482],{"type":169,"value":500},{"type":164,"tag":221,"props":6484,"children":6485},{"style":277},[6486],{"type":169,"value":5550},{"type":164,"tag":221,"props":6488,"children":6489},{"style":277},[6490],{"type":169,"value":515},{"type":164,"tag":221,"props":6492,"children":6493},{"style":233},[6494],{"type":169,"value":6495}," hostpanel.zip",{"type":164,"tag":221,"props":6497,"children":6498},{"style":233},[6499],{"type":169,"value":6500}," \"https:\u002F\u002Fgithub.com\u002Fgvozdb\u002FhostPanel\u002Farchive\u002Fmaster.zip\"",{"type":164,"tag":221,"props":6502,"children":6503},{"style":703},[6504],{"type":169,"value":706},{"type":164,"tag":221,"props":6506,"children":6507},{"class":223,"line":32},[6508,6512,6516,6520,6524,6529],{"type":164,"tag":221,"props":6509,"children":6510},{"style":523},[6511],{"type":169,"value":2742},{"type":164,"tag":221,"props":6513,"children":6514},{"style":227},[6515],{"type":169,"value":5580},{"type":164,"tag":221,"props":6517,"children":6518},{"style":233},[6519],{"type":169,"value":6495},{"type":164,"tag":221,"props":6521,"children":6522},{"style":277},[6523],{"type":169,"value":4942},{"type":164,"tag":221,"props":6525,"children":6526},{"style":233},[6527],{"type":169,"value":6528}," \"\u002Fvar\u002Fwww\u002Fhost\u002Fwww\u002F\"",{"type":164,"tag":221,"props":6530,"children":6531},{"style":703},[6532],{"type":169,"value":706},{"type":164,"tag":221,"props":6534,"children":6535},{"class":223,"line":105},[6536,6540,6544,6549,6554],{"type":164,"tag":221,"props":6537,"children":6538},{"style":523},[6539],{"type":169,"value":2742},{"type":164,"tag":221,"props":6541,"children":6542},{"style":227},[6543],{"type":169,"value":5609},{"type":164,"tag":221,"props":6545,"children":6546},{"style":233},[6547],{"type":169,"value":6548}," \u002Fvar\u002Fwww\u002Fhost\u002Fwww\u002FhostPanel-master",{"type":164,"tag":221,"props":6550,"children":6551},{"style":233},[6552],{"type":169,"value":6553}," \u002Fvar\u002Fwww\u002Fhost\u002Fwww\u002Fhostpanel",{"type":164,"tag":221,"props":6555,"children":6556},{"style":703},[6557],{"type":169,"value":706},{"type":164,"tag":221,"props":6559,"children":6560},{"class":223,"line":12},[6561,6565,6569,6573,6577],{"type":164,"tag":221,"props":6562,"children":6563},{"style":523},[6564],{"type":169,"value":2742},{"type":164,"tag":221,"props":6566,"children":6567},{"style":227},[6568],{"type":169,"value":5635},{"type":164,"tag":221,"props":6570,"children":6571},{"style":277},[6572],{"type":169,"value":4983},{"type":164,"tag":221,"props":6574,"children":6575},{"style":233},[6576],{"type":169,"value":6495},{"type":164,"tag":221,"props":6578,"children":6579},{"style":703},[6580],{"type":169,"value":706},{"type":164,"tag":221,"props":6582,"children":6583},{"class":223,"line":156},[6584,6588,6593],{"type":164,"tag":221,"props":6585,"children":6586},{"style":523},[6587],{"type":169,"value":2742},{"type":164,"tag":221,"props":6589,"children":6590},{"style":227},[6591],{"type":169,"value":6592}," sh",{"type":164,"tag":221,"props":6594,"children":6595},{"style":233},[6596],{"type":169,"value":6597}," \u002Fvar\u002Fwww\u002Fhost\u002Fchmod\n",{"type":164,"tag":165,"props":6599,"children":6600},{},[6601,6603],{"type":169,"value":6602},"Запускаем из веба УРЛ для установки компонента hostPanel в MODX:\n",{"type":164,"tag":217,"props":6604,"children":6606},{"className":6605},[],[6607],{"type":169,"value":6608},"http:\u002F\u002Fh1.you_main_domain.ru\u002Fhostpanel\u002F_build\u002Fbuild.transport.php",{"type":164,"tag":165,"props":6610,"children":6611},{},[6612,6614,6619,6620,6625,6627,6632,6634,6640,6642,6648,6649,6655],{"type":169,"value":6613},"В системных настройках обязательно указываем актуальный ",{"type":164,"tag":217,"props":6615,"children":6617},{"className":6616},[],[6618],{"type":169,"value":5707},{"type":169,"value":4822},{"type":164,"tag":217,"props":6621,"children":6623},{"className":6622},[],[6624],{"type":169,"value":5714},{"type":169,"value":6626}," (из ",{"type":164,"tag":217,"props":6628,"children":6630},{"className":6629},[],[6631],{"type":169,"value":5694},{"type":169,"value":6633}," даймона), а также другие настройки, такие как ",{"type":164,"tag":217,"props":6635,"children":6637},{"className":6636},[],[6638],{"type":169,"value":6639},"hostpanel_host_domain",{"type":169,"value":6641},", ",{"type":164,"tag":217,"props":6643,"children":6645},{"className":6644},[],[6646],{"type":169,"value":6647},"hostpanel_domain_mask",{"type":169,"value":4822},{"type":164,"tag":217,"props":6650,"children":6652},{"className":6651},[],[6653],{"type":169,"value":6654},"hostpanel_user_mask",{"type":169,"value":6656}," (если это необходимо).",{"type":164,"tag":165,"props":6658,"children":6659},{},[6660],{"type":169,"value":6661},"Всё, теперь можно создавать MODX сайты через панель в админке.",{"type":164,"tag":171,"props":6663,"children":6665},{"id":6664},"блокируем-попытки-брутфорса",[6666],{"type":169,"value":6667},"Блокируем попытки брутфорса",{"type":164,"tag":165,"props":6669,"children":6670},{},[6671,6673],{"type":169,"value":6672},"Устанавливаем iptables:\n",{"type":164,"tag":217,"props":6674,"children":6676},{"className":6675},[],[6677],{"type":169,"value":6678},"apt install iptables-persistent",{"type":164,"tag":165,"props":6680,"children":6681},{},[6682],{"type":169,"value":6683},"Вставляем два правила командами в консоли:",{"type":164,"tag":209,"props":6685,"children":6687},{"className":211,"code":6686,"language":213,"meta":123,"style":214},"iptables -I INPUT -p tcp --dport 22 -i eth0 -m state --state NEW -m recent --set\niptables -I INPUT -p tcp --dport 22 -i eth0 -m state --state NEW -m recent  --update --seconds 600 --hitcount 4 -j DROP\n",[6688],{"type":164,"tag":217,"props":6689,"children":6690},{"__ignoreMap":123},[6691,6771],{"type":164,"tag":221,"props":6692,"children":6693},{"class":223,"line":40},[6694,6699,6704,6709,6713,6718,6723,6728,6733,6738,6742,6747,6752,6757,6761,6766],{"type":164,"tag":221,"props":6695,"children":6696},{"style":227},[6697],{"type":169,"value":6698},"iptables",{"type":164,"tag":221,"props":6700,"children":6701},{"style":277},[6702],{"type":169,"value":6703}," -I",{"type":164,"tag":221,"props":6705,"children":6706},{"style":233},[6707],{"type":169,"value":6708}," INPUT",{"type":164,"tag":221,"props":6710,"children":6711},{"style":277},[6712],{"type":169,"value":5525},{"type":164,"tag":221,"props":6714,"children":6715},{"style":233},[6716],{"type":169,"value":6717}," tcp",{"type":164,"tag":221,"props":6719,"children":6720},{"style":277},[6721],{"type":169,"value":6722}," --dport",{"type":164,"tag":221,"props":6724,"children":6725},{"style":1253},[6726],{"type":169,"value":6727}," 22",{"type":164,"tag":221,"props":6729,"children":6730},{"style":277},[6731],{"type":169,"value":6732}," -i",{"type":164,"tag":221,"props":6734,"children":6735},{"style":233},[6736],{"type":169,"value":6737}," eth0",{"type":164,"tag":221,"props":6739,"children":6740},{"style":277},[6741],{"type":169,"value":1373},{"type":164,"tag":221,"props":6743,"children":6744},{"style":233},[6745],{"type":169,"value":6746}," state",{"type":164,"tag":221,"props":6748,"children":6749},{"style":277},[6750],{"type":169,"value":6751}," --state",{"type":164,"tag":221,"props":6753,"children":6754},{"style":233},[6755],{"type":169,"value":6756}," NEW",{"type":164,"tag":221,"props":6758,"children":6759},{"style":277},[6760],{"type":169,"value":1373},{"type":164,"tag":221,"props":6762,"children":6763},{"style":233},[6764],{"type":169,"value":6765}," recent",{"type":164,"tag":221,"props":6767,"children":6768},{"style":277},[6769],{"type":169,"value":6770}," --set\n",{"type":164,"tag":221,"props":6772,"children":6773},{"class":223,"line":32},[6774,6778,6782,6786,6790,6794,6798,6802,6806,6810,6814,6818,6822,6826,6830,6834,6839,6844,6849,6854,6859,6864],{"type":164,"tag":221,"props":6775,"children":6776},{"style":227},[6777],{"type":169,"value":6698},{"type":164,"tag":221,"props":6779,"children":6780},{"style":277},[6781],{"type":169,"value":6703},{"type":164,"tag":221,"props":6783,"children":6784},{"style":233},[6785],{"type":169,"value":6708},{"type":164,"tag":221,"props":6787,"children":6788},{"style":277},[6789],{"type":169,"value":5525},{"type":164,"tag":221,"props":6791,"children":6792},{"style":233},[6793],{"type":169,"value":6717},{"type":164,"tag":221,"props":6795,"children":6796},{"style":277},[6797],{"type":169,"value":6722},{"type":164,"tag":221,"props":6799,"children":6800},{"style":1253},[6801],{"type":169,"value":6727},{"type":164,"tag":221,"props":6803,"children":6804},{"style":277},[6805],{"type":169,"value":6732},{"type":164,"tag":221,"props":6807,"children":6808},{"style":233},[6809],{"type":169,"value":6737},{"type":164,"tag":221,"props":6811,"children":6812},{"style":277},[6813],{"type":169,"value":1373},{"type":164,"tag":221,"props":6815,"children":6816},{"style":233},[6817],{"type":169,"value":6746},{"type":164,"tag":221,"props":6819,"children":6820},{"style":277},[6821],{"type":169,"value":6751},{"type":164,"tag":221,"props":6823,"children":6824},{"style":233},[6825],{"type":169,"value":6756},{"type":164,"tag":221,"props":6827,"children":6828},{"style":277},[6829],{"type":169,"value":1373},{"type":164,"tag":221,"props":6831,"children":6832},{"style":233},[6833],{"type":169,"value":6765},{"type":164,"tag":221,"props":6835,"children":6836},{"style":277},[6837],{"type":169,"value":6838},"  --update",{"type":164,"tag":221,"props":6840,"children":6841},{"style":277},[6842],{"type":169,"value":6843}," --seconds",{"type":164,"tag":221,"props":6845,"children":6846},{"style":1253},[6847],{"type":169,"value":6848}," 600",{"type":164,"tag":221,"props":6850,"children":6851},{"style":277},[6852],{"type":169,"value":6853}," --hitcount",{"type":164,"tag":221,"props":6855,"children":6856},{"style":1253},[6857],{"type":169,"value":6858}," 4",{"type":164,"tag":221,"props":6860,"children":6861},{"style":277},[6862],{"type":169,"value":6863}," -j",{"type":164,"tag":221,"props":6865,"children":6866},{"style":233},[6867],{"type":169,"value":6868}," DROP\n",{"type":164,"tag":165,"props":6870,"children":6871},{},[6872],{"type":164,"tag":1325,"props":6873,"children":6874},{},[6875],{"type":169,"value":6876},"Если в течение 10 минут будет 4 неуспешные попытки входа по SSH, то заблокировать данный IP.",{"type":164,"tag":165,"props":6878,"children":6879},{},[6880,6882],{"type":169,"value":6881},"Сохраняем правила:\n",{"type":164,"tag":217,"props":6883,"children":6885},{"className":6884},[],[6886],{"type":169,"value":6887},"iptables-save > \u002Fetc\u002Fiptables\u002Frules.v4",{"type":164,"tag":165,"props":6889,"children":6890},{},[6891,6893],{"type":169,"value":6892},"Проверяем:\n",{"type":164,"tag":217,"props":6894,"children":6896},{"className":6895},[],[6897],{"type":169,"value":6898},"iptables -nvL",{"type":164,"tag":165,"props":6900,"children":6901},{},[6902,6904,6909,6911,6917],{"type":169,"value":6903},"Также имеет смысл сменить порт SSH. Для этого в ",{"type":164,"tag":217,"props":6905,"children":6907},{"className":6906},[],[6908],{"type":169,"value":669},{"type":169,"value":6910}," заменяем ",{"type":164,"tag":217,"props":6912,"children":6914},{"className":6913},[],[6915],{"type":169,"value":6916},"Port 22",{"type":169,"value":6918}," на уникальный порт в диапазоне 2001-65535. И перезапускаем службу:",{"type":164,"tag":209,"props":6920,"children":6922},{"className":211,"code":6921,"language":213,"meta":123,"style":214},"sudo systemctl daemon-reexec\nsudo systemctl restart ssh\n",[6923],{"type":164,"tag":217,"props":6924,"children":6925},{"__ignoreMap":123},[6926,6942],{"type":164,"tag":221,"props":6927,"children":6928},{"class":223,"line":40},[6929,6933,6937],{"type":164,"tag":221,"props":6930,"children":6931},{"style":227},[6932],{"type":169,"value":249},{"type":164,"tag":221,"props":6934,"children":6935},{"style":233},[6936],{"type":169,"value":2299},{"type":164,"tag":221,"props":6938,"children":6939},{"style":233},[6940],{"type":169,"value":6941}," daemon-reexec\n",{"type":164,"tag":221,"props":6943,"children":6944},{"class":223,"line":32},[6945,6949,6953,6957],{"type":164,"tag":221,"props":6946,"children":6947},{"style":227},[6948],{"type":169,"value":249},{"type":164,"tag":221,"props":6950,"children":6951},{"style":233},[6952],{"type":169,"value":2299},{"type":164,"tag":221,"props":6954,"children":6955},{"style":233},[6956],{"type":169,"value":2304},{"type":164,"tag":221,"props":6958,"children":6959},{"style":233},[6960],{"type":169,"value":6961}," ssh\n",{"type":164,"tag":171,"props":6963,"children":6965},{"id":6964},"короткая-команда-chmod",[6966],{"type":169,"value":6967},"Короткая команда chmod",{"type":164,"tag":165,"props":6969,"children":6970},{},[6971,6973,6979,6981,6987,6989,6995],{"type":169,"value":6972},"В корневой директории каждого юзера есть файл ",{"type":164,"tag":217,"props":6974,"children":6976},{"className":6975},[],[6977],{"type":169,"value":6978},"chmod",{"type":169,"value":6980},", который ставит права на файлы и папки. Периодически, после ковыряния рутом надо запускать его, чтобы не было проблем с правами. Можно запускать вручную так:\n",{"type":164,"tag":217,"props":6982,"children":6984},{"className":6983},[],[6985],{"type":169,"value":6986},"sh \u002Fvar\u002Fwww\u002F{username}\u002Fchmod",{"type":169,"value":6988},"\nА можно сократить до безобразия. Для этого идём в ",{"type":164,"tag":217,"props":6990,"children":6992},{"className":6991},[],[6993],{"type":169,"value":6994},"\u002Froot\u002F.bashrc",{"type":169,"value":6996}," и в конец добавляем:",{"type":164,"tag":209,"props":6998,"children":7000},{"className":211,"code":6999,"language":213,"meta":123,"style":214},"# Short run chmod for user\nch() {\n    if [ -f \u002Fvar\u002Fwww\u002F$1\u002Fchmod ]; then\n        sh \u002Fvar\u002Fwww\u002F$1\u002Fchmod\n    fi\n    if [ -f \u002Fhome\u002F$1\u002Fchmod ]; then\n        sh \u002Fhome\u002F$1\u002Fchmod\n    fi\n}\n",[7001],{"type":164,"tag":217,"props":7002,"children":7003},{"__ignoreMap":123},[7004,7012,7028,7068,7089,7097,7133,7152,7159],{"type":164,"tag":221,"props":7005,"children":7006},{"class":223,"line":40},[7007],{"type":164,"tag":221,"props":7008,"children":7009},{"style":4135},[7010],{"type":169,"value":7011},"# Short run chmod for user\n",{"type":164,"tag":221,"props":7013,"children":7014},{"class":223,"line":32},[7015,7020,7024],{"type":164,"tag":221,"props":7016,"children":7017},{"style":227},[7018],{"type":169,"value":7019},"ch",{"type":164,"tag":221,"props":7021,"children":7022},{"style":523},[7023],{"type":169,"value":5991},{"type":164,"tag":221,"props":7025,"children":7026},{"style":523},[7027],{"type":169,"value":4112},{"type":164,"tag":221,"props":7029,"children":7030},{"class":223,"line":105},[7031,7035,7039,7043,7048,7053,7058,7063],{"type":164,"tag":221,"props":7032,"children":7033},{"style":773},[7034],{"type":169,"value":4973},{"type":164,"tag":221,"props":7036,"children":7037},{"style":523},[7038],{"type":169,"value":4978},{"type":164,"tag":221,"props":7040,"children":7041},{"style":353},[7042],{"type":169,"value":4983},{"type":164,"tag":221,"props":7044,"children":7045},{"style":712},[7046],{"type":169,"value":7047}," \u002Fvar\u002Fwww\u002F",{"type":164,"tag":221,"props":7049,"children":7051},{"style":7050},"--shiki-default:#E36209;--shiki-default-font-style:inherit;--shiki-dark:#EBA0AC;--shiki-dark-font-style:italic",[7052],{"type":169,"value":6199},{"type":164,"tag":221,"props":7054,"children":7055},{"style":712},[7056],{"type":169,"value":7057},"\u002Fchmod ",{"type":164,"tag":221,"props":7059,"children":7060},{"style":523},[7061],{"type":169,"value":7062},"];",{"type":164,"tag":221,"props":7064,"children":7065},{"style":773},[7066],{"type":169,"value":7067}," then\n",{"type":164,"tag":221,"props":7069,"children":7070},{"class":223,"line":12},[7071,7076,7080,7084],{"type":164,"tag":221,"props":7072,"children":7073},{"style":227},[7074],{"type":169,"value":7075},"        sh",{"type":164,"tag":221,"props":7077,"children":7078},{"style":233},[7079],{"type":169,"value":7047},{"type":164,"tag":221,"props":7081,"children":7082},{"style":7050},[7083],{"type":169,"value":6199},{"type":164,"tag":221,"props":7085,"children":7086},{"style":233},[7087],{"type":169,"value":7088},"\u002Fchmod\n",{"type":164,"tag":221,"props":7090,"children":7091},{"class":223,"line":156},[7092],{"type":164,"tag":221,"props":7093,"children":7094},{"style":773},[7095],{"type":169,"value":7096},"    fi\n",{"type":164,"tag":221,"props":7098,"children":7099},{"class":223,"line":135},[7100,7104,7108,7112,7117,7121,7125,7129],{"type":164,"tag":221,"props":7101,"children":7102},{"style":773},[7103],{"type":169,"value":4973},{"type":164,"tag":221,"props":7105,"children":7106},{"style":523},[7107],{"type":169,"value":4978},{"type":164,"tag":221,"props":7109,"children":7110},{"style":353},[7111],{"type":169,"value":4983},{"type":164,"tag":221,"props":7113,"children":7114},{"style":712},[7115],{"type":169,"value":7116}," \u002Fhome\u002F",{"type":164,"tag":221,"props":7118,"children":7119},{"style":7050},[7120],{"type":169,"value":6199},{"type":164,"tag":221,"props":7122,"children":7123},{"style":712},[7124],{"type":169,"value":7057},{"type":164,"tag":221,"props":7126,"children":7127},{"style":523},[7128],{"type":169,"value":7062},{"type":164,"tag":221,"props":7130,"children":7131},{"style":773},[7132],{"type":169,"value":7067},{"type":164,"tag":221,"props":7134,"children":7135},{"class":223,"line":364},[7136,7140,7144,7148],{"type":164,"tag":221,"props":7137,"children":7138},{"style":227},[7139],{"type":169,"value":7075},{"type":164,"tag":221,"props":7141,"children":7142},{"style":233},[7143],{"type":169,"value":7116},{"type":164,"tag":221,"props":7145,"children":7146},{"style":7050},[7147],{"type":169,"value":6199},{"type":164,"tag":221,"props":7149,"children":7150},{"style":233},[7151],{"type":169,"value":7088},{"type":164,"tag":221,"props":7153,"children":7154},{"class":223,"line":377},[7155],{"type":164,"tag":221,"props":7156,"children":7157},{"style":773},[7158],{"type":169,"value":7096},{"type":164,"tag":221,"props":7160,"children":7161},{"class":223,"line":980},[7162],{"type":164,"tag":221,"props":7163,"children":7164},{"style":523},[7165],{"type":169,"value":4146},{"type":164,"tag":165,"props":7167,"children":7168},{},[7169,7171],{"type":169,"value":7170},"Теперь запустить сброс прав на файлы и папки куда быстрее:\n",{"type":164,"tag":217,"props":7172,"children":7174},{"className":7173},[],[7175],{"type":169,"value":7176},"ch {username}",{"type":164,"tag":171,"props":7178,"children":7180},{"id":7179},"короткая-команда-nginx-reload",[7181],{"type":169,"value":7182},"Короткая команда NGINX reload",{"type":164,"tag":165,"props":7184,"children":7185},{},[7186,7188,7194,7196,7202,7204,7209],{"type":169,"value":7187},"Часто при настройке NGINX конфига приходится командовать ",{"type":164,"tag":217,"props":7189,"children":7191},{"className":7190},[],[7192],{"type":169,"value":7193},"nginx -t",{"type":169,"value":7195}," и если ошибок нет, то ",{"type":164,"tag":217,"props":7197,"children":7199},{"className":7198},[],[7200],{"type":169,"value":7201},"service nginx reload",{"type":169,"value":7203},". Это можно делать на автомате. Для этого идём в ",{"type":164,"tag":217,"props":7205,"children":7207},{"className":7206},[],[7208],{"type":169,"value":6994},{"type":169,"value":6996},{"type":164,"tag":209,"props":7211,"children":7213},{"className":211,"code":7212,"language":213,"meta":123,"style":214},"# Reload NGINX or print failure message\nnginxreload() {\n    NGINX_TEST=`nginx -t 2>&1`; if [[ $NGINX_TEST =~ .*failed.* ]]; then echo \"$NGINX_TEST\"; else service nginx reload && echo \"OK\"; fi\n}\nngxreload() {\n    nginxreload\n}\nngxrel() {\n    nginxreload\n}\n",[7214],{"type":164,"tag":217,"props":7215,"children":7216},{"__ignoreMap":123},[7217,7225,7241,7386,7393,7409,7417,7424,7440,7447],{"type":164,"tag":221,"props":7218,"children":7219},{"class":223,"line":40},[7220],{"type":164,"tag":221,"props":7221,"children":7222},{"style":4135},[7223],{"type":169,"value":7224},"# Reload NGINX or print failure message\n",{"type":164,"tag":221,"props":7226,"children":7227},{"class":223,"line":32},[7228,7233,7237],{"type":164,"tag":221,"props":7229,"children":7230},{"style":227},[7231],{"type":169,"value":7232},"nginxreload",{"type":164,"tag":221,"props":7234,"children":7235},{"style":523},[7236],{"type":169,"value":5991},{"type":164,"tag":221,"props":7238,"children":7239},{"style":523},[7240],{"type":169,"value":4112},{"type":164,"tag":221,"props":7242,"children":7243},{"class":223,"line":105},[7244,7249,7253,7257,7261,7266,7271,7275,7279,7284,7289,7294,7299,7303,7307,7312,7316,7321,7325,7329,7333,7338,7342,7346,7351,7355,7359,7364,7368,7372,7377,7381],{"type":164,"tag":221,"props":7245,"children":7246},{"style":712},[7247],{"type":169,"value":7248},"    NGINX_TEST",{"type":164,"tag":221,"props":7250,"children":7251},{"style":353},[7252],{"type":169,"value":720},{"type":164,"tag":221,"props":7254,"children":7255},{"style":4891},[7256],{"type":169,"value":4952},{"type":164,"tag":221,"props":7258,"children":7259},{"style":227},[7260],{"type":169,"value":4019},{"type":164,"tag":221,"props":7262,"children":7263},{"style":277},[7264],{"type":169,"value":7265}," -t",{"type":164,"tag":221,"props":7267,"children":7268},{"style":353},[7269],{"type":169,"value":7270}," 2>&1",{"type":164,"tag":221,"props":7272,"children":7273},{"style":4891},[7274],{"type":169,"value":4952},{"type":164,"tag":221,"props":7276,"children":7277},{"style":523},[7278],{"type":169,"value":700},{"type":164,"tag":221,"props":7280,"children":7281},{"style":773},[7282],{"type":169,"value":7283}," if",{"type":164,"tag":221,"props":7285,"children":7286},{"style":523},[7287],{"type":169,"value":7288}," [[",{"type":164,"tag":221,"props":7290,"children":7291},{"style":712},[7292],{"type":169,"value":7293}," $NGINX_TEST ",{"type":164,"tag":221,"props":7295,"children":7296},{"style":353},[7297],{"type":169,"value":7298},"=~",{"type":164,"tag":221,"props":7300,"children":7301},{"style":712},[7302],{"type":169,"value":2618},{"type":164,"tag":221,"props":7304,"children":7305},{"style":353},[7306],{"type":169,"value":2072},{"type":164,"tag":221,"props":7308,"children":7309},{"style":712},[7310],{"type":169,"value":7311},"failed.",{"type":164,"tag":221,"props":7313,"children":7314},{"style":353},[7315],{"type":169,"value":2072},{"type":164,"tag":221,"props":7317,"children":7318},{"style":523},[7319],{"type":169,"value":7320}," ]];",{"type":164,"tag":221,"props":7322,"children":7323},{"style":773},[7324],{"type":169,"value":809},{"type":164,"tag":221,"props":7326,"children":7327},{"style":819},[7328],{"type":169,"value":345},{"type":164,"tag":221,"props":7330,"children":7331},{"style":233},[7332],{"type":169,"value":6193},{"type":164,"tag":221,"props":7334,"children":7335},{"style":712},[7336],{"type":169,"value":7337},"$NGINX_TEST",{"type":164,"tag":221,"props":7339,"children":7340},{"style":233},[7341],{"type":169,"value":6204},{"type":164,"tag":221,"props":7343,"children":7344},{"style":523},[7345],{"type":169,"value":700},{"type":164,"tag":221,"props":7347,"children":7348},{"style":773},[7349],{"type":169,"value":7350}," else",{"type":164,"tag":221,"props":7352,"children":7353},{"style":227},[7354],{"type":169,"value":1089},{"type":164,"tag":221,"props":7356,"children":7357},{"style":233},[7358],{"type":169,"value":3813},{"type":164,"tag":221,"props":7360,"children":7361},{"style":233},[7362],{"type":169,"value":7363}," reload",{"type":164,"tag":221,"props":7365,"children":7366},{"style":523},[7367],{"type":169,"value":526},{"type":164,"tag":221,"props":7369,"children":7370},{"style":819},[7371],{"type":169,"value":345},{"type":164,"tag":221,"props":7373,"children":7374},{"style":233},[7375],{"type":169,"value":7376}," \"OK\"",{"type":164,"tag":221,"props":7378,"children":7379},{"style":523},[7380],{"type":169,"value":700},{"type":164,"tag":221,"props":7382,"children":7383},{"style":773},[7384],{"type":169,"value":7385}," fi\n",{"type":164,"tag":221,"props":7387,"children":7388},{"class":223,"line":12},[7389],{"type":164,"tag":221,"props":7390,"children":7391},{"style":523},[7392],{"type":169,"value":4146},{"type":164,"tag":221,"props":7394,"children":7395},{"class":223,"line":156},[7396,7401,7405],{"type":164,"tag":221,"props":7397,"children":7398},{"style":227},[7399],{"type":169,"value":7400},"ngxreload",{"type":164,"tag":221,"props":7402,"children":7403},{"style":523},[7404],{"type":169,"value":5991},{"type":164,"tag":221,"props":7406,"children":7407},{"style":523},[7408],{"type":169,"value":4112},{"type":164,"tag":221,"props":7410,"children":7411},{"class":223,"line":135},[7412],{"type":164,"tag":221,"props":7413,"children":7414},{"style":227},[7415],{"type":169,"value":7416},"    nginxreload\n",{"type":164,"tag":221,"props":7418,"children":7419},{"class":223,"line":364},[7420],{"type":164,"tag":221,"props":7421,"children":7422},{"style":523},[7423],{"type":169,"value":4146},{"type":164,"tag":221,"props":7425,"children":7426},{"class":223,"line":377},[7427,7432,7436],{"type":164,"tag":221,"props":7428,"children":7429},{"style":227},[7430],{"type":169,"value":7431},"ngxrel",{"type":164,"tag":221,"props":7433,"children":7434},{"style":523},[7435],{"type":169,"value":5991},{"type":164,"tag":221,"props":7437,"children":7438},{"style":523},[7439],{"type":169,"value":4112},{"type":164,"tag":221,"props":7441,"children":7442},{"class":223,"line":980},[7443],{"type":164,"tag":221,"props":7444,"children":7445},{"style":227},[7446],{"type":169,"value":7416},{"type":164,"tag":221,"props":7448,"children":7449},{"class":223,"line":1021},[7450],{"type":164,"tag":221,"props":7451,"children":7452},{"style":523},[7453],{"type":169,"value":4146},{"type":164,"tag":165,"props":7455,"children":7456},{},[7457,7459,7464,7465,7470,7471,7476],{"type":169,"value":7458},"Теперь командуя ",{"type":164,"tag":217,"props":7460,"children":7462},{"className":7461},[],[7463],{"type":169,"value":7232},{"type":169,"value":6641},{"type":164,"tag":217,"props":7466,"children":7468},{"className":7467},[],[7469],{"type":169,"value":7400},{"type":169,"value":5823},{"type":164,"tag":217,"props":7472,"children":7474},{"className":7473},[],[7475],{"type":169,"value":7431},{"type":169,"value":7477}," сначала будет происходить тест и только потом релоад конфига, иначе вывод ошибки, если нарушен синтаксис.",{"type":164,"tag":171,"props":7479,"children":7481},{"id":7480},"короткая-команда-получения-размера-папки",[7482],{"type":169,"value":7483},"Короткая команда получения размера папки",{"type":164,"tag":165,"props":7485,"children":7486},{},[7487,7489,7494],{"type":169,"value":7488},"В ",{"type":164,"tag":217,"props":7490,"children":7492},{"className":7491},[],[7493],{"type":169,"value":6994},{"type":169,"value":7495}," в конец добавляем:",{"type":164,"tag":209,"props":7497,"children":7499},{"className":211,"code":7498,"language":213,"meta":123,"style":214},"# Folder size\nfoldersize() {\n    du -chs $1\n}\ndirsize() {\n    foldersize $1\n}\ndsz() {\n    foldersize $1\n}\n",[7500],{"type":164,"tag":217,"props":7501,"children":7502},{"__ignoreMap":123},[7503,7511,7527,7545,7552,7568,7580,7587,7603,7614],{"type":164,"tag":221,"props":7504,"children":7505},{"class":223,"line":40},[7506],{"type":164,"tag":221,"props":7507,"children":7508},{"style":4135},[7509],{"type":169,"value":7510},"# Folder size\n",{"type":164,"tag":221,"props":7512,"children":7513},{"class":223,"line":32},[7514,7519,7523],{"type":164,"tag":221,"props":7515,"children":7516},{"style":227},[7517],{"type":169,"value":7518},"foldersize",{"type":164,"tag":221,"props":7520,"children":7521},{"style":523},[7522],{"type":169,"value":5991},{"type":164,"tag":221,"props":7524,"children":7525},{"style":523},[7526],{"type":169,"value":4112},{"type":164,"tag":221,"props":7528,"children":7529},{"class":223,"line":105},[7530,7535,7540],{"type":164,"tag":221,"props":7531,"children":7532},{"style":227},[7533],{"type":169,"value":7534},"    du",{"type":164,"tag":221,"props":7536,"children":7537},{"style":277},[7538],{"type":169,"value":7539}," -chs",{"type":164,"tag":221,"props":7541,"children":7542},{"style":7050},[7543],{"type":169,"value":7544}," $1\n",{"type":164,"tag":221,"props":7546,"children":7547},{"class":223,"line":12},[7548],{"type":164,"tag":221,"props":7549,"children":7550},{"style":523},[7551],{"type":169,"value":4146},{"type":164,"tag":221,"props":7553,"children":7554},{"class":223,"line":156},[7555,7560,7564],{"type":164,"tag":221,"props":7556,"children":7557},{"style":227},[7558],{"type":169,"value":7559},"dirsize",{"type":164,"tag":221,"props":7561,"children":7562},{"style":523},[7563],{"type":169,"value":5991},{"type":164,"tag":221,"props":7565,"children":7566},{"style":523},[7567],{"type":169,"value":4112},{"type":164,"tag":221,"props":7569,"children":7570},{"class":223,"line":135},[7571,7576],{"type":164,"tag":221,"props":7572,"children":7573},{"style":227},[7574],{"type":169,"value":7575},"    foldersize",{"type":164,"tag":221,"props":7577,"children":7578},{"style":7050},[7579],{"type":169,"value":7544},{"type":164,"tag":221,"props":7581,"children":7582},{"class":223,"line":364},[7583],{"type":164,"tag":221,"props":7584,"children":7585},{"style":523},[7586],{"type":169,"value":4146},{"type":164,"tag":221,"props":7588,"children":7589},{"class":223,"line":377},[7590,7595,7599],{"type":164,"tag":221,"props":7591,"children":7592},{"style":227},[7593],{"type":169,"value":7594},"dsz",{"type":164,"tag":221,"props":7596,"children":7597},{"style":523},[7598],{"type":169,"value":5991},{"type":164,"tag":221,"props":7600,"children":7601},{"style":523},[7602],{"type":169,"value":4112},{"type":164,"tag":221,"props":7604,"children":7605},{"class":223,"line":980},[7606,7610],{"type":164,"tag":221,"props":7607,"children":7608},{"style":227},[7609],{"type":169,"value":7575},{"type":164,"tag":221,"props":7611,"children":7612},{"style":7050},[7613],{"type":169,"value":7544},{"type":164,"tag":221,"props":7615,"children":7616},{"class":223,"line":1021},[7617],{"type":164,"tag":221,"props":7618,"children":7619},{"style":523},[7620],{"type":169,"value":4146},{"type":164,"tag":165,"props":7622,"children":7623},{},[7624,7626],{"type":169,"value":7625},"Проверить размер директории так:\n",{"type":164,"tag":217,"props":7627,"children":7629},{"className":7628},[],[7630],{"type":169,"value":7631},"dsz \u002Fvar\u002Fwww",{"type":164,"tag":171,"props":7633,"children":7635},{"id":7634},"docker",[7636],{"type":169,"value":7637},"Docker",{"type":164,"tag":165,"props":7639,"children":7640},{},[7641,7643],{"type":169,"value":7642},"Ставим Docker:\n",{"type":164,"tag":217,"props":7644,"children":7646},{"className":7645},[],[7647],{"type":169,"value":7648},"apt install docker.io",{"type":164,"tag":165,"props":7650,"children":7651},{},[7652,7654,7660,7662],{"type":169,"value":7653},"Добавляем группу docker:\n",{"type":164,"tag":217,"props":7655,"children":7657},{"className":7656},[],[7658],{"type":169,"value":7659},"sudo groupadd docker",{"type":169,"value":7661},"\nВ последующем мы можем разрешить юзеру пользоваться Docker, просто добавив его в данную группу:\n",{"type":164,"tag":217,"props":7663,"children":7665},{"className":7664},[],[7666],{"type":169,"value":7667},"sudo usermod -aG docker $USERNAME",{"type":164,"tag":165,"props":7669,"children":7670},{},[7671,7673],{"type":169,"value":7672},"Проверяем, что Docker установился:\n",{"type":164,"tag":217,"props":7674,"children":7676},{"className":7675},[],[7677],{"type":169,"value":7678},"sudo docker run hello-world",{"type":164,"tag":171,"props":7680,"children":7682},{"id":7681},"sprutio",[7683],{"type":169,"value":7684},"Sprut.io",{"type":164,"tag":165,"props":7686,"children":7687},{},[7688,7690],{"type":169,"value":7689},"Ставим Sprut.io - ",{"type":164,"tag":183,"props":7691,"children":7694},{"href":7692,"rel":7693},"https:\u002F\u002Fsprut.io\u002Fru\u002Finstall",[187],[7695],{"type":169,"value":7692},{"type":164,"tag":171,"props":7697,"children":7699},{"id":7698},"бекапы-с-gvozdbdumper",[7700],{"type":169,"value":7701},"Бекапы с Gvozdb\u002FDumper",{"type":164,"tag":165,"props":7703,"children":7704},{},[7705,7711],{"type":164,"tag":183,"props":7706,"children":7708},{"href":7707},"\u002Flinux\u002Fdumper",[7709],{"type":169,"value":7710},"Здесь описано подробно",{"type":169,"value":7712},", как настраивать и пользоваться библиотекой.",{"type":164,"tag":171,"props":7714,"children":7716},{"id":7715},"ssl-сертификаты",[7717],{"type":169,"value":7718},"SSL сертификаты",{"type":164,"tag":165,"props":7720,"children":7721},{},[7722,7728],{"type":164,"tag":183,"props":7723,"children":7725},{"href":7724},"\u002Flinux\u002Fssl",[7726],{"type":169,"value":7727},"Здесь подробно про SSL сертификаты",{"type":169,"value":7729}," от Let's encrypt.",{"type":164,"tag":171,"props":7731,"children":7733},{"id":7732},"возможные-проблемы",[7734],{"type":169,"value":7735},"Возможные проблемы",{"type":164,"tag":165,"props":7737,"children":7738},{},[7739],{"type":169,"value":7740},"При настройке сервера могут возникнуть те или иные проблемы. Я постарался многие из них учесть тут.",{"type":164,"tag":7742,"props":7743,"children":7745},"h3",{"id":7744},"failed-to-start-apt-newsserviceesm-cacheservice-not-found",[7746],{"type":169,"value":7747},"Failed to start apt-news.service\u002Fesm-cache.service ... not found",{"type":164,"tag":165,"props":7749,"children":7750},{},[7751,7753,7758,7760,7766,7767,7773,7775,7781,7782],{"type":169,"value":7752},"При ",{"type":164,"tag":217,"props":7754,"children":7756},{"className":7755},[],[7757],{"type":169,"value":2580},{"type":169,"value":7759}," может возникать ошибка: ",{"type":164,"tag":217,"props":7761,"children":7763},{"className":7762},[],[7764],{"type":169,"value":7765},"Failed to start apt-news.service: Unit apt-news.service not found",{"type":169,"value":4822},{"type":164,"tag":217,"props":7768,"children":7770},{"className":7769},[],[7771],{"type":169,"value":7772},"Failed to start esm-cache.service: Unit esm-cache.service not found",{"type":169,"value":7774},".\nЧтобы исправить, запустите установку ",{"type":164,"tag":217,"props":7776,"children":7778},{"className":7777},[],[7779],{"type":169,"value":7780},"ubuntu-advantage-tools",{"type":169,"value":5839},{"type":164,"tag":217,"props":7783,"children":7785},{"className":7784},[],[7786],{"type":169,"value":7787},"sudo apt install ubuntu-advantage-tools",{"type":164,"tag":7742,"props":7789,"children":7791},{"id":7790},"modulenotfounderror-no-module-named-apt_pkg",[7792],{"type":169,"value":7793},"ModuleNotFoundError: No module named apt_pkg",{"type":164,"tag":165,"props":7795,"children":7796},{},[7797,7799,7805,7807,7814,7816,7822],{"type":169,"value":7798},"При добавлении репозитория через ",{"type":164,"tag":217,"props":7800,"children":7802},{"className":7801},[],[7803],{"type":169,"value":7804},"add-apt-repository",{"type":169,"value":7806}," может возникать ошибка о ненахождении модуля apt_pkg. Для исправления проблемы надо залить ",{"type":164,"tag":183,"props":7808,"children":7811},{"href":7809,"rel":7810},"https:\u002F\u002Fbackend.new.gvozdb.ru\u002Fuploads\u002Fapt_pkg_cpython_310_x86_64_linux_gnu_c490da2b1f.so",[187],[7812],{"type":169,"value":7813},"этот файл",{"type":169,"value":7815}," в ",{"type":164,"tag":217,"props":7817,"children":7819},{"className":7818},[],[7820],{"type":169,"value":7821},"\u002Fusr\u002Flib\u002Fpython3\u002Fdist-packages\u002F",{"type":169,"value":7823},". К сожалению я не нашёл другого решения, сохранив Python3.10. Либо же отказываться от Python3.10 и такой проблемы априори не должно быть.",{"type":164,"tag":7825,"props":7826,"children":7827},"style",{},[7828],{"type":169,"value":7829},".shiki,html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}.dark .shiki,html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":123,"searchDepth":32,"depth":32,"links":7831},[7832,7833,7834,7835,7836,7837,7838,7839,7840,7841,7842,7843,7844,7845,7846,7847,7848,7849,7850,7851,7852],{"id":173,"depth":32,"text":176},{"id":204,"depth":32,"text":207},{"id":1102,"depth":32,"text":1105},{"id":1454,"depth":32,"text":1457},{"id":1724,"depth":32,"text":1727},{"id":1753,"depth":32,"text":1756},{"id":1923,"depth":32,"text":1926},{"id":2144,"depth":32,"text":2147},{"id":2504,"depth":32,"text":2507},{"id":5467,"depth":32,"text":5470},{"id":6414,"depth":32,"text":6417},{"id":6446,"depth":32,"text":6449},{"id":6664,"depth":32,"text":6667},{"id":6964,"depth":32,"text":6967},{"id":7179,"depth":32,"text":7182},{"id":7480,"depth":32,"text":7483},{"id":7634,"depth":32,"text":7637},{"id":7681,"depth":32,"text":7684},{"id":7698,"depth":32,"text":7701},{"id":7715,"depth":32,"text":7718},{"id":7732,"depth":32,"text":7735,"children":7853},[7854,7855],{"id":7744,"depth":105,"text":7747},{"id":7790,"depth":105,"text":7793},[7857,7878,7888,7896],{"id":96,"documentId":7858,"content":7859,"blocked":126,"blockedThread":126,"removed":126,"entityUid":7860,"entityId":6,"ip":7861,"userAgent":7862,"anonym":7863,"sessionId":7862,"createdAt":7867,"updatedAt":7867,"publishedAt":7867,"locale":16,"author":16,"threadOf":16,"isOwner":126,"canEdit":126,"reactions":7868,"userReaction":16,"children":7869},"m2mpp0vj0yfb79ye2uoz2br7","Павел, скажите пожалуйста, под каким именем входить в созданный сайт хост-панели? Указал так же, как у вас, host. Директория создалась, сайт работает, в админку войти не могу","api::post.post","0.0.0.0","modx-migration",{"id":7864,"name":7865,"email":7866,"migrated":17,"modxCommentId":1062},"anonymous_modx_8uo4w2","Андрей","lic10sov@ya.ru","2017-10-17T10:48:41.000Z",{"like":23,"dislike":23},[7870],{"id":99,"documentId":7871,"content":7872,"blocked":126,"blockedThread":126,"removed":126,"entityUid":7860,"entityId":6,"ip":7861,"userAgent":7862,"anonym":7873,"sessionId":7862,"createdAt":7874,"updatedAt":7874,"publishedAt":7874,"locale":16,"author":16,"threadOf":7875,"isOwner":126,"canEdit":126,"reactions":7876,"userReaction":16,"children":7877},"ijkkktvln29hmlr92nq3tol7","Извиняюсь, нашел текстовый файл допуска.\nСпасибо за классный мануал!",{"id":7864,"name":7865,"email":7866,"migrated":17,"modxCommentId":1079},"2017-10-17T11:10:32.000Z",{"id":96,"documentId":7858},{"like":23,"dislike":23},[],{"id":102,"documentId":7879,"content":7880,"blocked":126,"blockedThread":126,"removed":126,"entityUid":7860,"entityId":6,"ip":7861,"userAgent":7862,"anonym":7881,"sessionId":7862,"createdAt":7885,"updatedAt":7885,"publishedAt":7885,"locale":16,"author":16,"threadOf":16,"isOwner":126,"canEdit":126,"reactions":7886,"userReaction":16,"children":7887},"mrhwqk7doo33aijx3s96v1y3","Оказалось, что в 20.04 уже 8я версия mysql, и потребуется пошаманить вот так\nhttps:\u002F\u002Flosst.ru\u002Fustanovka-mysql-ubuntu-16-04\nчтобы установить 5.7",{"id":7882,"name":7883,"email":7884,"migrated":17,"modxCommentId":4291},"anonymous_modx_r8abzv","Alex","polonez@mail.ru","2021-02-11T16:32:52.000Z",{"like":23,"dislike":23},[],{"id":7889,"documentId":7890,"content":7891,"blocked":126,"blockedThread":126,"removed":126,"entityUid":7860,"entityId":6,"ip":7861,"userAgent":7862,"anonym":7892,"sessionId":7862,"createdAt":7893,"updatedAt":7893,"publishedAt":7893,"locale":16,"author":16,"threadOf":16,"isOwner":126,"canEdit":126,"reactions":7894,"userReaction":16,"children":7895},110,"sacgacuwu17n52g5dlcw904m","а вот что в результате получилось!\nhttps:\u002F\u002Ffile.modx.pro\u002Ffiles\u002F0\u002F7\u002F5\u002F0754456d4c0db2e81aaac5869bb48726.png",{"id":7882,"name":7883,"email":7884,"migrated":17,"modxCommentId":4309},"2021-02-11T18:05:18.000Z",{"like":23,"dislike":23},[],{"id":7897,"documentId":7898,"content":7899,"blocked":126,"blockedThread":126,"removed":126,"entityUid":7860,"entityId":6,"ip":7861,"userAgent":7862,"anonym":7900,"sessionId":7862,"createdAt":7905,"updatedAt":7905,"publishedAt":7905,"locale":16,"author":16,"threadOf":16,"isOwner":126,"canEdit":126,"reactions":7906,"userReaction":16,"children":7907},111,"pk4j9vbqevgimjnf9kmdnwyv","`https:\u002F\u002Filyaut.ru\u002Fmodx\u002Fmodx-2.8.8-pl.zip - 404`\nИ это `sudo gpg --keyserver keyserver.ubuntu.com --recv-keys 467B942D3A79BD29` уже судя по всему не работает",{"id":7901,"name":7902,"email":7903,"migrated":17,"modxCommentId":7904},"anonymous_modx_iehfj4","Николай","suslikt@ya.ru",55,"2025-11-13T15:44:39.000Z",{"like":23,"dislike":23},[],[7909,7922,7929,7938,7947,7958,7966,7974,7982,7990,7998,8006,8014,8022,8030],{"id":4203,"documentId":7910,"name":7911,"slug":7912,"textcolor":16,"bgcolor":16,"published":17,"uri":16,"createdAt":7913,"updatedAt":7913,"publishedAt":7914,"locale":22,"heading":16,"desc":16,"posts":7915},"aju4latl5hi6906pt0ktlb1g","Linux","linux","2026-05-16T10:03:45.426Z","2026-05-16T10:03:45.422Z",[7916,7917,7918,7919,7920,7921],{"id":60,"documentId":61},{"id":63,"documentId":64},{"id":66,"documentId":67},{"id":69,"documentId":70},{"id":84,"documentId":85},{"id":96,"documentId":97},{"id":135,"documentId":136,"name":137,"slug":138,"textcolor":16,"bgcolor":16,"published":17,"uri":16,"createdAt":139,"updatedAt":139,"publishedAt":140,"locale":22,"heading":16,"desc":16,"posts":7923},[7924,7925,7926,7927,7928],{"id":49,"documentId":6},{"id":51,"documentId":52},{"id":75,"documentId":76},{"id":90,"documentId":91},{"id":93,"documentId":94},{"id":4257,"documentId":7930,"name":7931,"slug":7932,"textcolor":16,"bgcolor":16,"published":17,"uri":16,"createdAt":7933,"updatedAt":7933,"publishedAt":7934,"locale":22,"heading":16,"desc":16,"posts":7935},"bfi7bs1ny52g8tz3ok8wrngy","macOS","macos","2026-05-16T10:33:46.268Z","2026-05-16T10:33:46.265Z",[7936,7937],{"id":43,"documentId":44},{"id":57,"documentId":58},{"id":4274,"documentId":7939,"name":7940,"slug":7941,"textcolor":16,"bgcolor":16,"published":17,"uri":16,"createdAt":7942,"updatedAt":7942,"publishedAt":7943,"locale":22,"heading":16,"desc":16,"posts":7944},"georvivt518jgm5vp8rcv0kv","Инструменты","instrumenty","2026-05-16T10:33:46.941Z","2026-05-16T10:33:46.938Z",[7945,7946],{"id":54,"documentId":55},{"id":78,"documentId":79},{"id":4446,"documentId":7948,"name":7949,"slug":7950,"textcolor":16,"bgcolor":16,"published":17,"uri":7951,"createdAt":7952,"updatedAt":7952,"publishedAt":7953,"locale":22,"heading":7954,"desc":123,"posts":7955},"dcyh9y95rmthzo6oip4ftoez","AI","ai","\u002Fai","2026-05-30T10:54:12.198Z","2026-05-30T10:54:12.192Z","Искусственный интеллект",[7956,7957],{"id":99,"documentId":100},{"id":102,"documentId":103},{"id":105,"documentId":7959,"name":7960,"slug":7961,"textcolor":16,"bgcolor":16,"published":17,"uri":16,"createdAt":7962,"updatedAt":7962,"publishedAt":7963,"locale":22,"heading":16,"desc":16,"posts":7964},"tfr5asfr2apchhtgxje8epz1","Стихи","stihi","2026-05-16T10:03:43.872Z","2026-05-16T10:03:43.861Z",[7965],{"id":26,"documentId":27},{"id":156,"documentId":7967,"name":7968,"slug":7969,"textcolor":16,"bgcolor":16,"published":17,"uri":16,"createdAt":7970,"updatedAt":7970,"publishedAt":7971,"locale":22,"heading":16,"desc":16,"posts":7972},"c7joczpqlb928nxr2l5qyg9m","Мысли","mysli","2026-05-16T10:03:44.061Z","2026-05-16T10:03:44.054Z",[7973],{"id":115,"documentId":116},{"id":377,"documentId":7975,"name":7976,"slug":7977,"textcolor":16,"bgcolor":16,"published":17,"uri":16,"createdAt":7978,"updatedAt":7978,"publishedAt":7979,"locale":22,"heading":16,"desc":16,"posts":7980},"dwpf4sx017aq366ygh46evsc","Психология","psihologiya","2026-05-16T10:03:44.268Z","2026-05-16T10:03:44.264Z",[7981],{"id":118,"documentId":119},{"id":4176,"documentId":7983,"name":7984,"slug":7985,"textcolor":16,"bgcolor":16,"published":17,"uri":16,"createdAt":7986,"updatedAt":7986,"publishedAt":7987,"locale":22,"heading":16,"desc":16,"posts":7988},"qolbs7a9lkvr15oytyy3gj03","CSS","css","2026-05-16T10:03:45.289Z","2026-05-16T10:03:45.283Z",[7989],{"id":81,"documentId":82},{"id":4194,"documentId":7991,"name":7992,"slug":7993,"textcolor":16,"bgcolor":16,"published":17,"uri":16,"createdAt":7994,"updatedAt":7994,"publishedAt":7995,"locale":22,"heading":16,"desc":16,"posts":7996},"lz1k1ridxwxre34lzf0jfl3t","SASS","sass","2026-05-16T10:03:45.319Z","2026-05-16T10:03:45.314Z",[7997],{"id":81,"documentId":82},{"id":4211,"documentId":7999,"name":8000,"slug":8001,"textcolor":16,"bgcolor":16,"published":17,"uri":16,"createdAt":8002,"updatedAt":8002,"publishedAt":8003,"locale":22,"heading":16,"desc":16,"posts":8004},"czaf643kmvvab1xf4gx3ddh9","VPN","vpn","2026-05-16T10:03:45.455Z","2026-05-16T10:03:45.446Z",[8005],{"id":84,"documentId":85},{"id":4239,"documentId":8007,"name":8008,"slug":8009,"textcolor":16,"bgcolor":16,"published":17,"uri":16,"createdAt":8010,"updatedAt":8010,"publishedAt":8011,"locale":22,"heading":16,"desc":16,"posts":8012},"gpitv9ds3usb3p8j7sgajglb","SEO","seo","2026-05-16T10:33:46.002Z","2026-05-16T10:33:45.995Z",[8013],{"id":46,"documentId":47},{"id":4291,"documentId":8015,"name":8016,"slug":8017,"textcolor":16,"bgcolor":16,"published":17,"uri":16,"createdAt":8018,"updatedAt":8018,"publishedAt":8019,"locale":22,"heading":16,"desc":16,"posts":8020},"htsr27rbn93onqsys2gavt4m","Phpstorm","phpstorm","2026-05-16T10:33:46.959Z","2026-05-16T10:33:46.956Z",[8021],{"id":54,"documentId":55},{"id":4406,"documentId":8023,"name":8024,"slug":8025,"textcolor":16,"bgcolor":16,"published":17,"uri":16,"createdAt":8026,"updatedAt":8026,"publishedAt":8027,"locale":22,"heading":16,"desc":16,"posts":8028},"l9ruh02w7yl3rvez05s8ndv7","Node.js","node-js","2026-05-16T10:33:47.947Z","2026-05-16T10:33:47.944Z",[8029],{"id":72,"documentId":73},{"id":4429,"documentId":8031,"name":8032,"slug":8033,"textcolor":16,"bgcolor":16,"published":17,"uri":16,"createdAt":8034,"updatedAt":8034,"publishedAt":8035,"locale":22,"heading":16,"desc":16,"posts":8036},"xkffo03bgoiimugiwqgryrx0","Крипта","kripta","2026-05-16T10:33:48.241Z","2026-05-16T10:33:48.237Z",[8037],{"id":87,"documentId":88}]