Sergey Karpenko

Linux, Web... И все, что с ними связано.

6 вещей, которые нужно знать о Salesforce1

Почетная традиция писателей всех мастей - это использование “<Вставьте любое количество> вещей о …” для написания заголовков. Я также поддерживаю эту традицию, и в честь последнего релиза Salesforce1 платформы и приложений, вот мой список из 6 вещей, которые нужно знать о Salesforce1. Я ограничил себя тем, что может вызвать интерес у разработчиков, занимающихся кастомизацией SF1 приложений.

KDE 4. Network Management Disabled

Сегодня выключился свет и батарея на ноутбуке не дождалась его включения.

После включения не поднялся wifi. По клику на knetworkmanager выскакивало сообщение Network management disabled

Решение нашлось на форуме suse.

1
rm /var/lib/NetworkManager/NetworkManager.state

и перезагрузка. После этого wifi поднялся. Вот такая странность.

Сервер потокового вещания IceCast2 на Debian Lenny

Что такое IceCast? Это сервер потокового вещания (в миру — сетевое радио), поддерживающий mp3 и ogg форматы.

Захотелось попробовать насколько сложно поднять такой сервер, который будет заниматься ретрансляцией потока с серверов радиостанций.

Mercurial. Установка и настройка на Debian Lenny

Как всегда очень просто:

1
sudo aptitude install mercurial

UPD: с течением времени оказалось что установка через aptitude неэффективна (версия очень старая в пакетах), лучше ставить так (squeeze):

1
2
sudo aptitude install python-pip
sudo pip install mercurial

После этого уже можно работать. Дальше можно создать место для хранения репозиториев и сделать к ним доступ через веб.

Настраиваем веб

Шаг 1 — FastCgi скрипт

/var/hg/hgwebdir.py

1
2
3
4
5
6
7
8
9
10
#!/usr/bin/env python

import sys
from mercurial.hgweb.hgwebdir_mod import hgwebdir
from mercurial.hgweb.request import wsgiapplication
from flup.server.fcgi import WSGIServer

def make_web_app():
   return hgwebdir('/var/hg/hgweb.config')
WSGIServer(wsgiapplication(make_web_app)).run()

Шаг 2- конфиг для FastCgi скрипта

/var/hg/hgweb.config

1
2
3
4
5
6
7
[collections]
/var/hg/repos = /var/hg/repos
[web]
style = gitweb
baseurl =
allow_push = *
push_ssl = false

Шаг 3 — VirtualHost для nginх

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
server {
    server_name mercurial;
    listen 443;
    listen 80;
    ssl on;
    ssl_certificate /etc/nginx/ssl/cert.pem;
    ssl_certificate_key /etc/nginx/ssl/cert.key;

    location / {
        auth_basic "closed site"
        auth_basic_user_file  /var/hg/.passwd;
        fastcgi_param PATH_INFO $uri;
        fastcgi_param SERVER_NAME $server_name;
        fastcgi_pass 127.0.0.1:9001;
        fastcgi_param HTTPS on;
        include /etc/nginx/fastcgi_params;
    }
}

Шаг 4 — Запуск fastcgi скрипта

/etc/init.d/init-hgwebdir

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#!/bin/bash
SCRIPT="/usr/bin/spawn-fcgi -a 127.0.0.1 -p 9001 -f /var/hg/hgwebdir.py -C 3"
KILL_SCRIPT="kill -9 `ps aux | grep Sl | grep 'python /var/hg/hgwebdir.py' | awk '{print $2}'`"
RETVAL=0
case "$1" in
    start)
      $SCRIPT $SCRIPT_ARGS
      RETVAL=$?
  ;;
    stop)
      $KILL_SCRIPT
      RETVAL=$?
  ;;
    restart)
      $KILL_SCRIPT
      sleep 1s
      $SCRIPT $SCRIPT_ARGS
      RETVAL=$?
  ;;
    *)
      echo "Usage: init-hgwebdir {start|stop|restart}"
      exit 1
  ;;
esac
exit $RETVAL

Шаг 5 — регистрация скрипта для запуска при старте системы

1
update-rc.d init-hgwebdir defaults

по хорошему еще нужно в скрипт добавить шапку, подобную этой

1
2
3
4
5
6
7
8
9
### BEGIN INIT INFO
# Provides:          scriptname
# Required-Start:    $remote_fs $syslog
# Required-Stop:     $remote_fs $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Start daemon at boot time
# Description:       Enable service provided by daemon.
### END INIT INFO

но добавило и так, только выдало предупрежедние.

Создание репозиториев

1
2
cd /var/hg/repos
hg init myrepo

в repos/myrepo/.hg/hgrc прописать по вкусу и требованиям нужные параметры, например:

1
2
3
4
5
[web]
allow_push = *
push_ssl = false
contact = your@email.com
description = Your Open Source Project

Далее добаляем пользователей в /var/hg/.passwd и спокойно работаем через http.

Настройка Nginx & Php на Vps

Небольшая заметка о том как было повышено быстродействие этой связки.

Поставлено из пакетов и настроено было по многочисленным мануалам из нета.

  • nginx 0.6.32
  • php5-cgi (5.2.6)
  • spawn-php от lighttpd, плюс был написан init-fastcgi
  • xcache

Работало по началу нормально, особого опыта настройки nginx не было и казалось что все настроено хорошо, благо ничего не падало, все риквесты отдавались. Вордпресс показывал 1-2 запроса в секунду

Но в следствие, того что появились еще мелкие сайты и блога стало 2, и блог Игоря начал набирать обороты, в день больше 50 человек с множеством просмотров, да и на мой кто-то заходит не смотря на то что статьи писать некогда и нет настроения

В общем ВПС стал регулярно падать (нехватка памяти — съедалось все 256мб), так как тариф дешевый — панели нет, ребут надо просить письмом (когда заканчивалась память ssh переставало пускать ) — это стало проблемой — сайты лежали по 3-4 часа, пока я узнаю про то что лежит, пока саппорт отреагирует… Пришлось заняться настройкой.

Первый делом постопал сервисы, оказалось памяти минимальная система съедает 16мб, далее последовательно позапускалось все (и mysql в том числе) кроме nginx и php-fastcgi, памяти израсходовалось порядка 58мб. После запуска nginx, буквально через полчаса памяти опять не было, но благо была открыта консоль. Пришлось делать killall php5-cgi, рестарт ни nginx ни init-fastcgi не срабатывал из-за нехватки памяти.

Точно я так и не локализовал причину, но основная идея — выделил слишком много ресурсов для пхп, они съедали память не успевая ее освободить. Пересмотрел все конфигах что могли как то поменять ситуацию. Основные изменения: установил в 1000 количество запросов после которых пхп-процесс будет перезапущен, плюс оставил всего 1 воркер и ограничение в 3 процесса для php-cgi.

WP теперь отдает 25 (после доп манипуляций — Requests per second: 29.78 [#/sec] (mean) ) запросов в секунду, что в 20 раз быстрее.

Еще в xcache включил оптимайзер.

Для сайтов на kohanaphp критичным оказался stack size. Вручную его можно изменить посредством ulimit -s 1024 Но в таком случае, после ребута значение вернется в 8096. Для того чтобы изменить его «навсегда» достаточно в файл /etc/security/limits.conf добавить строчку

1
* soft stack 1024

Главная страница сайта на кохане 2.3.0 с 2 запросами в БД выдает Requests per second: 297.93 [#/sec] (mean). Я честно говоря поражен таким результатом. Правда аналогичные сайты на более новых версиях 2.3.4 и 3.0 RC 2.1 выдают 160-170

Изменения

Файл Параметр Было Стало
/etc/php5/cgi/php.ini memory_limit 128Mb 64Mb
xcache.ini xcache.optimizer Off On
/etc/nginx/nginx.conf worker_processes 2 1
/etc/nginx/nginx.conf worker_priority -5
/etc/nginx/nginx.conf keepalive_timeout 65 0
/etc/nginx/nginx.conf tcp_nopush Off On
/etc/nginx/nginx.conf gzip_comp_level 9 3

Также ограничил количество php процессов в скриптах запуска 3-мя и установил PHP_FCGI_MAX_REQUESTS = 1000

Конфиги и скрипты для запуска выложу полными:

/etc/nginx/nginx.conf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
user www-data;

worker_processes  1;
worker_priority -5;

error_log  /var/log/nginx/error.log;
pid        /var/run/nginx.pid;

events {
worker_connections  1024;
}

http {
include       /etc/nginx/mime.types;
default_type  application/octet-stream;

access_log  /var/log/nginx/access.log;

sendfile        on;
tcp_nopush     on;

keepalive_timeout  0;
#keepalive_timeout  15;
tcp_nodelay        on;

gzip  on;
gzip_comp_level 3;
gzip_types text/html text/css application/x-javascript;
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}

/etc/init.d/init-fastcgi

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#!/bin/bash

PHP_FCGI_MAX_REQUESTS=1000
PHP_FCGI_CHILDREN=3

PHP_SCRIPT=/usr/bin/php-fastcgi
RETVAL=0
case "$1" in
start)
$PHP_SCRIPT
RETVAL=$?
;;
stop)
killall -9 php5-cgi
RETVAL=$?
;;
restart)
killall -9 php5-cgi
$PHP_SCRIPT
RETVAL=$?
;;
*)
echo "Usage: init-fastcgi {start|stop|restart}"
exit 1
;;
esac
exit $RETVAL

/usr/bin/php-fastcgi

1
/usr/bin/spawn-fcgi -a 127.0.0.1 -p 9000 -u www-data -g www-data -f /usr/bin/php5-cgi -C 3