Установка и настройка web сервера на Debian 8 + Apache + php + mysql

Автор waw555, 26 мая 2015, 13:55:28

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

waw555

Здравствуйте, уважаемые форумчане!

Имею типичную проблему с установкой web сервера на debian 8 + apache + php + mysql, описываю порядок действий и суть проблемы, надеюсь на вашу помощь и рекомендации.

Железо кратко:
Процессор: Intel(R) Pentium(R) CPU G2020 @ 2.90GHz
Оперативная память: 4 GB
Материнская плата: Asus H61M-K

Программное обеспечение кратко:
OS Debian 8 amd64
Apache: apt-get install apache2
PHP: apt-get install php5
MySQL: apt-get install mysql

Установка ос со всеми параметрами по умолчанию, кроме региональных и языковых, разбивка диска 80GB - все файлы в одном месте (Для сейчас хватит, нужно разобраться с проблемой), из софта галочка была установлена только на стандартный набор утилит и ssh, остальное все, типа сервер печати и web server отключено.

Установка apache + php + mysql через apt-get install без каких либо изменений, только в mysql пароль root.

Изменение настроек сети (В файле etc/network/interfaces) в соответствии с моими условиями (Типовые наверно), gateway 192.168.0.1 netmask 255.255.255.0 address 192.168.0.2 доступ из вне есть, как по ip так и по домену.

Перезапустил сервер (На всякий)

Зашел по IP зашел по домену, апач радует глаз стандартным приветствием.

Загружаю в папку скрипт сайта (в моем случае это crm система yetiforce)

Запускаю установку, прохожу все этапы, и нажимаю завершить и вот тут то проблема и вырисовывается, сайт подвисает и браузер выдает ошибку данные не получены. Жду 2-5 минут, захожу в систему все работает.

На сайте скрипта смотрю рекомендуемые параметры, типа max_execution_time и т. п., меняю их в php.ini, перезапускаю apache, захожу на проблемную страницу в crm, в моем случае это редактирование профиля, нажимаю изменить, потом сохранить и получаю тот же результат Данные не получены.

Смотрю логи, вроде все нормально, и у apache и у mysql, но замечаю, что лог mysql меняется в размере.

Запускаю еще раз процесс изменения профиля в crm, жду когда браузер покажет Данные не получены, смотрю логи mysql, а он меняется, то есть получается apache уже отработал и сказал что все выполнил, а mysql еще выполняет запросы, как бы мне победить данную проблему, с чего начать копать? У разработчика системы на тестовом сайте, такой проблемы нет.

Заранее благодарю за помощь и потраченное время!
  •  

ioann.sys

Попробуйте взять у разработчика его /etc/mysql/my.cnf, точнее, его параметры такие, как размер буфера и т. п.
Возможно, в апаче не задействованы жизненно-важные модули, которые можно задействовать с помощью a2enmod.
Debian GNU/Linux jessie/sid on notebook ASUS N750JK
  •  

endru


waw555

Да, и параметры все писал как в документации

Предыдущая установка, как раз и была на debian 7.8, все остальное так же по дефолту плюс пожелания разработчика.

Результат тот же, может машина плохая?
  •  

endru

Цитата: waw555 от 26 мая 2015, 15:07:45Результат тот же, может машина плохая?
проверяй жесткий диск и озу.

waw555

#5
Жесткие диски менял, даже на ssd пробовал, результат тот же, оперативку менял, пробовал вместо 4 гигов на 2 ставить, тоже самое, даже не знаю куда копать.

Да, кстате, на арендованом хостинге, тоже самое

Сообщение объединено: 26 мая 2015, 15:20:35

В целом система работает быстро и адекватно, затык только в одном месте, видимо там запросы большие.
  •  

endru

Цитата: waw555 от 26 мая 2015, 15:18:29видимо там запросы большие.
включи отслеживание медленных запросов в mysql и посмотри. возможно дело только в конфигах

waw555

Я вроде нашел проблему, только вод не специалист в php и mysql, может кто глянет мои догадки.

Вот лог mysql, в котором видно, что удаляется и вставляется одно и то же

150526 10:14:01    38 Query DELETE FROM vtiger_profile2field WHERE profileid='1' AND tabid='6' AND fieldid=1160
   38 Query INSERT INTO vtiger_profile2field(profileid, tabid, fieldid, visible, readonly) VALUES ('1','6',1160,0,0)
   38 Query DELETE FROM vtiger_profile2field WHERE profileid='1' AND tabid='6' AND fieldid=1502
   38 Query INSERT INTO vtiger_profile2field(profileid, tabid, fieldid, visible, readonly) VALUES ('1','6',1502,0,0)
   38 Query DELETE FROM vtiger_profile2field WHERE profileid='1' AND tabid='6' AND fieldid=12
   38 Query INSERT INTO vtiger_profile2field(profileid, tabid, fieldid, visible, readonly) VALUES ('1','6',12,0,0)
   38 Query DELETE FROM vtiger_profile2field WHERE profileid='1' AND tabid='6' AND fieldid=970
   38 Query INSERT INTO vtiger_profile2field(profileid, tabid, fieldid, visible, readonly) VALUES ('1','6',970,0,0)
   38 Query DELETE FROM vtiger_profile2field WHERE profileid='1' AND tabid='6' AND fieldid=17
   38 Query INSERT INTO vtiger_profile2field(profileid, tabid, fieldid, visible, readonly) VALUES ('1','6',17,0,0)
   38 Query DELETE FROM vtiger_profile2field WHERE profileid='1' AND tabid='6' AND fieldid=972
   38 Query INSERT INTO vtiger_profile2field(profileid, tabid, fieldid, visible, readonly) VALUES ('1','6',972,0,0)
   38 Query DELETE FROM vtiger_profile2field WHERE profileid='1' AND tabid='6' AND fieldid=15
   38 Query INSERT INTO vtiger_profile2field(profileid, tabid, fieldid, visible, readonly) VALUES ('1','6',15,0,0)
   38 Query DELETE FROM vtiger_profile2field WHERE profileid='1' AND tabid='6' AND fieldid=971
   38 Query INSERT INTO vtiger_profile2field(profileid, tabid, fieldid, visible, readonly) VALUES ('1','6',971,0,0)
   38 Query DELETE FROM vtiger_profile2field WHERE profileid='1' AND tabid='6' AND fieldid=1738
   38 Query INSERT INTO vtiger_profile2field(profileid, tabid, fieldid, visible, readonly) VALUES ('1','6',1738,0,0)
   38 Query DELETE FROM vtiger_profile2field WHERE profileid='1' AND tabid='6' AND fieldid=36
   38 Query INSERT INTO vtiger_profile2field(profileid, tabid, fieldid, visible, readonly) VALUES ('1','6',36,0,0)
   38 Query DELETE FROM vtiger_profile2field WHERE profileid='1' AND tabid='6' AND fieldid=1331
   38 Query INSERT INTO vtiger_profile2field(profileid, tabid, fieldid, visible, readonly) VALUES ('1','6',1331,0,0)
   38 Query DELETE FROM vtiger_profile2field WHERE profileid='1' AND tabid='6' AND fieldid=1364
   38 Query INSERT INTO vtiger_profile2field(profileid, tabid, fieldid, visible, readonly) VALUES ('1','6',1364,0,0)
   38 Query DELETE FROM vtiger_profile2field WHERE profileid='1' AND tabid='6' AND fieldid=1369


Вот код который отвечает за это


if(is_array($fieldPermissions)) {
foreach($fieldPermissions as $fieldId => $stateValue) {
$db->pquery('DELETE FROM vtiger_profile2field WHERE profileid=? AND tabid=? AND fieldid=?',
array($profileId, $tabId, $fieldId));
if($stateValue == Settings_Profiles_Record_Model::PROFILE_FIELD_INACTIVE) {
$visible = Settings_Profiles_Module_Model::FIELD_INACTIVE;
$readOnly = Settings_Profiles_Module_Model::IS_PERMITTED_VALUE;
} elseif($stateValue == Settings_Profiles_Record_Model::PROFILE_FIELD_READONLY) {
$visible = Settings_Profiles_Module_Model::FIELD_ACTIVE;
$readOnly = Settings_Profiles_Module_Model::FIELD_READONLY;
} else {
$visible = Settings_Profiles_Module_Model::FIELD_ACTIVE;
$readOnly = Settings_Profiles_Module_Model::FIELD_READWRITE;
}
$sql = 'INSERT INTO vtiger_profile2field(profileid, tabid, fieldid, visible, readonly) VALUES (?,?,?,?,?)';
$params = array($profileId, $tabId, $fieldId, $visible, $readOnly);
$db->pquery($sql, $params);
}
}


Закомментировал DELETE и заменил INSERT на UPDATE

if(is_array($fieldPermissions)) {
foreach($fieldPermissions as $fieldId => $stateValue) {
/*$db->pquery('DELETE FROM vtiger_profile2field WHERE profileid=? AND tabid=? AND fieldid=?',
array($profileId, $tabId, $fieldId));*/
if($stateValue == Settings_Profiles_Record_Model::PROFILE_FIELD_INACTIVE) {
$visible = Settings_Profiles_Module_Model::FIELD_INACTIVE;
$readOnly = Settings_Profiles_Module_Model::IS_PERMITTED_VALUE;
} elseif($stateValue == Settings_Profiles_Record_Model::PROFILE_FIELD_READONLY) {
$visible = Settings_Profiles_Module_Model::FIELD_ACTIVE;
$readOnly = Settings_Profiles_Module_Model::FIELD_READONLY;
} else {
$visible = Settings_Profiles_Module_Model::FIELD_ACTIVE;
$readOnly = Settings_Profiles_Module_Model::FIELD_READWRITE;
}
$sql = 'UPDATE vtiger_profile2field SET (profileid, tabid, fieldid, visible, readonly) VALUES (?,?,?,?,?)';
$params = array($profileId, $tabId, $fieldId, $visible, $readOnly);
$db->pquery($sql, $params);
}
}


Вопрос к знатокам, будут ли последствия?

По логике, не должно быть
  •  

endru

смотрел бы в сторону конфигов сервера...
показывай файл настройки VirtualHost, и вывод команды:
apache2ctl -M

waw555

apache2ctl -M
Loaded Modules:
core_module (static)
so_module (static)
watchdog_module (static)
http_module (static)
log_config_module (static)
logio_module (static)
version_module (static)
unixd_module (static)
access_compat_module (shared)
alias_module (shared)
auth_basic_module (shared)
authn_core_module (shared)
authn_file_module (shared)
authz_core_module (shared)
authz_host_module (shared)
authz_user_module (shared)
autoindex_module (shared)
deflate_module (shared)
dir_module (shared)
env_module (shared)
filter_module (shared)
mime_module (shared)
mpm_prefork_module (shared)
negotiation_module (shared)
php5_module (shared)
setenvif_module (shared)
status_module (shared)


000-default.conf

<VirtualHost *:80>
   # The ServerName directive sets the request scheme, hostname and port that
   # the server uses to identify itself. This is used when creating
   # redirection URLs. In the context of virtual hosts, the ServerName
   # specifies what hostname must appear in the request's Host: header to
   # match this virtual host. For the default virtual host (this file) this
   # value is not decisive as it is used as a last resort host regardless.
   # However, you must set it for any further virtual host explicitly.
   #ServerName crm.euro-lock.ru

   ServerAdmin admin@euro-lock.ru
   DocumentRoot /www/crm.euro-lock.ru

   # Available loglevels: trace8, ..., trace1, debug, info, notice, warn,
   # error, crit, alert, emerg.
   # It is also possible to configure the loglevel for particular
   # modules, e.g.
   #LogLevel info ssl:warn

   ErrorLog ${APACHE_LOG_DIR}/error.log
   CustomLog ${APACHE_LOG_DIR}/access.log combined

   # For most configuration files from conf-available/, which are
   # enabled or disabled at a global level, it is possible to
   # include a line for only one particular virtual host. For example the
   # following line enables the CGI configuration for this host only
   # after it has been globally disabled with "a2disconf".
   #Include conf-available/serve-cgi-bin.conf
</VirtualHost>

# vim: syntax=apache ts=4 sw=4 sts=4 sr noet
  •  

endru

как минимум:
a2enmod rewrite
и в конфиг VirtualHost заменить:

<VirtualHost *:80>
   ServerName crm.euro-lock.ru
   DocumentRoot /www/crm.euro-lock.ru

        <Directory /www/crm.euro-lock.ru>
            Options FollowSymLinks
            AllowOverride All
            DirectoryIndex index.php
            Order allow,deny
            Allow from all
        </Directory>

   ErrorLog ${APACHE_LOG_DIR}/error.log
   CustomLog ${APACHE_LOG_DIR}/access.log combined

</VirtualHost>

и лучше почитай об общих настройках apache для хостинга. ибо знаний у тебя очень мало...

waw555

  •  

endru

waw555, я сказал "как минимум".
в особенности твоей crm не вникал, да и незачем мне.
бери любую распространенную CMS, смотри как настраивают хостинг, как получится поднять - переходи к своей проблеме. а то так можно всё перерыть вдоль и поперек. возможно банально прав на запись нет у апача:
chown -R www-data /www/crm.euro-lock.ru
а возможно в другом проблема, в любом случае нужно заново с нуля ставить yeti - текущая версия установлена явно не корректно.