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

Скрипт 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
Назад
Сверху Снизу