Что бы установить PHP 7 версии на CentOs или Red Hat Linux, http://rpms.remirepo.net/wizard/ сконфигурируйте себе тут пакеты и утсановите согласно инструкции
Как скачать сайт целиком на Linux или FreeBSD с помощью wget
С помощью wget можно скачивать сайты, включая картинки, всего лишь указав адрес сайта и определенные параметры. wget будет автоматически переходить по ссылкам на сайте и скачивать страницу за страницей. Рассмотрим несколько примеров от простых к более сложным использования wget для скачивания сайтов.
Чтобы скачать сайт целиком с помощью wget нужно выполнить команду:
wget -r -k -l 7 -p -E -nc http://site.com/
После выполнения данной команды в директорию site.com будет загружена локальная копия сайта http://site.com. Чтобы открыть главную страницу сайта нужно открыть файл index.html.
Рассмотрим используемые параметры:
-r | — | указывает на то, что нужно рекурсивно переходить по ссылкам на сайте, чтобы скачивать страницы. |
-k | — | используется для того, чтобы wget преобразовал все ссылки в скаченных файлах таким образом, чтобы по ним можно было переходить на локальном компьютере (в автономном режиме). |
-p | — | указывает на то, что нужно загрузить все файлы, которые требуются для отображения страниц (изображения, css и т.д.). |
-l | — | определяет максимальную глубину вложенности страниц, которые wget должен скачать (по умолчанию значение равно 5, в примере мы установили 7). В большинстве случаев сайты имеют страницы с большой степенью вложенности и wget может просто «закопаться», скачивая новые страницы. Чтобы этого не произошло можно использовать параметр -l. |
-E | — | добавлять к загруженным файлам расширение .html. |
-nc | — | при использовании данного параметра существующие файлы не будут перезаписаны. Это удобно, когда нужно продолжить загрузку сайта, прерванную в предыдущий раз. |
Мы рассмотрели лишь одно из возможных применений утилиты wget. На самом деле область применения wget значительно шире и wget обладает большим числом дополнительных параметров. За более подробной информацией обращайтесь к руководству, выполнив в командной строке: man wget.
Настройка и запуск NodeJS приложения
Быстрая настройка и простая поддержка NodeJS приложения
Под катом я поделюсь опытом нескольких дней исследований, проб и ошибок в процессе настройки NodeJS проекта на Ubuntu Server. В рамках руководства, мы пройдем по следующим темам:
- Вечный запуск процесса NodeJS аппликации и вывод на публику
- Базовая настройка NoSQL базы данных MongoDB
- Авто-запуск и менеджмент приложения
Введение
Прежде чем мы начнем, сразу предупрежу — приведенные ниже материалы описывают процессбазовой настройки окружения, не учитывая большие нагрузки. Приведенных в пример настроек должно хватить на первые запуски проекта и тем более для поддержки внутренних инструментов на NodeJS.
Что бы не раздувать руководство, мы начнем с момента, когда вы уже запустили Ubuntu Server и имеетеNodeJS на борту. Лично я предпочитаю DigitalOcean как VPS хостинг, где за 5$ можно быстро и удобно получить нужные мощности, а так же большой набор гайдов на английском.
Если у вас есть какие либо замечания, смело оставляйте их в комментариях что бы я мог внести их в руководство.
Вечный процесс
Начнем с самого простого — авто-запуск процесса при падании и удобный менеджмент NodeJS приложения. Тут нам спешит на помощь один из инструментов ранее упомянутого проекта Nodejitsu —forever.
Ставится forever как и обычная глобальная NodeJS аппликация:
$ [sudo] npm install forever -g
После чего вы можете запустить любое NodeJS приложение простой командой:
forever start app.js
И легко управлять процессом (или процессами) с помощью перечисленных команд:
forever list
forever stop app.js
forever restart app.js
Помимо названных команд есть конечно и другие, включая кучу настроек. Но так как для большинства простых случаев всегда хватает настроек по умолчанию, мы можем ограничится следующей командой запуска:
forever start -l /var/log/app.js.log -a app.js
Где мы определяем путь к файлу с логами приложения, и указываем параметр append
для склеивания логов.
На заметку
Процесс по умолчанию записывается на пользователя, который его запустил. Это значит, что если вы запустите forever через sudo
, то и команды forever list
/stop
и подобные, нужно будет запускать тоже через sudo
.
Если же вы хотите запустить приложение в определенном окружении:
NODE_ENV=production forever start -l /var/log/app.js.log -a app.js
Доступ из сети
Если вы запускаете веб сервер на ноде и хотите что бы он был доступен из глобальной сети, нужно лишь открыть необходимые порты. В Ubuntu Server стандартные порты (80, 8080) по умолчанию открыты, но открыть другие не составит никаких проблем:
sudo iptables -A INPUT -p tcp dport 777 -j ACCEPT
Вместо 777
поставьте номер необходимого порта.
80 порт
80
порт является стандартным для веба, но что бы запустить NodeJS процесс на этому порту, нужно запускать аппликацию от sudo
, что далеко не всегда удобно и теоретически не безопасно.
Что бы принимать трафик с 80 порта на порт вашего приложения (например 8080) можно сделать простое перенаправление:
sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080
Эту команду необходимо запускать каждый раз при запуске системы, как автоматизировать этот процесс я опишу ниже в руководстве.
Немного сложней, но надежней будет настроить nginx для перенаправления портов и распределения нагрузки между несколькими демонами и серверами.
На OSx, что бы удобно заходить на приложение по прямой ссылке тоже можно настроить перенаправление с авто-настройкой при запуске системы, но уже по чуть более сложной схеме. Ранее я подготавливал небольшое руководство по упомянутой настройке OSx.
MongoDB
Чаще всего с NodeJS используют MongoDB как решение для NoSQL базы данных. Что бы установить ее на Ubuntu, следуем этим простым шагам.
Что бы включить MongoDВ как сервис, активизируя авто-запуск в том числе, вводим команду:
sudo service mongodb start
Настройки базы можно найти по этому пути /etc/mongodb.conf
, там же сразу рекомендую включить авторизацию, что по умолчанию отключена:
auth=true
Это включит авторизацию для удаленных пользователей, оставив локальный доступ открытым. Что бы получить удаленные доступ к базе, можете создать пользователей в базе с любыми правами.
В качестве интерфейса для работы с базой, можно использовать Robomongo для OSx.
Авто-запуск проекта
Что бы спать спокойно, не волнуясь, что из за сбоя операционной системы или вины хостинг провайдера упадет ваше приложение, настраиваем сервис для авто-запуска.
Я подготовил заготовку скрипта на примере проекта DevShelf для сервиса Ubuntu. Вам останется лишь заполнить настройки:
NAME=devshelf # Название сервиса
SOUREC_DIR=/home/user/devshelf # Путь до приложения
COMMAND=node # Команда запуска
SOURCE_NAME=app.js # Файл запуска приложения
USER=user # Пользователь от которого запускать процесс
NODE_ENVIROMENT=production # Node environment
Логи приложения, судя по скрипту, будут доступны в директории /var/log/$NAME.log
.
Поместите скрипт в директорию /etc/init.d/
с удобным именем, например /etc/init.d/app
, после чего даем нужные права и прописываем в авто-загрузку:
sudo chmod a+x /etc/init.d/app
sudo update-rc.d app defaults
Теперь нам будут доступны следующие команды:
sudo service app start
sudo service app status
sudo service app restart
sudo service app stop
RSYNC server CentOS 6.5
Make sure xinetd and rsync is available, if not type
# yum -y install rsync xinetd
Add xinetd service to system
# chkconfig --add xinetd
Make sure xinetd running on init 3 and 5
# chkconfig --list xinetd
Enable rsync
# vi /etc/xinetd.d/rsync
Change disable = yes into disable = no
Create username and password for rsync client to use
# vi /etc/rsyncd.secrets
adminname:hispassword
Create configuration and shares for rsync daemon
# vi /etc/rsyncd.conf
———————-
max connections = 2
log file = /var/log/rsync.log
timeout = 300
[shares]
comment = shared data stored here
path = /home/adminname/shares
read only = false
list = yes
uid = adminname
gid = adminname
auth users = adminname
secrets file = /etc/rsyncd.secrets
hosts allow = 10.10.105.0/24
———————-
Secure /etc/rsyncd.*
# chown root.root /etc/rsyncd.*
# chmod 600 /etc/rsyncd.*
Restart xinetd
# service xinetd restart
Make sure rsync now running
# chkconfig --list
Perhaps you also want to enable port 873 tcp and udp on your firewall so other can connect to your server.
MySQL Шпаргалки
MySQL шпаргалки
Сегодня я решил опубликовать свои шпаргалки, на самые часто встречающиеся ошибки при работе с MySQL.
mysqldump -u USER -pPASSWORD DATABASE > /path/to/file/dump.sql
Создаём структуру базы без данных
mysqldump --no-data - u USER -pPASSWORD DATABASE > /path/to/file/schema.sql
Если нужно сделать дамп только одной или нескольких таблиц
mysqldump -u USER -pPASSWORD DATABASE TABLE1 TABLE2 TABLE3 > /path/to/file/dump_table.sql
Создаём бекап и сразу его архивируем
mysqldump -u USER -pPASSWORD DATABASE | gzip > /path/to/outputfile.sql.gz
Создание бекапа с указанием его даты
mysqldump -u USER -pPASSWORD DATABASE | gzip > `date +/path/to/outputfile.sql.%Y%m%d.%H%M%S.gz`
Заливаем бекап в базу данных
mysql -u USER -pPASSWORD DATABASE < /path/to/dump.sql
Заливаем архив бекапа в базу
gunzip < /path/to/outputfile.sql.gz | mysql -u USER -pPASSWORD DATABASE
или так
zcat /path/to/outputfile.sql.gz | mysql -u USER -pPASSWORD DATABASE
Создаём новую базу данных
mysqladmin -u USER -pPASSWORD create NEWDATABASE
Удобно использовать бекап с дополнительными опциями -Q -c -e
, т.е.
mysqldump -Q -c -e -u USER -pPASSWORD DATABASE > /path/to/file/dump.sql
, где:
- -Q оборачивает имена обратными кавычками
- -c делает полную вставку, включая имена колонок
- -e делает расширенную вставку. Итоговый файл получается меньше и делается он чуть быстрее
Для просмотра списка баз данных можно использовать команду:
mysqlshow -u USER -pPASSWORD
А так же можно посмотреть список таблиц базы:
mysqlshow -u USER -pPASSWORD DATABASE
Для таблиц InnoDB надо добавлять —single-transaction, это гарантирует целостность данных бекапа.
Для таблиц MyISAN это не актуально, ибо они не поддерживают транзакционность.
Общие факты
- Полезно под каждую базу на боевом сервере создавать своего пользователя
- Кодировка базы может быть любой, если она UTF8
- В большинстве случаев лучше использовать движок InnoDB
- В php лучше забыть про сильно устаревшее расширение mysql и по-возможности использовать pdo или mysqli
- Новую копию MySQL всегда можно настроить и оптимизировать
- Без особой нужды не стоит открывать MySQL наружу. Вместо этого можно сделать проброс портов
ssh -fNL LOCAL_PORT:localhost:3306 REMOTE_USER@REMOTE_HOST
Работа с данными
Числа
- На 32-битных системах практически нет смысла ставить для типа INTEGER свойство UNSIGNED, так как такие большие числа в php не поддерживаются.
На 64-битных системах, php поддерживает большие числа, вплоть до MySQL BIGINT со знаком. - Связанные таблицы («Foreign keys») должны иметь полное сходство по структуре ключей. Т.е. если у нас на одной таблице для поля указано «INTEGER UNSIGNED DEFAULT 0 NOT NULL» то и на другой должно быть указано аналогично
- Для хранения булевых значений, нужно использовать TINYINT(1)
- А деньги лучше хранить в DECIMAL(10, 2), где первое число обозначает количество всех знаков, включая запятую, а второе — количество знаков после запятой. Итого, у нас получится что DECIMAL(10,2) может сохранить 9999999,99
Строки
- В старых версиях (до 5.0.3) VARCHAR была ограничена 255 символами, но сейчас можно указывать до 65535 символов
- Помните, что тип TEXT ограничен только 64 килобитами, поэтому что бы сохранять «Войну и Мир» пользуйтесь «LONGTEXT»
- Самая правильная кодировка для вашей БД UTF8
Даты
Не забывайте, что
- DATE, TIME, DATETIME — выводятся в виде строк, поэтому поиск и сравнение дат происходит через преобразование
- TIMESTAMP — хранится в виде UNIX_TIMESTAMP, и можно указать автоматически обновлять колонку
- Сравнивая типы данных DATETIME и TIMESTAMP, не забывайте делать преобразование типов, например:
SELECT * FROM table WHERE `datetime` = DATE(`timestamp`)
Перечисления
- Для перечислений правильно использовать тип ENUM
- Правильно пишется так: ENUM(‘мама’, ‘мыла’, ‘раму’)
- Можно ставить значение по-умолчанию, как и для любой строки
- В базе поле с перечислением хранится как число, поэтому скорость работы — потрясающе высокая
- Количество перечислений ~ 65 тысяч
dev.mysql.com/doc/refman/4.1/en/storage-requirements.html
help.scibit.com/mascon/masconMySQL_Field_Types.html
Отладка
- Если запросы тормозят, то можно включить лог для медленных запросов в /etc/mysql/my.cnf
- А потом оптимизировать запросы через EXPLAIN
- И наблюдать за запросами удобно через программу mytop
Пожалуйста, сообщите мне, если вы заметили неточность или есть желание поделиться советом или шпаргалкой.