Previous Entry Share Next Entry
Установка АСИОУ 7.2 под Linux Ubuntu
пингвин
rsi76
Это переработанная инструкция, которая была к версии 7.0 (спасибо создателям, поскольку больше под линукс инструкций не было). Была благополучно извлечена из запасников и переработана немного.

Базовая система

Используется Linux Ubuntu. Первый раз ставилась на Ubuntu Server 11.10, потом на 13.04

Установку проводим под пользователем root, либо через su, либо можно запустить shell рута командой sudo i

Система должна иметь доступ в Интернет для установки пакетов (по умолчанию настройки без использования прокси-сервера)

Установка и настройка системных компонентов

Установка

Установка утилиты для управления запуском и остановом фоновых сервисов:

apt-get install sysvinit-utils

Установка языка программирования Python:

apt-get install python2.6 python-setuptools

python 2.6 является устаревшим, имеет смысл поставить версию посвежее, например 3, хотя с ней не пробовал - работает сейчас все на 2.7

Установка фреймворка Django, библиотеки TreeBeard и XLWT. Асиоу ориентирована на старую версию django (1.3.1 работает), и с новыми может не работать (с 1.6.1 не работает точно на данный момент). Вот так выглядит ошибка запуска:


root@server:/home/asiou/www# /usr/loacl/sbin/django_fcgi start asiou
bash: /usr/loacl/sbin/django_fcgi: Нет такого файла или каталога
root@server:/home/asiou/www# /usr/local/sbin/django_fcgi start asiou
Start FastCGI server for 'asiou': Traceback (most recent call last):
File "/home/asiou/www/asiou/manage.py", line 2, in <module>
from django.core.management import execute_manager
ImportError: cannot import name execute_manager
FAIL

А все потому, что execute_manager является устаревшим.
Поэтому, качаем версию 1.3.1 в архиве (https://pypi.python.org/pypi/Django/1.3.1 ), и устанавливаем коммандой

easy_install Django-1.3.1.tar.gz

ставим дополнительные компоненты:

easy_install django-treebeard xlwt

Установка библиотеки MySQLdb для подключения к СУБД MySQL из языка Python:

apt-get install python-mysqldb

Установка библиотеки flup реализующей протокол FastCGI для Django:

apt-get install python-flup

Установка библиотеки pylzma для работы с архивами:

apt-get install python-lzma

Бывает, что несмотря на то, что библиотека вроде установлена – система ругается на отсутствие модуля py7zlib. Можно установить
через easy_install, но предварительно надо поставить python-dev:

apt-get install python-dev
easy_install pylzma

Установка СУБД MySQL:

apt-get install mysql-common mysql-client mysql-server
service mysql start

при установке будет предложено выбрать и  ввести пароль пользователя root для mysql (это не системный root!)

Установка веб-сервера nginx:

apt-get install nginx

Настройка

Описывается только настройка того ПО для которого она требуется. Нам потребуется настроить MySQL и nginx.

Настройка MySQL

Для настройки MySQL необходимо открыть в любом текстовом редакторе файл /etc/mysq/my.cnf и в блок [mysqld] добавить следующие опции:
[Дополнительные опции]
default-storage-engine=InnoDB
bind-address=127.0.0.1

Данные настройки включают использование в MySQL хранилища InnoDB по умолчанию, как наиболее надежного и возможность подключаться к серверу БД только с локальной машины для большей безопасности (напрямую с сервером БД будет работать только АСИОУ).
Теперь необходимо изменить пароль для привилегированного пользователя root (можно не делать) и создать нового пользователя asiou для подключения к СУБД MySQL и собственно саму базу данных. Делается это следующими командами (NEWPASSWORD — это ваш новый пароль для суперпользователя СУБД root, запишите или запомните его!!!):

mysqladmin -u root password NEWPASSWORD
mysql -u root -p
Password:
mysql> CREATE USER 'asiou'@'localhost' IDENTIFIED BY 'PASSWORD';
mysql> GRANT ALL PRIVILEGES ON asiou.* TO 'asiou'@'localhost';
mysql> CREATE DATABASE IF NOT EXISTS asiou CHARACTER SET utf8;

PASSWORD — это ваш пароль для пользователя MySQL asiou, запомните или запишите его, он будет использоваться при установке АСИОУ!

Настройка nginx

В каталоге /etc/nginx создайте файл fastcgi_params_django следующего содержания:
[содержимое файла]
fastcgi_param PATH_INFO $fastcgi_script_name;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param QUERY_STRING $query_string;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;
fastcgi_pass_header Authorization;
fastcgi_intercept_errors off;
fastcgi_param GATEWAY_INTERFACE CGI/1.1;
fastcgi_param SERVER_SOFTWARE nginx;
fastcgi_param REMOTE_ADDR $remote_addr;
fastcgi_param REMOTE_PORT $remote_port;
fastcgi_param SERVER_ADDR $server_addr;
fastcgi_param SERVER_PORT $server_port;
fastcgi_param SERVER_NAME $server_name;
fastcgi_param SERVER_PROTOCOL $server_protocol;
# PHP only, required if PHP was built with --enable-force-cgi-redirect
fastcgi_param REDIRECT_STATUS 200;


Делаем его исполнимым:

chmod +x /etc/nginx/fastcgi_params_djang

В каталоге /etc/nginx/sites-available создайте файл asiou следующего содержания:
[Содержимое файла]
# Виртуальный хост для АСИОУ
server {
listen 80;
server_name asiou.local;
location / {
fastcgi_pass unix:/var/tmp/django-fcgi-asiou.sock;
include fastcgi_params_django;
}
location /static {
root /home/asiou/www;
}
location /media {
alias /usr/local/lib/python2.6/dist-packages/django/contrib/admin/media;
}
}


В строчке
alias /usr/local/lib/python2.6/dist-packages/django/contrib/admin/media;
убедитесь, что это путь к вашему python. Версия 2.6. является устаревшей, возможно была установлена более новая (например, 3) и путь изменился.
Опция server_name может содержать список доменных имен или IP адресов разделенных пробелом. Если в вашей сети используется система DNS, то вы можете указать здесь доменное имя, если нет, то необходимо указать IP адрес сервера в локальной сети.
АСИОУ будет доступно либо по адресу http://<ваше_доменное_имя>, либо по http://<IP_адрес_сервера>

После этого необходимо выполнить следующие команды для применения конфигурации и запуска nginx:
переходим в каталог /etc/nginx/sites-enabled:

cd /etc/nginx/sites-enabled
ln -s /etc/nginx/sites-available/asiou asiou
service nginx start


системные компоненты установлены.

Установка и настройка АСИОУ

Настройка и запуск программного комплекса АСИОУ 7.0

Создадим пользователя asiou в системе и зададим ему пароль, а так же создадим необходимые каталоги. Это пользователь от имени которого будет работать программный комплекс АСИОУ 7.0 в операционной системе.

useradd -d /home/asiou -m asiou
passwd asiou
passwd: пароль успешно обновлён
mkdir /home/asiou/logs
mkdir /home/asiou/www
chown asiou:asiou /home/asiou/logs /home/asiou/www
usermod -G asiou www-data


Для работы АСИОУ 7.0, требуется запуск FastCGI сервера через библиотеку flup, которую мы устанавливали ранее. Протокол FastCGI является связующим звеном между программным комплексом АСИОУ 7.0 и веб-сервером nginx.

Для запуска сервера нам потребуется специально оформленный shell-скрипт. Содержимое необходимо сохранить в файл /usr/local/sbin/django_fcgi

[Содержимое файла]

#!/bin/bash

##################################################
# Script for automate runnong FastCGI servers
# for any Django project.
# Author: Sergey V. Sokolov <sokol@zavolga.net>
# Config: /etc/djfcgi.conf
##################################################
# Vars
CONFIG="/etc/djfcgi.conf"
# Check config
if [ ! -f "$CONFIG" ]; then
echo "Cconfig file '$CONFIG' not found!"
exit 1
fi
# Include config
. $CONFIG
if [ "$PROJECTS" = "" ]; then
echo "No configured projects!"
exit 1
fi
# For all projects
for proj in $PROJECTS; do
if [ "$2" != "" -a "$2" != "$proj" ]; then
continue;
fi
path=$(eval "echo \$${proj}_path");
user=$(eval "echo \$${proj}_user");
if [ "$path" = "" ]; then
echo "Empty path for project '$proj'!"
exit 1
fi
if [ ! -d "$path" ]; then
echo "Not directory '$path'!"
exit 1
fi
if [ ! -f "$path/manage.py" ]; then
echo "It not Django project '$path'!"
exit 1
fi
# Set variables
pid="$PID_DIR/$proj.pid"
socket="$SOCKET_DIR/django-fcgi-$proj.sock"
maxrequests=$(eval "echo \$${proj}_maxrequests");
maxrequests=${maxrequests:-$D_MAX_REQUESTS}
minspare=$(eval "echo \$${proj}_minspare");
minspare=${minspare:-$D_MIN_SPARE}
maxspare=$(eval "echo \$${proj}_maxspare");
maxspare=${maxspare:-$D_MAX_SPARE}
maxchildren=$(eval "echo \$${proj}_maxchildren");
maxchildren=${maxchildren:-$D_MAX_CHILD}
debug=$(eval "echo \$${proj}_debug");
debug=${debug:-$D_DEBUG}
outlog=$(eval "echo \$${proj}_outlog");
outlog=${outlog}
errlog=$(eval "echo \$${proj}_errlog");
errlog=${errlog}
# Start or stop  
if [ "$1" = "start" ]; then
echo -n "Start FastCGI server for '$proj': "  
# Generate command
CMD="$PYTHON $path/manage.py runfcgi workdir='$path' socket='$socket' pidfile='$pid' debug=$debug"
CMD="$CMD maxrequests=$maxrequests minspare=$minspare maxspare=$maxspare maxchildren=$maxchildren"
if [ "$outlog" != "" ]; then
CMD="$CMD outlog='$outlog'"
fi
if [ "$errlog" != "" ]; then
CMD="$CMD errlog='$errlog'"
fi
# Run
su --command="$CMD" "$user"
if [ "$?" = "0" ]; then
sleep 1
chmod 666 $socket
echo "OK"
else
echo "FAIL"
fi
elif [ "$1" = "stop" ]; then
echo -n "Stop FastCGI server for '$proj': "
if [ -f "$pid" ]; then
kill `cat $pid`
sleep 3
if [ "$?" = "0" ]; then
rm $socket >/dev/null 2>&1
rm $pid >/dev/null 2>&1
echo "OK"
else
echo "FAIL"
fi
else
echo "NOT RUNNING"
fi
else
echo "Usage: $0 (start|stop) [<project>]"
exit 1
fi
done
exit 0


Делаем его исполнимым:

chmod +x /usr/local/sbin/django_fcgi

Далее необходимо создать служебный каталог и назначить для него права на запись:

mkdir /var/run/django-fcgi
chmod 777 /var/run/django-fcgi

Для работы скрипта описанного выше необходимо создать конфигурационный файл /etc/djfcgi.conf следующего содержания:

[Содержимое файла]
# Config file for django FastCGI server
# Common vars
PYTHON="python"
PID_DIR="/var/run/django-fcgi"
SOCKET_DIR="/var/tmp"
# Default values
D_MAX_REQUESTS=0
D_MIN_SPARE=3
D_MAX_SPARE=5
D_MAX_CHILD=10
D_DEBUG=false
# Project names
PROJECTS="asiou"
# Project asiou
asiou_path="/home/asiou/www/asiou"
asiou_user="asiou"
asiou_maxchildren=25
asiou_debug=true
asiou_outlog="/home/asiou/logs/asiou.outlog.log"
asiou_errlog="/home/asiou/logs/asiou.errlog.log"

Распаковка архива с программным комплексом АСИОУ 7.0.

Архив asiou-7.0.tar.gz необходимо распаковать в каталог /home/asiou/www следующей командой (предполагается что архив находится в текущем каталоге):

tar zxvf asiou-7.0.tar.gz -C /home/asiou/www
chown -R asiou:asiou /home/asiou/www
chmod 777 /home/asiou/www/temp

Следует обратить внимание, что на данном этапе потребуется пароль пользователя MySQL asiou, который был указан на предыдущих этапах.

Если файл db.ini отсутствует в /home/asiou/www/asiou, создаем со следующим содержимым:

[Содержимое файла]

[database]

DATABASE_ENGINE: django.db.backends.mysql

DATABASE_HOST: localhost

DATABASE_NAME: asiou

DATABASE_USER: asiou

DATABASE_PASSWORD:asiou

DATABASE_PORT:


Указывая своего пользователя к базе данных и его пароль

Файл db.version в том же каталоге должен задержать версию текущей базы данных.

Далее необходимо инициализировать базу данных и заполнить ее начальными значениями

Инициализация базы данных

Переходим в каталог /home/asiou/www/asiou и создаем чистую базу данных:

python  manage.py  initdb  - -line-by-line

переходим в каталог /home/asiou/www и запускаем подключение к mysql:

mysql  -u  root  -p

(после этого вводится ПАРОЛЬ для доступа к MySQL, как правило, если не придумывали оригинальный свой, это root)

use  asiou;
set  names  utf8;
\.  sql/kladr.sql

В командной строке выполнить команды:

cd  /home/asiou/www/asiou
python  manage.py  updatedb  - -line-by-line

Инициализацию данных по учреждению необходимо выполнить обязательно.
Иначе при попытке запуска АСИОУ будет выдана ошибка
Инициализация данных по учреждению выполняется в процессе конвертации данных из csv-файлов (которые получены экспортом из 6 версии и  располагаются в папке CONV) с помощью команды convert.

cd /home/asiou/www/asiou
python manage.py convert

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

После этого можно запустить ПО АСИОУ 7.0, создать административного пользователя АСИОУ и выполнить первый вход в систему. Для этого выполним команду запуска сервера АСИОУ:

django_fcgi start asiou
Start FastCGI server for 'asiou': OK

Для автоматического запуска АСИОУ при старте сервера прописываем в файле /etc/rc.local
[Содержимое файла]
sleep 10
mkdir /var/run/django-fcgi
chmod 777 /var/run/django-fcgi
/usr/local/sbin/django_fcgi start asiou

Перед строчкой
Exit 0
Дело в том, что каталог /var/run каждый раз очищается при загрузке системы, поэтому создаем при загрузке в нем django-fcgi

Вход в АСИОУ 7.0

После запуска можно открыть браузер (Firefox, Opera, Chrome или Internet Explorer) и набрать в адресной строке адрес http://asiou.local. Именно это имя было указано в настройках nginx. Если у вас отсутствует имя сервера или система DNS, то можно зайти в систему используя IP-адрес, например если адрес компьютера на котором установлено ПО АСИОУ 7.0 192.168.1.10, то заходить следует по адресу  http://192.168.1.10. При этом если компьютер находится в локальной сети, то по данному адресу можно войти в систему с любого комьютера!!!

Для остановки АСИОУ 7.0 необходимо выполнить команду:

django_fcgi stop asiou
Stop FastCGI server for 'asiou': OK

Для создания административного пользователя необходимо выполнить следующие команды:

cd /home/asiou/www/asiou/
python manage.py createsuperuser
Username: admin
E-mail address: admin@---.ru <--- здесь нужно указать E-mail школы
Password:
Password (again):
Superuser created successfully.

После создания пользователя под ним можно войти как в административную часть по адресу http://asiou.local/admin, так и в основную систему по адресу указанному ранее.

Обновление до версии 7.2

Заходим в каталог с файлами sqlparse-0.1.6-py2.6.egg, odict-1.5.1-py2.6.egg

Выполняем команду
easy_install sqlparse-0.1.6-py2.6.egg
easy_install odict-1.5.1-py2.6.egg
Заходим в каталог xlwt-0.7.2, выполняем команду
python setup.py install
Таким же образом устанавливаем xlrd-0.9.2, xlutils-1.6.0, django-piston

Далее обновляем остальные компоненты:
cd /home/asiou/www/asiou
python  manage.py  user_profile
python manage.py  update71
python  manage.py  re_sequence

Если при экспорте в интернет-дневник получаем ошибку:

Ошибка в формате XML-файла "expmark-Current.xml" : [Errno 13] Permission denied: '/home/asiou/www/temp/expmark-Current.xml'

то необходимо выставить на каталог /home/asiou/www/temp/ права 777:

chmod -R 777 /home/asiou/www/temp/


Система готова к работе

  • 1

дополнения

ЭТОТ ПОСТ СОДЕРЖИТ НОВУЮ ИНФОРМАЦИЮ, ПОЛУЧАЕМУЮ В ПРОЦЕССЕ ЭКСПЛУАТАЦИИ

1) Рекомендуется быть осторожнее в автоматическими обновлениями. Особенно django. На версиях кроме 1.3 все это может и не работать.

2) обновление 20150113, версия 7.3.5
требуется установка xhtml2pdf. ставится без проблем, но версия reportlab 3.1
а в xhtml2pdf требуется более 2.1 версия и проверяется уж совершенно для меня диким способом:
if not (reportlab.Version[0] == "2" and reportlab.Version[2] >= "1"):
тем самым, подходит любая версия из ветки 2, а у нас 3, поэтому считается, что она не подходит.
проблема описана хорошо здесь: http://stackoverflow.com/questions/22075485/xhtml2pdf-importerror-django
и пока это единственное решение, что реализовал.

вот эти строчки в файле /usr/local/lib/python2.7/dist-packages/xhtml2pdf-0.0.5-py2.7.egg/xhtml2pdf/util.py (у вас он может быть по другому пути):
if not (reportlab.Version[0] == "2" and reportlab.Version[2] >= "1"):
raise ImportError("Reportlab Version 2.1+ is needed!")

REPORTLAB22 = (reportlab.Version[0] == "2" and reportlab.Version[2] >= "2")

меняем на
_reportlab_version = tuple(map(int, reportlab.Version.split('.')))
if _reportlab_version < (2,1):
raise ImportError("Reportlab Version 2.1+ is needed!")

REPORTLAB22 = _reportlab_version >= (2, 2)

ВНИМАНИЕ НА ВЫРАВНИВАНИЕ СТРОК!!! Питон к этому чувствителен, в отличие от других языков программирования. Все строки от края страницы, "raise ImportError" на 4 пробела от края.

Edited at 2015-01-21 01:13 pm (UTC)

Иногда, при обновлении базы данных, получается следующая ошибка:
[code]
=============================
Error: Incorrect string value: '\xD0\xA1\xD0\xB5\xD1\x80...' for column 'name' at row 1
=============================
Traceback:
File "/home/asiou/www/asiou/../asiou/common/util.py", line 2014, in execute_sql_file
cursor.execute(line.decode(settings.FILE_CHARSET))
File "/usr/local/lib/python2.7/dist-packages/Django-1.3.1-py2.7.egg/django/db/backends/util.py", line 34, in execute
return self.cursor.execute(sql, params)
File "/usr/local/lib/python2.7/dist-packages/Django-1.3.1-py2.7.egg/django/db/backends/mysql/base.py", line 86, in execute
return self.cursor.execute(query, args)
File "/usr/lib/pymodules/python2.7/MySQLdb/cursors.py", line 176, in execute
if not self._defer_warnings: self._warning_check()
File "/usr/lib/pymodules/python2.7/MySQLdb/cursors.py", line 92, in _warning_check
warn(w[-1], self.Warning, 3)
=============================
SQL: INSERT INTO asiou_p_params VALUES (1, NULL, 1, 1, 600, 'Серия', 'p_id_card_series', '', 'Серия документа', 0, 0, 0, '', 0), (2, NU...

Execute file '20150225' - FAILED[/code]

Причем, в винде все нормально.
Ошибка связана с неверным типом базы данных, который выставился по умолчанию, а именно - collation.
можно посмотреть запросом: SHOW COLLATION;
Вариантов поменять это, думаю, много. Я просто выставил в свойствах базы данных collation utf8_general_ci.

оптимизация mysql

# Размер буфера ключей, можно ставить до 25% от общего объема ОЗУ, распределяется между всеми потоками. Для 4Гб ОЗУ мы ставим 256М
key_buffer_size = 256M

# Кэширование открытых ранее таблиц, 512 значение для 4Гб ОЗУ, при увеличении можно
# так же увеличивать (при необходимости, зависит от размеров кол-ва БД и кол-ва таблиц)
table_open_cache = 512

# От этих параметров зависит будет временная таблица создана в памяти или будет записана на диск. При превышении указанного размера, будет записана на диск.
# Иногда при больших запросах создается временная таблица для подготовки и сортировки результата
tmp_table_size = 64M
max_heap_table_size = 64M

# Буферы чтения, сортировки, значения для 4 Гб ОЗУ. При увеличении ОЗУ увеливать
# необходимо не пропорционально, например при 12 Гб ОЗУ, можно увеличить в 2 раза.
sort_buffer_size = 4M
read_buffer_size = 4M
read_rnd_buffer_size = 8M
myisam_sort_buffer_size = 64M

# Важный параметр, буфер для движка InnoDB, ставить надо максимально возможное значение, иp рекомендаций 50-80% доступного ОЗУ
innodb_buffer_pool_size = 1664M

  • 1
?

Log in

No account? Create an account