mirror of
https://github.com/statbate/docs.git
synced 2026-08-11 02:42:41 +00:00
update
This commit is contained in:
commit
eabb01cfef
21 changed files with 921 additions and 0 deletions
52
install/app.md
Normal file
52
install/app.md
Normal file
|
|
@ -0,0 +1,52 @@
|
|||
Install Golang (https://golang.org/dl/).
|
||||
```
|
||||
wget https://dl.google.com/go/go1.14.1.linux-amd64.tar.gz
|
||||
tar -xf go1.14.1.linux-amd64.tar.gz
|
||||
ln -s /usr/local/go/bin/go /usr/local/bin/
|
||||
ln -s /usr/local/go/bin/gofmt /usr/local/bin/
|
||||
go version
|
||||
```
|
||||
|
||||
Add user and service.
|
||||
```
|
||||
# adduser --disabled-login stat
|
||||
# nano /etc/systemd/system/app.service
|
||||
[Unit]
|
||||
Description=Stat Daemon
|
||||
After=network.target manticore.service
|
||||
|
||||
[Service]
|
||||
LimitNOFILE=65535
|
||||
Type=simple
|
||||
GuessMainPID=no
|
||||
ExecStart=/home/stat/go/app/app
|
||||
Restart=always
|
||||
User=stat
|
||||
StandardOutput=syslog
|
||||
StandardError=syslog
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
|
||||
# systemctl daemon-reload
|
||||
# systemctl enable app
|
||||
```
|
||||
|
||||
Build app.
|
||||
```
|
||||
su stat
|
||||
mkdir ~/go
|
||||
cd ~/go
|
||||
go get github.com/gorilla/websocket
|
||||
go get github.com/go-sql-driver/mysql
|
||||
go get github.com/jmoiron/sqlx
|
||||
cd app
|
||||
go build -ldflags "-s -w"
|
||||
```
|
||||
|
||||
Start service.
|
||||
```
|
||||
exit
|
||||
systemctl start app
|
||||
systemctl status app
|
||||
```
|
||||
19
install/cli/cloudscraper.py
Normal file
19
install/cli/cloudscraper.py
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
#!/usr/bin/env python3
|
||||
|
||||
import cloudscraper
|
||||
import sys
|
||||
|
||||
scraper = cloudscraper.create_scraper(
|
||||
delay=15,
|
||||
interpreter='nodejs',
|
||||
captcha={
|
||||
'provider': '2captcha',
|
||||
'api_key': ''
|
||||
}
|
||||
)
|
||||
|
||||
if len(sys.argv) < 2:
|
||||
print('no url');
|
||||
exit(0)
|
||||
|
||||
print(scraper.get(sys.argv[1]).text)
|
||||
36
install/cli/import_clickhouse.php
Normal file
36
install/cli/import_clickhouse.php
Normal file
|
|
@ -0,0 +1,36 @@
|
|||
<?php
|
||||
if(php_sapi_name() != "cli"){
|
||||
die;
|
||||
}
|
||||
require_once('/var/www/statbate/root/func.php');
|
||||
|
||||
$query = $db->query("select min(id) as min, max(id) as max from `stat`");
|
||||
if($query->rowCount() == 0){
|
||||
die("no data\n");
|
||||
}
|
||||
$row = $query->fetch();
|
||||
|
||||
$min = $row['min'];
|
||||
$max = $row['max'];
|
||||
|
||||
$query = $clickhouse->query("SELECT max(id) as max FROM stat");
|
||||
if($query->rowCount() != 0){
|
||||
$min = $query->fetch()['max']+1;
|
||||
}
|
||||
|
||||
$step = 2048;
|
||||
|
||||
for($i = $min; $i < $max; $i+=$step){
|
||||
$sql = '';
|
||||
$start = $i;
|
||||
$end = $start+$step;
|
||||
$query = $db->query("SELECT * FROM `stat` WHERE `id` >= $start AND `id` < $end");
|
||||
if($query->rowCount() == 0){
|
||||
continue;
|
||||
}
|
||||
while($row = $query->fetch()){
|
||||
$sql .= "({$row['id']}, {$row['did']}, {$row['rid']}, {$row['token']}, {$row['time']}),";
|
||||
}
|
||||
$sql = rtrim($sql, ',');
|
||||
$clickhouse->query("INSERT INTO stat VALUES $sql");
|
||||
}
|
||||
260
install/cli/start.php
Normal file
260
install/cli/start.php
Normal file
|
|
@ -0,0 +1,260 @@
|
|||
#!/usr/bin/env php
|
||||
<?php
|
||||
|
||||
require_once('/var/www/statbate/root/private/init.php');
|
||||
|
||||
function isJson($string) {
|
||||
json_decode($string);
|
||||
return (json_last_error() == JSON_ERROR_NONE);
|
||||
}
|
||||
|
||||
function getPage($url){
|
||||
$command = escapeshellcmd("/home/stat/python/cloudscraper.py $url");
|
||||
return shell_exec($command);
|
||||
}
|
||||
|
||||
function stopBot($name){
|
||||
if(empty($name)){
|
||||
echo "empty name\n";
|
||||
return false;
|
||||
}
|
||||
echo "[".date('H:i:s', time())."] stop $name\n";
|
||||
echo "https://statbate.com/cmd/?exit=$name\n";
|
||||
file_get_contents("https://statbate.com/cmd/?exit=$name");
|
||||
}
|
||||
|
||||
function startBot($name, $server){
|
||||
if(empty($name) || empty($server)){
|
||||
echo "empty name or server\n";
|
||||
return false;
|
||||
}
|
||||
echo "[".date('H:i:s', time())."] start $name $server\n";
|
||||
echo "https://statbate.com/cmd/?room=$name&server=$server\n";
|
||||
file_get_contents("https://statbate.com/cmd/?room=$name&server=$server");
|
||||
}
|
||||
|
||||
function getRoomParams($room){
|
||||
/*
|
||||
$content = getPage('https://chaturbate.com/'.$room);
|
||||
$doc = new DOMDocument();
|
||||
$doc->loadHTML($content, LIBXML_NOERROR | LIBXML_ERR_NONE);
|
||||
$sxml = simplexml_import_dom($doc);
|
||||
foreach ($sxml->xpath('//script') as $script) {
|
||||
$text = (string)$script;
|
||||
if(strpos($text, 'window.initial')) {
|
||||
preg_match('/window.initialRoomDossier = \"(.*?)\"/', $text, $matches);
|
||||
$str = preg_replace_callback('/\\\\u([0-9a-fA-F]{4})/', function ($match) {
|
||||
return mb_convert_encoding(pack('H*', $match[1]), 'UTF-8', 'UCS-2BE');
|
||||
}, $matches[1]);
|
||||
$params = json_decode($str, true);
|
||||
if(!is_array($params)){
|
||||
|
||||
var_dump($params);
|
||||
|
||||
return false;
|
||||
}
|
||||
return $params;
|
||||
}
|
||||
}
|
||||
file_put_contents('/home/stat/php/page.html', $content);
|
||||
*/
|
||||
$json = getPage("https://chaturbate.com/api/chatvideocontext/$room/");
|
||||
$params = json_decode($json, true);
|
||||
if(!is_array($params)){
|
||||
var_dump($params);
|
||||
return false;
|
||||
}
|
||||
return $params;
|
||||
}
|
||||
|
||||
function getServerWS($params){
|
||||
$host = $params['wschat_host'];
|
||||
if(empty($host)){
|
||||
echo "server empty 1\n";
|
||||
return false;
|
||||
}
|
||||
$host = str_replace("https://", "", $host);
|
||||
$host = str_replace("/ws", "", $host);
|
||||
$server = explode('.', $host);
|
||||
if(empty($server['0'])){
|
||||
echo "server empty 2\n";
|
||||
return false;
|
||||
}
|
||||
return $server['0'];
|
||||
}
|
||||
|
||||
function updateGender($id, $params){
|
||||
global $db;
|
||||
|
||||
$arr = ['male', 'female', 'trans', 'couple'];
|
||||
$gender = array_search($params['broadcaster_gender'], $arr);
|
||||
if(empty($gender)){
|
||||
var_dump($params['broadcaster_gender']);
|
||||
return;
|
||||
}
|
||||
$query = $db->prepare("UPDATE `room` SET `gender` = :gender WHERE `id` = :id");
|
||||
$query->bindParam(':id', $id);
|
||||
$query->bindParam(':gender', $gender);
|
||||
$query->execute();
|
||||
}
|
||||
|
||||
function updateFollowers($name, $num){
|
||||
global $db;
|
||||
if(empty($num)){
|
||||
return false;
|
||||
}
|
||||
$query = $db->prepare("UPDATE `room` SET `fans` = :fans WHERE `name` = :name");
|
||||
$query->bindParam(':name', $name);
|
||||
$query->bindParam(':fans', $num);
|
||||
$query->execute();
|
||||
}
|
||||
|
||||
function getAPIList(){
|
||||
global $redis;
|
||||
$stat = [];
|
||||
$json = getPage('https://chaturbate.com/affiliates/api/onlinerooms/?format=json&wm=50xHQ');
|
||||
randSleep();
|
||||
if(!isJson($json)){
|
||||
return false;
|
||||
}
|
||||
$arr = json_decode($json, true);
|
||||
if(!is_array($arr) || empty($arr)){
|
||||
return false;
|
||||
}
|
||||
$redis->setex('chaturbateList', 86400, $json);
|
||||
usort($arr, function($a, $b){
|
||||
return $a['num_users'] < $b['num_users'];
|
||||
});
|
||||
$viewers = 0;
|
||||
foreach($arr as $val){
|
||||
cacheResult('getRoomInfo', ['name' => $val['username']], 3600, true);
|
||||
updateFollowers($val['username'], $val['num_followers']);
|
||||
$viewers += $val['num_users'];
|
||||
if($val['num_users'] < 10){
|
||||
continue;
|
||||
}
|
||||
$stat[] = $val['username'];
|
||||
}
|
||||
if(empty($stat) || !is_array($stat)){
|
||||
return false;
|
||||
}
|
||||
return $stat;
|
||||
}
|
||||
|
||||
function randSleep(){
|
||||
$t = mt_rand(10,15);
|
||||
echo "wait $t seconds...\n";
|
||||
sleep($t);
|
||||
}
|
||||
|
||||
function getFromPages(){
|
||||
$pages = 3;
|
||||
echo "get list from pages";
|
||||
for($i=1; $i<=$pages; $i++){
|
||||
$html = getPage("https://chaturbate.com/?page=$i");
|
||||
preg_match_all('/alt="(.*)\'s/', $html, $tmp);
|
||||
foreach($tmp[1] as $k => $v){
|
||||
$pos = stripos($v, ' ');
|
||||
if($pos === false){
|
||||
$rooms[] = $v;
|
||||
}
|
||||
}
|
||||
echo " $i";
|
||||
sleep(mt_rand(10,15));
|
||||
}
|
||||
echo "\n";
|
||||
if(empty($rooms) || !is_array($rooms)){
|
||||
return false;
|
||||
}
|
||||
return $rooms;
|
||||
}
|
||||
|
||||
function sendStart($room){
|
||||
global $onlineList, $timeEnd;
|
||||
if(time() > $timeEnd){
|
||||
die("Stop task\n");
|
||||
}
|
||||
if(array_key_exists($room, $onlineList)){
|
||||
echo $room." already online\n";
|
||||
return true;
|
||||
}
|
||||
echo "start add $room\n";
|
||||
randSleep();
|
||||
$info = cacheResult('getRoomInfo', ['name' => $room], 3600, true);
|
||||
if(!$info){
|
||||
echo "cant getRoomInfo\n";
|
||||
return false;
|
||||
}
|
||||
$params = getRoomParams($room);
|
||||
if(!$params){
|
||||
echo "cant getRoomParams\n";
|
||||
return false;
|
||||
}
|
||||
updateGender($info['id'], $params);
|
||||
$server = getServerWS($params);
|
||||
if(!$server){
|
||||
echo "cant getServerWS\n";
|
||||
return false;
|
||||
}
|
||||
startBot($room, $server);
|
||||
//die;
|
||||
}
|
||||
|
||||
function importList(){
|
||||
global $redis, $onlineList;
|
||||
$online = file_get_contents('https://statbate.com/list/');
|
||||
if(isJson($online)){
|
||||
$onlineList = json_decode($online, true);
|
||||
if(!empty($onlineList) && count($onlineList) > 100){
|
||||
$redis->setex('importList', 3600, $online);
|
||||
return;
|
||||
}
|
||||
}
|
||||
$online = $redis->get('importList');
|
||||
if($online !== false && isJson($online)){
|
||||
$onlineList = json_decode($online, true);
|
||||
foreach($onlineList as $key => $val){
|
||||
echo "import from importList $key {$val['server']}\n";
|
||||
startBot($key, $val['server']);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$timeEnd = time() + 590;
|
||||
|
||||
$onlineList = [];
|
||||
importList();
|
||||
|
||||
$arr100 = cacheResult('getTop', [], 600, true);
|
||||
$arrPagesList = getFromPages();
|
||||
$arrApiList = getAPIList();
|
||||
|
||||
if(!empty($arrApiList) && !empty($arrPagesList)){ // Stop offline rooms
|
||||
foreach($onlineList as $key => $val){
|
||||
if(!in_array($key, $arrApiList) && $val['last'] < time()+60*15){
|
||||
if(in_array($key, $arrPagesList)){
|
||||
continue;
|
||||
}
|
||||
stopBot($key);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
echo "Top100 \n";
|
||||
foreach($arr100 as $val){ // Start top 100
|
||||
if(in_array($val['name'], $arrPagesList) || in_array($val['name'], $arrApiList)){
|
||||
sendStart($val['name']);
|
||||
}
|
||||
}
|
||||
|
||||
echo "PagesList \n";
|
||||
foreach($arrPagesList as $val){ // Start hiden rooms
|
||||
if(!in_array($val, $arrApiList)){
|
||||
sendStart($val);
|
||||
}
|
||||
}
|
||||
|
||||
echo "ApiList \n";
|
||||
foreach($arrApiList as $val){ // Start api list by num_users
|
||||
sendStart($val);
|
||||
}
|
||||
35
install/clickhouse.md
Normal file
35
install/clickhouse.md
Normal file
|
|
@ -0,0 +1,35 @@
|
|||
https://clickhouse.com/docs/en/getting-started/install/
|
||||
|
||||
```
|
||||
apt-get install -y apt-transport-https ca-certificates dirmngr
|
||||
apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 8919F6BD2B48D754
|
||||
|
||||
echo "deb https://packages.clickhouse.com/deb stable main" | sudo tee \
|
||||
/etc/apt/sources.list.d/clickhouse.list
|
||||
|
||||
apt-get update
|
||||
|
||||
apt-get install -y clickhouse-server clickhouse-client
|
||||
systemctl start clickhouse-server
|
||||
```
|
||||
|
||||
Disable logs.
|
||||
```
|
||||
# nano /etc/clickhouse-server/config.d/z_log_disable.xml
|
||||
<?xml version="1.0"?>
|
||||
<yandex>
|
||||
<asynchronous_metric_log remove="1"/>
|
||||
<metric_log remove="1"/>
|
||||
<query_thread_log remove="1" />
|
||||
<query_log remove="1" />
|
||||
<query_views_log remove="1" />
|
||||
<part_log remove="1"/>
|
||||
<session_log remove="1"/>
|
||||
<text_log remove="1" />
|
||||
<trace_log remove="1"/>
|
||||
</yandex>
|
||||
```
|
||||
```
|
||||
# nano /etc/clickhouse-server/config.xml
|
||||
<level>warning</level>
|
||||
```
|
||||
16
install/conf/app.service
Normal file
16
install/conf/app.service
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
[Unit]
|
||||
Description=Stat Daemon
|
||||
After=network.target manticore.service
|
||||
|
||||
[Service]
|
||||
LimitNOFILE=65535
|
||||
Type=simple
|
||||
GuessMainPID=no
|
||||
ExecStart=/home/stat/go/app/app
|
||||
Restart=always
|
||||
User=stat
|
||||
StandardOutput=syslog
|
||||
StandardError=syslog
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
4
install/conf/cron
Normal file
4
install/conf/cron
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
*/5 * * * * stat php /home/stat/php/start.php > /home/stat/php/log.txt 2>&1
|
||||
0 12 1 * * stat php /home/stat/php/telegram.php >/dev/null 2>&1
|
||||
0 12 15 */3 * stat php /home/stat/php/telegram2.php >/dev/null 2>&1
|
||||
* * * * * www-data curl --silent https://chaturbate100.com/index.php >/dev/null 2>&1
|
||||
45
install/conf/default
Normal file
45
install/conf/default
Normal file
|
|
@ -0,0 +1,45 @@
|
|||
server {
|
||||
listen 80;
|
||||
listen [::]:80;
|
||||
server_name _;
|
||||
location ^~ /.well-known/ {
|
||||
root /var/www/html;
|
||||
default_type "text/plain";
|
||||
}
|
||||
location / {
|
||||
return 301 https://$host$request_uri;
|
||||
}
|
||||
}
|
||||
|
||||
server {
|
||||
listen 443 ssl http2;
|
||||
listen [::]:443 ssl http2;
|
||||
server_name chaturbate100.com;
|
||||
ssl_certificate /etc/letsencrypt/live/chaturbate100.com/fullchain.pem;
|
||||
ssl_certificate_key /etc/letsencrypt/live/chaturbate100.com/privkey.pem;
|
||||
index index.php index.html index.htm;
|
||||
root /var/www/chaturbate100.com;
|
||||
location ~* ^.+\.(jpg|jpeg|gif|png|svg|js|css|ico|bmp|woff)$ {
|
||||
expires 30d;
|
||||
access_log off;
|
||||
}
|
||||
location ~ \.php$ {
|
||||
try_files $uri $uri/ =404;
|
||||
include fastcgi_params;
|
||||
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
|
||||
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_script_name;
|
||||
fastcgi_pass unix:/run/php/php7.3-fpm.sock;
|
||||
}
|
||||
location /ws/ {
|
||||
proxy_pass http://localhost:8080;
|
||||
proxy_http_version 1.1;
|
||||
proxy_set_header Upgrade $http_upgrade;
|
||||
proxy_set_header Connection "Upgrade";
|
||||
}
|
||||
location ~ ^/(cmd|list)/ {
|
||||
access_log off;
|
||||
allow 127.0.0.1;
|
||||
deny all;
|
||||
proxy_pass http://localhost:8080;
|
||||
}
|
||||
}
|
||||
19
install/conf/manticore.conf
Normal file
19
install/conf/manticore.conf
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
index stat {
|
||||
type = rt
|
||||
rt_mem_limit = 1024M
|
||||
rt_attr_uint = did
|
||||
rt_attr_uint = rid
|
||||
rt_attr_uint = token
|
||||
rt_attr_timestamp = time
|
||||
rt_field = tmp
|
||||
path = /var/lib/manticore/data/stat
|
||||
}
|
||||
|
||||
searchd {
|
||||
listen = 127.0.0.1:9312
|
||||
listen = 127.0.0.1:9306:mysql41
|
||||
log = /var/log/manticore/searchd.log
|
||||
query_log = /var/log/manticore/query.log
|
||||
pid_file = /var/run/manticore/searchd.pid
|
||||
binlog_path = /var/lib/manticore/data
|
||||
}
|
||||
60
install/conf/nginx.conf
Normal file
60
install/conf/nginx.conf
Normal file
|
|
@ -0,0 +1,60 @@
|
|||
user www-data;
|
||||
worker_processes auto;
|
||||
pid /run/nginx.pid;
|
||||
include /etc/nginx/modules-enabled/*.conf;
|
||||
worker_rlimit_nofile 65535;
|
||||
|
||||
events {
|
||||
worker_connections 32768;
|
||||
# multi_accept on;
|
||||
use epoll;
|
||||
}
|
||||
|
||||
http {
|
||||
|
||||
##
|
||||
# Basic Settings
|
||||
##
|
||||
|
||||
sendfile on;
|
||||
tcp_nopush on;
|
||||
tcp_nodelay on;
|
||||
keepalive_timeout 65;
|
||||
types_hash_max_size 2048;
|
||||
server_tokens off;
|
||||
|
||||
# server_names_hash_bucket_size 64;
|
||||
# server_name_in_redirect off;
|
||||
|
||||
include /etc/nginx/mime.types;
|
||||
default_type application/octet-stream;
|
||||
|
||||
##
|
||||
# SSL Settings
|
||||
##
|
||||
|
||||
ssl_dhparam /etc/nginx/ssl/dhparam.pem;
|
||||
ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; # Dropping SSLv3, ref: POODLE
|
||||
ssl_prefer_server_ciphers on;
|
||||
|
||||
##
|
||||
# Logging Settings
|
||||
##
|
||||
|
||||
access_log /var/log/nginx/access.log;
|
||||
error_log /var/log/nginx/error.log;
|
||||
|
||||
##
|
||||
# Gzip Settings
|
||||
##
|
||||
|
||||
gzip on;
|
||||
gzip_types text/plain text/css application/json application/javascript application/x-javascript text/xml application/xml application/xml+rss text/javascript;
|
||||
|
||||
##
|
||||
# Virtual Host Configs
|
||||
##
|
||||
|
||||
include /etc/nginx/conf.d/*.conf;
|
||||
include /etc/nginx/sites-enabled/*;
|
||||
}
|
||||
36
install/manticoresearch.md
Normal file
36
install/manticoresearch.md
Normal file
|
|
@ -0,0 +1,36 @@
|
|||
https://manticoresearch.com/downloads/
|
||||
|
||||
```
|
||||
wget https://github.com/manticoresoftware/manticoresearch/releases/download/3.4.0/manticore_3.4.0-200326-0686d9f0-release.buster_amd64-bin.deb
|
||||
dpkg -i manticore_3.4.0-200326-0686d9f0-release.buster_amd64-bin.deb
|
||||
```
|
||||
|
||||
```
|
||||
# nano /etc/
|
||||
|
||||
index stat {
|
||||
type = rt
|
||||
rt_mem_limit = 1024M
|
||||
rt_attr_uint = did
|
||||
rt_attr_uint = rid
|
||||
rt_attr_uint = token
|
||||
rt_attr_timestamp = time
|
||||
rt_field = tmp
|
||||
path = /var/lib/manticore/data/stat
|
||||
}
|
||||
|
||||
searchd {
|
||||
listen = 127.0.0.1:9312
|
||||
listen = 127.0.0.1:9306:mysql41
|
||||
log = /var/log/manticore/searchd.log
|
||||
query_log = /var/log/manticore/query.log
|
||||
pid_file = /var/run/manticore/searchd.pid
|
||||
binlog_path = /var/lib/manticore/data
|
||||
}
|
||||
```
|
||||
|
||||
```
|
||||
systemctl enable manticore.service
|
||||
systemctl start manticore.service
|
||||
systemctl status manticore.service
|
||||
```
|
||||
106
install/mariadb.md
Normal file
106
install/mariadb.md
Normal file
|
|
@ -0,0 +1,106 @@
|
|||
List of repositories https://downloads.mariadb.org/mariadb/repositories/
|
||||
|
||||
```
|
||||
apt-get install software-properties-common dirmngr
|
||||
apt-key adv --fetch-keys 'https://mariadb.org/mariadb_release_signing_key.asc'
|
||||
add-apt-repository 'deb [arch=amd64] http://mirror.rackspace.com/mariadb/repo/10.4/debian buster main'
|
||||
|
||||
apt-get update
|
||||
apt-get install mariadb-server
|
||||
mysql_secure_installation
|
||||
mysql -uroot -p
|
||||
```
|
||||
|
||||
MariaDB config
|
||||
```
|
||||
# nano /etc/mysql/my.cnf
|
||||
|
||||
[client]
|
||||
port = 3306
|
||||
socket = /var/run/mysqld/mysqld.sock
|
||||
default-character-set = utf8mb4
|
||||
|
||||
[mysqld_safe]
|
||||
socket = /var/run/mysqld/mysqld.sock
|
||||
nice = 0
|
||||
malloc-lib = /usr/lib/x86_64-linux-gnu/libjemalloc.so.1
|
||||
|
||||
[mysqld]
|
||||
user = mysql
|
||||
pid-file = /var/run/mysqld/mysqld.pid
|
||||
socket = /var/run/mysqld/mysqld.sock
|
||||
port = 3306
|
||||
basedir = /usr
|
||||
datadir = /var/lib/mysql
|
||||
tmpdir = /tmp
|
||||
skip-networking
|
||||
skip-name-resolve
|
||||
|
||||
# Other
|
||||
default-storage-engine = INNODB
|
||||
character-set-server = utf8mb4
|
||||
max_connections = 100
|
||||
wait_timeout = 7200
|
||||
max_allowed_packet = 16M
|
||||
skip-external-locking
|
||||
open_files_limit = 16000
|
||||
|
||||
# MyISAM settings
|
||||
key_buffer_size = 128M
|
||||
|
||||
# InnoDB settings
|
||||
innodb_buffer_pool_size = 32G
|
||||
innodb_buffer_pool_instances = 32
|
||||
innodb_log_file_size = 1G
|
||||
innodb_flush_log_at_trx_commit = 0
|
||||
innodb_log_buffer_size = 16M
|
||||
innodb_log_files_in_group = 2
|
||||
innodb_flush_method = O_DIRECT
|
||||
innodb_thread_concurrency = 16
|
||||
|
||||
# Buffer settings
|
||||
join_buffer_size = 2M
|
||||
|
||||
# TMP & memory settings
|
||||
tmp_table_size = 32M
|
||||
max_heap_table_size = 32M
|
||||
|
||||
# Try off https://community.centminmod.com/threads/mysqltuner.6779/
|
||||
query_cache_type = 0 # for OFF
|
||||
query_cache_size = 0 # to ensure QC is NOT USED
|
||||
|
||||
# Slowlog settings
|
||||
slow_query_log = 1
|
||||
long_query_time = 5
|
||||
slow_query_log_file = /var/log/mysql/mariadb-slow.log
|
||||
|
||||
#Set General Log
|
||||
#general_log = on
|
||||
#general_log_file = /var/log/mysql/full.log
|
||||
|
||||
[mysqldump]
|
||||
# Do not buffer the whole result set in memory before writing it to
|
||||
# file. Required for dumping very large tables
|
||||
quick
|
||||
|
||||
max_allowed_packet = 32M
|
||||
default-character-set = utf8mb4
|
||||
|
||||
[mysql]
|
||||
no-auto-rehash
|
||||
default-character-set = utf8mb4
|
||||
|
||||
[isamchk]
|
||||
key_buffer_size = 8M
|
||||
sort_buffer_size = 8M
|
||||
read_buffer = 8M
|
||||
write_buffer = 8M
|
||||
default-character-set = utf8mb4
|
||||
|
||||
#
|
||||
# * IMPORTANT: Additional settings that can override those from this file!
|
||||
# The files must end with '.cnf', otherwise they'll be ignored.
|
||||
#
|
||||
!include /etc/mysql/mariadb.cnf
|
||||
!includedir /etc/mysql/conf.d/
|
||||
```
|
||||
23
install/nginx.md
Normal file
23
install/nginx.md
Normal file
|
|
@ -0,0 +1,23 @@
|
|||
```
|
||||
apt-get install nginx certbot
|
||||
mkdir /etc/nginx/ssl/
|
||||
openssl dhparam -out /etc/nginx/ssl/dhparam.pem 2048
|
||||
chown www-data:www-data /etc/nginx/ssl/dhparam.pem
|
||||
chmod 400 /etc/nginx/ssl/dhparam.pem
|
||||
```
|
||||
|
||||
Create SSL certificate.
|
||||
```
|
||||
certbot certonly --webroot -w /var/www/html -d chaturbate100.com -m test@test.com --agree-tos
|
||||
```
|
||||
|
||||
Update config files.
|
||||
```
|
||||
wget -O /etc/nginx/nginx.conf https://raw.githubusercontent.com/poiuty/chaturbate100.com/master/conf/nginx.conf
|
||||
wget -O /etc/nginx/sites-available/default https://raw.githubusercontent.com/poiuty/chaturbate100.com/master/conf/default
|
||||
```
|
||||
|
||||
```
|
||||
systemctl restart nginx
|
||||
systemctl status nginx
|
||||
```
|
||||
55
install/php.md
Normal file
55
install/php.md
Normal file
|
|
@ -0,0 +1,55 @@
|
|||
```
|
||||
apt-get install php-cli php-fpm
|
||||
apt-get install php-redis php-mysql php-xml php-json php-gd php-igbinary php-curl php-mbstring php-xml
|
||||
```
|
||||
```
|
||||
# nano /etc/php/7.3/fpm/pool.d/www.conf
|
||||
|
||||
[www]
|
||||
listen = /run/php/php7.3-fpm.sock
|
||||
|
||||
user = www-data
|
||||
group = www-data
|
||||
|
||||
listen.owner = www-data
|
||||
listen.group = www-data
|
||||
|
||||
pm = static
|
||||
pm.max_children = 50
|
||||
pm.max_requests = 10000
|
||||
|
||||
chdir = /
|
||||
|
||||
php_admin_value[error_log] = /var/log/fpm-php.www.log
|
||||
php_admin_flag[log_errors] = On
|
||||
php_admin_flag[report_memleaks] = On
|
||||
|
||||
php_admin_value[memory_limit] = 128M
|
||||
php_admin_value[max_execution_time] = 30
|
||||
php_admin_value[date.timezone] = "Europe/Moscow"
|
||||
php_admin_value[upload_max_filesize] = 4M
|
||||
php_admin_value[post_max_size] = 4M
|
||||
php_admin_flag[display_errors] = Off
|
||||
php_admin_flag[expose_php] = Off
|
||||
|
||||
php_admin_value[upload_tmp_dir] = "/tmp"
|
||||
|
||||
php_admin_value[opcache.enable] = 1
|
||||
php_admin_value[opcache.interned_strings_buffer] = 8
|
||||
php_admin_value[opcache.max_accelerated_files] = 4000
|
||||
|
||||
php_admin_value[session.gc_probability] = 1
|
||||
php_admin_value[session.gc_divisor] = 1000
|
||||
php_admin_value[session.gc_maxlifetime] = 2592000
|
||||
php_admin_value[session.use_only_cookies] = 1
|
||||
php_admin_value[session.save_handler] = redis
|
||||
php_admin_value[session.serialize_handler] = igbinary
|
||||
php_admin_value[session.save_path] = "unix:///var/run/redis/redis-server.sock?persistent=1&weight=1&database=0"
|
||||
|
||||
php_admin_value[disable_functions] = "apache_setenv, chown, chgrp, closelog, define_syslog_variables, dl, exec, ftp_exec, openlog, passthru, pcntl_exec, popen, posix_getegid, posix_geteuid, posix_getpwuid, posix_kill, posix_mkfifo, posix_setpgid, posix_setsid, posix_setuid, posix_uname, proc_close, proc_get_status, proc_nice, proc_open, proc_terminate, syslog, system, pcntl_alarm, pcntl_fork, pcntl_waitpid, pcntl_wait, pcntl_wifexited, pcntl_wifstopped, pcntl_wifsignaled, pcntl_wexitstatus, pcntl_wtermsig, pcntl_wstopsig, pcntl_signal, pcntl_signal_dispatch, pcntl_get_last_error, pcntl_strerror, pcntl_sigprocmask, pcntl_sigwaitinfo, pcntl_sigtimedwait, pcntl_exec, pcntl_getpriority, pcntl_setpriority, shell_exec"
|
||||
```
|
||||
|
||||
```
|
||||
systemctl restart php7.3-fpm
|
||||
systemctl status php7.3-fpm
|
||||
```
|
||||
16
install/python.md
Normal file
16
install/python.md
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
Chaturbate.com use Cloudflare. Sometime get problem with human check.<br/>
|
||||
Solution: https://github.com/VeNoMouS/cloudscraper
|
||||
```
|
||||
start cloudscraper => get cookie => use it when send requests.
|
||||
```
|
||||
|
||||
Install.
|
||||
```
|
||||
apt-get install python-pip
|
||||
pip install cloudscraper
|
||||
```
|
||||
|
||||
Update.
|
||||
```
|
||||
pip install cloudscraper -U
|
||||
```
|
||||
12
install/redis.md
Normal file
12
install/redis.md
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
```
|
||||
apt-get install redis-server
|
||||
```
|
||||
```
|
||||
# nano /etc/redis/redis.conf
|
||||
|
||||
...
|
||||
unixsocket /var/run/redis/redis-server.sock
|
||||
unixsocketperm 777
|
||||
...
|
||||
|
||||
```
|
||||
32
install/sql/clickhouse.sql
Normal file
32
install/sql/clickhouse.sql
Normal file
|
|
@ -0,0 +1,32 @@
|
|||
CREATE DATABASE statbate;
|
||||
USE statbate;
|
||||
|
||||
CREATE TABLE room
|
||||
(
|
||||
id Int32,
|
||||
gender UInt8
|
||||
) ENGINE = MySQL('127.0.0.1:3306', 'base', 'room', 'user', 'passwd');
|
||||
|
||||
|
||||
CREATE TABLE stat
|
||||
(
|
||||
did UInt32,
|
||||
rid UInt32,
|
||||
token UInt32,
|
||||
time Date,
|
||||
INDEX a did TYPE bloom_filter() GRANULARITY 1,
|
||||
INDEX b rid TYPE bloom_filter() GRANULARITY 1
|
||||
)
|
||||
ENGINE = MergeTree()
|
||||
PARTITION BY toYYYYMMDD(time)
|
||||
ORDER BY (time, rid, did)
|
||||
PRIMARY KEY (time)
|
||||
SETTINGS index_granularity = 8192;
|
||||
|
||||
#CREATE TABLE stat_buffer (
|
||||
# did UInt32,
|
||||
# rid UInt32,
|
||||
# token UInt32,
|
||||
# time Date
|
||||
#)
|
||||
#ENGINE = Buffer('statbate', 'stat', 16, 5, 30, 1000, 10000, 1000000, 10000000);
|
||||
26
install/sql/stat.sql
Normal file
26
install/sql/stat.sql
Normal file
|
|
@ -0,0 +1,26 @@
|
|||
CREATE TABLE `donator` (
|
||||
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||
`name` varbinary(30) NOT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `name` (`name`)
|
||||
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=binary ROW_FORMAT=DYNAMIC;
|
||||
|
||||
CREATE TABLE `room` (
|
||||
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||
`name` varbinary(30) NOT NULL,
|
||||
`gender` tinyint(1) NOT NULL DEFAULT 0,
|
||||
`fans` int(11) NOT NULL DEFAULT 0,
|
||||
`last` int(11) NOT NULL DEFAULT 0,
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `name` (`name`),
|
||||
KEY `gender` (`gender`)
|
||||
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=binary ROW_FORMAT=DYNAMIC;
|
||||
|
||||
CREATE TABLE `stat` (
|
||||
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||
`did` int(11) NOT NULL,
|
||||
`rid` int(11) NOT NULL,
|
||||
`token` int(11) NOT NULL,
|
||||
`time` int(11) NOT NULL,
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=binary ROW_FORMAT=DYNAMIC;
|
||||
Loading…
Add table
Add a link
Reference in a new issue