Quantcast
Channel: Библиотека знаний
Viewing all 1318 articles
Browse latest View live

Настройка NGINX - [Настройка NGINX]

$
0
0

Настройка NGINX

Рецепты

Скрипт создания настроек сайта для Nginx

Я очень давно разрабатываю web проекты и для их публикации использую nginx web сервер. За это время скопилось много рецептов использования этого замчательного web сервера. Но из за лени каждый раз писать настройки заново я создал скрипт позволяющий ускорить и упростить это муторное занятие.

Параметры сервера

  • client_max_body_size
  • keepalive_timeout

Встроенные переменные

Конструкции и их применение

Модули / Modules

Рекомендации

Примеры конфигураций


Создание редиректа на домен с www

Nginx - Вопросы и Ответы

$
0
0

Nginx - Вопросы и Ответы

Вопросы-Ответы

Q: Нада перенаправить с site.com на www.site.com

server{listen80;server_name site.com;return301http://www.site.com$request_uri;} 
server{listen80;server_name  www.site.com;}

Q: Надо перенаправить на другую папку

  • location /d { rewrite ^ other-folder permanent; }

Q: Надо перенаправить GET на другой сервер

  • location /d { 
      rewrite ^ http://server.ru$request_uri? permanent; #301 redirect 
    }

Q: Надо перенаправить GET|POST на другой сервер

*Q: Надо переправить в другой location, используя ошибку

Q: Блокировка IP адресов и подсететей в Nginx

  • Q: Настройка proxy_pass на удаленный домен по DNS
  • location ^~ /freegeoip/ {#use google as dnsresolver 8.8.8.8;proxy_passhttp://freegeoip.net/json/$remote_addr;}

Q: Как запаролить location в Nginx

  • location ^~ /secure/ {root /www/mysite.com/httpdocs/secure;auth_basic"Website development";auth_basic_user_file  /www/mysite.com/authfile;}

    Затем генерируем сам файл, где логин будет admin, а пароль pass

    php -r "echo 'admin:'. crypt('pass', base64_encode('pass'));" > /www/mysite.com/authfile

Q: Как перенаправить обработку скрипта в другую папку

server{listen80;server_name site.com;location ^~ /api/target/ { 
	index receive.php; 
	alias /some/path/to/site/target/; 
        location~ \.php$ { 
        	# Fix for server variables that behave differently under nginx/php-fpm than typically expectedfastcgi_split_path_info ^(.+\.php)(/.+)$; 
		# Include the standard fastcgi_params file included with nginxinclude fastcgi_params; 
        	fastcgi_param  PATH_INFO        $fastcgi_path_info;fastcgi_index receive.php; 
        	# Override the SCRIPT_FILENAME variable set by fastcgi_paramsfastcgi_param  SCRIPT_FILENAME  $request_filename; 
        	# Pass to upstream PHP-FPM; This must match whatever you name your upstream connectionfastcgi_pass phpfpm; 
		#fastcgi_ignore_client_abort off;#try_files $uri =404; 
        } 
    }}

Q: Количество открытых файлов и их лимиты

for pid in`pidof nginx`; doecho"$(< /proc/$pid/cmdline)"; egrep'files|Limit'/proc/$pid/limits; echo"Currently open files: $(ls -1 /proc/$pid/fd | wc -l)"; echo; done

Перенаправление обработки скрипта в другую папку - [Перенаправление обработки скрипта в другую папку]

$
0
0

Перенаправление обработки скрипта в другую папку

server{listen 192.168.1.1:80;server_name site.ztc ;root /home/site.ztc/httpdocs/app/frontend/web;indexindex.php;access_log /home/site.ztc/logs/access.log;error_log  /home/site.ztc/logs/error.log error;charset utf-8; 
                                # With PHP-FPMlocation / {indexindex.php;try_files$uri$uri/ /index.php?$query_string;} 
                                # PHP fastcgilocation~ \.php {include fastcgi_params;# Use your own port of fastcgi here#fastcgi_pass 127.0.0.1:9000;fastcgi_pass unix:/var/run/php-fpm-7-site.ztc.sock;fastcgi_indexindex.php;fastcgi_split_path_info ^(.+\.php)(/.+)$;fastcgi_param PATH_INFO $fastcgi_path_info;fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;} 
 
                                # rpclocation ^~ /rpc {alias /home/site.ztc/httpdocs/app/api/web;indexindex.php;try_files$uri$uri/ @rpc; 
                                                # PHP fastcgilocation~* \.php {include fastcgi_params;# Use your own port of fastcgi here#fastcgi_pass 127.0.0.1:9000;fastcgi_pass unix:/var/run/php-fpm-7-site.ztc.sock;fastcgi_split_path_info ^(.+\.php)(/.+)$;fastcgi_param SCRIPT_FILENAME $request_filename;}} 
                                location@rpc{rewrite ^/rpc/(.*)$ /rpc/index.php?$1 last;# THIS IS THE IMPORTANT LINE}# end rpc 
}
  • @rpc - Этот локейшен необходим для перенаправления c /rpc на /rpc/index.php. Указываем lastдля отключения дальнейшего реврайта
  • $request_filename - равносильно fastcgi_param SCRIPT_FILENAME /home/site.ztc/httpdocs/app/api/web/$script;

Проекты для начала разработки на Yii2 - [Webapp-Template]

Highcharts - [Документация / Примеры]

$
0
0

Highcharts

use miloschuman\highcharts\Highcharts;use yii\web\JsExpression; 
$this->registerAssetBundle('yii\web\YiiAsset'); 
echo Highcharts::widget(['options'=>['title'=>['text'=>'Статистика за месяц'],'xAxis'=>['categories'=>array_keys($statistic)],'yAxis'=>['title'=>['text'=>'Достижения цели']],'series'=>[['name'=>'Jane','data'=>array_values($statistic),'class'=>'test-class'],],'plotOptions'=>['series'=>['cursor'=>'pointer','point'=>['events'=>['click'=>new JsExpression('function(e){ alert(this.x); }')]]]]]]);

Документация / Примеры

Flotcharts

use borodulin/yii2-flot

use conquer\flot\FlotWidget; 
echo FlotWidget::widget(['htmlOptions'=>['class'=>'chart'],'data'=>[['labels'=>'Unique Visits','data'=>array_map(function($v){return[$v,rand(10,50)];},range(1,30))],['labels'=>'Page Views','data'=>array_map(function($v){return[$v,rand(10,50)];},range(1,30))],],'options'=>['series'=>['lines'=>['show'=>true,'lineWidth'=>2,'fill'=>true,'fillColor'=>['colors'=>[['opacity'=>0.05],['opacity'=>0.01],]],],'points'=>['show'=>true],'shadowSize'=>2,],'grid'=>['hoverable'=>true,'clickable'=>true,'tickColor'=>"#eee",'borderWidth'=>0,],'colors'=>["#d12610","#37b7f3","#52e136"],'xaxis'=>['ticks'=>11,'tickDecimals'=>0,],'yaxis'=>['ticks'=>11,'tickDecimals'=>0,]],]);

Документация / Примеры

HumHub - создано

$
0
0

HumHub

Установка

$ git clone https://github.com/humhub/humhub.git ./
$ composer global require "fxp/composer-asset-plugin:^1.4.2"
$ composer install--prefer-dist

Архивация и восстановление / Dump && Restore

$
0
0

Архивация и восстановление / Dump && Restore

Создание дампа / Dump create

Добавляем путь до сохранения снапшотов в конфигурационный файл

nano /usr/local/etc/elasticsearch/elasticsearch.yml

path.repo: ["/usr/local/var/elasticsearch/snapshot"]

Регистрация

$ curl -XPUT'http://localhost:9200/_snapshot/backup'-d'{
    "type": "fs",
    "settings": {
        "location": "/usr/local/var/elasticsearch/snapshot",
        "compress": true
    }
}'
  • где:
    • backup - название репозитория
    • /usr/local/var/elasticsearch/snapshot - папка с содержанием самого репозитория

Проверка регистрации

$ curl -XGET"http://localhost:9200/_snapshot/_all?pretty"

ответ от elasticsearch

{
  "backup" : {
    "type" : "fs",
    "settings" : {
      "compress" : "true",
      "location" : "/usr/local/var/elasticsearch/snapshot/backup"
    }
  }
}

Проверка целостности

$ curl -XPOST"http://localhost:9200/_snapshot/backup/_verify

ответ от elasticsearch

{"nodes":{"zKsDO_G3SlCdbLlhVmgLKA":{"name":"Vapor"}}}

Создание snapshot / Backup

$ curl -XPUT"http://localhost:9200/_snapshot/backup/my_index/?wait_for_completion=true"

Где my_index является существующим индексом.

Проверить наличие инднеса можно командой

$ curl --silent-XGET"http://localhost:9200/_stats?pretty"|grep my_index

Удаление регистрации репозитория

$ curl -XDELETE'http://localhost:9200/_snapshot/backup'

Восстановление / Restore

Архивация и восстановление / Dump && Restore

Настройка

Если ранее небыл зарегистрирован.

$ curl -XPUT'http://localhost:9200/_snapshot/_restore?wait_for_completion=true'-d'{
    "type": "fs",
    "settings": {
        "location": "/usr/local/var/elasticsearch/snapshot",
        "compress": true
    }
}'
  • где:
    • backup - название репозитория
    • /usr/local/var/elasticsearch/snapshot - папка с содержанием самого репозитория

Проверка

$ curl -XPOST http://localhost:9200/_snapshot/backup/_verify?pretty

Восстановление

$ curl -XPOST http://localhost:9200/_snapshot/backup/_restore?pretty

how to match an array value by it's key in a key value pair elasticsearch array?

$
0
0

how to match an array value by it's key in a key value pair elasticsearch array?

Create empty index "twitter"

$ curl -XDELETE'http://localhost:9200/twitter/'
$ curl -XPUT'http://localhost:9200/twitter/'

create geo_point mapping for the actual "tweet"

$ curl -XPUT'http://localhost:9200/twitter/tweet/_mapping'-d'
{
    "tweet": {
        "properties": {
            "db": {
                "type": "object",
                "properties": {
                    "@type": {
                        "type": "string"
                    },
                    "oracle_props": {
                        "type": "nested",
                        "properties": {
                            "@name": {
                                "type": "string"
                            },
                            "@value": {
                                "type": "string"
                            }
                        }
                    }
                }
            }
        }
    }
}'

Let's check if the mapping was set

$ curl -XGET'http://localhost:9200/twitter/tweet/_mapping?pretty=true'

Post some tweets, with nested data

$ curl -XPUT'http://localhost:9200/twitter/tweet/1'-d'{
    "name": "Athena",
    "version": 1,
    "db": {
        "@type": "Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 64bit",
        "oracle_props": [
            {
                "@name": "open_cursors",
                "@value": 4000
            },
            {
                "@name": "USER_ROLE_PRIVS_COUNT",
                "@value": 1
            },
            {
                "@name": "CREATE_PERMISSION",
                "@value": "Y"
            }
        ]
    }
}'

Query nested only

$ curl -XGET localhost:9200/twitter/tweet/_search -d'{
    "query": {
        "nested" : {
            "path" : "db.oracle_props",
            "score_mode" : "avg",
            "query" : {
                "bool" : {
                    "must" : [
                        {
                            "term": {
                                "db.oracle_props.@name": "open_cursors"
                            }
                        },
                        {
                            "range": {
                                "db.oracle_props.@value": {
                                    "lte": 4000
                                }
                            }
                        }
                    ]
                }
            }
        }
    }
}';

Query "Athena" and "Oracle"

$ curl -XGET localhost:9200/twitter/tweet/_search -d'{
    "query" : {
        "bool" : {
            "must" : [
                {
                    "match" : {"tweet.name" : "Athena"}
                },
                {
                    "match" : {"tweet.db.@type" : "Oracle"}
                }
            ]
        }
    }
}'

Combine the former two queries

$ curl -XGET localhost:9200/twitter/tweet/_search -d'{
    "query" : {
        "bool" : {
            "must" : [
                {
                    "match" : {"tweet.name" : "Athena"}
                },
                {
                    "match" : {"tweet.db.@type" : "Oracle"}
                },
                {
                    "nested" : {
                        "path" : "db.oracle_props",
                        "score_mode" : "avg",
                        "query" : {
                            "bool" : {
                                "must" : [
                                    {
                                        "term": {
                                            "db.oracle_props.@name": "open_cursors"
                                        }
                                    },
                                    {
                                        "range": {
                                            "db.oracle_props.@value": {
                                                "lte": 4000
                                            }
                                        }
                                    }
                                ]
                            }
                        }
                    }
                }
            ]
        }
    }
}'

Results as

{
    "took": 2,
    "timed_out": false,
    "_shards": {
        "total": 5,
        "successful": 5,
        "failed": 0
    },
    "hits": {
        "total": 1,
        "max_score": 2.462332,
        "hits": [
            {
                "_index": "twitter",
                "_type": "tweet",
                "_id": "1",
                "_score": 2.462332,
                "_source": {
                    "name": "Athena",
                    "version": 1,
                    "db": {
                        "@type": "Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 64bit",
                        "oracle_props": [
                            {
                                "@name": "open_cursors",
                                "@value": 4000
                            },
                            {
                                "@name": "USER_ROLE_PRIVS_COUNT",
                                "@value": 1
                            },
                            {
                                "@name": "CREATE_PERMISSION",
                                "@value": "Y"
                            }
                        ]
                    }
                }
            }
        ]
    }
}

Multi word query in elasticsearch with filter - создано

$
0
0

Multi word query in elasticsearch with filter

{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "Category": "Sport"
          }
        },
        {
          "multi_match": {
            "query": "world series",
            "type": "cross_fields",
            "operator": "and",
            "fields": [
              "Question",
              "Answer"
            ]
          }
        }
      ],
      "must_not": [],
      "should": []
    }
  },
  "from": 0,
  "size": 10,
  "sort": [],
  "aggs": {}
}

Как построить фасетный поиск с помощью счетчиков фасетов - создано

$
0
0

Как построить фасетный поиск с помощью счетчиков фасетов

{
   "query": {
      "and": [
          {
              "terms": {"country": ["be", "fr"]}             
          },
          {
              "terms": {"category": ["books", "movies"]}
          }
      ]
   }
}

Для счетчиков мы можем использовать встроенные агрегаты из Elasticsearch. Каждый из двух фасетов хранится как одно поле в индексе, поэтому мы можем использовать агрегирование терминов в каждом из этих полей. Агрегация вернет счетчик за значение этого поля.

{
   "query": {
      "and": [
          {
              "terms": {"country": ["be", "fr"]}             
          },
          {
              "terms": {"category": ["books", "movies"]}
          }
      ]
   },
   "aggregations": {
      "countries": {
         "terms": {"field": "country"}
      },
      "categories": {
         "terms": {"field": "category"}
      }
   }
}

Если бы вы выполнили этот запрос, вы заметите, что счетчики отключены. В двух не отобранных странах, в Португалии и Бразилии, есть счетчик 0. Хотя есть фактические результаты, если мы хотим их выбрать (из-за ORвнутренней грани). Это происходит потому, что по умолчанию Elasticsearch выполняет свои агрегирования в результирующем наборе. Это означает, что если вы выберете Францию, фильтры другой страны будут иметь счет 0, потому что в результирующем наборе содержатся только элементы из Франции.

Чтобы исправить это, нам нужно дать команду Elasticsearch выполнить агрегацию во всем наборе данных, игнорируя запрос. Мы можем сделать это, определив наши скопления как глобальные .

{
    "query": {
        "and": [
            {
                "terms": {"country": ["be", "fr"]}             
            },
            {
                "terms": {"category": ["books", "movies"]}
            }
        ]
   },
   "aggregations": {
      "all_products": {
         "global": {},
         "aggregations": {
            "countries": {
               "terms": {"field": "country"}
            },
            "categories": {
               "terms": {"field": "category"}
            }
         }
      }
   }
}

Если бы мы просто сделали это, наши счетчики всегда были бы одинаковыми, потому что они всегда будут рассчитывать на весь набор данных, независимо от наших фильтров. Наши агрегаты должны стать немного более сложными, чтобы это работало, нам нужно добавить к ним фильтры. Каждое агрегирование должно рассчитывать на набор данных со всеми применяемыми фильтрами, за исключением собственных. Таким образом, агрегация за счет во Франции рассчитывает на набор данных с применением фильтра категории, но не фильтр стран:

{
   "query": {
       "and": [
           {
               "terms": {"country": ["be", "fr"]}             
           },
           {
               "terms": {"category": ["books", "movies"]}
           }
       ]
   },
   "aggregations": {
      "all_products": {
         "global": {},
         "aggregations": {
            "countries": {
               "filter": {
                  "and": [
                     {
                        "terms": {"category": ["books","movies"]}
                     }
                  ]
               },
               "aggregations": {
                  "filtered_countries": {
                     "terms": {"field": "country"}
                  }
               }
            },
            "categories": {
               "filter": {
                  "and": [
                     {
                        "terms": {"country": ["be","fr"]}
                     }
                  ]
               },
               "aggregations": {
                  "filtered_categories": {
                     "terms": {"field": "category"}
                  }
               }
            }
         }
      }
   }
}

Вывод

{
   "took": 153,
   "timed_out": false,
   "_shards": {
      "total": 5,
      "successful": 5,
      "failed": 0
   },
   "hits": {
      "total": 3,
      "max_score": 0,
      "hits": ["..."]
   },
   "aggregations": {
      "all_products": {
         "doc_count": 21,
         "filterted categories": {
            "doc_count": 13,
            "categories": {
               "doc_count_error_upper_bound": 0,
               "sum_other_doc_count": 0,
               "buckets": [
                  {
                     "key": "movies",
                     "doc_count": 6
                  },
                  {
                     "key": "music",
                     "doc_count": 4
                  },
                  {
                     "key": "books",
                     "doc_count": 3
                  }
               ]
            }
         },
         "filtered_countries": {
            "doc_count": 15,
            "countries": {
               "doc_count_error_upper_bound": 0,
               "sum_other_doc_count": 0,
               "buckets": [
                  {
                     "key": "fr",
                     "doc_count": 6
                  },
                  {
                     "key": "br",
                     "doc_count": 4
                  },
                  {
                     "key": "be",
                     "doc_count": 3
                  },
                  {
                     "key": "pt",
                     "doc_count": 2
                  }
               ]
            }
         }
      }
   }
}

Elasticsearch - поисковая система - [Примеры]

$
0
0

Elasticsearch - поисковая система

Устанока

Установка и настройка Elasticsearch

  • Установите максимальный размер открытых дескрипторов файла для пользователя от 32k до 64k

nano /etc/sysctl.conf

vm.max_map_count = 262144
  • Если возможно, отключите свопинг памяти для процессов Elasticsearch. Обратите внимание, что в виртуальных средах это может привести к неожиданным результатам.
  • Установите значение -Xms равным -Xmx (то же самое что установить значение переменной среды ES_HEAP_SIZE).
  • Оставьте некоторое количество памяти, чтобы кеш операционной системы мог использовать его для Lucene.
Elasticsearch JVM не должен занимать больше половины всего объема памяти.

Проверка работоспособности сервера

$ curl -XGET http://localhost:9200/_stats/?pretty
$ curl -XGET http://localhost:9200/_nodes/?pretty
$ curl --silent-XGET"http://localhost:9200/_snapshot/_all"
$ curl --silent-XGET"http://localhost:9200/_cat/nodes?pretty"
mbp-mirocow 192.168.1.147 11786.88 d * Mirocow

Статьи / Документация / Примеры индексов / Примеры запросов

Документация

Индексы

Запросы

Примеры

How to search for tags - создано

$
0
0

How to search for tags

{
 "query": {
    "bool": {
      "should": [
        {
          "match": {
            "keyword": {
              "query": "abstract, background"
            }
          }
        }
      ]
    }
  }
}  

Mapping

PUT /freevects
{
  "mappings": {
    "photos": {
      "properties": {
        "title": {
          "type": "text",
          "boost": 1.9,
          "analyzer": "standard"
        },
        "keyword": {
          "type": "keyword",
          "boost": 1.4
        },
        "category": {
          "type": "keyword",
          "index": false
        },
        "quality": {
          "type": "short",
          "index": false,
          "boost": 1.1
        },
        "downloads": {
          "type": "integer",
          "index": false,
          "boost": 1.1
        },
        "likes": {
          "type": "integer",
          "index": false,
          "boost": 1
        },
        "filename": {
          "type": "keyword",
          "index": false
        },
        "type": {
          "type": "keyword",
          "index": false
        },
        "free": {
          "type": "short",
          "index": false
        },
        "created": {
          "type": "date",
          "index": false
        }
      }
    }
  }
}

Query

{
  "query": {
    "bool": {
      "should": [
        {
          "match": {
            "keyword": "abstract"
          }
        },
        {
          "match": {
            "keyword": "background"
          }
        }
      ]
    }
  }
}

Операционные системы - [T]

$
0
0

Tizen - [Application / Приложения]

$
0
0

Searching for documents with arrays of objects - создано

$
0
0

Searching for documents with arrays of objects

{
    "properties": {
        "tags": {
            "properties": {
                "tag": {
                    "type": "string"
                },
                "tagtype": {
                    "type": "string"
                }
            }
        }
    }
}

Shops / Cart / Orders - [Cart]

$
0
0

Shops / Cart / Orders

Shop

Cart

Data types - Типы данных индеса - [Core datatypes]

$
0
0

Data types - Типы данных индеса

Core datatypes

  • string - text and keyword
  • [number] - long, integer, short, byte, double, float, half_float, scaled_float
  • [date] - date
  • [boolean] - boolean
  • [binary] - binary
  • [range] - integer_range, float_range, long_range, double_range, date_range

text - Эти поля предварительно обрабатываются анализатором для преобразования строки в список отдельных терминов.
keyword - Поля ключевых слов доступны только по их точному значению.

Complex datatypes

  • [array] - Array support does not require a dedicated type
  • [object] - object for single JSON objects
  • [nested] - nested for arrays of JSON objects

Geo datatypes

  • [geo-point] - geo_point for lat/lon points
  • [geo-shape] - geo_shape for complex shapes like polygons

Specialised datatypes

  • [ip] - ip for IPv4 and IPv6 addresses
  • Completion datatype - completion to provide auto-complete suggestions
  • [token-count] - token_count to count the number of tokens in a string
  • {plugins}/mapper-murmur3.html[mapper-murmur3]
  • murmur3 to compute hashes of values at index-time and store them in the index
  • [percolator] - Accepts queries from the query-dsl
  • [parent-join] - Defines parent/child relation for documents within the same index

Multi-fields

It is often useful to index the same field in different ways for different purposes. For instance, a string field could be mapped as a text field for full-text search, and as a keyword field for sorting or aggregations. Alternatively, you could index a text field with the standard analyzer, the english analyzer, and the french analyzer.

This is the purpose of multi-fields. Most datatypes support multi-fields via the Multi-fields parameter.

types/array.asciidoc

types/binary.asciidoc

types/range.asciidoc

types/boolean.asciidoc

types/date.asciidoc

types/geo-point.asciidoc

types/geo-shape.asciidoc

types/ip.asciidoc

types/keyword.asciidoc

types/nested.asciidoc

types/numeric.asciidoc

types/object.asciidoc

types/text.asciidoc

types/token-count.asciidoc

types/percolator.asciidoc

types/parent-join.asciidoc

GitLab

$
0
0

GitLab

$ curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ee/script.deb.sh |sudobash 
 
% Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
1005232052320052320 --:--:--  0:00:01 --:--:--  4853
Detected operating system as debian/squeeze.
Checking for curl...
Detected curl...
Running apt-get update... done.
Installing debian-archive-keyring which is needed for installing
apt-transport-https on many Debian systems.
Installing apt-transport-https... done.
Installing /etc/apt/sources.list.d/gitlab_gitlab-ee.list...done.
Importing packagecloud gpg key... done.
Running apt-get update... done.
 
The repository is setup! You can now install packages.

Wordpress - создано

Viewing all 1318 articles
Browse latest View live