├── README.md ├── docs ├── Android - How to Sign Android APK.txt ├── Android - Install Android SDK on CentOS.txt ├── Android - adb.txt ├── CentOS - Update CentOS.txt ├── CentOS - disable syslog.txt ├── CentOS 6 - install on VMWare.txt ├── CentOS 7 - install on VMWare.txt ├── Cron - examples.txt ├── DDOS - analysis of ddos.txt ├── MySQL - useful articles.txt ├── MySQL - work with dumps.txt ├── PHP - Installation PHP 5.3 on Windows.txt ├── PHP - Installation on CentOS 6 (nginx php-fpm).txt ├── PHP - Installation on CentOS 7 (nginx php-fpm).txt ├── PHP - Memcached on Windows for PHP 5.3.txt ├── SSH - Key Authentication HOWTO.txt ├── Ubuntu - help.txt ├── apktool - Проблема с nginx.txt ├── docker - help.txt ├── ffmpeg - Install on CentOS.txt ├── ffmpeg - examples.txt ├── git - branch.txt ├── git - new repo.txt ├── git - ssh keys.txt ├── git - useful topics.txt ├── mc - help.txt ├── mod_rewrite - examples.txt ├── nginx - Installation and tips.txt ├── nginx - Installation on Windows.txt ├── nginx - Restart on CentOS.txt ├── nginx_vhost_log_rotate ├── php-fpm - Restart on CentOS.txt ├── server Centos 7 docker.txt ├── server Centos 7 docker.txt.save └── sshfs - mount a remote filesystems with SSH on MacOS.txt └── tools └── winsw ├── nginx_service.xml ├── php-cgi_service.xml ├── readme.txt └── winsw-1.9-bin.exe /README.md: -------------------------------------------------------------------------------- 1 | 2 | Тут собраны различные заметки по программированию и адимнистрированию. То c чем работал и разбирался когда либо, записываю на будущее чтобы не забыть. 3 | 4 | Всё лежит в [Wiki](https://github.com/rsajob/docs/wiki) 5 | -------------------------------------------------------------------------------- /docs/Android - How to Sign Android APK.txt: -------------------------------------------------------------------------------- 1 | keytool -genkey -v -keystore my-release-key.keystore -alias alias_name -keyalg RSA -validity 10000 2 | jarsigner -keystore my-release-key.keystore test.apk alias_name 3 | 4 | 5 | keytool -genkey -v -keystore ks2.keystore -alias ks2 -keyalg RSA -validity 10000 -------------------------------------------------------------------------------- /docs/Android - Install Android SDK on CentOS.txt: -------------------------------------------------------------------------------- 1 | 2 | ########################################## 3 | # Установка JRE 1.6 4 | yum list \*java-1\* | grep open 5 | yum install java-1.6.0-openjdk.x86_64 6 | yum install java-1.6.0-openjdk-devel.x86_64 7 | 8 | ########################################## 9 | # Установка Android на CentOS (http://www.stevebrookes.id.au/mediawiki/index.php/Installing_Android_on_CentOS) 10 | wget http://dl.google.com/android/android-sdk_r18-linux.tgz 11 | gunzip android-sdk_r18-linux.tgz 12 | tar xvf android-sdk_r18-linux.tar 13 | mv android-sdk-linux/ /opt/android-sdk 14 | chmod -R a+w /opt/android-sdk 15 | export PATH=$PATH:/opt/android-sdk/tools/ 16 | 17 | # We know that everything is working so far but the PATH variable is currently only set for the session. You could make this permanent by editing the relevant profile files or add a script to the /etc/profile.d directory: 18 | vi /etc/profile.d 19 | #This is a script to add the android SDK to the PATH variable. 20 | export PATH=$PATH:/opt/android-sdk/tools/ 21 | 22 | ########################################### 23 | # Обновление Android SDK 24 | android update sdk --no-ui 25 | 26 | # путь к дополнительным инструментам 27 | export PATH=$PATH:/opt/android-sdk/platform-tools/ 28 | 29 | 30 | Установка android-apktool: 31 | ===================================== 32 | su 33 | mkdir /usr/src/apktool 34 | cd /usr/src/apktool 35 | wget http://android-apktool.googlecode.com/files/apktool-install-linux-r04-brut1.tar.bz2 36 | wget http://android-apktool.googlecode.com/files/apktool1.4.3.tar.bz2 37 | tar xvf apktool-install-linux-r04-brut1.tar.bz2 38 | tar xvf apktool1.4.3.tar.bz2 39 | rm apktool-install-linux-r04-brut1.tar.bz2 40 | rm apktool1.4.3.tar.bz2 41 | mv aapt /usr/bin 42 | mv apktool /usr/bin 43 | mv apktool.jar /usr/bin 44 | chmod 755 /usr/bin/aapt 45 | chmod 755 /usr/bin/apktool 46 | 47 | Возможно необходимые либы: 48 | libstdc++.i686 49 | zlib.i686 -------------------------------------------------------------------------------- /docs/Android - adb.txt: -------------------------------------------------------------------------------- 1 | # Запуск shell 2 | adb shell 3 | 4 | #Установка приложений: 5 | # -r - переустановка существующего приложения с сохранением всех данных (кэш, настройки и т.п.) 6 | # -s - установка любого приложения сразу на SD-карту. 7 | adb install -s -r myapp.apk 8 | adb uninstall myapp.apk 9 | 10 | # Слить загрузки (которые нс sdcard) на комп 11 | adb pull /sdcard/download download 12 | -------------------------------------------------------------------------------- /docs/CentOS - Update CentOS.txt: -------------------------------------------------------------------------------- 1 | А есть где-то мануал как обновить, тоже бы свой VPS обновил. Заранее благодарен 2 | 3 | полагаю примерно так: 4 | yum clean all 5 | yum update glibc\* (не обязательно для консольной среды) 6 | yum update yum\* rpm\* pyth\* 7 | yum clean all 8 | yum update mkinitrd nash 9 | yum update selinux\* 10 | yum update 11 | shutdown -r now 12 | 13 | Спасибо! Получилось! -------------------------------------------------------------------------------- /docs/CentOS - disable syslog.txt: -------------------------------------------------------------------------------- 1 | Отключение логов 2 | 3 | # чтобы не работала команда last 4 | # The files wtmp and btmp might not be found. The system only logs information in these files if they are 5 | # present. This is a local configuration issue. If you want the files to be used, they can be created 6 | # with a simple touch(1) command (for example, touch /var/log/wtmp). 7 | 8 | rm -rf /var/log/wtmp /var/log/btmp 9 | 10 | # vim /etc/ssh/sshd_config 11 | LogLevel QUIET 12 | # (vim: режим редактирования "i", сохранить и выход ":wq" http://www.instanceof.ru/linux/vim/step-by-step) 13 | 14 | 15 | /etc/init.d/sshd restart 16 | 17 | 18 | # 19 | rm -rf /var/log/*.? audit/audit.log.? 20 | cd /var/log ; echo > secure ; echo > messages ; echo > audit/audit.log 21 | 22 | # vim /etc/crontab 23 | */15 * * * * root /var/log/lastlog 24 | 25 | # removing auditd 26 | /etc/rc.d/init.d/auditd stop 27 | yum remove audit-1.7.13 28 | rm -rf /var/log/audit 29 | 30 | cat > /etc/cron.d/no_log 31 | */5 * * * * root rm -f /var/log/lastlog > /dev/null 2>&1 32 | */5 * * * * root dmesg -c > /dev/null 2>&1 33 | */5 * * * * root echo > /var/log/messages 34 | 35 | /etc/init.d/syslog stop 36 | chkconfig --del syslog 37 | 38 | 39 | 40 | -------------------------------------------------------------------------------- /docs/CentOS 6 - install on VMWare.txt: -------------------------------------------------------------------------------- 1 | Устанваливаем CentOS 6.2 на VMWare, 2 | тип установки выбираем - minimal server 3 | 4 | Настройка сети 5 | ============================= 6 | Подробнее тут: 7 | http://www.manageserver.ru/2009/09/23/как-настроить-сеть-в-linux-на-примере-centos-5/ 8 | http://www.creator969.ru/linux/centos-nastroika-seti 9 | ============================= 10 | 11 | # Указываем DNS сервера google 12 | nano /etc/resolv.conf 13 | -------------------------- 14 | nameserver 8.8.8.8 15 | nameserver 8.8.4.4 16 | -------------------------- 17 | 18 | # Основная конфигурация сти 19 | nano /etc/sysconfig/network 20 | -------------------------- 21 | NETWORKING=yes 22 | HOSTNAME=minisrv 23 | GATEWAY=192.168.245.2 24 | -------------------------- 25 | 26 | # Настройка интерфейса eth0 (Виртуальный роутер VMWare NAT) 27 | nano /etc/sysconfig/network-scripts/ifcfg-eth0 28 | -------------------------- 29 | DEVICE=eth0 30 | HWADDR= 00-19-DB-AD-19-99 31 | IPADDR=192.168.245.200 32 | NETMASK=255.255.255.0 33 | BROADCAST=192.168.245.255 34 | GATEWAY=192.168.245.2 35 | ONBOOT=yes 36 | DNS1=8.8.8.8 37 | DNS2=8.8.4.4 38 | -------------------------- 39 | 40 | # Статический маршрут для интерфейса (сохраняется при перезагрузке ОС): 41 | nano /etc/sysconfig/network-scripts/route-eth0 42 | -------------------------- 43 | default via 192.168.245.2 44 | -------------------------- 45 | 46 | # Статический маршрут для интерфейса (не сохраняется при перезагрузке ОС): 47 | route add -net default gw 192.168.245.2 48 | 49 | # просмотр маршрутов 50 | route 51 | -------------------------- 52 | 192.168.245.0 * 255.255.255.0 U 1 0 0 eth0 53 | default 192.168.245.2 0.0.0.0 UG 0 0 0 eth0 54 | -------------------------- 55 | 56 | # Перезапуск всех интерфейсов (или): 57 | service network restart 58 | /etc/init.d/network restart 59 | 60 | # Проверка конфигурации интерфейса: 61 | ifconfig или ip a 62 | 63 | # Выключение/перезагрузка (the -h option halts the machine, and the -r option reboots) 64 | /sbin/shutdown -h now 65 | /sbin/shutdown -r now 66 | 67 | # заход по ssh с винды через putty 68 | putty -ssh -l root -pw 123456 192.168.245.200 69 | 70 | # Установка VMWare Tools 71 | ================================== 72 | mkdir /mnt/cdrom 73 | mount /dev/cdrom /mnt/cdrom 74 | tar -C /tmp -zxvf /mnt/cdrom/VMwareTools-*.tar.gz 75 | cd /tmp/vmware-tools-distrib 76 | ./vmware-install.pl 77 | -------------------------------------------------------------------------------- /docs/CentOS 7 - install on VMWare.txt: -------------------------------------------------------------------------------- 1 | Устанваливаем CentOS 6.2 на VMWare, 2 | тип установки выбираем - minimal server 3 | 4 | Настройка сети 5 | ============================= 6 | Подробнее тут: 7 | http://www.creator969.ru/linux/centos-nastroika-seti 8 | ============================= 9 | 10 | # Полезная штука bash-completion (http://blog.acmenet.ru/2016/01/01/centos-7-2-install/) 11 | yum -y install bash-completion 12 | 13 | ### Имя хоста (hostname) (подробно тут http://val-khmyrov.blogspot.ru/2015/11/blog-post.html) 14 | hostnamectl set-hostname centos7 15 | 16 | # ifconfig по умолчанию в Centos 7 нет, надо поставить 17 | # Установим пакет net-tools 18 | yum -y install net-tools.x86_64 19 | 20 | Чтобы установить htop надо добавить репозиторий 21 | yum install epel-release 22 | yum install htop 23 | 24 | # Указываем DNS сервера google 25 | nano /etc/resolv.conf 26 | -------------------------- 27 | nameserver 8.8.8.8 28 | nameserver 8.8.4.4 29 | -------------------------- 30 | 31 | # Основная конфигурация сти 32 | nano /etc/sysconfig/network 33 | -------------------------- 34 | NETWORKING=yes 35 | HOSTNAME=minisrv 36 | GATEWAY=192.168.245.2 37 | -------------------------- 38 | 39 | # Настройка интерфейса eth0 (Виртуальный роутер VMWare NAT) 40 | nano /etc/sysconfig/network-scripts/ifcfg-eth0 41 | -------------------------- 42 | DEVICE=eth0 43 | HWADDR= 00-19-DB-AD-19-99 44 | IPADDR=192.168.245.200 45 | NETMASK=255.255.255.0 46 | BROADCAST=192.168.245.255 47 | GATEWAY=192.168.245.2 48 | ONBOOT=yes 49 | DNS1=8.8.8.8 50 | DNS2=8.8.4.4 51 | -------------------------- 52 | 53 | # Статический маршрут для интерфейса (сохраняется при перезагрузке ОС): 54 | nano /etc/sysconfig/network-scripts/route-eth0 55 | -------------------------- 56 | default via 192.168.245.2 57 | -------------------------- 58 | 59 | # Статический маршрут для интерфейса (не сохраняется при перезагрузке ОС): 60 | route add -net default gw 192.168.245.2 61 | 62 | # просмотр маршрутов 63 | route 64 | -------------------------- 65 | 192.168.245.0 * 255.255.255.0 U 1 0 0 eth0 66 | default 192.168.245.2 0.0.0.0 UG 0 0 0 eth0 67 | -------------------------- 68 | 69 | # Перезапуск всех интерфейсов (или): 70 | service network restart 71 | /etc/init.d/network restart 72 | 73 | # Проверка конфигурации интерфейса: 74 | ifconfig или ip a 75 | 76 | # Выключение/перезагрузка (the -h option halts the machine, and the -r option reboots) 77 | /sbin/shutdown -h now 78 | /sbin/shutdown -r now 79 | 80 | # заход по ssh с винды через putty 81 | putty -ssh -l root -pw 123456 192.168.245.200 82 | 83 | # Установка VMWare Tools 84 | ================================== 85 | mkdir /mnt/cdrom 86 | mount /dev/cdrom /mnt/cdrom 87 | tar -C /tmp -zxvf /mnt/cdrom/VMwareTools-*.tar.gz 88 | cd /tmp/vmware-tools-distrib 89 | ./vmware-install.pl 90 | -------------------------------------------------------------------------------- /docs/Cron - examples.txt: -------------------------------------------------------------------------------- 1 | # Редактировать crontab 2 | vi /etc/crontab 3 | 4 | Добвить туда строку (запуск каждый день в 03:00): 5 | 0 3 * * * root cd php /var/www/htdocs/;php index.php > /dev/null 2>&1 6 | 7 | # Перезапустить от рута 8 | /etc/init.d/crond restart -------------------------------------------------------------------------------- /docs/DDOS - analysis of ddos.txt: -------------------------------------------------------------------------------- 1 | 2 | http://ipgeobase.ru/ 3 | 4 | ДДОС: Последовательность действий. 5 | 6 | 1. Определили на что направлена. 7 | Выяснилось на веб-сервис. 8 | 2. Посмотрели что именно за запросы так часто приходят 9 | 10 | /usr/sbin/tcpdump -n -s 2048 -w - port 80 | strings | egrep -i "^(get|host)" 11 | 12 | /usr/sbin/tcpdump -n -s 2048 -w - port 80 | strings | egrep -i "^(get /index)" 13 | /usr/sbin/tcpdump -n -s 2048 -w - port 80 | strings | egrep -i "^(get /par)" 14 | 15 | /usr/sbin/tcpdump -n -s 2048 -w - port 80 | strings | egrep -i "(jad|jar)" 16 | 17 | /usr/sbin/tcpdump -n -s 2048 -w - port 80 | strings | egrep -i "^(get)" 18 | 19 | /usr/sbin/tcpdump -n -s 2048 -w - port 80 | strings 20 | 21 | По результатц выяснили на какой хостинг направлена атака и какая строка запроса к апачу. 22 | 3. Сканировали каждые 5 минут access_log на наличие айпи адресов запрашивающих именно этот url очень активно (потом более ограничили, запрашивающих за интервал только этот урл). 23 | Получали список адресов за последние 5 минут. 24 | 4. Полученный список адресов заносили в файервол. 25 | После пяти циклов пунктов 3 и 4 нагрузка резко снизилась. Дальше сканировали в 10 минутном интервале. В течении первого часа обнаружили около половины адресов. Дальше запустили скрипты, которые выполняли действия автоматом. Через пять часов, добавление шло по одному двум адресам. 26 | 27 | За первые два часа действий апач перестал ругаться на нехватку ресурсов. 28 | 29 | тема про защиты от ддос: есть очень хорошие ссылки на серьёзные компании, полюбому стоит читать 30 | http://forum.profit-partner.ru/viewtopic.php?t=1509&postdays=0&postorder=asc&start=60 31 | 32 | Защита от DoS атак в nginx: 33 | 34 | > Кто-нибудь занимался борьбой с такими DoS аттаками на уровне nginx? 35 | > Если не жалко - поделитесь идеями. Скоро переедет ко мне несколько 36 | > сайтов которые периодически валят, надо подготовится... 37 | 38 | Далее: http://www.opennet.ru/base/net/ddos_nginx.txt.html 39 | 40 | Просмотр статистики 41 | iostat -x 5 42 | 43 | /etc/php-fpm.d/www.conf 44 | 45 | ps ax -o pid,ppid,user,%cpu,vsz,wchan,command | egrep '(nginx|PID)' 46 | 47 | Убивание процессов 48 | Смотрим чем блокирован yum: 49 | ps aux | grep yum 50 | Убиваем процеес по PID: 51 | kill PID 52 | Снова смотрим: 53 | ps aux | grep yum 54 | Если проблема осталась, смотрим: 55 | cat /var/run/yum.pid 56 | убиваем так же по PID 57 | 58 | Rckb процесс просто так не убивается то можно попробовать 59 | kill -9 PID 60 | 61 | -------------------------------------------------------------------------------- /docs/MySQL - useful articles.txt: -------------------------------------------------------------------------------- 1 | Дока по оптимизации MySQL на русском 2 | http://www.mysql.ru/docs/man/Query_Speed.html 3 | 4 | Ветка по MySQL на хабре (много полезных статей) 5 | http://habrahabr.ru/blogs/mysql/page4/ -------------------------------------------------------------------------------- /docs/MySQL - work with dumps.txt: -------------------------------------------------------------------------------- 1 | 2 | Сделать дамп: 3 | mysqldump -R -q -u -p > file_dump.sql 4 | 5 | Залить дамп: 6 | mysql -u -p < file_dump.sql 7 | 8 | Запоковать/распоковать дамп: 9 | zip file_dump.sql.zip file_dump.sql 10 | unzip file_dump.sql.zip -------------------------------------------------------------------------------- /docs/PHP - Installation PHP 5.3 on Windows.txt: -------------------------------------------------------------------------------- 1 | Установка PHP на Windows 2 | ============================= 3 | 4 | Скачиваем нужную версию отсюда http://windows.php.net/download/ 5 | В данный момент PHP 5.3 (5.3.10) 6 | 7 | Выбор версии: "Non Thread Safe" или "Thread Safe". 8 | --------------------------------------------------- 9 | Вкратце: на Windows в качстве локального сервера (чисто для разработки) надо ставить Thread Safe 10 | (потокобезопастный вариант). Более ранние версии PHP для Windows были по умолчанию Thread Safe. 11 | Non Thread Safe по большей части нужен для быстрой работы в связка IIS FastCGI. Я ставил и тот и 12 | тот вариант, почемуто в "Non Thread Safe" перед выполнением некоторых скриптов, например PHPUnit 13 | была задержка около секунды, короче ставить "Thread Safe". Более подробно про отличия можно почитать 14 | тут: http://www.iis-aid.com/articles/my_word/difference_between_php_thread_safe_and_non_thread_safe_binaries 15 | 16 | Скачиваем Installer и устанавливаем 17 | --------------------------------------------------- 18 | Устанавливаем в нужную папку (у меня в D:\Work\tools\web\php_5.3.10) 19 | В настройках установки включаем PEAR 20 | 21 | Донастраиваем php.ini (находим эти строки и меняем) 22 | --------------------------------------------------- 23 | max_execution_time = 1000; 24 | error_reporting = E_ALL | E_STRICT 25 | display_errors = On 26 | display_startup_errors = On 27 | track_errors = On 28 | html_errors = On 29 | date.timezone = "Europe/Moscow 30 | 31 | Установка PEAR 32 | ============================================================= 33 | - запускаем go-pear.bat 34 | - выбираем local 35 | - подтверждаем yes Enter 36 | - затем всё Enter... Enter... 37 | - проверяем, запускаем pear в коммандной строке 38 | - если выдаёт сообщение 39 | PHP_PEAR_PHP_BIN is not set correctly. 40 | то меняем в файле pear.bat строку 41 | IF "%PHP_PEAR_PHP_BIN%"=="" SET "PHP_PEAR_PHP_BIN=.\php.exe" 42 | на 43 | IF "%PHP_PEAR_PHP_BIN%"=="" SET "PHP_PEAR_PHP_BIN=D:\Work\tools\web\php_5.3.10\php.exe" 44 | - проверяем вызов pear (из каталога не где установлен php) 45 | - если всёравно какието ошибки то читаем доку http://fkn.ktu10.com/?q=node/462 или ищем в инете решение 46 | 47 | Запуск php-cgi сервера как сервис Windows 48 | ============================ 49 | Для этого нам понадобится обёртка winsw, она позволяет запускать любое консольное приложение Windows как сервис. 50 | Официальный сайт: http://kenai.com/projects/winsw/pages/Home 51 | 52 | Создаём папку 53 | mkdir D:\Work\tools\web\php_5.3.10\php-cgi-service 54 | 55 | cd D:\Work\tools\web\php_5.3.10\php-cgi-service 56 | 57 | Скачиваеь winsw-1.9-bin.exe с официального сайта либо с https://raw.github.com/rsajob/docs/master/tools/winsw/winsw-1.9-bin.exe 58 | Перемиеновываем winsw-1.9-bin.exe в php-cgi_service.exe и ложим его созданную папку (D:\Work\tools\web\php_5.3.10\php-cgi-service\) 59 | 60 | В этой же папке создаём файл php-cgi_service.xml со следующим содержанием 61 | 62 | php-cgir 63 | php-cgi 64 | Server php-cgi on port 9000 65 | D:\Work\tools\web\php_5.3.10\php-cgi.exe 66 | D:\Work\tools\web\php_5.3.10\php-cgi_service\ 67 | roll 68 | 69 | 70 | -b 127.0.0.1:9000 -c D:\Work\tools\web\php_5.3.10\php.ini 71 | 72 | 73 | Под админом вызываем: 74 | php-cgi_service.exe install 75 | php-cgi_service.exe start 76 | 77 | В случае если сервис не стартанул смотрим ошибки в логе 78 | D:\Work\tools\web\php_5.3.10\php-cgi_service\php-cgi_service.wrapper.log 79 | 80 | Другие комманды работы с winsw: 81 | To install a service, run myapp.exe install 82 | To start a service, run myapp.exe start 83 | To stop a service, run myapp.exe stop 84 | To restart a service, run myapp.exe restart 85 | To uninstall a service, run myapp.exe uninstall 86 | Доп инфа http://kenai.com/projects/winsw/pages/Home 87 | 88 | Установка PHPUnit: 89 | ============================ 90 | pear update-channels 91 | pear upgrade pear 92 | pear channel-discover pear.phpunit.de 93 | pear channel-discover components.ez.no 94 | pear channel-discover pear.symfony-project.com 95 | 96 | Подсказка: 97 | ----------------------- 98 | Если при pear channel-discover будут ошибка 99 | PEAR_Config::writeConfigFile fopen('C:\Windows\pear.ini','w') failed (fopen(C:\Windows\pear.ini): failed to open stream: Permission denied) 100 | то запустить комманду от имени администратора 101 | 102 | pear install phpunit/PHPUnit 103 | 104 | Должна установится PHPUnit версия 3.6.10 или выше. Версии PHPUnit 1 и 2 не катят, 105 | они хотят ставится до обновления pear (pear upgrade pear). 106 | 107 | Установка xDebug 108 | ============================ 109 | Установка через "pecl install xdebug" не работает, поэтому нужно устанавливать в рчную. 110 | 111 | Заходим на http://xdebug.org/find-binary.php, копируем вывод phpinfo (php -i >>phpinfo.txt) в поле ввода 112 | на странице и покажет какой бинарник скачать, куда его положить и что добавить в php.ini 113 | 114 | Подсказка по PhpStorm: 115 | ------------------------ 116 | Если отладка в сред PhpStorm при помощи xdebug не работает, то попробовать поменять в 117 | настройках PHP->Debug порт с 9000 на 9001, т.к. порт 9000 может быть занят (у меня например занят php-cgi) 118 | 119 | Руководство по xDebug http://www.ibm.com/developerworks/ru/library/os-php-xdebug/index.html#configuring 120 | -------------------------------------------------------------------------------- /docs/PHP - Installation on CentOS 6 (nginx php-fpm).txt: -------------------------------------------------------------------------------- 1 | Установка php 5.3.x + nginx php-fpm на CentOS 6.2 2 | ===================================== 3 | 4 | # Смотрим версию CentOS 5 | cat /etc/redhat-release 6 | lsb_release 7 | 8 | # Комманды yum http://www.cyberciti.biz/faq/rhel-centos-fedora-linux-yum-command-howto/ 9 | # http://wiki.russianfedora.ru/index.php/Работа_с_Yum 10 | 11 | # Что установлено 12 | yum list installed | grep php 13 | 14 | # Пакет приоритетов репозиториев 15 | yum install yum-priorities 16 | 17 | # Репозитории (ищем тут нужный http://download.fedoraproject.org/pub/epel/6/x86_64/) 18 | rpm -Uvh http://download.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-5.noarch.rpm 19 | 20 | # Репозитории remi (в нём php 5.3.10) 21 | rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm 22 | 23 | # Ещё можно так установить репозиторий 24 | su - 25 | cd /etc/yum.repos.d 26 | wget http://rpms.famillecollet.com/enterprise/remi.repo 27 | 28 | # Включаем репозиторий remi (обычно отключён по умолчанию) 29 | # Если хотим всё самое новое, например php-5.4, то включаем также репозиторий remi-test 30 | nano /etc/yum.repos.d/remi.repo 31 | ------------------------------------------------------------------------------------ 32 | enabled=1 33 | ---------------------------------------------------------------------------------- 34 | 35 | # Добавляем репозиторий Nginx http://wiki.nginx.org/Install: 36 | nano /etc/yum.repos.d/nginx.repo 37 | ---------- 38 | [nginx] 39 | name=nginx repo 40 | baseurl=http://nginx.org/packages/centos/$releasever/$basearch/ 41 | gpgcheck=0 42 | enabled=1 43 | ---------- 44 | 45 | # Смотрим какие доступны репозитории (надо remi и nginx) 46 | yum repolist 47 | 48 | # Добавляем пользователя и группу 49 | groupadd webmaster 50 | useradd -G webmaster srv 51 | # или usermod -G webmaster srv 52 | 53 | # Устанавливаем nginx 54 | yum install nginx 55 | 56 | # Чтобы проверить параметры сборки nginx можно вызвать коммнду 57 | nginx -V 58 | nginx -v # покажет только версию 59 | # нужно удостоверится что пользователь nginx может писать в свою работчую папку 60 | # для этого следующей коммандой можно посмотреть домашний каталог пользователя 61 | finger nginx 62 | # например это /var/cache/nginx - удостоверьтесь, что владельцем этого каталога 63 | # является пользователь nginx 64 | chown nginx:nginx -R /var/cache/nginx 65 | 66 | # Устанавливаем php 67 | yum install php 68 | yum install php-fpm 69 | 70 | Пакеты которые были установлены у меня (если нужно удалить php) 71 | yum remove php-common php-fpm php-devel php-mbstring php-pecl-apc php-pecl-igbinary php-cli php-mysqlnd php-soap php-pear php-pecl-xdebug php-pecl-zip php-pdo php-xml php-pecl-mongo php-pecl-jsonc-devel php-gd php-redis php-pecl-jsonc 72 | 73 | 74 | # Донастраиваем php.ini (находим эти строки и меняем) 75 | nano /etc/php.ini 76 | --------------------------------------------------- 77 | max_execution_time = 1000; 78 | error_reporting = E_ALL | E_STRICT 79 | display_errors = On 80 | display_startup_errors = On 81 | track_errors = On 82 | html_errors = On 83 | date.timezone = "Europe/Moscow 84 | --------------------------------------------------- 85 | 86 | # Настройка php-fpm 87 | nano /etc/php-fpm.d/www.conf 88 | ---------------------------------- 89 | listen = /var/run/fastcgi_sock 90 | listen.mode = 0666 91 | user = nginx 92 | group = webmaster 93 | ---------------------------------- 94 | 95 | # Настройка папки сессий 96 | chown root:webmaster -R /var/lib/php/session 97 | chmod u=rwX,g=srwX,o= -R /var/lib/php/session 98 | 99 | # Перезагрузка nginx и php-fpm 100 | /etc/init.d/nginx restart 101 | /etc/init.d/php-fpm restart 102 | 103 | # Добавляем в автозапуск php-fpm и nginx 104 | chkconfig --levels 345 php-fpm on 105 | chkconfig --levels 235 nginx on 106 | 107 | # Открыdftv в файрволе порт 80 108 | iptables -I INPUT -p tcp --dport 80 -m state --state NEW -j ACCEPT 109 | iptables-save > /etc/sysconfig/iptables 110 | chkconfig iptables on 111 | 112 | # Настройка 113 | ========================================== 114 | 115 | # Выставляем группу для домашней папки 116 | chown srv:webmaster -R /home/srv 117 | chmod 750 /home/srv 118 | 119 | mkdir /home/srv/bin 120 | chown srv:webmaster -R /home/srv/bin 121 | 122 | # Настриваем конфиг nginx 123 | nano /etc/nginx/nginx.conf 124 | ------------------------------------------- 125 | user nginx webmaster; 126 | worker_processes 10; 127 | worker_rlimit_nofile 100000; 128 | 129 | error_log /var/log/nginx/error.log; 130 | #error_log /var/log/nginx/error.log notice; 131 | #error_log /var/log/nginx/error.log info; 132 | 133 | pid /var/run/nginx.pid; 134 | 135 | events { 136 | worker_connections 2048; 137 | use epoll; 138 | } 139 | 140 | 141 | http { 142 | include /etc/nginx/mime.types; 143 | default_type application/octet-stream; 144 | 145 | log_format main '$remote_addr - $remote_user [$time_local] "$request" ' 146 | '$status $body_bytes_sent "$http_referer" ' 147 | '"$http_user_agent" "$http_x_forwarded_for"'; 148 | 149 | access_log /var/log/nginx/access.log main; 150 | 151 | sendfile on; 152 | tcp_nopush on; 153 | tcp_nodelay on; 154 | server_tokens off; 155 | gzip on; 156 | gzip_static on; 157 | gzip_comp_level 5; 158 | gzip_min_length 1024; 159 | keepalive_timeout 65; 160 | 161 | # Load config files from the /etc/nginx/conf.d directory 162 | include /etc/nginx/conf.d/*.conf; 163 | include /etc/nginx/sites-enabled/*.conf; 164 | } 165 | --------------------------------------------- 166 | 167 | # Скрипт создания нового сайта 168 | nano /home/srv/bin/new_site 169 | ------------------------------------------- 170 | #!/bin/sh 171 | SITENAME=$1 172 | 173 | if [ -z $SITENAME ]; then 174 | echo "Please enter site name! I.e.: $ new_site www.mydomain.com" 175 | exit; 176 | fi 177 | 178 | mkdir -p ~/$SITENAME/www 179 | 180 | chown srv:webmaster -R ~/$SITENAME 181 | chmod u=rwX,g=srwX,o= -R ~/$SITENAME 182 | 183 | mkdir -p ~/logs/$SITENAME 184 | chown srv:webmaster -R ~/logs/$SITENAME 185 | chmod u=rwX,g=srwX,o= -R ~/logs/$SITENAME 186 | 187 | sed -e"s/\[\[some_site\]\]/$SITENAME/g" ~/sites-conf/template_conf > ~/sites-conf/${SITENAME}.conf 188 | ------------------------------------------- 189 | 190 | # Выставляем права 191 | chown srv:webmaster /home/srv/bin/new_site 192 | chmod 750 /home/srv/bin/new_site 193 | 194 | # Папка конфигураций сайтов 195 | mkdir /etc/nginx/sites-enabled 196 | chown root:webmaster -R /etc/nginx/sites-enabled 197 | chmod u=rwX,g=srwX,o= -R /etc/nginx/sites-enabled 198 | 199 | # Делаем символическую ссылку в домашнем каталоге 200 | ln -s /etc/nginx/sites-enabled /home/srv/sites-conf 201 | 202 | # Шаблон конфигурации сайта (предназначен для limb3 web_app, но можно изменить после создания сайта) 203 | touch /etc/nginx/sites-enabled/template_conf 204 | chown srv:webmaster /etc/nginx/sites-enabled/template_conf 205 | chmod 664 /etc/nginx/sites-enabled/template_conf 206 | nano /etc/nginx/sites-enabled/template_conf 207 | --------------------------------------------------- 208 | server { 209 | server_name [[some_site]]; 210 | 211 | index index.php; 212 | root /home/srv/[[some_site]]/www; 213 | 214 | access_log /home/srv/logs/[[some_site]]/nginx.access.log; 215 | error_log /home/srv/logs/[[some_site]]/nginx.error.log notice; 216 | 217 | fastcgi_buffers 16 300k; 218 | 219 | location / 220 | { 221 | if (!-e $request_filename) 222 | { 223 | rewrite ^(.*)$ /index.php last; 224 | } 225 | } 226 | 227 | location ~ \.php$ 228 | { 229 | fastcgi_pass unix:/var/run/fastcgi_sock; 230 | fastcgi_index index.php; 231 | fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name; 232 | include fastcgi_params; 233 | } 234 | } 235 | --------------------------------------------------- 236 | 237 | Настройка sudo 238 | 239 | под рутом 240 | vi /etc/sudoers 241 | 242 | в конец добавляем: 243 | 244 | ---------------------------------------------------- 245 | srv ALL=NOPASSWD: /etc/init.d/nginx reload 246 | srv ALL=(nginx) NOPASSWD: ALL 247 | srv ALL=NOPASSWD: /root/bin/fantom_rights 248 | srv ALL=NOPASSWD: /usr/sbin/addcron 249 | srv ALL=NOPASSWD: /etc/init.d/crond reload 250 | ---------------------------------------------------- 251 | 252 | # Настройка автообновления времяни и зон 253 | ========================================== 254 | # Улучшенный скрипт, вообще ничего не спрашивает, все вроде делает правильно 255 | # Обновляем пакет с таймзонами (там должна быть актуальная московская ТЗ) 256 | 257 | yum -y -q install tzdata ntp 258 | 259 | # Настраиваем московскую ТЗ 260 | 261 | mv -f /etc/localtime ~/localtime.orig 262 | ln -s /usr/share/zoneinfo/Europe/Moscow /etc/localtime 263 | 264 | # Корректируем время вручную по одному из серверов 265 | /etc/init.d/ntpd stop 266 | /sbin/ntpdate 0.centos.pool.ntp.org 1.centos.pool.ntp.org 2.centos.pool.ntp.org 267 | /etc/init.d/ntpd start 268 | 269 | # Проставляем ntpd в автозапуск (на всякий случай) 270 | /sbin/chkconfig --levels 345 ntpd on 271 | 272 | # Устанавливаем и проверяем системное время 273 | /sbin/hwclock --systohc 274 | /sbin/hwclock 275 | 276 | 277 | # Проверка 278 | =========================== 279 | 280 | # Перезагружаем машину 281 | /sbin/shutdown -r now 282 | /etc/init.d/nginx stop 283 | 284 | # Смотрим процессы nginx 285 | ps -A | grep nginx 286 | 287 | # Смотрим процессы php-fpm 288 | ps -A | grep php 289 | 290 | # Смотрим кто какие порты слушает (nginx 80) 291 | netstat -tnlp | grep nginx 292 | 293 | # Смотрим слушает ли php-fpm порт /var/run/fastcgi_sock 294 | netstat -an | grep /var/run/fastcgi_sock 295 | 296 | # Проверяем (должна отдаться страница index.html "Welome, Nginx!") 297 | wget http://127.0.0.1/ -q -O - 298 | 299 | # Создание нового сайта 300 | su srv 301 | ~/bin/new_site example.com 302 | 303 | # Перезагрузка nginx 304 | sudo /etc/init.d/nginx reload 305 | 306 | 307 | # Дополение 1 - Установка дополнительных инструментов. 308 | ========================================================= 309 | 310 | # PHPUnit 311 | yum install php-pear php-soap php-pdo php-xml 312 | pear channel-discover pear.phpunit.de 313 | pear channel-discover pear.symfony-project.com 314 | pear remote-list -c phpunit 315 | pear install phpunit/PHPUnit 316 | pear install --alldeps --force phpunit/PHPUnit 317 | 318 | # APC 319 | yum install php-pecl-apc 320 | 321 | # XDebug 322 | yum install php-pecl-xdebug 323 | 324 | # Sqlite3 325 | yum install php-pdo 326 | 327 | # MySQL 328 | yum install mysql-server php-mysql.x86_64 329 | /usr/bin/mysqladmin -u root password 'root' 330 | chkconfig --levels 345 mysqld on 331 | /etc/init.d/mysqld start 332 | 333 | =========================================================== 334 | # Установка JRE (Лучше JDK... описание ниже) 335 | =========================================================== 336 | Идём на страницу закгузки http://java.com/ru/download/manual.jsp 337 | Берём ссылку на "Linux x64 RPM" 338 | 339 | # Установка: 340 | cd /usr/src 341 | wget http://javadl.sun.com/webapps/download/AutoDL?BundleId=59622 342 | sh jre-6u* 343 | 344 | # Проверка: 345 | java -version 346 | 347 | # Удаление: 348 | yum remove jre 349 | 350 | =========================================================== 351 | # Установка JRE (Лучше JDK... описание ниже) 352 | =========================================================== 353 | Идём на страницу закгузки http://www.oracle.com/technetwork/java/javase/downloads/index.html 354 | Скачиваем куда нибудь например jdk-6u32-linux-x64-rpm.bin (дучше на какой нибудь сервер чтобы 355 | потом взять прямую ссылку для wget) 356 | 357 | # Установка: 358 | cd /usr/src 359 | wget http://myserver.com/jdk-6u32-linux-x64-rpm.bin 360 | sh jdk-6u* 361 | 362 | # Проверка: 363 | java -version 364 | 365 | # Удаление: 366 | yum remove jdk 367 | 368 | /usr/sbin/alternatives --install /usr/bin/jarsigner jarsigner /usr/java/jdk1.6.0_32/bin/jarsigner 100 369 | 370 | # Как добавить в $PATH путь для всех пользователей 371 | ========================================================= 372 | в /etc/profile добавляем 373 | 374 | PATH=$PATH:/new/path/ 375 | export PATH 376 | 377 | # Дополение 2 - Группы и пользователи unix (важно знать). 378 | ========================================================= 379 | Допустим мы работаем под пользователем srv и его рабочий каталог /home/srv 380 | Нужно создать группу webmaster 381 | groupadd webmaster 382 | 383 | и добавить в неё пользователя srv 384 | usermod -G webmaster srv 385 | 386 | Допустим сайты будут распогогаться в папках 387 | ~/site1.com 388 | ~/site2.com 389 | ~/$SITENAME 390 | ... и т.д. 391 | 392 | Нужно чтобы nginx имел доступ к этим папкам, для этого нужно: 393 | 1) Установить пользователя и группу для этой папки: 394 | chown srv:webmaster -R ~/$SITENAME 395 | 396 | 2) Сделать так чтобы все новые файлы и папки имели туже группу webmaster, которая она 397 | будет устанавливаться автоматом при создании новых файлов и папок 398 | chmod u=rwX,g=srwX,o= -R ~/$SITENAME 399 | 400 | !!! орабтить внимание на g=srwX - тут выставляется бит (s) - SGID (Set Group ID - бит смены идентификатора группы). 401 | Это делается для того чтобы все файлы и папки созданные внутри этого каталога имели по умолчанию группу 402 | webmaster (т.е. группу родительской папки), а не группу пользователя который их создал (т.е. srv). Если группа не будет 403 | webmaster то nginx бует возвращать 404 (из-за Permission denied) 404 | Хорошо и на русском об этом написано тут http://help.ubuntu.ru/wiki/стандартные_права_unix 405 | ----------------------------------------------------------------------------------------------- 406 | Инструкция по эксплуотации: 407 | 408 | # добавление нового домена (сайта) 409 | new_site vladsandbox.biz 410 | 411 | # Перезагрузка nginx (перечитывает файлы конфигурации): 412 | web_reload 413 | 414 | Папка сайта /home/srv/vladsandbox.biz, в ней: 415 | htdocs/www - тут лежат файлы доступные из web по адресу http://vladsandbox.biz/ 416 | logs - логи сервера (Логи за последние 10 дней бэкапятся в папку /home/srv/logs_backup) 417 | 418 | в /home/srv/sites-conf/ (символическая ссылка) - хранятся конфиги nginx для каждого сайта, например vladsandbox.biz.conf 419 | после изменения надо вызывать web_reload для перезагрузки конфигурации nginx 420 | 421 | # Перезагрузка php-fpm (после изменения php.ini) 422 | phpfpm_restart 423 | 424 | # Перезагрузка mysql (после изменения php.ini) 425 | mysqld_restart 426 | 427 | Из под рута перезапуск: 428 | /etc/init.d/nginx restart 429 | /etc/init.d/php-fpm restart 430 | /etc/init.d/mysqld restart 431 | 432 | /etc/init.d/nginx stop 433 | /etc/init.d/php-fpm stop 434 | /etc/init.d/mysqld stop 435 | 436 | # kill -HUP `cat /var/run/nginx.pid` 437 | 438 | 439 | ps ax -o pid,ppid,user,%cpu,vsz,wchan,command | egrep '(nginx|PID)' 440 | 441 | =============================== 442 | 443 | # grep user /etc/nginx/nginx.conf 444 | user nginx webmaster; 445 | 446 | # ll -d /home/srv 447 | drwxr-x--- 8 srv webmaster 4096 Nov 13 05:30 /home/srv -------------------------------------------------------------------------------- /docs/PHP - Installation on CentOS 7 (nginx php-fpm).txt: -------------------------------------------------------------------------------- 1 | Установка php 7 + nginx php-fpm на CentOS 7 2 | ===================================== 3 | 4 | # Смотрим версию CentOS 5 | cat /etc/redhat-release 6 | 7 | # Добавляем пользователя и группу 8 | groupadd webmaster 9 | useradd -G webmaster srv 10 | # или usermod -G webmaster srv 11 | 12 | # To create the docker group and add your user: 13 | usermod -aG docker srv 14 | cat /etc/group | grep docker 15 | 16 | 17 | # Комманды yum http://www.cyberciti.biz/faq/rhel-centos-fedora-linux-yum-command-howto/ 18 | # http://wiki.russianfedora.ru/index.php/Работа_с_Yum 19 | 20 | # Что установлено 21 | yum list installed | grep php 22 | 23 | # Пакет приоритетов репозиториев 24 | yum install yum-priorities 25 | 26 | # Репозитории (ищем тут нужный http://download.fedoraproject.org/pub/epel/6/x86_64/) 27 | rpm -Uvh http://download.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-5.noarch.rpm 28 | 29 | # Репозитории remi (в нём php 5.3.10) 30 | rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm 31 | 32 | # Ещё можно так установить репозиторий 33 | su - 34 | cd /etc/yum.repos.d 35 | wget http://rpms.famillecollet.com/enterprise/remi.repo 36 | 37 | # Включаем репозиторий remi (обычно отключён по умолчанию) 38 | # Если хотим всё самое новое, то включаем также репозиторий remi-test 39 | nano /etc/yum.repos.d/remi.repo 40 | ------------------------------------------------------------------------------------ 41 | enabled=1 42 | ---------------------------------------------------------------------------------- 43 | 44 | # Добавляем репозиторий Nginx http://wiki.nginx.org/Install: 45 | nano /etc/yum.repos.d/nginx.repo 46 | ---------- 47 | [nginx] 48 | name=nginx repo 49 | baseurl=http://nginx.org/packages/centos/$releasever/$basearch/ 50 | gpgcheck=0 51 | enabled=1 52 | ---------- 53 | 54 | # Смотрим какие доступны репозитории (надо remi и nginx) 55 | yum repolist 56 | 57 | # Устанавливаем nginx 58 | yum install nginx 59 | 60 | # Чтобы проверить параметры сборки nginx можно вызвать коммнду 61 | nginx -V 62 | nginx -v # покажет только версию 63 | # нужно удостоверится что пользователь nginx может писать в свою работчую папку 64 | # для этого следующей коммандой можно посмотреть домашний каталог пользователя 65 | finger nginx 66 | # например это /var/cache/nginx - удостоверьтесь, что владельцем этого каталога 67 | # является пользователь nginx 68 | chown nginx:nginx -R /var/cache/nginx 69 | 70 | # Устанавливаем php 71 | yum install php 72 | yum install php-fpm 73 | 74 | Пакеты которые были установлены у меня (если нужно удалить php) 75 | yum remove php-common php-fpm php-devel php-mbstring php-pecl-apc php-pecl-igbinary php-cli php-mysqlnd php-soap php-pear php-pecl-xdebug php-pecl-zip php-pdo php-xml php-pecl-mongo php-pecl-jsonc-devel php-gd php-redis php-pecl-jsonc 76 | 77 | 78 | # Донастраиваем php.ini (находим эти строки и меняем) 79 | nano /etc/php.ini 80 | --------------------------------------------------- 81 | max_execution_time = 1000; 82 | error_reporting = E_ALL | E_STRICT 83 | display_errors = On 84 | display_startup_errors = On 85 | track_errors = On 86 | html_errors = On 87 | date.timezone = "Europe/Moscow" 88 | --------------------------------------------------- 89 | 90 | # Настройка php-fpm 91 | nano /etc/php-fpm.d/www.conf 92 | ---------------------------------- 93 | listen = /var/run/fastcgi_sock 94 | listen.mode = 0666 95 | user = nginx 96 | group = webmaster 97 | ---------------------------------- 98 | 99 | # Настройка папки сессий 100 | chown root:webmaster -R /var/lib/php/session 101 | chmod u=rwX,g=srwX,o= -R /var/lib/php/session 102 | 103 | # Перезагрузка nginx и php-fpm 104 | /etc/init.d/nginx restart 105 | /etc/init.d/php-fpm restart 106 | 107 | # Добавляем в автозапуск php-fpm и nginx 108 | chkconfig --levels 345 php-fpm on 109 | chkconfig --levels 235 nginx on 110 | 111 | # Открываем в файрволе порт 80 112 | yum install iptables-services 113 | systemctl start iptables 114 | systemctl enable iptables 115 | iptables -I INPUT -p tcp --dport 80 -m state --state NEW -j ACCEPT 116 | service iptables save 117 | 118 | # Настройка 119 | ========================================== 120 | 121 | # Выставляем группу для домашней папки 122 | chown srv:webmaster -R /home/srv 123 | chmod 750 /home/srv 124 | 125 | mkdir /home/srv/bin 126 | chown srv:webmaster -R /home/srv/bin 127 | 128 | # Настриваем конфиг nginx 129 | nano /etc/nginx/nginx.conf 130 | ------------------------------------------- 131 | user nginx webmaster; 132 | worker_processes 10; 133 | worker_rlimit_nofile 100000; 134 | 135 | error_log /var/log/nginx/error.log; 136 | #error_log /var/log/nginx/error.log notice; 137 | #error_log /var/log/nginx/error.log info; 138 | 139 | pid /var/run/nginx.pid; 140 | 141 | events { 142 | worker_connections 2048; 143 | use epoll; 144 | } 145 | 146 | 147 | http { 148 | include /etc/nginx/mime.types; 149 | default_type application/octet-stream; 150 | 151 | log_format main '$remote_addr - $remote_user [$time_local] "$request" ' 152 | '$status $body_bytes_sent "$http_referer" ' 153 | '"$http_user_agent" "$http_x_forwarded_for"'; 154 | 155 | access_log /var/log/nginx/access.log main; 156 | 157 | sendfile on; 158 | tcp_nopush on; 159 | tcp_nodelay on; 160 | server_tokens off; 161 | gzip on; 162 | gzip_static on; 163 | gzip_comp_level 5; 164 | gzip_min_length 1024; 165 | keepalive_timeout 65; 166 | 167 | # Load config files from the /etc/nginx/conf.d directory 168 | include /etc/nginx/conf.d/*.conf; 169 | include /etc/nginx/sites-enabled/*.conf; 170 | } 171 | --------------------------------------------- 172 | 173 | # Скрипт создания нового сайта 174 | nano /home/srv/bin/new_site 175 | ------------------------------------------- 176 | #!/bin/sh 177 | SITENAME=$1 178 | 179 | if [ -z $SITENAME ]; then 180 | echo "Please enter site name! I.e.: $ new_site www.mydomain.com" 181 | exit; 182 | fi 183 | 184 | mkdir -p ~/$SITENAME/www 185 | 186 | chown srv:webmaster -R ~/$SITENAME 187 | chmod u=rwX,g=srwX,o= -R ~/$SITENAME 188 | 189 | mkdir -p ~/logs/$SITENAME 190 | chown srv:webmaster -R ~/logs/$SITENAME 191 | chmod u=rwX,g=srwX,o= -R ~/logs/$SITENAME 192 | 193 | sed -e"s/\[\[some_site\]\]/$SITENAME/g" ~/sites-conf/template_conf > ~/sites-conf/${SITENAME}.conf 194 | ------------------------------------------- 195 | 196 | # Выставляем права 197 | chown srv:webmaster /home/srv/bin/new_site 198 | chmod 750 /home/srv/bin/new_site 199 | 200 | # Папка конфигураций сайтов 201 | mkdir /etc/nginx/sites-enabled 202 | chown root:webmaster -R /etc/nginx/sites-enabled 203 | chmod u=rwX,g=srwX,o= -R /etc/nginx/sites-enabled 204 | 205 | # Делаем символическую ссылку в домашнем каталоге 206 | ln -s /etc/nginx/sites-enabled /home/srv/sites-conf 207 | 208 | # Шаблон конфигурации сайта (предназначен для limb3 web_app, но можно изменить после создания сайта) 209 | touch /etc/nginx/sites-enabled/template_conf 210 | chown srv:webmaster /etc/nginx/sites-enabled/template_conf 211 | chmod 664 /etc/nginx/sites-enabled/template_conf 212 | nano /etc/nginx/sites-enabled/template_conf 213 | --------------------------------------------------- 214 | server { 215 | server_name [[some_site]]; 216 | 217 | index index.php; 218 | root /home/srv/[[some_site]]/www; 219 | 220 | access_log /home/srv/logs/[[some_site]]/nginx.access.log; 221 | error_log /home/srv/logs/[[some_site]]/nginx.error.log notice; 222 | 223 | fastcgi_buffers 16 300k; 224 | 225 | location / 226 | { 227 | if (!-e $request_filename) 228 | { 229 | rewrite ^(.*)$ /index.php last; 230 | } 231 | } 232 | 233 | location ~ \.php$ 234 | { 235 | fastcgi_pass unix:/var/run/fastcgi_sock; 236 | fastcgi_index index.php; 237 | fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name; 238 | include fastcgi_params; 239 | } 240 | } 241 | --------------------------------------------------- 242 | 243 | Настройка sudo 244 | 245 | под рутом 246 | vi /etc/sudoers 247 | 248 | в конец добавляем: 249 | 250 | ---------------------------------------------------- 251 | srv ALL=NOPASSWD: /etc/init.d/nginx reload 252 | srv ALL=(nginx) NOPASSWD: ALL 253 | srv ALL=NOPASSWD: /root/bin/fantom_rights 254 | srv ALL=NOPASSWD: /usr/sbin/addcron 255 | srv ALL=NOPASSWD: /etc/init.d/crond reload 256 | ---------------------------------------------------- 257 | 258 | # Настройка автообновления времяни и зон 259 | ========================================== 260 | # Улучшенный скрипт, вообще ничего не спрашивает, все вроде делает правильно 261 | # Обновляем пакет с таймзонами (там должна быть актуальная московская ТЗ) 262 | 263 | yum -y -q install tzdata ntp 264 | 265 | # Настраиваем московскую ТЗ 266 | 267 | mv -f /etc/localtime ~/localtime.orig 268 | ln -s /usr/share/zoneinfo/Europe/Moscow /etc/localtime 269 | 270 | # Корректируем время вручную по одному из серверов 271 | /etc/init.d/ntpd stop 272 | /sbin/ntpdate 0.centos.pool.ntp.org 1.centos.pool.ntp.org 2.centos.pool.ntp.org 273 | /etc/init.d/ntpd start 274 | 275 | # Проставляем ntpd в автозапуск (на всякий случай) 276 | /sbin/chkconfig --levels 345 ntpd on 277 | 278 | # Устанавливаем и проверяем системное время 279 | /sbin/hwclock --systohc 280 | /sbin/hwclock 281 | 282 | 283 | # Проверка 284 | =========================== 285 | 286 | # Перезагружаем машину 287 | /sbin/shutdown -r now 288 | /etc/init.d/nginx stop 289 | 290 | # Смотрим процессы nginx 291 | ps -A | grep nginx 292 | 293 | # Смотрим процессы php-fpm 294 | ps -A | grep php 295 | 296 | # Смотрим кто какие порты слушает (nginx 80) 297 | netstat -tnlp | grep nginx 298 | 299 | # Смотрим слушает ли php-fpm порт /var/run/fastcgi_sock 300 | ss -an | grep /var/run/fastcgi_sock 301 | 302 | # Проверяем (должна отдаться страница index.html "Welome, Nginx!") 303 | wget http://127.0.0.1/ -q -O - 304 | 305 | # Создание нового сайта 306 | su srv 307 | ~/bin/new_site example.com 308 | 309 | # Перезагрузка nginx 310 | sudo /etc/init.d/nginx reload 311 | 312 | 313 | # Дополение 1 - Установка дополнительных инструментов. 314 | ========================================================= 315 | 316 | # PHPUnit 317 | yum install php-pear php-soap php-pdo php-xml 318 | pear channel-discover pear.phpunit.de 319 | pear channel-discover pear.symfony-project.com 320 | pear remote-list -c phpunit 321 | pear install phpunit/PHPUnit 322 | pear install --alldeps --force phpunit/PHPUnit 323 | 324 | # APC 325 | yum install php-pecl-apc 326 | 327 | # XDebug 328 | yum install php-pecl-xdebug 329 | 330 | # Sqlite3 331 | yum install php-pdo 332 | 333 | # MySQL 334 | yum install mysql-server php-mysql.x86_64 335 | /usr/bin/mysqladmin -u root password 'root' 336 | chkconfig --levels 345 mysqld on 337 | /etc/init.d/mysqld start 338 | 339 | =========================================================== 340 | # Установка JRE (Лучше JDK... описание ниже) 341 | =========================================================== 342 | Идём на страницу закгузки http://java.com/ru/download/manual.jsp 343 | Берём ссылку на "Linux x64 RPM" 344 | 345 | # Установка: 346 | cd /usr/src 347 | wget http://javadl.sun.com/webapps/download/AutoDL?BundleId=59622 348 | sh jre-6u* 349 | 350 | # Проверка: 351 | java -version 352 | 353 | # Удаление: 354 | yum remove jre 355 | 356 | =========================================================== 357 | # Установка JRE (Лучше JDK... описание ниже) 358 | =========================================================== 359 | Идём на страницу закгузки http://www.oracle.com/technetwork/java/javase/downloads/index.html 360 | Скачиваем куда нибудь например jdk-6u32-linux-x64-rpm.bin (дучше на какой нибудь сервер чтобы 361 | потом взять прямую ссылку для wget) 362 | 363 | # Установка: 364 | cd /usr/src 365 | wget http://myserver.com/jdk-6u32-linux-x64-rpm.bin 366 | sh jdk-6u* 367 | 368 | # Проверка: 369 | java -version 370 | 371 | # Удаление: 372 | yum remove jdk 373 | 374 | /usr/sbin/alternatives --install /usr/bin/jarsigner jarsigner /usr/java/jdk1.6.0_32/bin/jarsigner 100 375 | 376 | # Как добавить в $PATH путь для всех пользователей 377 | ========================================================= 378 | в /etc/profile добавляем 379 | 380 | PATH=$PATH:/new/path/ 381 | export PATH 382 | 383 | # Дополение 2 - Группы и пользователи unix (важно знать). 384 | ========================================================= 385 | Допустим мы работаем под пользователем srv и его рабочий каталог /home/srv 386 | Нужно создать группу webmaster 387 | groupadd webmaster 388 | 389 | и добавить в неё пользователя srv 390 | usermod -G webmaster srv 391 | 392 | Допустим сайты будут распогогаться в папках 393 | ~/site1.com 394 | ~/site2.com 395 | ~/$SITENAME 396 | ... и т.д. 397 | 398 | Нужно чтобы nginx имел доступ к этим папкам, для этого нужно: 399 | 1) Установить пользователя и группу для этой папки: 400 | chown srv:webmaster -R ~/$SITENAME 401 | 402 | 2) Сделать так чтобы все новые файлы и папки имели туже группу webmaster, которая она 403 | будет устанавливаться автоматом при создании новых файлов и папок 404 | chmod u=rwX,g=srwX,o= -R ~/$SITENAME 405 | 406 | !!! орабтить внимание на g=srwX - тут выставляется бит (s) - SGID (Set Group ID - бит смены идентификатора группы). 407 | Это делается для того чтобы все файлы и папки созданные внутри этого каталога имели по умолчанию группу 408 | webmaster (т.е. группу родительской папки), а не группу пользователя который их создал (т.е. srv). Если группа не будет 409 | webmaster то nginx бует возвращать 404 (из-за Permission denied) 410 | Хорошо и на русском об этом написано тут http://help.ubuntu.ru/wiki/стандартные_права_unix 411 | ----------------------------------------------------------------------------------------------- 412 | Инструкция по эксплуотации: 413 | 414 | # добавление нового домена (сайта) 415 | new_site vladsandbox.biz 416 | 417 | # Перезагрузка nginx (перечитывает файлы конфигурации): 418 | web_reload 419 | 420 | Папка сайта /home/srv/vladsandbox.biz, в ней: 421 | htdocs/www - тут лежат файлы доступные из web по адресу http://vladsandbox.biz/ 422 | logs - логи сервера (Логи за последние 10 дней бэкапятся в папку /home/srv/logs_backup) 423 | 424 | в /home/srv/sites-conf/ (символическая ссылка) - хранятся конфиги nginx для каждого сайта, например vladsandbox.biz.conf 425 | после изменения надо вызывать web_reload для перезагрузки конфигурации nginx 426 | 427 | # Перезагрузка php-fpm (после изменения php.ini) 428 | phpfpm_restart 429 | 430 | # Перезагрузка mysql (после изменения php.ini) 431 | mysqld_restart 432 | 433 | Из под рута перезапуск: 434 | /etc/init.d/nginx restart 435 | /etc/init.d/php-fpm restart 436 | /etc/init.d/mysqld restart 437 | 438 | /etc/init.d/nginx stop 439 | /etc/init.d/php-fpm stop 440 | /etc/init.d/mysqld stop 441 | 442 | # kill -HUP `cat /var/run/nginx.pid` 443 | 444 | 445 | ps ax -o pid,ppid,user,%cpu,vsz,wchan,command | egrep '(nginx|PID)' 446 | 447 | =============================== 448 | 449 | # grep user /etc/nginx/nginx.conf 450 | user nginx webmaster; 451 | 452 | # ll -d /home/srv 453 | drwxr-x--- 8 srv webmaster 4096 Nov 13 05:30 /home/srv -------------------------------------------------------------------------------- /docs/PHP - Memcached on Windows for PHP 5.3.txt: -------------------------------------------------------------------------------- 1 | Установка memcached под Windows + расширение для PHP 5.3 2 | ========================================================== 3 | 4 | Установка сервера memcached 5 | ----------------------------------------------- 6 | 7 | 1. Идем на www.splinedancer.com/memcached-win32 и скачиваем сам memcached в виде binaries. 8 | На данный момент последняя версия memcached 1.2.4 Win32 Beta Binaries (09.03.2008) 9 | 10 | 2. Распаковываем архив на локальной машине в любую директорию, например D:\Work\tools\web\memcached\ 11 | 12 | 3. Для того, чтобы memcached работал как служба, нужно из директории, где установлен memcached, 13 | открыть командную строку (cmd) и выполнить 14 | memcached.exe -d install 15 | memcached.exe -d start 16 | 17 | Установка асширения Memcached для PHP 5.3 на Windows 18 | ----------------------------------------------- 19 | Cкачиваем php-расширениеб распаковываем и кладём dll в папку php\ext: 20 | php_memcache-2.2.6-5.3-vc9-x86.zip с — http://downloads.php.net/pierre/ 21 | В php.ini подключаем dll - extension=php_memcache.dll 22 | 23 | Проверка работы: 24 | ----------------------------------------------- 25 | connect('127.0.0.1', 11211); 28 | $version = $memcache->getVersion(); 29 | echo 'Ver - ' . $version; 30 | ?> 31 | 32 | P.S. Если не работает то попробовать перезапустить службу вручную в панели Администрирования (у меня так было) -------------------------------------------------------------------------------- /docs/SSH - Key Authentication HOWTO.txt: -------------------------------------------------------------------------------- 1 | 2 | Аутентификация по SSH при помощи кючей 3 | 4 | На клиенте генерим пару ключей: 5 | %% ssh-keygen -C user@host 6 | При этом генерируется пара ключей которые по умолчанию лежат в ~/.ssh/id_rsa ~/.ssh/id_rsa.pub (для Win 7 ~ - C:/Users/username/) 7 | Далее нужно добавить публичный ключ id_rsa.pub на сервер в ~/.ssh/authorized_keys 8 | %% cd ~ 9 | %% scp .ssh/id_rsa.pub user@host:id_rsa.pub 10 | заходим сначало на сервер user@host под паролем 11 | %% ssh user@host 12 | %% cd ~ 13 | %% cat id_rsa.pub >> .ssh/authorized_keys 14 | %% exit 15 | 16 | теперь заходим через аутентификацию по ключу 17 | %% ssh user@host 18 | 19 | Если не сработает то попробовать уделить known_hosts на клиенте 20 | 21 | Вот тут нормально описано: 22 | http://stremoukhov.ru/dostup-k-ssh-serveru-po-public-key 23 | 24 | 25 | -------------------------------------------------------------------------------- /docs/Ubuntu - help.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rsajob/docs/8e84624ad5bd436174af141902481ab5c61f61fb/docs/Ubuntu - help.txt -------------------------------------------------------------------------------- /docs/apktool - Проблема с nginx.txt: -------------------------------------------------------------------------------- 1 | Целый день мучался сегодня с этим apktool. Но нашёл решение, запиши это в свою шпоргалку. 2 | Я в тут в кратце опишу проблему и решение, а внизу подробно всё расписал. 3 | 4 | Проблема: на новом сервере при вызове apktool через nginx (через exec в php) оно не работало. 5 | Решение проблемы: 6 | chown nginx:nginx -R /var/cache/nginx 7 | Краткое описание: 8 | apktool в процессе раблты создаёт временный файл в кактлоге пользователя, почемуто на новых серверах домашний каталог 9 | пользоватлея nginx стал /var/cache/nginx, а на старых был /var/lib/nginx. На старом сервер всё работает. 10 | Так вот права на папку /var/cache/nginx стояли root:root почемуто, и польователь nginx ничёго не мог туда записать. 11 | Дальше можеш не читать в принцапи, но на всякий случай отправлю. Просто в процессе написания тебе письма пытался решить 12 | проблему и получилось. 13 | 14 | ======================== 15 | 16 | Цель: есть инструмент apktool для декомпиляции apk файлов. 17 | Устанавливал его так: 18 | su 19 | mkdir /usr/src/apktool 20 | cd /usr/src/apktool 21 | wget http://android-apktool.googlecode.com/files/apktool-install-linux-r04-brut1.tar.bz2 22 | wget http://android-apktool.googlecode.com/files/apktool1.4.3.tar.bz2 23 | tar xvf apktool-install-linux-r04-brut1.tar.bz2 24 | tar xvf apktool1.4.3.tar.bz2 25 | rm apktool-install-linux-r04-brut1.tar.bz2 26 | rm apktool1.4.3.tar.bz2 27 | mv aapt /usr/bin 28 | mv apktool /usr/bin 29 | mv apktool.jar /usr/bin 30 | chmod 755 /usr/bin/aapt 31 | chmod 755 /usr/bin/apktool 32 | 33 | 34 | Использовать так: 35 | apktool d -s -f sample.apk out_dir 36 | 37 | Проблема в том, что когда я его использую из коммандной строки под пользователем srv, всё работает. 38 | Мне надо это делать вызовом из php при помощи exec. И вот на одном сервере (старом) это работает, а на новом нет. 39 | Данные к серверам 40 | 1) там где работает: 41 | 95.211.129.30 42 | 43 | Проверка работы через php (от пользователя srv работает): 44 | cd /home/srv/tst.netlug.biz/rp/web/apktest 45 | php run.php 46 | 47 | Проверка через apktool напрямую (от пользователя srv рабоатет): 48 | apktool d -s -f coolporn.apk out 49 | 50 | При вызове от пользователя nginx 51 | sudo -u nginx apktool d -s -f coolporn.apk out 52 | или 53 | sudo -u nginx php run.php 54 | 55 | выдаёт ошибку: 56 | /usr/bin/apktool: line 42: cd: /home/srv/tst.netlug.biz/rp/web/apktest: Permission denied 57 | Input file (coolporn.apk) was not found or was not readable. 58 | 59 | НО вот самое интересное, что через браузер работает: 60 | http://tst.netlug.biz/apktest/run.php 61 | 62 | 2) Теперь другой сервер: 63 | 95.211.77.141 64 | 65 | Проверка работы через php (от пользователя srv работает): 66 | cd /home/srv/rp16.netlug.biz/htdocs/web/apktest 67 | php run.php 68 | 69 | Проверка через apktool напрямую (от пользователя srv рабоатет): 70 | apktool d -s -f coolporn.apk out 71 | 72 | При вызове от пользователя nginx 73 | sudo -u nginx apktool d -s -f coolporn.apk out 74 | или 75 | sudo -u nginx php run.php 76 | 77 | выдаёт такуюже ошибку как и на первом сервере: 78 | /usr/bin/apktool: line 42: cd: /home/srv/rp16.netlug.biz/htdocs/web/apktest: Permission denied 79 | Input file (coolporn.apk) was not found or was not readable. 80 | 81 | И САМОЕ ВАЖНОЕ, что через браузер НЕ работает: 82 | http://rp16.netlug.biz/apktest/run.php 83 | 84 | 85 | Интересные моменты: 86 | 87 | apttool при работе создаёт временный файл в корневом каталоге пользователя ~/apktool/framework/1.apk 88 | на рабочем сервер, при вызове через web этот файл создаётся в 89 | /var/lib/nginx/apktool/framework/1.apk 90 | если вызвать комманду от имени srv то файл создастся в 91 | /home/srv/apktool/framework/1.apk 92 | 93 | На нерабочем сервере этот файл нигде не создаётся, вероятно гдето в этом проблема. 94 | 95 | Комманда finger nginx выдаёт: 96 | на рабочем сервере 97 | Directory: /var/lib/nginx Shell: /bin/false 98 | на не рабочем: 99 | Directory: /var/cache/nginx Shell: /sbin/nologin 100 | 101 | Решение проблемы: 102 | Из-за того что владельцем корневой папки пользователя nginx /var/cache/nginx был пользователь root:root 103 | то apktool не мог записать туда свой файл. 104 | Решение проблемы: 105 | chown nginx:nginx -R /var/cache/nginx -------------------------------------------------------------------------------- /docs/docker - help.txt: -------------------------------------------------------------------------------- 1 | 2 | # Удалить все образы 3 | docker rmi -f `docker images | awk '{ print $3; }'` 4 | 5 | # Список всех контенеров 6 | docker ps -a 7 | 8 | # Список всех образов 9 | docker images 10 | 11 | # Удалить все контенеры 12 | docker rm `docker ps --no-trunc -aq` 13 | 14 | # Инструмент для визуального отображения среды Weave Scope 15 | $ wget -O scope https://github.com/weaveworks/scope/releases/download/latest_release/scope 16 | $ chmod +x scope 17 | $ scope launch 18 | 19 | # Dockeriu 20 | docker run -d -p 9000:9000 --privileged \ 21 | -v /var/run/docker.sock:/var/run/docker.sock \ 22 | --name=dockerui dockerui/dockerui 23 | 24 | # Запуск системы мониторинга cAdvisor от Google: 25 | docker run \ 26 | --privileged=true \ 27 | --volume=/:/rootfs:ro \ 28 | --volume=/var/run:/var/run:rw \ 29 | --volume=/sys:/sys:ro \ 30 | --volume=/var/lib/docker/:/var/lib/docker:ro \ 31 | --volume=/sys/fs/cgroup/:/cgroup:ro \ 32 | --publish=8080:8080 \ 33 | --detach=true \ 34 | --name=cadvisor \ 35 | google/cadvisor:latest 36 | 37 | --volume=/var/run/docker.sock:/var/run/docker.sock \ 38 | --logtostderr 39 | 40 | # Хооший FAQ по docker: https://xakep.ru/2015/06/04/docker-faq/ 41 | 42 | # Вебинар по докеру 22.03.2016 43 | http://www.youtube.com/watch?v=fUA8D2zkFCA 44 | -------------------------------------------------------------------------------- /docs/ffmpeg - Install on CentOS.txt: -------------------------------------------------------------------------------- 1 | # источник http://duntuk.com/how-install-ffmpeg-centosrhel-yum 2 | 3 | # To fix rpmforge GPG key warning: 4 | rpm -Uhv http://apt.sw.be/redhat/el5/en/i386/rpmforge/RPMS/rpmforge-release-0.3.6-1.el5.rf.i386.rpm 5 | 6 | nano -w /etc/yum.repos.d/dag.repo 7 | 8 | Insert 9 | 10 | [dag] 11 | name=Dag RPM Repository for Red Hat Enterprise Linux 12 | baseurl=http://apt.sw.be/redhat/el$releasever/en/$basearch/dag 13 | gpgcheck=0 14 | enabled=1 15 | 16 | yum install ffmpeg 17 | yum install ffmpeg-devel 18 | 19 | 20 | #Ещё хороший материал: http://itblog.su/ustanovka-ffmpeg-i-ffmpeg-php-na-centos.html -------------------------------------------------------------------------------- /docs/ffmpeg - examples.txt: -------------------------------------------------------------------------------- 1 | /usr/bin/nice /usr/local/bin/ffmpeg -i 37316.0.flv -vcodec mpeg4 -b 60k -s qvga -acodec libfaac -ab 64k -ar 11025 37316.320x240.avi 2 | /usr/bin/nice /usr/local/bin/ffmpeg -i 37316.0.flv -vcodec libx264 -b 250k -s qvga -acodec libfaac -ab 16k -ar 22050 -ac 1 37316.320x240.avi 3 | /usr/bin/nice /usr/local/bin/ffmpeg -i 37316.0.flv -vcodec mpeg4 -b 250k -s qqvga -acodec libfaac -ab 16k -ar 22050 -ac 1 37316.160x120.avi -------------------------------------------------------------------------------- /docs/git - branch.txt: -------------------------------------------------------------------------------- 1 | Отправить локальную ветку в удалённый репозиторий (связь между ними не создаётся): 2 | git push origin feature 3 | 4 | Отправить локальную ветку feature в удалённый репозиторий и 5 | автоматически привязать локальную ветку к удалённой (флаг -u) 6 | git push -u origin feature 7 | 8 | Чтобы привязать уже существующую локальную ветку ветку к удаленной: 9 | git branch --set-upstream feature origin/feature 10 | 11 | Выкачиваем и отслеживаем ветку из удалённого репозитория 12 | git checkout --track origin/feature 13 | или 14 | git checkout --track -b my-branch-name origin/my-branch-name 15 | 16 | Удаляем ветку: 17 | git branch -d feature #В локальном репозитории 18 | git push origin :feature #В удалённом репозитории 19 | 20 | Переходим на ветку master 21 | git checkout master 22 | 23 | Создать новую ветку и переключится на неё 24 | git branch new_branch 25 | git checkout new_branch 26 | либо сразу 27 | git checkout -b new_branch 28 | 29 | Переименовать текущий бранч: 30 | git branch -m new_name 31 | git branch -M new_name (-M позволяет проигнорировать, что new_name уже есть) 32 | 33 | Переименовать любой бранч: 34 | git branch -m current_name new_name 35 | 36 | # Вытаскиваем основную ветку разработки 37 | git checkout --track origin/devel 38 | 39 | # Добавление сабмодуля в проект (rsajob/limb.git) 40 | git submodule add git@github.com:rsajob/limb.git lib/limb 41 | 42 | 1) Допустим у нас появилось свободное время и мы хотим чтоб наш проект работал с последней версией субмодуля: 43 | Заходим в директорию субмодуля 44 | cd src/vendor/symfony/ 45 | Обновляем субмодуль 46 | git checkout -f (#Отказаться от всех изменений в рабочем каталоге) 47 | 48 | 2) Допустим кто-то хочет развернуть ваш проект в своей локальной директории: 49 | Первым делом клонирует проект 50 | git clone ... [your_project.git] 51 | 52 | Если теперь зайти в директории субмодулей — обнаружим что они пусты. 53 | Для восстановления целостного проекта нужно клонировать нужные версии субмодулей. 54 | Переходим в корень проекта и запускаем команду 55 | git submodule update --init 56 | 57 | Если выдаёт ошибку Clone of 'git@github.com:rsajob/limb.git' into submodule path 'lib/limb' failed 58 | то надо в модулях поменять ссылки на Read-only версию 59 | git://github.com/rsajob/limb.git 60 | git config submodule.lib/limb.url git://github.com/rsajob/limb.git 61 | 62 | Надо разобрать 63 | 64 | 65 | #удалить файл из индекса, оставив его при этом в вашем рабочем каталоге. 66 | git rm --casced fole_or_dir 67 | 68 | -------------------------------------------------------------------------------- /docs/git - new repo.txt: -------------------------------------------------------------------------------- 1 | Задача: На локале есть репозиторий, надо его перенести на сервер и этот репозиторий основным (origin). 2 | ===================================================================== 3 | 4 | # На сервер создаём чистый репозиторий: 5 | cd /home/user 6 | mkdir git 7 | cd git 8 | mkdir domain.com.git 9 | git init --bare 10 | 11 | # На локале: 12 | cd existing_git_repo 13 | git remote add origin user@host.biz:git/domain.com.git 14 | git push -u origin master 15 | 16 | 17 | Далее клонируем проект на продакшин сервер: 18 | new_site domain.com 19 | git clone user@host.biz:git/domain.com.git /home/user/domain.com/htdocs 20 | git clone srv@netlug.biz:git/cool-porn.com.git /home/srv/tst.cool-porn.com/htdocs 21 | cd /home/user/domain.com/htdocs 22 | mkdir var 23 | chmod 775 var 24 | 25 | 26 | -------------------------------------------------------------------------------- /docs/git - ssh keys.txt: -------------------------------------------------------------------------------- 1 | Для того чтобы git работал с github по ssh нужно 2 | сгенерировать ключи и добавить публиыный кюч в свой аккаунт на github 3 | 4 | По умолчанию для папка .ssh находится в домашнем каталоге. 5 | Для Windows 7 это C:/Users// 6 | Чтобы ssh s Windows нашол эту папку должна быть выставлена переменная окружения HOME=C:/Users// 7 | 8 | Генерация ключа: 9 | ssh-keygen -C "My key alias" 10 | "My key alias" - тут обычно user@host или email 11 | По умолчанию пара ключей кладутся в 12 | ~/.ssh/id_rsa 13 | ~/.ssh/id_rsa.pub (*сожержимое этого файла надо скопировать в акаунт github.com) 14 | (*для Win 7 ~ - C:/Users/username/) 15 | 16 | 17 | Несколько ssh ключей при работе с git. 18 | ===================================== 19 | Например это необходимо если работать с несколькими акаунтами на github.com 20 | 21 | Суть в кратце: для ssh можно задать конфиг (файл ~/.ssh/config), в котором можно 22 | переопределять хосты и назначать для каждого свой ключ. При этом при подключении 23 | удалённого репозитория необходимо вместо gthub.com указать свой переопределённый 24 | хост - ssh его схватит, подставит нужный ключ и нужный хост. 25 | Пример: 26 | 27 | Генерим ключи: 28 | ssh-keygen -C "myname@gmail.com" -f ~/.ssh/id_rsa.myname 29 | 30 | В файле ~/.ssh/config пишем: 31 | Host myname.github.com 32 | HostName github.com 33 | User git 34 | IdentityFile ~/.ssh/id_rsa.myname 35 | 36 | Надо выставить права: 37 | chmod 600 ~/.ssh/config 38 | 39 | Привязываем удалённый репозиторий: 40 | git remote add origin ssh://git@myname.github.com:myname/repo.git 41 | 42 | Или меняем URL существующего: 43 | git remote set-url origin git@myname.github.com:myname/repo.git 44 | 45 | 46 | Также об этом можно почитать тут: 47 | 48 | http://www.springloops.com/blog/git-config-for-mutiply-ssh-keys/ 49 | Git config for mutiply SSH keys 50 | 51 | This manual, assumes that in directory .ssh you have more than one keypairs. Each key is associated with different Git user. For example, key ~/.ssh/id_rsa is associated with john.smith@springloops.com, while ~/.ssh/id_rsa1 belongs to joe.doe@springloops.com 52 | 53 | Creating another SSH key 54 | When you create a keypair for the first time method ssh-keygen will use the default name (id_rsa). However, on each next use, we need to specify ssh keypair name: 55 | ssh-add ~/.ssh/idrsa1 56 | 57 | Configuring SSH keys 58 | By default SSH uses the default SSH key (~/.ssh/id_rsa). Now we’re going to force it to use different key for another server. To do it, please edit ~/.ssh/config file: 59 | 60 | # john smith 61 | Host sls-user1 62 | HostName slsapp.com 63 | User sls 64 | IdentityFile /Users/cmpname/.ssh/id_rsa 65 | # joe doe 66 | Host sls-user2 67 | HostName slsapp.com 68 | User sls 69 | IdentityFile /Users/cmpname/.ssh/id_rsa1 70 | 71 | How to use the second key? 72 | From now if you want work as John Smith you need to use following commands: 73 | git remote add jhon_orgin ssh://sls@sls-user1:1234/test/proj123.git 74 | git clone ssh://sls@sls-user1:1234/test/proj123.git 75 | 76 | and when as Joe Doe: 77 | git remote add jhon_orgin ssh://sls@sls-user2:1234/test/proj123.git 78 | git clone ssh://sls@sls-user2:1234/test/proj123.git -------------------------------------------------------------------------------- /docs/git - useful topics.txt: -------------------------------------------------------------------------------- 1 | О git и его применении в работе, подборка топиков http://guide.avantajprim.com/?p=413 2 | ================================================== 3 | 4 | 1. Software Configuration Management // Распределенный контроль версий 5 | ------------------------------------------------------------------------ 6 | Приветствую. Как и обещал — продолжение цикла заметок об управлении конфигурацией ПО, в простонародье называемом Software Configuration Management. Весь цикл можно найти по ссылке на тэг CM. Из ещё неохваченного осталась буквально пара заметок. 7 | 8 | Сегодня речь пойдет о довольно спорном и в чём-то провокационном вопросе — распределенных системах контроля версий. Знаю, что подобные системы популярны среди хабравчан, так что заранее готов в обсуждению. Более того — призываю не проходить мимо и высказаться, если есть что сказать по делу. 9 | 10 | более подробно на хабре http://habrahabr.ru/blogs/pm/72370/ 11 | 12 | 2. Командная работа в Git 13 | ------------------------------------------------------------------------ 14 | Во всем множестве статей по git’у, которые я смог найти в сети, не хватает одного существенного момента — описания командной работы. То, что обычно описывают как командную работу, на самом деле является просто работой с удаленным репозиторием. 15 | 16 | Ниже я хочу описать свой опыт командной работы над проектом с использованием git’а. 17 | 18 | подробнее в ЖЖ у автора (m-иванова) http://m-ivanov.livejournal.com/7988.html или на хабре http://habrahabr.ru/blogs/Git/75990/, кому как удобнее 19 | 20 | 3. Коллективная разработка с использованием git и Trac в проекте Midnight Commander 21 | ------------------------------------------------------------------------ 22 | Действительно, в интернете сейчас можно найти достаточно много информации о настройке GIT и работе с ним, но недостаточно освещен вопрос коллективной разработки и «рабочего процесса» отдельно взятого проекта от начала и до конца. 23 | 24 | Попробую восполнить этот пробел на примере открытого проекта Midnight Commander, не останавливаясь на вопросах установки необходимого ПО, так как этот момент неплохо описан в интернете, и вы сможете легко найти интересующую вас дополнительную информацию самостоятельно. 25 | Используемые термины и определения 26 | тикет — отчёт об ошибках либо о пожеланиях, улучшениях. Иные названия — багрепорт и т.п. 27 | бранч — ветвь разработки, существующая в системе контроля версий (в git) 28 | апстрим — главная ветвь в системе контроля версий. Для git это обычно ветвь «master» 29 | стабильная ветвь — ветвь отпочковавшаяся от ветви «master» тэгированная и выпущенная в качестве релиза (в дальнейшем сопровождается отдельно) 30 | 31 | более подробно на хабре http://habrahabr.ru/blogs/development/76135/ 32 | 33 | 4. десяток полезных советов 34 | ------------------------------------------------------------------------ 35 | ХХ полезных советов для пользователей Git среднего уровня. Часть 1 36 | 37 | Вообще-то изначально я планировал перевести статью Энди Джеффриса (Andy Jeffries) 25 Tips for Intermediate Git Users, но в процессе я отбросил бестолковые, общеизвестные или самые простые советы вроде «настройте первым делом user.name и user.email», которые явно не подходят людям, уже более-менее плотно знакомым с Git. 38 | Взамен я дополню статью моментами из личной практики («Своя практика»! Звучит здорово, будто я частный врач или адвокат! :-] ) 39 | 40 | http://habrahabr.ru/blogs/Git/75728/ 41 | 42 | ХХ полезных советов для пользователей Git среднего уровня. Часть 2 43 | ------------------------------------------------------------------------ 44 | 45 | Это продолжение статьи ХХ полезных советов для пользователей Git среднего уровня 46 | 47 | Про reset, незапланированно снова про альясы, про замечательный filter-branch, про мерджи и разрешение конфликтов с помощью rerere, про rebase (интерактивный и не очень) и, в завершение, про обслуживание своей гитницы. 48 | 49 | http://habrahabr.ru/blogs/Git/76084/ 50 | 51 | 5. Внешние зависимости в гите: submodule или subtree? 52 | ------------------------------------------------------------------------ 53 | Давным-давно я усвоил, что зависимости должны храниться вместе с кодом проекта. Тогда, при возврате к старой версии кода, гораздо проще восстанавливать окружение. 54 | 55 | У моего проекта несколько зависимостей. Бóльшая часть зависимостей живет в гитовых репозиториях. Сам проект тоже живёт в гите. 56 | 57 | Одна из используемых нами библиотек часто обновляется. Мы сидим на девелоперской версии, и нередко сами контрибутим в неё код, который требуется нашему проекту. То есть требуется оперативно пропускать наши правки через основной репозиторий этой библиотеки — создавать и поддерживать свой форк по ряду причин совершенно не хочется. 58 | 59 | http://habrahabr.ru/blogs/Git/75964/ 60 | 61 | 6. Пример использования хуков (hooks) в git 62 | ------------------------------------------------------------------------ 63 | Для того чтобы познакомиться с механизмом хуков в git, достаточно просто начать их использовать и посмотреть как оно работает, и как оно устроено внутри. 64 | Хуки в git это некие скрипты, срабатывающие на определенные события, по сути своей являются их обработчиками. Расположены они в каталоге .git/hooks. 65 | 66 | Для примера попробуем сделать простенький обработчик. Его задача поместить в редактируемое описание к коммиту нужную нам информацию. 67 | 68 | http://habrahabr.ru/blogs/Git/75063/ 69 | 70 | 7. Особенности настройки git под windows 71 | ------------------------------------------------------------------------ 72 | Проблемы с русскими символами в git 73 | 74 | Когда вы начнете работать с версией git под windows в командной строке, вы столкнётесь со следующей проблемой — все сообщения git, в которых фигурируют русские символы будут нечитаемы. Имена файлов, на русском языке, будут выглядеть так — «\362\345\361\362″, а тексты коммитов примерно так — . Т.е. исходная строка преобразуется в utf8 в соответствии с кодировкой latin1. 75 | 76 | http://habrahabr.ru/blogs/Git/74839/ -------------------------------------------------------------------------------- /docs/mc - help.txt: -------------------------------------------------------------------------------- 1 | Шпоргалка по Midnight Commander 2 | ======================================== 3 | 4 | Полезные быструе клавиши: 5 | ---------------------------- 6 | Alt+s - Поиск файла в большом списке в открытой панели: Alt+s затем первые буквы файла 7 | Ctrl+Enter - Копирование текущего файла 8 | Ctrl+Shift+Enter - Копирование текущего пути в коммандную строку 9 | 10 | 11 | -------------------------------------------------------------------------------- /docs/mod_rewrite - examples.txt: -------------------------------------------------------------------------------- 1 | Примеры использования mod_rewrite: 2 | http://www.beget.ru/art10.html -------------------------------------------------------------------------------- /docs/nginx - Installation and tips.txt: -------------------------------------------------------------------------------- 1 | 2 | Статья на хабре про настройку nginx: 3 | ======================================= 4 | http://habrahabr.ru/blogs/nginx/66764/ 5 | 6 | Полезное: 7 | ======================================= 8 | server { 9 | #... 10 | 11 | #rewrite_log on; 12 | rewrite ^/billing/ps/(.*)$ /pdb/billing/web/ps/$1 last; 13 | 14 | #... 15 | } 16 | 17 | server 18 | { 19 | #... 20 | 21 | set $project_root "D:/Work/projects/web/pdblimb"; 22 | root $project_root; 23 | 24 | #... 25 | } 26 | 27 | Поиск в нескольких папках: ветка тут http://forum.nginx.org/read.php?21,216872,217313 28 | ======================================= 29 | Пример запроса: 30 | http://server.com/media/video/13.mp4 31 | 32 | данный файл лежит в каком-то из каталогов: 33 | /raid9550/1/video/13.mp4 34 | /raid9550/2/video/13.mp4 35 | /raid9550/3/video/13.mp4 36 | /raid9550/4/video/13.mp4 37 | 38 | Решение: 39 | location /media/video/ 40 | { 41 | location ~ ^/media(.+)$ 42 | { 43 | root /root9550; 44 | try_files /1$1 45 | /2$1 46 | /3$1 47 | /4$1 48 | =404; 49 | } 50 | } 51 | 52 | 53 | Использование alias 54 | ======================================= 55 | # Задаёт замену для указанного location'а. Например, при такой конфигурации 56 | 57 | location /i/ { 58 | alias /data/w3/images/; 59 | } 60 | 61 | # на запрос “/i/top.gif” будет отдан файл /data/w3/images/top.gif. 62 | 63 | # В значении параметра путь можно использовать переменные, кроме $document_root и $realpath_root. 64 | 65 | # Если alias используется внутри location'а, заданного регулярным выражением, 66 | # то регулярное выражение должно содержать выделения, а сам alias — ссылки на 67 | # эти выделения (0.7.40), например: 68 | location ~ ^/users/(.+\.(?:gif|jpe?g|png))$ { 69 | alias /data/w3/images/$1; 70 | } 71 | 72 | 73 | # Если location и последняя часть значения директивы совпадают: 74 | location /images/ { 75 | alias /data/w3/images/; 76 | } 77 | 78 | # то лучше воспользоваться директивой root: 79 | location /images/ { 80 | root /data/w3; 81 | } 82 | 83 | Поиск файлов в одной папке: 84 | ======================================= 85 | Запрос: http://server.com/screen/pic.jpg 86 | искать в /content/screen/pic.jpg 87 | 88 | location /screen/ 89 | { 90 | location ~ ^/screen(.+).jpg$ 91 | { 92 | root /content/screen; 93 | try_files $1.jpg =404; 94 | } 95 | } 96 | 97 | либо так, если не обязательно .jpg 98 | location /screen/ 99 | { 100 | root /content; 101 | break; 102 | } 103 | 104 | 105 | 106 | ======================================= 107 | 108 | Пример настройки прокстирования на другой сервер: 109 | Допустим нам надо чтобы все запросы на server.com шли через домен other.biz (другой сервер) 110 | ------------------------------------------------------- 111 | server 112 | { 113 | server_name other.biz; 114 | 115 | access_log off; 116 | error_log off; 117 | 118 | location / 119 | { 120 | proxy_pass http://server.com; 121 | proxy_redirect http://server.com/ /; 122 | proxy_set_header Host server.com; 123 | 124 | # Если надо передавать реальный IP то: 125 | # proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 126 | # proxy_set_header X-Real-IP $remote_addr; 127 | # proxy_set_header X-Front-Real-IP $remote_addr; 128 | } 129 | } 130 | 131 | Nginx и memcached 132 | ------------------------------------------------------ 133 | Самый простой пример - проверяем есть ли страница в кеше и, если есть, достаем из кеша, иначе - делаем запрос к бекенду. 134 | server { 135 | location / { 136 | set $memcached_key $uri; # Ключ для проверки в memcached 137 | memcached_pass 127.0.0.1:11211; # Параметры подключения 138 | default_type text/html; # Заголовок по умолчанию 139 | error_page 404 = @fallback; # 404 - данные в кеше не найдены 140 | } 141 | 142 | location @fallback { 143 | proxy_pass backend; # Бекенд 144 | } 145 | } -------------------------------------------------------------------------------- /docs/nginx - Installation on Windows.txt: -------------------------------------------------------------------------------- 1 | Установка и настройка nginx на Windows (как сервис) 2 | ============================================================ 3 | 4 | Скачиваем последнюю версию отсюда http://nginx.org/ru/download.html (на данный момент nginx/Windows-1.1.17) 5 | Распаковываем архив в папку D:\Work\tools\web\ (должно получится D:\Work\tools\web\nginx-1.1.17) 6 | 7 | Запуск как сервис 8 | ===================== 9 | Для этого нам понадобится обёртка winsw, она позволяет запускать любое консольное приложение Windows как сервис. 10 | Официальный сайт: http://kenai.com/projects/winsw/pages/Home 11 | 12 | Создаём папку 13 | mkdir D:\Work\tools\web\nginx-1.1.17\nginx_service 14 | cd D:\Work\tools\web\nginx-1.1.17\nginx_service 15 | 16 | Скачиваеь winsw-1.9-bin.exe с официального сайта либо с https://raw.github.com/rsajob/docs/master/tools/winsw/winsw-1.9-bin.exe 17 | Перемиеновываем winsw-1.9-bin.exe в тпштч_service.exe и ложим его созданную папку (D:\Work\tools\web\nginx-1.1.17\nginx_service) 18 | 19 | В этой же папке создаём файл nginx_service.xml со следующим содержанием 20 | 21 | nginx 22 | nginx 23 | nginx 24 | D:\Work\tools\web\nginx-1.1.17\nginx.exe 25 | D:\Work\tools\web\nginx-1.1.17\nginx_service\ 26 | roll 27 | 28 | -p D:\Work\tools\web\nginx-1.1.17 29 | -p D:\Work\tools\web\nginx-1.1.17 -s quit 30 | 31 | 32 | Под админом вызываем: 33 | nginx_service.exe install 34 | nginx_service.exe start 35 | 36 | В случае если сервис не стартанул смотрим ошибки в логе 37 | D:\Work\tools\web\php_5.3.10\php-cgi_service\php-cgi_service.wrapper.log 38 | 39 | Другие комманды работы с winsw: 40 | To install a service, run myapp.exe install 41 | To start a service, run myapp.exe start 42 | To stop a service, run myapp.exe stop 43 | To restart a service, run myapp.exe restart 44 | To uninstall a service, run myapp.exe uninstall 45 | Доп инфа http://kenai.com/projects/winsw/pages/Home 46 | 47 | Конфигурирование 48 | ========================= 49 | 50 | Переименовываем файл conf\nginx.conf в conf\nginx.conf.old 51 | Создаём новый файл conf\nginx.conf со следующим содержанием: 52 | 53 | #----------------------------------------------------------------- 54 | worker_processes 1; 55 | 56 | events { 57 | worker_connections 1024; 58 | } 59 | 60 | http { 61 | include mime.types; 62 | default_type application/octet-stream; 63 | 64 | sendfile on; 65 | tcp_nopush on; 66 | tcp_nodelay on; 67 | 68 | client_header_timeout 10m; 69 | client_body_timeout 10m; 70 | send_timeout 10m; 71 | 72 | keepalive_timeout 0; 73 | 74 | include fastcgi.conf; 75 | include D:/Work/projects/web/sites-conf/*.conf; 76 | } 77 | #----------------------------------------------------------------- 78 | 79 | В папке D:/Work/projects/web/sites-conf/ в данном случае должны лежать 80 | файлы конфигурации (*.conf) конкртеных виртульных серверов 81 | 82 | Пример конфигурации обычного php сервера 83 | --------------------------------------------------- 84 | server { 85 | listen 80; 86 | server_name myserver.com; 87 | charset utf-8; 88 | index index.php index.html; 89 | root /path/to/myserver.com/htdocs; 90 | 91 | access_log "/path/to/logs/nginx.access.log"; 92 | error_log "/path/to/logs/nginx.error.log" notice; 93 | 94 | # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 95 | # 96 | location ~ \.php$ { 97 | root /home/fantom/smsfun.am/htdocs; 98 | fastcgi_pass 127.0.0.1:9000; 99 | fastcgi_index index.php; 100 | fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name; 101 | include fastcgi_params; 102 | } 103 | 104 | 105 | location ~* ^.+\.(jpg|jpeg|gif|png|ico|css|js|bmp)$ 106 | { 107 | access_log off; 108 | error_log off; 109 | } 110 | } 111 | 112 | 113 | Пример конфигурации сервера на основе limb3 114 | --------------------------------------------------- 115 | server { 116 | listen 80; 117 | server_name myserver.com; 118 | index index.php; 119 | root "D:/Work/projects/web/myserver.com/www"; 120 | 121 | access_log D:/Work/projects/web/_nginx_logs/myserver.com.info.access.log; 122 | error_log D:/Work/projects/web/_nginx_logs/myserver.com.info.error.log notice; 123 | 124 | location / 125 | { 126 | if (!-e $request_filename) 127 | { 128 | rewrite ^(.*)$ /index.php last; 129 | } 130 | } 131 | 132 | location ~ \.php$ 133 | { 134 | fastcgi_pass 127.0.0.1:9000; 135 | fastcgi_index index.php; 136 | fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name; 137 | include fastcgi_params; 138 | } 139 | } 140 | -------------------------------------------------------------------------------- /docs/nginx - Restart on CentOS.txt: -------------------------------------------------------------------------------- 1 | 2 | Запуск: 3 | /usr/local/nginx/sbin/nginx 4 | /usr/sbin/nginx 5 | 6 | Проверка процессов: 7 | ps ax -o pid,ppid,user,%cpu,vsz,wchan,command | egrep '(nginx|PID)' 8 | 9 | Грохнуть процесс: 10 | /bin/kill -s HUP 198 11 | 12 | перезагрузка ngnix: 13 | 14 | сначала nginx -t 15 | если на конфиг не ругается - то killall -HUP nginx 16 | 17 | 18 | http://www.cyberciti.biz/faq/freebsd-start-stop-restart-nginx-webserver/ 19 | http://www.opennet.ru/base/net/nginx_ipb.txt.html 20 | -------------------------------------------------------------------------------- /docs/nginx_vhost_log_rotate: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | DATE=`date +"%Y-%m-%d"` 4 | 5 | for site in `ls /home/srv/sites-conf | sed -rn 's/(.+?)\.conf/\1/ p'`; do 6 | for log in `sed -nr 's/^.+(access|error)_log\s+(.+?);/\2/g p' /home/srv/sites-conf/${site}.conf`; do 7 | if [ -f $log ]; then 8 | mkdir -p /home/srv/logs_backup/${DATE}/$site 9 | mv $log /home/srv/logs_backup/${DATE}/$site 10 | fi 11 | done 12 | done 13 | 14 | chown srv:srv -R /home/srv/logs_backup 15 | 16 | [ ! -f /var/run/nginx.pid ] || kill -USR1 `cat /var/run/nginx.pid` 17 | 18 | for dir in `ls /home/srv/logs_backup | head -n-10`; do 19 | rm -rf /home/srv/logs_backup/$dir 20 | done 21 | 22 | # Cron Log rotate 23 | # vim /etc/crontab 24 | # 30 5 * * * root /root/bin/nginx_vhost_log_rotate: 25 | -------------------------------------------------------------------------------- /docs/php-fpm - Restart on CentOS.txt: -------------------------------------------------------------------------------- 1 | 2 | # edit php.ini 3 | vi /etc/php.ini 4 | 5 | # restart 6 | /sbin/service php-fpm restart -------------------------------------------------------------------------------- /docs/server Centos 7 docker.txt: -------------------------------------------------------------------------------- 1 | # Смотрим версию CentOS 2 | cat /etc/redhat-release 3 | 4 | # Добавляем пользователя и группу 5 | usermod -G webmaster srv 6 | 7 | # To create the docker group and add your user: 8 | usermod -aG docker srv 9 | cat /etc/group | grep docker 10 | 11 | # Устанавливаем docker как написано тут https://docs.docker.com/engine/installation/linux/centos/ 12 | # Перелогиниваемся, затем docker должен работать без sudo, проверяем 13 | docker run hello-world 14 | 15 | # Добавляем свой ssh ключ на сервер netlug.biz чтобы git мог забирать данные оттуда 16 | ssh-keygen -C srv@centos7 17 | ssh-copy-id -i ~/.ssh/id_rsa.pub srv@netlug.biz 18 | 19 | # Проект gameclub 20 | 21 | # Перебрасываем базу 22 | # ну том серере где беза делаем дамп: 23 | mongodump --db gameclub_apps 24 | 25 | # на сервере куда надо закинуть её в контенер: 26 | mkdir ~/mongo_dump 27 | scp -r srv@netlug.biz:~/mongo_dump/dump ~/mongo_dump 28 | docker exec mongo1 mkdir /tmp/mongo_dump 29 | docker cp ~/mongo_dump mongo1:/tmp 30 | # Заходим в контейнер и делаем restore 31 | docker exec -it mongo1 bash 32 | mongorestore --db gameclub_apps /tmp/mongo_dump/dump/gameclub_apps 33 | 34 | # Готовим проект 35 | 36 | mkdir ~/projects/game-club 37 | git clone srv@git.netlug.biz:git/gameclub/slim.gameclub.git . 38 | 39 | # Сборка 40 | docker run --rm -v `pwd`:/app -v /home/srv/.ssh:/root/.ssh composer/composer install 41 | docker run --rm -v `pwd`:/data -v $HOME/.node-cache:/cache leanlabs/npm-builder npm install 42 | docker run --rm -v `pwd`:/data -v $HOME/.node-cache:/cache leanlabs/npm-builder bower install --allow-root 43 | docker run --rm -v `pwd`:/data -v $HOME/.node-cache:/cache leanlabs/npm-builder grunt 44 | 45 | 46 | Полезности по Docker 47 | 48 | * [named volumes — правильная работа с томами](https://blog.amartynov.ru/docker-named-volumes/) 49 | * [Образы и контейнеры Docker в картинках (Хабр)](https://habrahabr.ru/post/272145/) 50 | * [Неплохое видео про основы Docker](https://www.youtube.com/watch?v=e5HZ2UJDKFo) 51 | * Почитать [Сборка docker контейнеров с помощью docker контейнеров(Хабр)](https://habrahabr.ru/post/263083/) 52 | * [350+ полезных ресурсов, книг и инструментов для работы с Docker](https://habrahabr.ru/company/1cloud/blog/275015/) 53 | * [Один из вариантов workflow docker](https://grikdotnet.gitbooks.io/docker-myths-and-receipts/content/) 54 | 55 | ### Удалить все образы 56 | ``` 57 | docker rmi -f `docker images | awk '{ print $3; }'` 58 | ``` 59 | ### Список всех контенеров 60 | ``` 61 | docker ps -a 62 | ``` 63 | ### Список всех образов 64 | ``` 65 | docker images 66 | ``` 67 | 68 | ### Удалить все контенеры 69 | ``` 70 | docker rm `docker ps --no-trunc -aq` 71 | ``` 72 | ### Инструмент для визуального отображения среды Weave Scope 73 | ``` 74 | $ wget -O scope https://github.com/weaveworks/scope/releases/download/latest_release/scope 75 | $ chmod +x scope 76 | $ scope launch 77 | ``` 78 | ### Dockeriu 79 | ``` 80 | docker run -d -p 9000:9000 --privileged \ 81 | -v /var/run/docker.sock:/var/run/docker.sock \ 82 | --name=dockerui dockerui/dockerui 83 | ``` 84 | ### Запуск системы мониторинга cAdvisor на CentOS 7: 85 | ``` 86 | docker run \ 87 | --privileged=true \ 88 | --volume=/:/rootfs:ro \ 89 | --volume=/var/run:/var/run:rw \ 90 | --volume=/sys:/sys:ro \ 91 | --volume=/var/lib/docker/:/var/lib/docker:ro \ 92 | --volume=/sys/fs/cgroup/:/cgroup:ro \ 93 | --publish=8080:8080 \ 94 | --detach=true \ 95 | --name=cadvisor \ 96 | google/cadvisor:latest 97 | ``` 98 | 99 | Хооший FAQ по docker: https://xakep.ru/2015/06/04/docker-faq/ 100 | -------------------------------------------------------------------------------- /docs/server Centos 7 docker.txt.save: -------------------------------------------------------------------------------- 1 | # Смотрим версию CentOS 2 | cat /etc/redhat-release 3 | 4 | # Добавляем пользователя и группу 5 | usermod -G webmaster srv 6 | 7 | # To create the docker group and add your user: 8 | usermod -aG docker srv 9 | cat /etc/group | grep docker 10 | 11 | # Устанавливаем docker как написано тут https://docs.docker.com/engine/installation/linux/centos/ 12 | # Перелогиниваемся, затем docker должен работать без sudo, проверяем 13 | docker run hello-world 14 | 15 | # Добавляем свой ssh ключ на сервер netlug.biz чтобы git мог забирать данные оттуда 16 | ssh-keygen -C srv@centos7 17 | ssh-copy-id -i ~/.ssh/id_rsa.pub srv@netlug.biz 18 | 19 | # Проект gameclub 20 | 21 | # Перебрасываем базу 22 | # ну том серере где беза делаем дамп: 23 | mongodump --db gameclub_apps 24 | 25 | # на сервере куда надо закинуть её в контенер: 26 | mkdir ~/mongo_dump 27 | scp -r srv@netlug.biz:~/mongo_dump/dump ~/mongo_dump 28 | docker exec mongo1 mkdir /tmp/mongo_dump 29 | docker cp ~/mongo_dump mongo1:/tmp 30 | # Заходим в контейнер и делаем restore 31 | docker exec -it mongo1 bash 32 | mongorestore --db gameclub_apps /tmp/mongo_dump/dump/gameclub_apps 33 | 34 | # Готовим проект 35 | 36 | mkdir ~/projects/game-club 37 | git clone srv@git.netlug.biz:git/gameclub/slim.gameclub.git . 38 | 39 | # Сборка 40 | docker run --rm -v `pwd`:/app -v /home/srv/.ssh:/root/.ssh composer/composer install 41 | docker run --rm -v `pwd`:/data -v $HOME/.node-cache:/cache leanlabs/npm-builder npm install 42 | docker run --rm -v `pwd`:/data -v $HOME/.node-cache:/cache leanlabs/npm-builder bower install --allow-root 43 | docker run --rm -v `pwd`:/data -v $HOME/.node-cache:/cache leanlabs/npm-builder grunt 44 | # Сборка 45 | docker run --rm -v `pwd`:/app -v /home/srv/.ssh:/root/.ssh composer/composer install 46 | docker run --rm -v `pwd`:/data -v $HOME/.node-cache:/cache leanlabs/npm-builder npm install 47 | docker run --rm -v `pwd`:/data -v $HOME/.node-cache:/cache leanlabs/npm-builder bower install --allow-root 48 | docker run --rm -v `pwd`:/data -v $HOME/.node-cache:/cache leanlabs/npm-builder grunt 49 | 50 | 51 | Полезности по Docker 52 | 53 | * [named volumes — правильная работа с томами](https://blog.amartynov.ru/docker-named-volumes/) 54 | * [Образы и контейнеры Docker в картинках (Хабр)](https://habrahabr.ru/post/272145/) 55 | * [Неплохое видео про основы Docker](https://www.youtube.com/watch?v=e5HZ2UJDKFo) 56 | * Почитать [Сборка docker контейнеров с помощью docker контейнеров(Хабр)](https://habrahabr.ru/post/263083/) 57 | * [350+ полезных ресурсов, книг и инструментов для работы с Docker](https://habrahabr.ru/company/1cloud/blog/275015/) 58 | * [Один из вариантов workflow docker](https://grikdotnet.gitbooks.io/docker-myths-and-receipts/content/) 59 | 60 | ### Удалить все образы 61 | ``` 62 | docker rmi -f `docker images | awk '{ print $3; }'` 63 | ``` 64 | ### Список всех контенеров 65 | ``` 66 | docker ps -a 67 | ``` 68 | ### Список всех образов 69 | ``` 70 | docker images 71 | ``` 72 | 73 | ### Удалить все контенеры 74 | ``` 75 | docker rm `docker ps --no-trunc -aq` 76 | ``` 77 | ### Инструмент для визуального отображения среды Weave Scope 78 | ``` 79 | $ wget -O scope https://github.com/weaveworks/scope/releases/download/latest_release/scope 80 | $ chmod +x scope 81 | $ scope launch 82 | ``` 83 | ### Dockeriu 84 | ``` 85 | docker run -d -p 9000:9000 --privileged \ 86 | -v /var/run/docker.sock:/var/run/docker.sock \ 87 | --name=dockerui dockerui/dockerui 88 | ``` 89 | ### Запуск системы мониторинга cAdvisor на CentOS 7: 90 | ``` 91 | docker run \ 92 | --privileged=true \ 93 | --volume=/:/rootfs:ro \ 94 | --volume=/var/run:/var/run:rw \ 95 | --volume=/sys:/sys:ro \ 96 | --volume=/var/lib/docker/:/var/lib/docker:ro \ 97 | --volume=/sys/fs/cgroup/:/cgroup:ro \ 98 | --publish=8080:8080 \ 99 | --detach=true \ 100 | --name=cadvisor \ 101 | google/cadvisor:latest 102 | ``` 103 | 104 | Хооший FAQ по docker: https://xakep.ru/2015/06/04/docker-faq/ 105 | -------------------------------------------------------------------------------- /docs/sshfs - mount a remote filesystems with SSH on MacOS.txt: -------------------------------------------------------------------------------- 1 | В краце делатm так: 2 | 1) Разблокировать root 3 | 2) поставить XCode из AppStore 4 | 3) поставить MacPort 5 | 4) через терминал при помощи MacPort (под root) установить пакет sshfs (# port install sshfs) 6 | 5) монтирование выполняется такой коммандой(набирать в терминале): sshfs user@serverhost.com: ~/local_dir -oaute_cashe,reconnect,volname=serverhost.com -------------------------------------------------------------------------------- /tools/winsw/nginx_service.xml: -------------------------------------------------------------------------------- 1 | 2 | nginx 3 | nginx 4 | nginx 5 | D:\Work\tools\web\nginx-1.1.17\nginx.exe 6 | D:\Work\tools\web\nginx-1.1.17\nginx_service\ 7 | roll 8 | 9 | -p D:\Work\tools\web\nginx-1.1.17 10 | -p D:\Work\tools\web\nginx-1.1.17 -s quit 11 | 12 | -------------------------------------------------------------------------------- /tools/winsw/php-cgi_service.xml: -------------------------------------------------------------------------------- 1 | 2 | php-cgir 3 | php-cgi 4 | Server php-cgi on port 9000 5 | D:\Work\tools\web\php_5.3.10\php-cgi.exe 6 | D:\Work\tools\web\php_5.3.10\php-cgi_service\ 7 | roll 8 | 9 | 10 | -b 127.0.0.1:9000 -c D:\Work\tools\web\php_5.3.10\php.ini 11 | 12 | -------------------------------------------------------------------------------- /tools/winsw/readme.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rsajob/docs/8e84624ad5bd436174af141902481ab5c61f61fb/tools/winsw/readme.txt -------------------------------------------------------------------------------- /tools/winsw/winsw-1.9-bin.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rsajob/docs/8e84624ad5bd436174af141902481ab5c61f61fb/tools/winsw/winsw-1.9-bin.exe --------------------------------------------------------------------------------