• Какой сервер выбрать для отдачи статики в большом количестве?

    sim3x
    @sim3x
    nginx!
    Ответ написан
    Комментировать
  • Насколько актуален PgQ в 2020 году?

    Melkij
    @Melkij
    PostgreSQL DBA
    Ну раз уж позвали...

    очень плохо документирован

    Тут полностью согласен.

    давно не обновляется и не поддерживается

    А вот тут смотря что подразумевать.
    pgq доступен для postgresql 12 - и для этого был ряд коммитов в pgq в этом году. Аналогично в этом году адаптировали скрипты для python3 вместо бывшего ранее python2. То есть вообще-то поддерживается если трактовать как усилия направленные на восстановление работоспособности.

    или вообще не стоит использовать postgresql, а использовать специализированную базу данных?

    Если вам нужна транзакционная очередь в postgresql - ничего лучше pgq мне неизвестно. Самописные реализации делаются просто и дают фейерверки в работе под нагрузкой. О том смотрите доклады моих коллег, ссылку на доклад Алексея вот уже привели.
    Если вам нужна очередь без привязки к транзакциям в базе - имеет смысл посмотреть специализированные брокеры. Затруднюсь что-то подсказать конкретное.
    Ответ написан
    2 комментария
  • Как обеспечить надежность работы Postgres на Linux (в данном случае на Raspberry Pi)?

    jamakasi666
    @jamakasi666 Куратор тега Linux
    Просто IT'шник.
    Может у кого-то есть подобный опыт как обеспечить более-менее надежность подобных систем?
    Здесь вопрос даже не к raspberry, а вообщем к системам на базе Linux (и не только)

    Как раз относится и к расберри. Флешки, какие бы они не были, ненадежны.
    1) Для начала городите любое гарантированное питание.
    2) На серверах неспроста используется ЕСС память, поэтому даже в случае сферического "хорошо" в вакуме ошибки имеют место быть.
    3) Выносите БД на другое хранилище.

    Для надежности в целом:
    1) Используйте f2fs вместо ext3\4.
    2) Переводите корневой \ раздел в режим только чтение
    3) БД храните отдельно от системы. Подключенный по usb hdd\ssd. Смонтировать по сети из более нажедного источника.
    4) Можно заморочиться с оверлееями. Условно каталог с БД кинуть в оверлей где верхний уровень будет в tmpfs а нижний на флешке. Запускать раз в N часов\сутки слияние из верхнего в нижний уровень.

    Как надежное питание можно использовать powerbank или даже обычный бесперебойник. Плюсом последнего будет то что его можно будет подцепить к малине и смотреть сколько заряда, какое состояние и принимать меры если питание перешло на батарею. Т.е. в вашем случае к примеру как по пункту 4 запускать слияние.
    Ответ написан
    2 комментария
  • Какой выбрать числовой тип для данных в PostgreSQL?

    Stalker_RED
    @Stalker_RED
    Смотрите табличку и выбирайте
    https://www.postgresql.org/docs/9.1/datatype-numer...
    Если я правильно догадываюсь что значит "8 цифр" и "8-12 цифр", то подойдет integer и bigint, соответственно.

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

    @xbox
    Как уже много раз написали, использовать нужно nginx. На мой взгляд здесь без вариантов. Про apache забудьте.

    По сжатию на лету опция
    gzip on;
    nginx.org/ru/docs/http/ngx_http_gzip_module.html
    Степень сжатия не ставьте максимальную.
    Оптимальная степень сжатия 4-5. Иначе процессор сильнее нагружается, а в процентном отношении файл сжимается меньше.
    gzip_comp_level 4;

    Но если файлы не меняются, или меняются не часто, самый лучший вариант использовать опцию
    gzip_static on;
    nginx.org/ru/docs/http/ngx_http_gzip_static_module.html
    Она позволяет отдавать вместо обычного файла, сжимаемого на лету, предварительно сжатый файл с таким же именем и с расширением “.gz”
    С некоторым интервалом запускаете скрипт, который нужно будет написать, и который будет сжимать все файлы с расширением CSS и JS. При этом скрипт может сжимать файлы с максимальной степенью сжатия. После этого nginx будет сразу отдавать сжатые файлы. Процессор вообще при этом нагружаться не будет и скорость еще дополнительно возрастет.

    А еще лучше в скрипте перед сжатием для gzip_static запускать какой-нибудь обработчик, который будет вырезать все комментарии, пробелы и тп из CSS и JS файлов. Это дополнительно уменьшит размер несжатых файлов и сжатых файлов и ускорит их разборку на машине клиента. При этом оригиналы CSS и JS без изменений.
    Обрезанная и сжатая копия их будет храниться в gz файлах.

    У себя я настроил так скрпиты:
    Они похожие, но одан вариант просто сжимает файлы (TXT итп), а второй вариант перед сжатием их обрабатывает, удаляя комментарии итп (файлы JS и CSS)

    ПЕРВЫЙ ВАРИАНТ (ТОЛЬКО СЖАТИЕ)

    /root/scripts/gzip-compress/compress.sh
    #! /bin/sh
    
    EXTENSIONS="txt|htm|html|xml|yml|htc|ico"
    
    if [ -z "$1" ]; then
        DIR="`pwd`"
    else
        DIR="$1"
    fi
    
    find $DIR -type f -regextype posix-egrep -regex ".*\.($EXTENSIONS)\$" -exec `dirname $0`/do-compress.sh '{}' \;

    /root/scripts/gzip-compress/do-compress.sh
    #! /bin/sh
    
    MINSIZE=100
    GZIP="gzip -9 -c"
    AWK=awk
    TOUCH=touch
    CHOWN=chown
    CHMOD=chmod
    
    if [ -n "$1" ]; then
        GZ_NAME="$1.gz"
        DATA_PLAIN=`stat --format "%s %Y" "$1"`
        PLAIN_SIZE=`echo "$DATA_PLAIN" | $AWK '{ print $1}'`
        PLAIN_MTIME=`echo "$DATA_PLAIN" | $AWK '{ print $2}'`
    
        if [ $PLAIN_SIZE -lt $MINSIZE ]; then
    		echo "$1 -  Ignoring file: its size ($PLAIN_SIZE) is less than $MINSIZE bytes"
            exit 0;
    	fi
    	
        if [ -f "$GZ_NAME" ]; then
    		GZIPPED_MTIME=`stat --format "%Y" "$GZ_NAME"`
            if [ $GZIPPED_MTIME -eq $PLAIN_MTIME ]; then
    			echo "$1 -  Ignoring file: already exist with the same mod time"
                exit 0
    		fi
    	fi
    	
        $GZIP "$1" > "$GZ_NAME"
        $TOUCH -r "$1" "$GZ_NAME"
    	
    	 $CHOWN --reference="$1" "$GZ_NAME"
         $CHMOD 640 "$GZ_NAME"
    	 
        echo "Compressed $1 to $GZ_NAME"
    	fi

    ВТОРОЙ ВАРИАНТ (СЖАТИЕ С ПРЕДВАРИТЕЛЬНОЙ ОБРАБОТКОЙ С ПОМОЩЬЮ yui-compressor)

    /root/scripts/gzip-compress/compress-js-css.sh
    #! /bin/sh
    
    EXTENSIONS="css|js"
    
    
    if [ -z "$1" ]; then
        DIR="`pwd`"
    else
        DIR="$1"
    fi
    
    find $DIR -type f -regextype posix-egrep -regex ".*\.($EXTENSIONS)\$" -exec `dirname $0`/do-compress-js-css.sh '{}' \;

    /root/scripts/gzip-compress/do-compress-js-css.sh
    #! /bin/sh
    
    MINSIZE=100
    JV="java -jar /usr/share/yui-compressor/yui-compressor.jar"
    GZIP="gzip -9 -c"
    AWK=awk
    TOUCH=touch
    CHOWN=chown
    CHMOD=chmod
    
    if [ -n "$1" ]; then
        GZ_NAME="$1.gz"
        DATA_PLAIN=`stat --format "%s %Y" "$1"`
        PLAIN_SIZE=`echo "$DATA_PLAIN" | $AWK '{ print $1}'`
        PLAIN_MTIME=`echo "$DATA_PLAIN" | $AWK '{ print $2}'`
    	
    
        if [ $PLAIN_SIZE -lt $MINSIZE ]; then
    		echo "Ignoring file $1: its size ($PLAIN_SIZE) is less than $MINSIZE bytes"
            exit 0;
    	fi
    	
        if [ -f "$GZ_NAME" ]; then
    		GZIPPED_MTIME=`stat --format "%Y" "$GZ_NAME"`
            if [ $GZIPPED_MTIME -eq $PLAIN_MTIME ]; then
    		echo "$1 -  Ignoring file: already exist with the same mod time"
    			exit 0	
    		fi
    	fi
    	
        $JV "$1" | $GZIP  > "$GZ_NAME"
        $TOUCH -r "$1" "$GZ_NAME"
    	
    	 $CHOWN --reference="$1" "$GZ_NAME"
         $CHMOD 640 "$GZ_NAME"
    	 
    	 
     echo "Compressed $1 to $GZ_NAME"
     
    fi

    Чтобы второй вариант работал на сервер нужно установить yui-compressor
    yui.github.io/yuicompressor
    На debian yui-compressor устанавливается так:
    apt-get install yui-compressor

    Запускать срипты из крона примерно так:
    /etc/crontab
    53 4 * * * root nice -n 19 ionice -c2 -n7   /root/scripts/gzip-compress/compress-js-css.sh /var/www/папка_которую/обработать

    Данная команда запускает скрипт по сжатию JS и CSS каждый день в 4:53 утра с правами пользователя root. Можно запускать от имени другого пользователя, если все файлы и папки, которые обрабатываются доступны этому пользователю.
    Обратите внимание, на всякий случай я запускаю эту команду с низким приоритетом, чтобы при большом количестве файлов эта операция отдавала приоритет ресурсов другим приложениями.
    Низкий приоритет процессора
    nice -n 19
    Низкий приоритет по жесткому диску
    ionice -c2 -n7

    Без приоритета ту же команду в кроне можно запускать так:
    53 4 * * * root   /root/scripts/gzip-compress/compress-js-css.sh /var/www/папка_которую/обработать

    Если меняются какие-то оригиналы файлов, для которых предварительно подготовлена gz копия для отдачи сервером nginx, то достаточно удалить gz копию файла и nginx будет отдавать свежий файл. А скрипт, запускаемый по крону, через некоторое время заново создаст gz копию измененного файла.
    Ответ написан
    Комментировать
  • Как добавить дополнительный IP на сервер?

    merryjane
    @merryjane
    Системный администратор
    ip addr add ${ip_a}/${netmask} dev ${interface}
    где ${ip_a} - ваш ip-адрес
    ${netmask} -ваша маска
    ${interface} - интерфейс на который довешиваем ip.

    Если адрес шлюза отличается от шлюза по умолчанию видимо надо будет добавить еще правила маршрутизации, например так:
    ip ru add from ${ip_a} lookup ${table}
    ip ro add default via ${ip_gw} dev ${interface}  table ${table}

    где ${ip_gw} - адрес шлюза для нового ip
    ${table} - произвольный номер таблицы, например 100.
    Ответ написан
    1 комментарий
  • Как запретить в Apache2 доступ к порту 80 всем кроме localhost?

    bk0011m
    @bk0011m
    Системный администратор
    Смотря какой у вас конфиг. Вообще поищите в http.conf строки с *:80 и исправьте на 127.0.0.1:80
    Ответ написан
    4 комментария
  • Как запретить в Apache2 доступ к порту 80 всем кроме localhost?

    merryjane
    @merryjane
    Системный администратор
    Например через iptables:
    iptables -A INPUT -p tcp -m tcp -s 127.0.0.1 --dport 80 -j ACCEPT
    iptables -A INPUT -p tcp -m tcp --dport 80 -j DROP
    Ответ написан
    Комментировать
  • Какие есть бесплатные панели для начинающих реселлеров хостинга и серверов?

    opium
    @opium
    Просто люблю качественно работать
    Логично что для продажи эти говнопанели ну никак нельзя использовать, веста вообще без документации, зпанель баг на баге и забивают разрабы на это забивают, адженти тоже недопанель.
    Если денег мало то логично начать с продуктов испменеджера, если больше то плеск и цпанель.
    Ответ написан
    Комментировать
  • Какие есть бесплатные панели для начинающих реселлеров хостинга и серверов?

    DobroFenix
    @DobroFenix
    Лучше дождитесь выхода ISPManager pro 5
    Окупится на нервах и потраченном времени на внеплановые ситуации.
    Ответ написан
    1 комментарий
  • Почему не работают сессии в LAMP?

    merryjane
    @merryjane
    Системный администратор
    У пользователя от которого работает apache не хватает прав на запись файла в каталог /home/***/tmp.
    Поправьте права и будет все работать.
    В качестве теста можете сделать:
    chmod -R 777 /home/***/tmp
    И на всякий случай проверьте, что сам каталог точно создан:
    mkdir /home/***/tmp
    Ответ написан
    Комментировать
  • Как защитить свой сервер ubuntu от взломов и различных атак?

    RicoX
    @RicoX
    Ушел на http://ru.stackoverflow.com/
    Fail2ban для защиты от DDoS - это как бензин для тушения пожара. От брута помогает в принципе, но волшебной пилюли нет, книги защита от всех видов атак для чайников тоже не встречал, так что либо глубоко копать по всем аспектам безопасности либо отдать на аутсорс специально обученным людям, все заметки вида: "защита от всех атак на коленке за 10 минут" - при реальной атаке помогут, как аспирин при инфаркте.
    Ответ написан
    2 комментария
  • Как создать Bitcoin кошелёк в linux?

    optemist
    @optemist
    Отказался от кошелька на компе, больно неудобно, т.к. работаю на разных компьютерах. Храню деньги на аккаунте Mtgox. Поначалу использовал mybitcoin, но начали пропадать транзакции. С Mtgox такого не наблюдал.
    Ответ написан
    Комментировать
  • Какой движок или framework лучший для создания сложных онлайн-анкет?

    @Jodes
    Зависит от религиозных взглядов.
    Я бы все же выбрал Yii
    Ответ написан
    Комментировать