Исправление распространённых ошибок при тестировании конфигурации Bitrix

Всё ниже перечисленное применимо к Битрикс «Управление сайтом»

Ошибка! Время отличается на 10800 секунд

Прежде чем применять предложенное исправление, необходимо проверить что в консоли терминала и консоли БД время установлено верно.

Исправление: в файле /bitrix/php_interface/after_connect.php нужно добавить строчку:

$DB->Query("SET LOCAL time_zone='".date('P')."'");

Ошибка! Не настроен запуск cron_events.php на cron, последний агент отработал больше суток назад.

Исправление: в /etc/crontab добавить строчку вида:

* * * * *       sleep $((RANDOM\%3)); flock -x -n /tmp/cron_site.lock -c "[ -f /var/www/www-root/data/www/erfwerf.ru/bitrix/php_interface/cron_events.php ] && { sleep $((RANDOM\%50)); timeout 3600 php -f /var/www/www-root/data/www/erfwerf.ru/bitrix/php_interface/cron_events.php; }" >/dev/null 2>&1

Работа с сокетами: Ошибка! Не работает

Исправление:

  • добавить в /etc/hosts имя домена
  • обновить корневые сертификаты:
yum install ca-certificates
update-ca-trust
  • проверить нет ли проблем с сертификатом при выполнении в терминале на сервере
wget https://adiuoe.ru

Если выведет ошибку — установить корректные ssl сертификаты

Недоступны для чтения или записи

При проверке ругается, что часть файлов/папок не доступны для чтения/записи. Для начала выполним команды в корневой папке сайта:

find . -type d -exec chmod 775 {} \;
find . -type f -exec chmod 664 {} \; 

И выставим владельцев (у вас могут быть свои):

find . -type d -exec chown nginx:apache {} \;
find . -type f -exec chown nginx:apache {} \;

Работа с файлами кеша: Ошибка! Не работает

Сервер apache не имеет доступа в папку /bitrix/cache

chmod 777 bitrix/cache/

Подготовка сервера RED OS 7.3 к установке Битрикс «Управление сайтом»

Дальнейший ход установки предполагает, что у вас уже установлена RED OS в конфигурации программ «Сервер минимальный», без выбора ПО (т.е. php, apache и т.д. будем ставить позже и сами!)

Отключим SELinux:

echo 'SELINUX=disabled' > /etc/sysconfig/selinux
reboot

Настроим отправку почты из консоли:

yum install sendmail –y

Для проверки работы:

echo "Это тестовое письмо " | mail -s "Проверка отправки почты " -r no-reply@mail.ru vasya@mail.ru

Установим PHP 8.1

dnf install php81-release 
dnf clean all
dnf makecache 
dnf  install php php-cli php-common php-devel php-gd php-imap php-json php-ldap php-mbstring php-mysqlnd php-opcache php-pdo php-pear php-pear-DB php-pecl-apcu php-pecl-mcrypt php-pecl-memcache php-pecl-ssh2 php-process php-pspell php-xml php-zipstream php-json php-xml

Если вдруг необходима версия PHP 7.4, которая идёт по умолчанию, то соответственно первая строчка не нужна

Установим Apache и Ngnix

dnf install httpd nginx

Установим MariaDB

dnf install mariadb-server mariadb

Установим Redis

dnf install redis 

Настройка Ngnix

Создадим папку /var/www/html/bx-site, присвоим ей пользователя и группу:

mkdir /var/www/html/bx-site
chown nginx:apache /var/www/html/bx-site

Далее качаем этот архив, и содержимое папки /redos/nginx переписываем поверх в /etc/nginx. Кроме того нужно в /etc/hosts добавить строчку:

127.0.0.1 httpd push

В случае необходимости включить сразу ssl, добавим в файл /etc/ngnix/sites-available/default.conf секцию вида:

server {

    listen 443 ssl;
    server_name _;
    server_name_in_redirect off;

    #ssl on;
    ssl_certificate /etc/nginx/ssl/fullchain.pem;
    ssl_certificate_key /etc/nginx/ssl/cert.key;


    proxy_set_header    X-Real-IP        $remote_addr;
    proxy_set_header    X-Forwarded-For  $proxy_add_x_forwarded_for;
    proxy_set_header    Host $host;

    proxy_redirect ~^(http://[^:]+):\d+(/.+)$ $1$2;
    proxy_redirect ~^(https://[^:]+):\d+(/.+)$ $1$2;

    set $docroot                "/var/www/html/bx-site";

    index index.php;
    root "/var/www/html/bx-site";

    # BXTEMP - personal settings
    include conf.d/bx_temp.conf;

    # Include parameters common to all websites
    include conf.d/bitrix.conf;

}

Если необходима (а она скорее всего необходима) переадрессация с http на https, то в секцию c 80 портом, добавляем строчки:

server {
    listen 80 default_server;
...
  if ($request_uri !~* "/robots.txt") {
        rewrite ^(.*)$ https://$host$1 permanent;
    }
...

Запустим сервис:

systemctl --now enable nginx

Настройка PHP

В папке /etc/php.d необходимо отредактировать настройки модулей:

opcache

opcache.max_accelerated_files = 100000
opcache.revalidate_freq = 0

bitrix.ini

display_errors = Off
error_reporting = E_ALL
error_log = '/var/log/php/error.log'
; Set some more PHP parameters
enable_dl = Off
short_open_tag = On
allow_url_fopen = On
# Security headers
mail.add_x_header = Off
expose_php = Off

Настройка Apache

  • Добавить в /etc/httpd/conf.d файл default.conf из архива выше
  • в httpd.conf заменить Listen 80 на Listen 8090
  • заменить файл /etc/httpd/conf.modules/00-mpm.conf на файл из архива выше

Запустить httpd:

systemctl --now enable httpd

На этом моменте файл index.php размещенный в /var/www/html/bx-site уже должен отображаться адекватно

Настройка MariaDB

В файле /etc/my.cnf.d/mariadb-server.cnf внутри тега [mysqld] необходимо добавить/изменить строки:

[mysqld]
transaction-isolation = READ-COMMITTED
innodb_flush_log_at_trx_commit = 2
innodb_flush_method = O_DIRECT
thread_cache_size = 4

Запуск сервиса:

systemctl --now enable mariadb

Заходим в консоль сервера mysql, создаём пользователя и даём ему права:

create user 'test'@'localhost' identified by 'password';
create database testdb;
grant all on testdb.* to 'test'@'localhost'

Настройка Redis

В папке /etc/redis необходимо заменить файл redis.conf из архива выше, и выполнить в консоли:

usermod -g apache redis
chown root:apache /etc/redis/ /var/log/redis/
[[ ! -d /etc/systemd/system/redis.service.d ]] && mkdir /etc/systemd/system/redis.service.d
echo -e '[Service]\nGroup=apache' > /etc/systemd/system/redis.service.d/custom.conf
systemctl daemon-reload
systemctl --now enable redis

На этом в принципе и всё. Сервер подготовлен для развертывания битрикса в папке /var/www/html/bx-site. По идее далее кидаем туда дистрибутив (ну или бекап, если сайт переносите как я) и начинаем установку из браузера

Создаём нейросеть на Python

Ну вот реально, очень мало в интернете статей на тему использования нейросетей. Теоретической информации — полно. «Напишем нейросеть в 9 строчек» — полно. А вот практических примеров с разжевыванием — единицы. Одна из хороших статей тут на хабре. Начало отличное, конец скомканный и до конца не раскрытый. Кроме того код во многих статьях датируемых до 20г уже не рабочий, т.к. используют Tensorflow версии меньше 2. Или ранние 2 версии. Посему на написание живого примера потратил довольно таки много времени.

Итак поставим себе задачу: узнать по фото, лето или зима отображены на ней.

» Читать далее

Пишем игру Питон на Python ;). Часть 3

Продолжаем начатое. Добавим в игру увеличение скорости если питон ест, и подсчет очков. Добавим переменные:

...
speed=500;          # начальная скорость питона
increase_speed=10;  # размер увеличения скорости при удачной еде
score=0;            # набранные очки в результате игры
score_color=(100,100,50)  # цвет очков
...

Интересный момент работы с таймером. По умолчанию time.time() отдает данные в секундах целые числа, и доли секунд в цифрах после запятой. Для того чтобы соответственно удобно считать миллисекунды, значения нужно умножать на 1000. Изменим код:

start_time=time.time()*1000
...
while running:
    if (time.time()*1000-start_time)>speed:
        start_time=time.time()*1000
        Draw_foods(screen)
        Draw_python(screen)
...

А теперь изменим функцию Draw_python, добавив отрисовку количества очков, а так-же увеличение скорости и количества очков при поедании:

...
global score,speed
..
        for element in foods:
            if [element[0],element[1]] == head_coor:
                del_tail=False
                foods.remove(element)
                speed=speed-increase_speed  # увеличиваем скорость питона
                score=score+element[0]      # увеличиваем очки в зависимости от типа сожранного
...
 # Рисую набранные очки
    pygame.draw.rect(screen,(0,0,0),(width_field,0,width_field+300,100))
    img = font.render(f'Очки: {score}', True, score_color)
    screen.blit(img, (width_field+10, 20))
...

Добавим еще штрих — сделаем реакцию на столкновение со стенами поля, а именно чтоб питон переходил на левый край при столкновении с правым и т.д.,

...        if (head_coor[0]>size_x):
            head_coor[0]=1;
        if (head_coor[1]>size_y):
            head_coor[1]=1;
        if (head_coor[0]<0):
            head_coor[0]=size_x;
        if (head_coor[1]<0):
            head_coor[1]=size_y;
...

Теперь не хватает последнего: проигрыша в случае столкновения головы с хвостом. Объявим глобальный цикл в котором будет крутится игра, в нём разместим цикл игры. При проигрыше выводим вопрос «Вы проиграли хотите еще (Y/N)» Если игрок выбирает Y, то из глобального цикла не выходим, иначе покидаем глобальный цикл.

gloop=True
while gloop: # глобальный цикл
    pygame.init()
    ...
    font = pygame.font.SysFont(None, 24)
    while running: # цикл игры
        if (time.time()*1000-start_time)>speed:
            start_time=time.time()*1000
...
 # здесь оказываемся когда проиграли...
    pygame.draw.rect(screen,(200,100,5),(50,50,width_field-50,100))
    img = font.render(f'Вы проиграли. Сыграем еще партию? (Y/N)', True, score_color)
    screen.blit(img, (100, 80))
    pygame.display.flip()
    pygame.display.update()
    running = True
    while running:
        for event in pygame.event.get():
            if event.type == pygame.KEYDOWN:
                if event.key == pygame.K_y:
                    moved_direction_x = 0
                    moved_direction_y = 0
                    speed=500
                    score=0
                    gloop=True
                    running=False
                if event.key == pygame.K_n:
                    gloop=False
                    running = False
print("нормально вышли")

Окончательную версию игры можно скачать здесь

Токсичность сообщества ru.stackoverflow.com

Ежики кололись, плакали но продолжали есть кактус (с), или токсичность сообщества программистов на ru.stackoverflow.com

Уже несколько раз замечал, что в ru сообщества, просто нельзя ни задавать вопросы, ни отвечать на них — минусуют, хамят, лелеют и тешат чувство собственной значимости

На англоязычном такого нет. Даже если задаёшь самый глупый вопрос. Потому и стараюсь использовать только его, а на ru отсвечиваю только если вопросы узко специализированные, по русскоязычной тематике.. От безысходности..

1 5 6 7 8 9 71