Главная  /  Правка версии 40  /  Правка версии 41  /   /  Область пользователей

Отличия "Расширенная инструкция по установке wikipp" вер. 40 сравн. вер. 41

Содержимое:

Эта статья типа «быстрый старт». На входе требуются элементарные знания программирования под линукс на c++ и 15 минут свободного времени. На выходе вы получаете готовый, простой, высокопроизводительный wiki сайт, который распространяется автором по лицензии GPL. Прочитав/поковыряв его исходники вы запросто сможете начать писать на c++ для web и помочь автору фреймфорка.
Многие тщательно критикуют любые разработки под web на c++, потому что просто не имеют достаточно опыта, чтобы развернуть сайт на cppcms. Выполняйте следующие команды в указанной последовательности и у вас все получится!
Подымаем боевой стабильный кирпич debian-5.0.7/5.0.6 прямо по default настройкам
Если для разработки — лучше на virtualbox 4.0, иначе — сразу на сервере
Заходим под рутом и поехали:
## <span id="repos"></span>Репозитории
nano /etc/apt/sources.list
deb http://volatile.debian.org/debian-volatile lenny/volatile main
deb-src http://volatile.debian.org/debian-volatile lenny/volatile main
#lenny
deb http://ftp.ru.debian.org/debian/ lenny main
deb-src http://ftp.ru.debian.org/debian/ lenny main
deb http://security.debian.org/ lenny/updates main
deb-src http://security.debian.org/ lenny/updates main
#testing
deb http://ftp.ru.debian.org/debian/ testing main
deb-src http://ftp.ru.debian.org/debian/ testing main
deb http://security.debian.org/ testing/updates main
deb-src http://security.debian.org/ testing/updates main
#unstable
deb http://ftp.ru.debian.org/debian/ unstable main
deb-src http://ftp.ru.debian.org/debian/ unstable main
nano /etc/apt/preferences
Package: *
Pin: release a=stable
Pin-Priority: 700
Package: *
Pin: release a=testing
Pin-Priority: 650
Package: *
Pin: release a=unstable
Pin-Priority: 600
ни в коем случае не переводите всю систему на testing/unstable - проблем не оберетесь!
## <span id="deps"></span>Зависимости
apt-get update
apt-get install -t testing checkinstall subversion build-essential make autoconf autotools-dev automake libtool libcurl4-openssl-dev pkg-config libcgicc5-dev libboost-dev libboost-iostreams1.42-dev libboost-signals1.42-dev libasio-dev python libfcgi-dev libmm-dev libgcrypt11-dev libsqlite3-dev gettext libdbd-sqlite3 libdbd-mysql libdbi0-dev
## <span id="cppcms"></span>Cppcms
wget garr.dl.sourceforge.net/project/cppcms/cppcms/0.99.5%20-%20beta%205/cppcms-0.99.5.tar.bz2
tar -jxvf cppcms-0.99.5.tar.bz2
cd cppcms-0.99.5
svn co http://cppcms.svn.sourceforge.net/svnroot/cppcms/framework/branches/maintance_0_0_x/ cppcms
cd cppcms
./autogen.sh (не обращаем внимания на Consider и required)
./autogen.sh (не обращаем внимания на Consider)
./configure
## <span id="problems"></span>Проблемы
### checking for fastcgi/fcgiapp.h… no
А заголовочный fcgiapp.h лежит в /usr/include.
Не нужно спешить делать символические ссылки!
cd
apt-get -t testing source libfcgi-dev
ls -la libfcgi-2.4.0/include
cd cppcms-0.99.5
egrep -R "fcgiapp\.h|fcgi_config\.h|fcgi_config_x86\.h|fcgi_stdio\.h|fcgiapp\.h|fcgimisc\.h|fcgio\.h|fcgios\.h" * > find_log.txt
nano find_log.txt
Найдено только в cppcms/fcgi.h и fcgi.h
Вот кто во всем виноват:
#ifdef EN_FASTCGI_LONG_PATH
#include <fastcgi/fcgio.h>
#include <fastcgi/fcgiapp.h>
#else
#include <fcgio.h>
#include <fcgiapp.h>
#endif
Ложная тревога. Собираем!
cd cppcms
make
### X--tag=CXX: command not found
Дело в том что libtool пытается ВЫПОЛНИТЬ параметры которые начинаются с X. Надо бы эту «фичу» временно отключить!
export echo=echo
make
make install
export -n echo
cd
## <span id="dbixx"></span>Dbixx
svn co http://cppcms.svn.sourceforge.net/svnroot/cppcms/dbixx/trunk/ dbixx
cd dbixx
./autogen.sh (не обращаем внимания на Consider)
./configure
make
make install
cd
## <span id="wikipp"></span>Wikipp
svn co http://cppcms.svn.sourceforge.net/svnroot/cppcms/wikipp/trunk wikipp
cd wikipp
./autogen.sh (не обращаем внимания на Consider и required)
./autogen.sh (не обращаем внимания на Consider)
./configure
make
make install
Зальем какой-никакой дизайн и syntax highlighter
mkdir /var/www/
mkdir /var/www/wikipp
mkdir /var/www/wikipp/media
cd templates
cp -R sh /var/www/wikipp/media/
cp *.css /var/www/wikipp/media/
cd /var/www/wikipp/
wget ru.wikipedia.org/favicon.ico
Почистим
cd /var/www/wikipp/media/
rm -rf `find . -name *.svn`
Дадим все права для www-data
chown -R www-data /var/www/wikipp
cd
## <span id="conf"></span>Конфигурация
cppcms_make_key
Скопируйте то что он скажет
nano /usr/local/etc/wikipp/config.txt
# WikiPP
wikipp.script="/wiki"
wikipp.media="/media"
wikipp.syntax_highlighter="/media/sh"
wikipp.disable_registration=0
# CppCMS System Settings
# Server
#server.api="scgi"
server.api="fastcgi"
server.mod="thread"
server.threads = 5
server.buffer = 100
#server.socket = "/tmp/wikipp.sock"
#server.socket = "0.0.0.0:8080"
session.expire = "renew"
session.timeout = 2592000 # 30 days
session.location = "client"
session.cookies_prefix="wikipp"
session.cookies_key = "сюда вставить полученный ключ от cppcms_make_key"
# Localization
#locale.dir = "./locale"
locale.dir = "/usr/local/share/locale"
locale.lang_list = { "he" "en" "ru" "pl" }
locale.lang_default = "ru"
locale.domain_list = { "wikipp" }
# gzip - default disabled
gzip.enable=1
gzip.level=1
# Cache
cache.backend="fork"
cache.limit=1000
cache.memsize = 8192
# Templates location
#templates.dirs = { "./templates/.libs/" }
templates.dirs = { "/usr/local/lib/wikipp" }
# templates.ext = ".dll"
# Uncomment above for cygwin platform
dbixx.driver="mysql"
#dbixx.driver="sqlite3"
#dbixx.driver="postgresql"
mysql.dbname="wikipp"
mysql.username="root"
mysql.password="придумать пароль для mysql"
#sqlite3.dbname="wikipp.db"
#sqlite3.sqlite3_dbdir="./db/"
#postgresql.dbname="cppcms"
#postgresql.username="artik"
## <span id="mysql"></span>Mysql
apt-get -t testing install mysql-server
mysql -u root -p -e "create database wikipp"
mysql -u root -p wikipp </usr/local/share/wikipp/mysql.sql
## <span id="nginx"></span>Nginx
apt-get -t unstable install nginx-full
nano /etc/nginx/sites-enabled/default
server {
listen 80;
root /var/www/wikipp;
server_name localhost;
#server_name 123.45.67.89;
location / {
autoindex off;
}
location /wiki {
autoindex off;
include fastcgi_params;
fastcgi_pass unix:/tmp/wikipp.sock;
fastcgi_split_path_info ^(/wiki)(.*)$;
fastcgi_param SCRIPT_NAME /var/www/wikipp/wiki;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
location /media {
access_log off;
expires 30d;
}
}
Все разъяснения в [статье игоря сысоева](http://sysoev.ru/nginx/docs/http/ngx_http_fastcgi_module.html) особое внимание «syntax: fastcgi_split_path_info regex»
/etc/init.d/nginx restart
## <span id="spawn"></span>Spawn-daemon
nano /etc/init.d/wikipp-spawn-daemon
#!/bin/bash
#!/bin/bash
RETVAL=0
BASE="/home/andrew/wikipp"
function start {
if [ ! -f /usr/bin/spawn-fcgi ]
then
echo "install spawn-fcgi first"
exit 1
fi
if [ ! -f /home/andrew/wikipp/wikipp ]
if [ ! -f $BASE/wikipp ]
then
echo "build wikipp first"
exit 2
fi
if [ ! -f /home/andrew/wikipp/config.txt ]
if [ ! -f $BASE/config.txt ]
then
echo "config.txt has been lost"
exit 3
fi
if [ -f /var/run/wikipp.pid ]
then
echo "wikipp has been already started"
else
eval "/usr/bin/spawn-fcgi -P /var/run/wikipp.pid -u www-data -g www-data -s /tmp/wikipp.sock -- /home/andrew/wikipp/wikipp -c /home/andrew/wikipp/config.txt"
eval "/usr/bin/spawn-fcgi -P /var/run/wikipp.pid -u www-data -g www-data -s /tmp/wikipp.sock -- $BASE/wikipp -c $BASE/config.txt"
fi
}
function stop {
if [ -f /var/run/wikipp.pid ]
then
eval "kill -9 `cat /var/run/wikipp.pid`"
eval "rm /var/run/wikipp.pid"
echo "stopped"
else
echo "wikipp has been already stopped";
fi
}
case "$1" in
start)
start
RETVAL=$?
;;
stop)
stop
RETVAL=$?
;;
restart)
stop
start
RETVAL=$?
;;
*)
echo "Usage: wikipp-spawn-daemon {start|stop|restart}"
exit 1
;;
esac
exit $RETVAL
spawn-fcgi
apt-get -t testing install spawn-fcgi
cd /etc/init.d
chmod +x wikipp-spawn-daemon
update-rc.d wikipp-spawn-daemon defaults
/etc/init.d/wikipp-spawn-daemon start
Получаем pid
ls -la /tmp
Убеждаемся что сокет /tmp/wikipp.sock создался от юзера www-data
ps ax
Убеждаемся что в процессах сидит один "/usr/local/sbin/wikipp -c /usr/local/etc/wikipp/config.txt" и его pid совпадает с вышеполученным
Все! для обычных людей дело сделано. Заходим на [http://server_name/wiki](http://server_name/wiki)
## <span id="test"></span>Тестирование
Добавьте какую нибудь статью
Для удобства можете поднять ftp и заливать картинки в media/images
Откройте сайт в опере/мозилле и соберите все сетевые запросы с некоторой страницы из dragonfly/firebug в один файл:
nano siege-urls.txt
http://host-name/wikipp/en/page/main
http://host-name/media/style.css
http://host-name/media/sh/Scripts/shCore.js
http://host-name/media/sh/Scripts/shBrushCpp.js
http://host-name/media/sh/Styles/SyntaxHighlighter.css
http://host-name/media/style-ltr.css
http://host-name/media/images/image_0.jpg
http://host-name/media/images/image_1.jpg
http://host-name/media/images/image_2.jpg
http://host-name/favicon.ico
Мне повезло. Атакующий vps был в одном датацентре что и атакуемый. Погрешности мизерные!
1) 350 пользователей каждый обращается по 20 раз с перерывом в 15 секунд
siege -f siege-urls.txt -i -d15 -r20 -c350
атакуемый потреблял:
Проц (одно ядро хеон 5220):
до теста 0.17%
во время теста 1.0% — 4.3%. среднее 3.3%
Оперативка:
до теста 44.65 мб
во время теста 45 — 48 мб. среднее 46.8 мб
Availability: 100.00 %
Elapsed time: 198.46 secs
Data transferred: 296.01 MB
Response time: 0.00 secs
Transaction rate: 35.27 trans/sec
Throughput: 1.49 MB/sec
Concurrency: 0.06
Successful transactions: 7000
Failed transactions: 0
Longest transaction: 0.12
Shortest transaction: 0.00
2) Попытаемся набрать побольше Transaction rate и Throughput:
siege -f siege-urls.txt -i -d0 -r20 -c381
Больше 381 юзеров не могу. (оперативки на атакующем 256 мб)
Проц:
до теста 0.17%
во время теста 5.0% — 23.3%. но среднее 8.33%
Оперативка:
до теста 44.65 мб
во время теста 45 — 51.6 мб. среднее 50 мб
Availability: 100.00 %
Elapsed time: 18.50 secs
Data transferred: 323.62 MB
Response time: 0.09 secs
Transaction rate: 411.89 trans/sec
Throughput: 17.49 MB/sec
Concurrency: 36.24
Successful transactions: 7620
Failed transactions: 0
Longest transaction: 3.15
Shortest transaction: 0.00
Утечек нет. после теста — 44.65 мб
## <span id="fcgi-debug"></span>Fcgi-debug
Если вы хотите прилепить на фронтенд нечто отличное от nginx и у вас ничего не получается — вот вам лом против которого нет приема
apt-get -t testing install ragel libev-dev libglib2.0-dev cmake
git clone git://stbuehler.de/fcgi-debug.git
cd fcgi-debug
cmake -DCMAKE_INSTALL_PREFIX="/usr" -DCMAKE_VERBOSE_MAKEFILE=ON
make
make install
cd
/etc/init.d/wikipp-spawn-daemon stop
открываем отдельную ssh сессию и запускаем
/usr/bin/spawn-fcgi -u www-data -g www-data -s /tmp/wikipp.sock -n -- /usr/bin/fcgi-debug /usr/local/sbin/wikipp -c /usr/local/etc/wikipp/config.txt
Обращаем внимание что не указыван pid и добавлен -n (no fork mode)
В браузере заходим на http://server_name/wiki. В консоли вылезут полностью все параметры fastcgi протокола использованные в запросе/ответе
ctrl+c закрываем ssh сессию и включаем обычный режим работы
/etc/init.d/wikipp-spawn-daemon start

Проект

CppCMS является основой веб-разработки для выполнения ресурсоемких приложений.

Размещение

SourceForge.net Logo

Поддержать проект

CppCMS needs You


Навигация

Главная страница


Валидация CSS | Валидация XHTML 1.0