Эта статью типа «быстрый старт». На входе требуются элементарные знания программирования под линукс на c++ и 15 минут свободного времени. На выходе вы получаете готовый, простой, высокопроизводительный wiki сайт, который распространяется автором по лицензии GPL. Прочитав/поковыряв его исходники вы запросто сможете начать писать на c++ для web! |
Эта статью типа «быстрый старт». На входе требуются элементарные знания программирования под линукс на c++ и 15 минут свободного времени. На выходе вы получаете готовый, простой, высокопроизводительный wiki сайт, который распространяется автором по лицензии GPL. Прочитав/поковыряв его исходники вы запросто сможете начать писать на c++ для web и помоч автору фреймфорка. |
|
- [Оглавление](#) |
- [Репозитории](#repos) |
- [Зависимости](#deps) |
- [Cppcms](#cppcms) |
- [Проблемы](#problems) |
- [Dbixx](#dbixx) |
- [Wikipp](#wikipp) |
- [Конфигурация](#conf) |
- [Mysql](#mysql) |
- [Nginx](#nginx) |
- [Spawn-daemon](#spawn) |
- [Тестирование](#test) |
- [Fcgi-debug](#fcgi-debug) |
|
Многие тщательно критикуют любые разработки под web на c++, потому что просто не имеют достаточно опыта, чтобы развернуть сайт на cppcms. Выполняйте следующие команды в указанной последовательности и у вас все получится! |
|
|
Подымаем боевой стабильный кирпич debian-5.0.7/5.0.6 прямо по default настройкам |
Если для разработки — лучше на virtualbox 4.0, иначе — сразу на сервере |
|
Заходим под рутом и поехали: |
|
## <span id="repos"></span>Репозитории |
|
nano /etc/apt/sources.list |
|
deb volatile.debian.org/debian-volatile lenny/volatile main |
deb-src volatile.debian.org/debian-volatile lenny/volatile main |
|
#lenny |
deb ftp.ru.debian.org/debian/ lenny main |
deb-src ftp.ru.debian.org/debian/ lenny main |
deb security.debian.org/ lenny/updates main |
deb-src security.debian.org/ lenny/updates main |
|
#testing |
deb ftp.ru.debian.org/debian/ testing main |
deb-src ftp.ru.debian.org/debian/ testing main |
deb security.debian.org/ testing/updates main |
deb-src security.debian.org/ testing/updates main |
|
#unstable |
deb ftp.ru.debian.org/debian/ unstable main |
deb-src 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.0.7/cppcms-0.0.7.tar.gz |
wget garr.dl.sourceforge.net/project/cppcms/cppcms/0.99.5%20-%20beta%205/cppcms-0.99.5.tar.bz2 |
tar -xzvf cppcms-0.0.7.tar.gz |
cd cppcms-0.0.7 |
|
svn co 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.0.7 |
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 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 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; |
} |
} |
|
Все разъяснения в [статье игоря сысоева](http://sysoev.ru/nginx/docs/http/ngx_http_fastcgi_module.html) особое внимание «syntax: fastcgi_split_path_info regex» |