• Сайт на питоне (фласк) перенести на хостинг?

    gedev
    @gedev
    сисадмин-энтузиаст
    Я бы посоветовал вам сначала изучить как работает веб-сервер. Затем почитать о WSGI-серверах. После руками попробовать запустить первое и второе. Информацию искать надо не только у хостеров. Начните с основ, а дальше уже сможете осознанно работать.

    С учётом того, что вы так полагаетесь на поддержку хостинга, к докеру вам рановато прикасаться. А VPS будет хорошим полигоном для обучения. Веб разработчик без знания веба это печаль.

    Можно начать с банального — развернуть обычную HTML страницу. Добавить домен, настроить Nginx, добавить SSL. Потом попробуйте запустить ваше приложение на Flask с каким-нибудь WSGI-сервером, самый популярный выбор — gunicorn. Разберитесь что такое реверс-прокси и настройте его для вашего приложения.
    Ответ написан
    Комментировать
  • Как работает метод max() для списка из списков?

    gedev
    @gedev
    сисадмин-энтузиаст
    Посмотрите на свой список, у вас там строки, а не числа. С числами всё работает так как вы ожидаете. А вот строки в Python сравниваются иначе — по их ASCII/Unicode кодам.
    >>> green = [[0.01775, 274903], [0.0177, 2767608], [0.01765, 1966445], [0.0176, 698199], [0.01755, 2853585], [0.0175, 944079], [0.01745, 2813977], [0.0174, 336701], [0.01735, 2118072], [0.0173, 975570]]
    >>> max(green, key=lambda x: x[1])
    [0.01755, 2853585]
    Ответ написан
    1 комментарий
  • Как сделать так, чтобы пользователь Linux мог просматривать только выбранные папки?

    gedev
    @gedev
    сисадмин-энтузиаст
    Такой вопрос уже был и не раз https://qna.habr.com/q/681178 Посмотрите, перейдите там по ссылкам, почитайте чем чревато. По первой же ссылке из гугла есть статья https://linuxconfig.org/jail-ssh-user-to-home-dire... с примером. Обычно решается такое через chroot.

    Коротко — ограничивая пользователя домашней директорией вы также отрезаете его от всей системы и программ которые в ней есть. В *NIX программы размазаны почти по всей ФС и для их корректной работы всё это придётся дублировать и следить чтобы не хардкодились пути в конфигах. Поэтому придётся копировать глобальное окружение в диру юзера.

    Много мороки и мало реальной пользы. Вместо того, чтобы пытаться загнать юзера в домашнюю диру лучше правильно расставьте права доступа к директориям и файлам за которыми хотите следить.
    Ответ написан
    Комментировать
  • Как в разных папках найти дубли фотографий и переместить их в одну другую папку?

    gedev
    @gedev
    сисадмин-энтузиаст
    Как уже сказали, можно сравнивать файлы по хэшу и самому писать велосипеды, но вот здесь есть готовая утилита, которая умеет искать дубли: https://github.com/pkolaczk/fclones

    Пример:
    fclones group -f json -o duplicates.json /путь
    Выплюнет следующего вида JSON:
    spoiler

    {
      "header": {
        "version": "0.27.3",
        "timestamp": "2022-09-15T19:14:53.719409270+03:00",
        "command": [
          "/snap/fclones/19/bin/fclones",
          "group",
          "-f",
          "json",
          "."
        ],
        "base_dir": "/root/clones",
        "stats": {
          "group_count": 2,
          "total_file_count": 4,
          "total_file_size": 1256780,
          "redundant_file_count": 2,
          "redundant_file_size": 628390,
          "missing_file_count": 0,
          "missing_file_size": 0
        }
      },
      "groups": [
        {
          "file_len": 497684,
          "file_hash": "3181bc6f0fecd38df0199d60e1189ba7",
          "files": [
            "/root/clones/IMG_20181016_045456 (copy).jpg",
            "/root/clones/IMG_20181016_045456.jpg"
          ]
        },
        {
          "file_len": 130706,
          "file_hash": "5836d61ea4da8a05efb3870bdeed4028",
          "files": [
            "/root/clones/b3904388-decb-47b7-920c-36208ab8c201 (copy).jpg",
            "/root/clones/b3904388-decb-47b7-920c-36208ab8c201.jpg"
          ]
        }
      ]
    }


    Оттуда уже можно взять имена дубликатов и что-то с ними сделать. Можно на Python что-то подобное:
    import os
    import json
    import shutil
    
    
    source_data = 'd.json'  # исходный JSON
    dest = 'duplicates'  # директория назначения
    
    with open(source_data, 'r') as data:
        dup = json.loads(data.read())
    
    duplicates = []
    for group in dup['groups']:
        for file in group['files']:
            duplicates.append(file)
    
    for file in duplicates:
        if os.path.isfile(file):
            shutil.move(file, dest)
    Ответ написан
    Комментировать
  • Как правильно отредактировать загрузчик Grub?

    gedev
    @gedev
    сисадмин-энтузиаст
    Вообще для таких вещей есть /etc/grub.d/40_custom

    А так можно захолдить пакет, чтобы он не обновлялся.

    sudo apt-mark hold grub-rc
    Ответ написан
    1 комментарий
  • Как рабочий сайт на WP перенести на github и запустить копию в Docker?

    gedev
    @gedev
    сисадмин-энтузиаст
    А у вас какая-то своя модификация (читай форк) Wordpress? Зачем Git/GitHub? В репозиториях кода хранят код, а не сайты. А GitHub не файловое хранилище.

    Если вы задаёте такие вопросы, то ещё не разобрались что есть Git, что есть Docker и зачем они нужны. Поправьте, если ошибаюсь.

    Вам не нужен Git, чтобы собрать образ Docker. Вам не нужен докер, чтобы запустить сайт. Разве что в учебных целях. Предлагаю почитать документацию Docker и попробовать сделать это всё только лишь с ним. Отдельно про Git. Ссылок давать не буду, в интернете терабайты информации и о первом и о втором. Инструкцию здесь вряд ли кто станет давать, всё есть в документации или на худой конец в YouTube.
    Ответ написан
    Комментировать
  • В какой/каких программах посоветуете написать пользовательскую документацию/инструкцию к программе?

    gedev
    @gedev
    сисадмин-энтузиаст
    Решение зависит от того в каком формате нужно получить документацию. Рекомендую писать на языке разметки, а не в текстовом процессоре. В последствии обновлять документацию и конвертировать её в разные форматы будет гораздо проще.

    Markdown подойдёт в большинстве случаев. Для более сложной разметки есть reStructuredText.

    • Есть прекрасный Sphinx, который понимает Markdown и reStructuredText. Умеет генерировать статические сайты, юниксовые страницы мануалов, PDF и ещё много чего из единого исходника.
    • Очень просто на Markdown можно собрать сайт с помощью Docusaurus.
    • Документацию на языке разметки можно выложить в Wiki в репозитории на GitHub, если особых требований к размещению нет.

    Если хочется WYSIWYG, то берите редактор Markdown, который так умеет. Например, Typora.
    Ответ написан
    Комментировать
  • Как сделать запуск/действие в программе через uri?

    gedev
    @gedev
    сисадмин-энтузиаст
    Ваш вопрос в общем то не относится ни к командной строке, ни к Python. Гуглите custom uri scheme for application.

    В разных ОС это по-разному реализуется. Вам где-то (в Windows это реестр) нужно объявить, что вашему приложению соответствует та или иная схема URI. Вот пара ссылочек, остальное сами найдёте:
    https://blog.xojo.com/2016/08/16/custom-uri-scheme...
    https://developer.apple.com/documentation/xcode/de...

    В приложении, на каком языке бы оно не было, вам потребуется реализовать хотя бы простейший парсер URI.
    Ответ написан
    Комментировать
  • Как показывать свое сообщениe, когда команда psql завершается с ошибкой?

    gedev
    @gedev
    сисадмин-энтузиаст
    Можно прямо так, покажет сообщение на любой не нулевой код выхода:
    if ! psql fignya; then
        echo 'Error! '
    fi
    Ответ написан
    Комментировать
  • Почему выдает ошибку #1050 - Table 'users' already exists?

    gedev
    @gedev
    сисадмин-энтузиаст
    А ничего, что у вас уже существует таблица users?

    Используйте синтаксисCREATE TABLE IF NOT EXISTS ...

    https://dev.mysql.com/doc/refman/8.0/en/replicatio...
    Ответ написан
    Комментировать
  • Как сделать для bash скрипта свой итерпритатор?

    gedev
    @gedev
    сисадмин-энтузиаст
    К тому что уже сказали, вот самая примитивная реализация:
    #!/usr/bin/env bash
    
    my_cmd_1() {
        echo "1st command output. Args: $*"
    }
    
    my_cmd_2() {
        echo "2nd command output. Args: $*"
    }
    
    echo 'Available commands: my_cmd_1, my_cmd_2, exit'
    while true; do
        read -erp '>>> '
        $REPLY
        if [[ "$REPLY" == "exit" ]]; then
            break
        fi
    done

    ~ $ ./cmd.sh 
    Available commands: my_cmd_1, my_cmd_2, exit
    >>> my_cmd_1 --option argument
    1st command output. Args: --option argument
    >>> exit

    read --help
    man readline
    Ответ написан
  • Как дать FTP доступ пользователю к определенной папке?

    gedev
    @gedev
    сисадмин-энтузиаст
    Чаще всего авторизация через PAM, поэтому пользователь FTP = пользователь операционной системы. Меняете домашнюю папку пользователя и готово.

    Изменение домашней папки существующего юзера может иметь последствия если какое-то ПО уже завязалось на этих путях. Поэтому рекомендую сделать нового юзера для FTP.
    Ответ написан
    2 комментария
  • Хост SPA в популярных хостинг панелях?

    gedev
    @gedev
    сисадмин-энтузиаст
    Практически все панели пытаются влезать в конфиги и затирать ваши кастомные.

    В случае той же FASTPANEL можно вручную настроить конфиги через вебморду и после также редактировать только так. Любое изменение настроек не через "Ручное редактирвоание" поломает ваш конфиг.

    Если в вашей панели (не помню что там в FASTPANEL) есть Apache с mod_proxy (полагаю вам именно этого нехватает), то положите в директорию на одном уровне с index.html файл .htaccess с нужными настройками. Тогда панель вам не нагадит.
    Ответ написан
    Комментировать
  • Как реализовать досрочное завершение команды в bash?

    gedev
    @gedev
    сисадмин-энтузиаст
    Решение на коленке в лоб. Скрипт пришлёт одно уведомление когда сеть упадёт и одно когда поднимется. Проверка раз в 60 секунд.
    #!/usr/bin/env bash
    
    addr=google.com
    lock=/tmp/connect.failed
    
    while true; do
        if ping -c 1 -W 5 "$addr" &> /dev/null; then
            if [ -f "$lock" ]; then
                notify-send 'Проверка подключения' 'Есть коннект'
                rm "$lock"
            fi
        else
            if [ ! -f "$lock" ]; then
                notify-send 'Проверка подключения' 'Связи нет'
                touch "$lock"
            fi
        fi
        sleep 60
    done
    Ответ написан
    Комментировать
  • Как отправить картинку на сервер?

    gedev
    @gedev
    сисадмин-энтузиаст
    В примере API показано, что картинка передаётся банально в теле запроса с Content Type multipart/form-data, зачем вы пытаетесь передать картинку в query-параметре? Размер у картинок может быть разный, а вы ограничены максимальной длиной URI.

    Посмотрите как это делается тут: https://developer.mozilla.org/ru/docs/Web/API/Form...
    Ответ написан
    Комментировать
  • Apache + NodeJS?

    gedev
    @gedev
    сисадмин-энтузиаст
    столкнулись ли я с какими-либо конфликтами?
    Нет.
    Я бы сделал менее мучительный конфиг (без Apache) — Nginx + PHP-FPM для запуска PHP и на API тоже проксировал через Nginx. Инструкций в интернете сотни.
    Ответ написан
    3 комментария
  • Как верно написать условие bash?

    gedev
    @gedev
    сисадмин-энтузиаст
    Переусложняете.
    #!/bin/sh
    dir=/mnt/d/Downloads
    find "$dir" -type f -regextype egrep -regex '.*\.(mkv|m4v|mp4|ts|avi)' -print0 | sort -zr | xargs -0 -I {} echo {}
    find "$dir" -type f -regextype egrep -regex '.*\.(flac|m4a|ape)' -print0 | sort -zr | xargs -0 -I {} echo {}
    find "$dir" -type f -regextype egrep -regex '.*\.cue' -print0 | sort -zr | xargs -0 -I {} echo {}
    Вместо echo вставьте свою команду. Вместо парных фигурных скобок подставляется имя файла. Если над файлами надо делать сложные действия, то можно сделать по аналогии:
    #!/bin/sh
    dir=/mnt/d/Downloads
    videos="$(find "$dir" -type f -regextype egrep -regex '.*\.(mkv|m4v|mp4|ts|avi)' | sort -r)"
    if [ -n "$videos" ]; then
        x=$IFS; IFS=$'\n';
        for video in "$videos"; do
            # делаем что-то
            echo "$video"
        done
        IFS="$x"
    fi
    Ответ написан
  • 404 ошибка nginx wordpress?

    gedev
    @gedev
    сисадмин-энтузиаст
    Поменяйте корневой локейшн, из-за него у вас не происходит роутинга запросов в CMS. Все запросы должны перенаправляться на index.php.
    location / {
        try_files $uri $uri/ =404 /index.php?$args;
    }
    Ответ написан
    Комментировать