• Не создавайте несколько учетных записей, вы будете заблокированы! Для получения дополнительной информации о правилах, ограничениях и многом другом посетите страницу «Помощь».
    Нашли неработающую ссылку? Используйте кнопку «Жалоба»!

Скрипт Keitaro v9.12.15 NULLED - трекер для CPA

  • Друг форума
  • Программист
  • Автор темы
  • Администратор
  • Модер.
  • Команда форума
  • #1 из 169
кейтаро-главная-1024x598.png

Keitaro — профессиональный трекер для CPA-арбитража, покупки трафика, оптимизации рекламных компаний - Keitaro

Обновленный вариант установки за инструкцию благодарим @Jigsaw:

Как установить Keitaro v9.12.15 NULLED на сервер с CentOS Stream 9.


Следуя этим шагам, вы сможете правильно настроить и запустить Keitaro v9.12.15 NULLED без ошибок.

!! Не забудьте заменить "ИМЯ_ПК", "IP_SERVER" и "ROOT" на свои данные в командах перед их вводом.
!! Файл keitaro_null.tgz необходимо переместить на рабочий стол, чтобы избежать ошибок при установке. Либо перед загрузкой на сервер убедитесь, что путь к файлу указан правильно.


Теперь ваш сервер настроен для работы с Keitaro v9.12.15 NULLED. Если у вас возникли вопросы, не стесняйтесь спрашивать!



Устаревшее решение установки:

Скачать:


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

Запускать из консоли командой
php -f install.php install --db-user="admin" --db-name="admin" --db-password="admin" --admin-login="admin" --admin-password="admin" --language=ru
Перед запуском команды вы должны убедиться, что указываемая база и пользователь базы созданы.

Обновленный архив с инструкцией:

Новая инструкция по установке Keitaro 9.12.15 на чистый сервер с CentOS
Код:
Расширить Свернуть Скопировать
yum install curl -y && curl keitaro.io/kctl.sh | bash -s -- install

По окончанию установки, вам выдаст сообщение




После установки переходим просмотру файла /var/www/keitaro/application/config/config.ini.php
От сюда нужно скопировать и сохранить пароль для подключения к бд.

1. Качаем архив с файлами и базой данных:
2. Удаляем все файлы из: /var/www/keitaro/
3. Заливаем архив на сервер и распаковываем архив: tar -C "/var/www/" -xvf keitaro_null.tgz
4. Переходим по адресу:
5. В хост вводим: 127.0.0.1
6. Имя базы данных и имя юзера: keitaro
7. Пароль ранее сохранённый из: /var/www/keitaro/application/config/config.ini.php
8. Удаляем содержимое базы и заливаем дамп базы данных из архива
9. В /var/www/keitaro/application/config/config.ini.php прописываем пароль от базы данных
10. В консоле устанавливаем права: chown -R keitaro:keitaro /var/www/keitaro
11. Перезагружаемся и готовенько, переходим
12. Логин и пароль: admin

По желанию можно удалить /var/www/keitaro/admin/adminer-4.8.1.php
И рекомендую в системе сменить пароль у юзера keitaro: passwd keitaro

Все команды выполняем строго под root !!!
 
Последнее редактирование:
Добрый день. Начала выскакивать вот такая ошибка, как исправляется и что это за ошибка?
Код:
Расширить Свернуть Скопировать
main.ERROR: Fatal Error in /var/www/keitaro/application/Core/Application/FeatureService.php line 21: Uncaught Error: Call to a member function edition() on null in /var/www/keitaro/application/Core/Application/FeatureService.php:21
Хотя Все работал и все было нормально.
Похоже на проблему с кроном!
 
А как решить. У меня стоит на сервере Centos 9 OS. Может както обновить или нужно всетаки переустанавливать кейтаро? Все поновой делать?
 
А как решить. У меня стоит на сервере Centos 9 OS. Может както обновить или нужно всетаки переустанавливать кейтаро? Все поновой делать?
Попробуй через чат джипити решить вопрос, дай ему ошибку! Должен помочь
 
А как решить. У меня стоит на сервере Centos 9 OS. Может както обновить или нужно всетаки переустанавливать кейтаро? Все поновой делать?

Попробуй заменить код в файле application/Core/Application/FeatureService.php на следующий:

PHP:
Расширить Свернуть Скопировать
<?php

namespace Core\Application;

class FeatureService extends \Traffic\Service\AbstractService
{
    private $_payload = NULL;
    const USERS_LIMIT = 6;

    public function __construct(EssentialPayload $payload = NULL)
    {
        if ($payload) {
            $this->init($payload);
        }
    }

    public function init(EssentialPayload $payload)
    {
        $this->_payload = $payload;
    }

    public function isTrial()
    {
        return $this->_payload !== null && $this->_payload->edition() == EssentialPayload::TRIAL;
    }

    public function isBasic()
    {
        return $this->_payload !== null && $this->_payload->edition() == EssentialPayload::BASIC;
    }

    public function isPro()
    {
        return $this->_payload !== null && $this->_payload->edition() == EssentialPayload::PRO;
    }

    public function isBusiness()
    {
        return $this->_payload !== null && $this->_payload->edition() == EssentialPayload::BUSINESS;
    }

    public function getEdition()
    {
        return $this->_payload !== null ? $this->_payload->edition() : null; // Или вернуть значение по умолчанию
    }

    public function hasDomainsFeature()
    {
        return $this->isTrial() || $this->isPro() || $this->isBusiness();
    }

    public function hasExtensionsFeature()
    {
        return $this->isTrial() || $this->isPro() || $this->isBusiness();
    }

    public function hasUsersFeature()
    {
        return $this->isTrial() || $this->isPro() || $this->isBusiness();
    }

    public function hasBrandingFeature()
    {
        return $this->isBusiness();
    }

    public function hasUnlimitedUserFeature()
    {
        if ($this->isBusiness()) {
            return true;
        }
        if ($this->isTrial()) {
            return false;
        }
        if ($this->isBasic()) {
            return false;
        }
        return $this->_payload !== null && !$this->_payload->mustLimitUsers();
    }

    public function hasClickApiFeature()
    {
        return true; // Если это условие всегда истинно, можно оставить так
        if ($this->isBasic() && $this->_payload !== null && $this->_payload->clickApiForProOnly()) {
            return false;
        }
        return true;
    }

    public function hasAdminApiFeature()
    {
        return true; // Если это условие всегда истинно, можно оставить так
        if ($this->isTrial() || $this->isBasic()) {
            return false;
        }
        if ($this->isBusiness()) {
            return true;
        }
        if ($this->isPro() && $this->_payload !== null && !$this->_payload->adminApiBusinessOnly()) {
            return true;
        }
        return false;
    }

    public function getUsersLimit()
    {
        return $this->hasUnlimitedUserFeature() ? 9999 : self::USERS_LIMIT;
    }

    public function getLicenseExpireTime()
    {
        $date = new \DateTime();
        return $date->setTimestamp(time() + 60 * 60 * 24 * 256 * 3);
    }
}

?>

Обновленный код класса FeatureService, в котором добавлены проверки на null для переменной _payload, чтобы избежать ошибки "Call to a member function edition() on null":
 
не помогло сделал как вы посоветовали поменял весь код. Появилась другая ошибка. А джпт начал мне такую ересть говорить. Тоесть я понимаю что сломалось что-то. И лучше попробовать переустановить.
Вот такая ошибка сейчас. что за брет всеж работало норм.
Код:
Расширить Свернуть Скопировать
main.ERROR: Fatal Error in /var/www/keitaro/application/Traffic/CommandQueue/Service/DelayedCommandService.php line 101: Uncaught Error: Call to a member function count() on null in /var/www/keitaro/application/Traffic/CommandQueue/Service/DelayedCommandService.php:101
 
Последнее редактирование модератором:
не помогло сделал как вы посоветовали поменял весь код. Появилась другая ошибка. А джпт начал мне такую ересть говорить. Тоесть я понимаю что сломалось что-то. И лучше попробовать переустановить.
Вот такая ошибка сейчас. что за брет всеж работало норм.
main.ERROR: Fatal Error in /var/www/keitaro/application/Traffic/CommandQueue/Service/DelayedCommandService.php line 101: Uncaught Error: Call to a member function count() on null in /var/www/keitaro/application/Traffic/CommandQueue/Service/DelayedCommandService.php:101

Попробуй заменить код в файле application/Traffic/CommandQueue/Service/DelayedCommandService.php на следующий:
PHP:
Расширить Свернуть Скопировать
<?php
namespace Traffic\CommandQueue\Service;

use Traffic\CommandQueue\QueueStorage\StorageInterface;
use Traffic\Service\AbstractService;
use Traffic\Logging\Service\LoggerService;
use Traffic\Tools\Tools;

class DelayedCommandService extends AbstractService
{
    const PAYLOAD = 'payload';
    const COMMAND = 'command';
    const MAX_RETRIES = 3;
    const RETRY_PARAM = 'retry';
    const COMMAND_NAME_PARAM = 'command';

    private $_storage;
    private $_compression = false;

    public function setStorage(StorageInterface $storage)
    {
        $this->_storage = $storage;
    }

    /**
     * @return StorageInterface
     */
    private function getStorage()
    {
        return $this->_storage;
    }

    public function queueSize()
    {
        $storage = $this->getStorage();
        if ($storage === null) {
            throw new \Exception('Storage is not set');
        }
        return $storage->count();
    }

    public function clean()
    {
        LoggerService::instance()->debug("[DelayedCommandService] clean");
        return $this->getStorage()->clean();
    }

    public function enableCompression()
    {
        return $this->_compression = true;
    }

    public function push($command)
    {
        if (empty($this->_storage)) {
            throw new \Exception('Storage is not set');
        }
        LoggerService::instance()->debug(function () use ($command) {
            $count = $this->queueSize();
            return 'Pushed command: ' . json_encode($command) .' current count ' . $count;
        });

        $command = json_encode(Tools::utf8ize($command), JSON_PARTIAL_OUTPUT_ON_ERROR);

        $status = $this->getStorage()->push($command);

        LoggerService::instance()->debug(function () use ($command) {
            $count = $this->queueSize();
            return 'Pushed. Count ' . $count;
        });

        return $status;
    }

    public function popAll()
    {
        $result = [];
        foreach ($this->pop() as $item) {
            $result[] = $item;
        }
        return $result;
    }

    public function pop()
    {
        foreach ($this->getStorage()->pop() as $encodedData) {
            if (empty($encodedData)) {
                continue;
            }

            $data = json_decode($encodedData, true);

            if (json_last_error()) {
                LoggerService::instance()->warning('An issue while decoding string "' . $encodedData . '" (' . json_last_error_msg() . '). Skipped.');
                continue;
            }

            yield $data;
        }
    }

    public function count()
    {
        $storage = $this->getStorage();
        if ($storage === null) {
            throw new \Exception('Storage is not set');
        }
        return $storage->count();
    }

    public function isRetryAvailable(&$payload)
    {
        if (empty($payload[self::COMMAND_NAME_PARAM])) {
            return false;
        }
        $payload[self::RETRY_PARAM]++;
        if ($payload[self::RETRY_PARAM] >= self::MAX_RETRIES) {
            return false;
        }
        return true;
    }

    public function retry($payload)
    {
        if (!$this->isRetryAvailable($payload)) {
            return false;
        }
        $command = [
            self::PAYLOAD => $payload,
            self::COMMAND => $payload[self::COMMAND_NAME_PARAM],
        ];
        $this->push($command);
        return true;
    }

    public function initRetry(&$payload, $commandName)
    {
        $payload[self::COMMAND_NAME_PARAM] = $commandName;
        $payload[self::RETRY_PARAM] = 0;
    }
}

В методах queueSize(), count(), и других добавлены проверки на null, чтобы убедиться, что _storage инициализирован перед вызовом методов, которые могут привести к ошибкам.
 
Попробуй заменить код в файле application/Traffic/CommandQueue/Service/DelayedCommandService.php на следующий:
PHP:
Расширить Свернуть Скопировать
<?php
namespace Traffic\CommandQueue\Service;

use Traffic\CommandQueue\QueueStorage\StorageInterface;
use Traffic\Service\AbstractService;
use Traffic\Logging\Service\LoggerService;
use Traffic\Tools\Tools;

class DelayedCommandService extends AbstractService
{
    const PAYLOAD = 'payload';
    const COMMAND = 'command';
    const MAX_RETRIES = 3;
    const RETRY_PARAM = 'retry';
    const COMMAND_NAME_PARAM = 'command';

    private $_storage;
    private $_compression = false;

    public function setStorage(StorageInterface $storage)
    {
        $this->_storage = $storage;
    }

    /**
     * @return StorageInterface
     */
    private function getStorage()
    {
        return $this->_storage;
    }

    public function queueSize()
    {
        $storage = $this->getStorage();
        if ($storage === null) {
            throw new \Exception('Storage is not set');
        }
        return $storage->count();
    }

    public function clean()
    {
        LoggerService::instance()->debug("[DelayedCommandService] clean");
        return $this->getStorage()->clean();
    }

    public function enableCompression()
    {
        return $this->_compression = true;
    }

    public function push($command)
    {
        if (empty($this->_storage)) {
            throw new \Exception('Storage is not set');
        }
        LoggerService::instance()->debug(function () use ($command) {
            $count = $this->queueSize();
            return 'Pushed command: ' . json_encode($command) .' current count ' . $count;
        });

        $command = json_encode(Tools::utf8ize($command), JSON_PARTIAL_OUTPUT_ON_ERROR);

        $status = $this->getStorage()->push($command);

        LoggerService::instance()->debug(function () use ($command) {
            $count = $this->queueSize();
            return 'Pushed. Count ' . $count;
        });

        return $status;
    }

    public function popAll()
    {
        $result = [];
        foreach ($this->pop() as $item) {
            $result[] = $item;
        }
        return $result;
    }

    public function pop()
    {
        foreach ($this->getStorage()->pop() as $encodedData) {
            if (empty($encodedData)) {
                continue;
            }

            $data = json_decode($encodedData, true);

            if (json_last_error()) {
                LoggerService::instance()->warning('An issue while decoding string "' . $encodedData . '" (' . json_last_error_msg() . '). Skipped.');
                continue;
            }

            yield $data;
        }
    }

    public function count()
    {
        $storage = $this->getStorage();
        if ($storage === null) {
            throw new \Exception('Storage is not set');
        }
        return $storage->count();
    }

    public function isRetryAvailable(&$payload)
    {
        if (empty($payload[self::COMMAND_NAME_PARAM])) {
            return false;
        }
        $payload[self::RETRY_PARAM]++;
        if ($payload[self::RETRY_PARAM] >= self::MAX_RETRIES) {
            return false;
        }
        return true;
    }

    public function retry($payload)
    {
        if (!$this->isRetryAvailable($payload)) {
            return false;
        }
        $command = [
            self::PAYLOAD => $payload,
            self::COMMAND => $payload[self::COMMAND_NAME_PARAM],
        ];
        $this->push($command);
        return true;
    }

    public function initRetry(&$payload, $commandName)
    {
        $payload[self::COMMAND_NAME_PARAM] = $commandName;
        $payload[self::RETRY_PARAM] = 0;
    }
}

В методах queueSize(), count(), и других добавлены проверки на null, чтобы убедиться, что _storage инициализирован перед вызовом методов, которые могут привести к ошибкам.
Нечего так и невышло уже 10 раз все перепробываю. переустанавливал куча раз. Уже и незнаю. Что и сказать. После того что вы советуете перестает работать кронос. Выдает ошибк в самой панеле. и куча ошибоу в логах. какойто бред. Решения так и не нашел.
 
Нечего так и невышло уже 10 раз все перепробываю. переустанавливал куча раз. Уже и незнаю. Что и сказать. После того что вы советуете перестает работать кронос. Выдает ошибк в самой панеле. и куча ошибоу в логах. какойто бред. Решения так и не нашел.
Понял, извиняюсь. Хотя здесь всего лишь добавлены проверки на null.
 
Нечего так и невышло уже 10 раз все перепробываю. переустанавливал куча раз. Уже и незнаю. Что и сказать. После того что вы советуете перестает работать кронос. Выдает ошибк в самой панеле. и куча ошибоу в логах. какойто бред. Решения так и не нашел.
Попробуй сменить хостера, на бегете очень хорошо работает!
 
Добрый день. Сделал как советовал мне раньше @vltp. Пофиксел. но это просто закоментировалось. а как дальше будет не знаю Теперь осталась проблема с обновлениями баз. сегодня было обновление. IP2Location. И у меня не обновилась фаили скачало. ноне доконца я так понимаю ключь не подходит. Это токо в платной версии кейтаро. Или я всетаки ошибаюсь и вот кинуло ошибку в логах.
Может есть у когото свежие базы под кейтару 9.12.15 null. Ато я понакачивал а чет все такое старое. 2022г. 23. а свежых нет. С обновлениями траблы только вот эти 2 базы обновляються.
Keitaro BotDB2
Keitaro Mobile Operator v3
А все остальные не обновляються. к сожелению.
2025-02-01 05:40:09WARNINGclickmain.WARNING: Warning in /var/www/keitaro/vendor/ip2location/ip2location-php/IP2Location.php line 1602: fread(): Length parameter must be greater than 0
2025-02-01 05:40:09WARNINGclickmain.WARNING: Warning in /var/www/keitaro/vendor/ip2location/ip2location-php/IP2Location.php line 1676: unpack(): Type C: not enough input, need 1, have 0
 
Попробуй сменить хостера, на бегете очень хорошо работает!
Я тоже об этом было. А был я на pq.hosting. И знаете после чего случились траблы. После того как они остановили сервер я проплатить забыл вовремя. Проплатил. И они включили и понеслалсь ошибки. И потом 100 раз ставил. и пошли танцы с бубнами. Тоже такая идея пришла в голову поменять хостера. что-то отвратителен стал этот pq.hosting. Достали со своими урегулированиями и обрезанеем всего и все что только можно. Раньше был норм хост а сейчас испоганился. как по мне.

Понял, извиняюсь. Хотя здесь всего лишь добавлены проверки на null.
Да не я без притензий и так спасибо парни что подсказиваете и помогаете. Просто я так понимаю что нам походу скинуться надо все. и найти человека чтоб сделал и обновил 10 версии. если это реально. Я плюс к этому уже присоиденяюсь. на соседнем форуме тоже ребатя вроде как собираються. по этому вопросу.
Да и поставил себе черную тему. тоже прикольно. Выглядит.
2025-02-01_154857.webp
 
кейтаро-главная-1024x598.png

Keitaro — профессиональный трекер для CPA-арбитража, покупки трафика, оптимизации рекламных кампаний - Keitaro

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

Запускать из консоли командой
php -f install.php install --db-user="admin" --db-name="admin" --db-password="admin" --admin-login="admin" --admin-password="admin" --language=ru
Перед запуском команды вы должны убедиться, что указываемая база и пользователь базы созданы.

Обновленный архив с инструкцией:

Новая инструкция по установке Keitaro 9.12.15 на чистый сервер с CentOS
Код:
Расширить Свернуть Скопировать
yum install curl -y && curl keitaro.io/kctl.sh | bash -s -- install

По окончанию установки, вам выдаст сообщение




После установки переходим просмотру файла /var/www/keitaro/application/config/config.ini.php
От сюда нужно скопировать и сохранить пароль для подключения к бд.

1. Качаем архив с файлами и базой данных:
*** Скрытый текст не может быть процитирован. ***
2. Удаляем все файлы из: /var/www/keitaro/
3. Заливаем архив на сервер и распаковываем архив: tar -C "/var/www/" -xvf keitaro_null.tgz
4. Переходим по адресу:
5. В хост вводим: 127.0.0.1
6. Имя базы данных и имя юзера: keitaro
7. Пароль ранее сохранённый из: /var/www/keitaro/application/config/config.ini.php
8. Удаляем содержимое базы и заливаем дамп базы данных из архива
9. В /var/www/keitaro/application/config/config.ini.php прописываем пароль от базы данных
10. В консоле устанавливаем права: chown -R keitaro:keitaro /var/www/keitaro
11. Перезагружаемся и готовенько, переходим
12. Логин и пароль: admin

По желанию можно удалить /var/www/keitaro/admin/adminer-4.8.1.php
И рекомендую в системе сменить пароль у юзера keitaro: passwd keitaro
Здравствуйте, 2й архив не скачивается ( ошибка. Установка ещё актуальна? Документации на оф сайте кейторо нет, и командой yum install curl -y && curl keitaro.io/kctl.sh | bash -s -- install она не ставится почемуто, хостинг FirstVDS
.
 
  • Друг форума
  • Программист
  • Автор темы
  • Администратор
  • Модер.
  • Команда форума
  • #153 из 169
Здравствуйте, 2й архив не скачивается ( ошибка. Установка ещё актуальна? Документации на оф сайте кейторо нет, и командой yum install curl -y && curl keitaro.io/kctl.sh | bash -s -- install она не ставится почемуто, хостинг FirstVDS
.
Добрый день, установка актуальна. В теме так-же есть решения проблем
 
Добрый день, установка актуальна. В теме так-же есть решения проблем
Большое спасибо, да в сообщении от Jigsaw рабочая ссылка, просто в закрепе она не рабочая и это сбило меня с толку. Кейтаро заработало, а не подскажите обновления баз универсальные? Или только те что даются в этой ветке? Просто в тг каналах бывают более свежие. И ссылки в ветке на обновления баз тоже битые, не подскажите где взять? Ещё раз спасибо
 
Последнее редактирование:
  • Друг форума
  • Программист
  • Автор темы
  • Администратор
  • Модер.
  • Команда форума
  • #155 из 169
Большое спасибо, да в сообщении от Jigsaw рабочая ссылка, просто в закрепе она не рабочая и это сбило меня с толку. Кейтаро заработало, а не подскажите обновления баз универсальные? Или только те что даются в этой ветке? Просто в тг каналах бывают более свежие. И ссылки в ветке на обновления баз тоже битые, не подскажите где взять? Ещё раз спасибо
Универсальное
 
Универсальное
Извините за тупость, но не подскажите, а уже в архиве самой установки который по ссылке Jigsaw не самые новые базы? А то по объёму они превосходят 2023 года, получается менять ниже чем на 24й год смысла нет? Я верно понимаю?
 
  • Друг форума
  • Программист
  • Автор темы
  • Администратор
  • Модер.
  • Команда форума
  • #157 из 169
Извините за тупость, но не подскажите, а уже в архиве самой установки который по ссылке Jigsaw не самые новые базы? А то по объёму они превосходят 2023 года, получается менять ниже чем на 24й год смысла нет? Я верно понимаю?
Если не ошибаюсь то свежие базы, но они переодически обновляются, после установки их можно обновлять самостоятельно
 
  • Друг форума
  • Программист
  • Автор темы
  • Администратор
  • Модер.
  • Команда форума
  • #158 из 169
Обновлен первый пост, добавлен обновленный вариант установки и архив Keitaro v9.12.15 NULLED
 
Извините, не могу разобраться, я в компании, создаю поток, выбираю фильтр "Поисковики", но там пусто, т.е. нет выбора поисковиков. Так и должно быть? Или нехватает каких то баз с реферами?
 
Извините, не могу разобраться, я в компании, создаю поток, выбираю фильтр "Поисковики", но там пусто, т.е. нет выбора поисковиков. Так и должно быть? Или нехватает каких то баз с реферами?
Если в фильтре "Поисковики" нет доступных вариантов, вы можете попробовать использовать ручной ввод.
Например, введите "google" или другие поисковые системы, которые вас интересуют.
 
    Сейчас эту тему никто не читает.

Похожие темы

ITnull добавил(а) новый ресурс: Keitaro opensource - открытый исходный код без лицензии -...
Ответы
6
Просмотры
5K
Назад
Сверху Снизу