Данный установочный пакет в настоящее время включает в себя автоматическую загрузку, компиляцию, генерацию конфигурации и развёртывание tengine, php, memcached и mcrouter.
Этот установочный пакет основан на Ubuntu Server 14.04 LTS. Теоретически, все дистрибутивы Ubuntu должны работать, но CentOS не поддерживается.
Установочный пакет предоставляет ряд переменных, которые позволяют пользователям переопределять свои собственные среды публикации. Для этого необходимо создать каталог user
в корне проекта и добавить в него файлы .sh (загрузка выполняется с помощью команды ls ./user/.sh, без сортировки).
Управление службами при запуске системы осуществляется через sysv-rc-conf.
Примечание: я управляю большим количеством серверов, и мой подход заключается в следующем: сначала я получаю код проекта на сервер с помощью команды git clone https://git.oschina.net/janpoem/ubuntu-server-deploy.git
, а затем проверяю конфигурацию сервера из SVN с помощью команды svn checkout http://anyhost/php-server/ ./user
. После этого можно выполнить необходимые команды установки.
Как правило, на одном сервере не размещаются все функциональные компоненты одновременно. Обычно они разделяются на такие группы, как tengine_node_blancer, tengine_php_server, memcached_cluster, memcached_router и т. д. Этот установочный пакет является открытым исходным кодом и предоставляет только базовую среду, а конкретная конфигурация сервера хранится в пользовательских репозиториях (в этом проекте каталог user уже настроен для игнорирования).
./tengine.sh init|prepare|timezone|upgrade|clean|dns
Этот сценарий в основном выполняет команды apt-get upgrade и корректирует часовой пояс сервера.
/etc/resolvconf/resolv.conf.d/head
. Метод использует переменные DNS, определённые пользователем, для комментирования текущих серверов имён в файле и добавления новых DNS.Пользовательские переменные
#!/usr/bin/env bash
# file: user/dns.sh
# oneDNS
DNS[1]=112.124.47.27
DNS[2]=114.215.126.16
# 时区
TIMEZONE=Asia/Shanghai
# 有需要追加的安装包,请使用这个变量,但最好使用+=的方式追加。
SERVER_REQUIRE_PKGS+="...需要增加的包..."
Доступные команды
./tengine.sh install|rebuild|conf|conf-all|conf-main|conf-deny|conf-common|conf-php|script|sh|test|ensite|enphpsite
./tengine.sh conf-php 127.0.0.1:8832 php53_settings
. Первый параметр — это дескриптор fcgipass, второй параметр — имя сохраняемого файла конфигурации (предоставляет возможность совместного использования нескольких версий PHP)../tengine.sh ensite default 80 default
. Первый параметр — название сайта, которое будет использоваться для создания файла конфигурации, например, default.conf. Второй параметр — номер порта веб-сайта. Третий параметр — необязательный, используется для указания имени каталога сайта. Если он не указан, по умолчанию используется название сайта../tengine.sh enphpsite default 80 default
. Параметры аналогичны параметрам ensite. Обратите внимание, что эта команда автоматически запускает команду conf-php. Поэтому, чтобы убедиться в правильности конфигурации PHP, рекомендуется предварительно вручную выполнить команду ./tengine.sh conf-php
.Переинициализация, упомянутая выше, означает изменение конфигурации и перезапись указанной конфигурации.
Переменные, доступные пользователю
# 所需要的包的版本号……这个最好和要下载的包名称保持一致,这里需要调整一下
TENGINE_NAME=tengine-2.1.0
PCRE_NAME=pcre-8.36
ZLIB_NAME=zlib-1.2.8
OPENSSL_NAME=openssl-1.0.2a
# www_user和www_group,这个配置也对应到php编译使用
WWW_USER=www-data
WWW_GROUP=www-data
# tengine的目录,呃,这个不用怎么修改
TENGINE_CONF_DIR=/etc/tengine
# tengine pidfile 这个也不用改了吧
TENGINE_PID_FILE=/var/run/tengine.pid
# ...不说了
TENGINE_LOG_DIR=/var/log/tengine
TENGINE_TMP_DIR=/var/tmp/tengine
# ...не говорим больше
TENGINE_TMP_CLIENT=${TENGINE_TMP_DIR}/client_body
TENGINE_TMP_PROXY=${T ENGINE_TMP_DIR}/proxy
TENGINE_TMP_FCGI=${TENGINE_TMP_DIR}/fcgi
TENGINE_TMP_UWSGI=${TENGINE_TMP_DIR}/uwsgi
TENGINE_TMP_SCGI=${TENGINE_TMP_DIR}/scgi
# tengine config配置变量
TENGINE_WORK_PROS=8
TENGINE_RLIMIT=102400
TENGINE_WORKER_CONNS=102400
TENGINE_DEFAULT_MIME_TYPE=text/html
TENGINE_DEFAULT_CHARSET=text/html
TENGINE_VHOST_LOG_DIR=/var/log/vhost
TENGINE_VHOST_CONF_DIR=${TENGINE_CONF_DIR}/vhost
# www的根目录
TENGINE_WWW_HOME=/var/www
Установка и настройка memcached и mcrouter, связанных с этим.
Mcrouter is a memcached protocol router for scaling memcached (http://memcached.org/) deployments. It's a core component of cache infrastructure at Facebook and Instagram where mcrouter handles almost 5 billion requests per second at peak.
Команды
./mc.sh
``` **install** — установка memcached.
**conf** — инициализация или перезапись конфигурационного файла memcached. Чтобы создать пользовательский файл conf, можно определить необходимые переменные в файле user.sh (также применимы другие конфигурации).
**mcr-install** — установка mcrouter, включая компиляцию и установку double-conversion, facebook/folly, а также инициализацию конфигурационного файла и сервисного скрипта mcrouter.
**mcr-conf** — создание конфигурационного файла mcrouter; процесс может быть повторён. Так как конфигурационный файл имеет формат JSON, он может показаться необычным. Для справки можно использовать переменную `MCR_POOL_SERVERS` в файле user.sh.
**mcr-script|mcr-sh** — генерация сервисного скрипта для mcrouter; может быть выполнена повторно.
**mcr-build** — аналогично mcr-install, если требуется принудительная переустановка, необходимо добавить произвольный параметр, например: `./mc.sh mcr-build 1`.
**mcr-fb-build** — использование метода установки от Facebook для установки; установка от Facebook требует загрузки кода проекта gtest для тестирования, но из-за проблем с доступом к нему в некоторых регионах, рекомендуется использовать метод установки от Facebook.
Если сервер уже установил Facebook/folly и при выполнении mcr-install процесс прошёл без ошибок, но после завершения установки при выполнении команды `mcrouter --help` может появиться сообщение об ошибке:
> mcrouter: error while loading shared libraries: libfolly.so.35: cannot open shared object file: No such file or directory
Независимо от того, сколько раз вы будете перекомпилировать и устанавливать folly, проблема не будет решена. В настоящее время эффективным решением является использование метода установки, предоставленного Facebook, хотя он заменит ваши версии gcc и g++ на версию 4.8.
При новой установке сервера выполнение mcr-install не вызовет этой проблемы. Если вы ранее вручную скомпилировали и установили folly, эта проблема может возникнуть. В этом случае рекомендуется использовать mcr-fb-build.
Кроме того, целевые каталоги для установок mcr-fb-build и mcr-install различаются.
Эта проблема уже была отправлена в систему отслеживания ошибок mcrouter. Ссылка на проблему: https://github.com/facebook/mcrouter/issues/39.
Пользователь может изменять переменные:
```bash
# Конфигурация memcached
MC_HOST=127.0.0.1
MC_PORT=11211
MC_LOG_FILE=/var/log/memcached.log
MC_USER=memcache
MC_SIZE=64
# Конфигурация mcrouter
MCR_PORT=5000
MCR_CONF_FILE=/etc/mcrouter.json
MCR_LOG_FILE=/var/log/mcrouter.log
MCR_PID_FILE=/var/run/mcrouter.pid
# Конфигурация пула серверов mcrouter (здесь не всё понятно, поэтому реализация хорошая, позже будет изменена на массивный режим)
MCR_POOL_SERVERS="\"${MC_HOST}:${MC_PORT}\",\"other_ip:other_port\""
Использование служебного файла /etc/init.d/mcrouter:
Выполнение команды ./mc.sh mcr-sh
создаст служебный скрипт запуска /etc/init.d/mcrouter
, который используется для ежедневного запуска, перезапуска, остановки и проверки состояния службы mcrouter.
Отладка:
Как упоминалось выше, из-за проблемы с folly необходима соответствующая отладка. Если при выполнении service mcrouter start
отображается сообщение «ok» и в PIDFILE виден идентификатор процесса, но при выполнении команд service mcrouter status
или service mcrouter proc
служба не находится в рабочем состоянии, то, скорее всего, во время запуска произошла ошибка.
В этом случае можно попробовать напрямую выполнить команду mcrouter --help
, чтобы увидеть, есть ли какие-либо ошибки. Если help выводит нормально, вам нужно внести некоторые изменения в служебный файл /etc/init.d/mcrouter:
# Выше опущено...
# Здесь начинается
. /lib/lsb/init-functions
${DAEMON} ${DAEMON_ARGS}
exit 1
# Ниже опущено...
Затем выполните /etc/init.d/mcrouter
для непосредственного запуска службы. Вы можете увидеть некоторые другие ошибки, такие как сообщение о том, что порт занят.
После устранения всех проблем со службой и её успешного запуска выполните mc.sh mcr-sh
, чтобы заново сгенерировать служебный файл запуска и заменить внесённые изменения.
##php.sh
./php.sh install|rebuild|fpm-conf|fpm-sh|ini|bin
/php-компиляция-каталог/etc/php-fpm.conf
, а не в /etc/php-fpm.conf./php-компиляция-каталог/lib/php.ini
.Переменные, которые могут быть изменены пользователем:
Здесь перечислены только рекомендуемые переменные для изменения пользователем.
# Каталог загрузки исходного кода PHP, может быть оставлен пустым, будет использоваться ubuntu-server-deploy/temp в качестве каталога загрузки
PHP_TEMP_DIR=
# Необходимая версия PHP, обратите внимание, что текущая компиляция и тестирование были проведены для версий PHP 5.5 и 5.6, другие версии требуют фактического тестирования
PHP_VER=5.5.23
# Источник PHP, который можно выбрать из следующих вариантов: ${PHP_HK_SOURCE}, ${PHP_CN_SOURCE}, ${PHP_US_SOURCE}
PHP_SOURCE=${PHP_HK_SOURCE}
# Префикс исполняемой команды PHP, предоставляемый этой переменной, в основном для обеспечения возможности одновременного существования нескольких версий PHP на сервере, например, некоторые исходные коды поддерживают только PHP 5.3...
PHP_BIN_PREFIX=php
# Требуется добавить имя пакета apt-get, если необходимо несколько строк, используйте двойные кавычки для объединения
PHP_REQ_PKGS=
# Команда компиляции PHP, если это не обязательно, лучше не изменять эту команду напрямую, а использовать += для добавления следующим образом:
PHP_CONF_CMD+="...дополнительная конфигурация компиляции..."
# Журнал PHP, файл pid
PHP_FPM_LOG_DIR=/var/log/${PHP_BIN_PREFIX}-fpm
PHP_FPM_PID_FILE=/var/run/${PHP_BIN_PREFIX}-fpm.pid
PHP_FPM_ERR_FILE=${PHP_FPM_LOG_DIR}/error.log
PHP_FPM_LOG_LEVEL=warning
# Максимальное количество процессов FPM, тайм-аут, RLIMIT
PHP_FPM_PROCESS_MAX=10
PHP_FPM_PROCESS_TIMEOUT=30
PHP_FPM_RLIMIT=65535
# Слушайте FPM, вы можете изменить его на unix:....
PHP_FPM_LISTEN="127.0.0.1:9902"
# Режим прослушивания
PHP_FPM_LISTEN_MODE=0666
# Настройки FPM PM
PHP_FPM_PM_MODE=static
PHP_FPM_PM_START=10
PHP_FPM_PM_MAX_CHILDREN=10
PHP_FPM_PM_MAX_REQUESTS=0
# Настройки php.ini
PHP_INI_MAX_EXECUTION_TIME=60
PHP_INI_MAX_INPUT_TIME=60
PHP_INI_DEFAULT_CHARSET=UTF-8
PHP_INI_POST_MAX_SIZE=10M
PHP_INI_UPLOAD_MAX_SIZE=10M
Пример user.sh:
#!/usr/bin/env bash
MC_HOST=192.168.55.122
MC_PORT=11212
MC_LOG_FILE=/var/log/memcached.log
MC_USER=memcache
MC_SIZE=64
MCR_POOL_SERVERS="\"${MC_HOST}:${MC_PORT}\""
Китайский источник Ubuntu:
Для использования китайского источника apt-get для обновления рекомендуется использовать источник sohu, поскольку известно, что источник 163 содержит ошибки в некоторых пакетах, будьте осторожны.
Источник sohu:
deb http://mirrors.sohu.com/ubuntu/ trusty main restricted universe multiverse
deb
``` ```
mirrors.sohu.com/ubuntu/ trusty-security main restricted universe multiverse
deb mirrors.sohu.com/ubuntu/ trusty-updates main restricted universe multiverse
deb mirrors.sohu.com/ubuntu/ trusty-proposed main restricted universe multiverse
deb mirrors.sohu.com/ubuntu/ trusty-backports main restricted universe multiverse
deb-src mirrors.sohu.com/ubuntu/ trusty main restricted universe multiverse
deb-src mirrors.sohu.com/ubuntu/ trusty-security main restricted universe multiverse
deb-src mirrors.sohu.com/ubuntu/ trusty-updates main restricted universe multiverse
deb-src mirrors.sohu.com/ubuntu/ trusty-proposed main restricted universe multiverse
deb-src mirrors.sohu.com/ubuntu/ trusty-backports main restricted universe multiverse
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )