Серверные технологии · 8 min read · Jan 27, 2026

Идеальный сервер - OpenSUSE 13.1 x86_64 (Apache2, MySQL, PHP, Postfix, Dovecot и ISPConfig 3) - Страница 4

8 Установка Postfix, Dovecot, MySQL

Запустите

zypper install postfix postfix-mysql mysql-community-server libmysqlclient-devel dovecot21 dovecot21-backend-mysql pwgen cron python

Если вы получите следующее сообщение, выберите удаление exim:

Проблема: sendmail-8.14.5-85.1.2.x86_64 конфликтует с postfix, предоставленным postfix-2.9.6-1.2.1.x86_64
Решение 1: Будут выполнены следующие действия:
не устанавливать postfix-2.9.6-1.2.1.x86_64
не устанавливать postfix-mysql-2.9.6-1.2.1.x86_64
Решение 2: деинсталляция sendmail-8.14.5-85.1.2.x86_64

Выберите одно из вышеуказанных решений по номеру или отмените [1/2/c] (c): <– 2

Создайте следующую символическую ссылку:

ln -s /usr/lib64/dovecot/modules /usr/lib/dovecot

На этом этапе мне пришлось перезагрузить, потому что иначе MySQL отказывался запускаться с ошибкой:

Failed to issue method call: Unit mysql.service failed to load: No such file or directory. See system logs and 'systemctl status mysql.service' for details.
reboot

Откройте конфигурационный файл MySQL /etc/my.cnf с помощью редактора

vi /etc/my.cnf

и измените строку “ sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES “ на:

sql_mode=NO_ENGINE_SUBSTITUTION

Затем откройте файл /usr/my.cnf с помощью редактора

vi /usr/my.cnf

и измените режим sql на

sql_mode=NO_ENGINE_SUBSTITUTION

также там.

Запустите MySQL, Postfix и Dovecot и включите службы для автоматического запуска при загрузке.

systemctl enable mysql.service  
systemctl start mysql.service
systemctl enable postfix.service  
systemctl start postfix.service
systemctl enable dovecot.service  
systemctl start dovecot.service

Теперь я устанавливаю пакет getmail:

zypper install getmail

Чтобы обеспечить безопасность установки MySQL, выполните:

mysql_secure_installation

Теперь вам будет задано несколько вопросов:

server1:~ # mysql_secure_installation

ПРИМЕЧАНИЕ: РЕКОМЕНДУЕТСЯ ЗАПУСКАТЬ ВСЕ ЧАСТИ ЭТОГО СКРИПТА ДЛЯ ВСЕХ MySQL
СЕРВЕРОВ В ПРОИЗВОДСТВЕ! Пожалуйста, внимательно прочитайте каждый шаг!

Чтобы войти в MySQL и обеспечить его безопасность, нам понадобится текущий
пароль для пользователя root. Если вы только что установили MySQL, и
вы еще не установили пароль root,
пароль будет пустым,
поэтому вам просто нужно нажать Enter здесь.

Введите текущий пароль для root (нажмите Enter для отсутствия): <– ENTER
Хорошо, пароль успешно использован, продолжаем…

Установка пароля root гарантирует, что никто не сможет войти в MySQL
пользователя root без надлежащей авторизации.

Установить пароль root? [Y/n] <– Y
Новый пароль: <– yourrootsqlpassword
Повторите новый пароль: <– yourrootsqlpassword
Пароль успешно обновлен!
Перезагрузка таблиц привилегий..
… Успех!

По умолчанию установка MySQL имеет анонимного пользователя,
что позволяет любому
войти в MySQL без необходимости создания учетной записи пользователя
для них. Это предназначено только для тестирования,
и для того, чтобы установка
проходила немного легче.
Вы должны удалить их
прежде чем переходить в
производственную среду.

Удалить анонимных пользователей? [Y/n] <– Y
… Успех!

Обычно root должен
разрешаться подключаться только с ‘localhost’.
Это гарантирует, что
кто-то не сможет угадать
пароль root из сети.

Запретить удаленный вход root? [Y/n] <– Y
… Успех!

По умолчанию MySQL
поставляется с базой данных с именем ‘test’,
к которой может получить доступ любой.
Это также предназначено
только для тестирования,
и должно быть удалено
прежде чем переходить в
производственную среду.

Удалить тестовую базу данных
и доступ к ней? [Y/n] <– Y

  • Удаление тестовой базы данных…
    … Успех!
  • Удаление привилегий
    на тестовую базу данных…
    … Успех!

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

Перезагрузить таблицы привилегий сейчас? [Y/n] <– Y
… Успех!

Очистка…

Все готово! Если вы завершили все
вышеуказанные шаги,
ваша установка MySQL
должна быть теперь безопасной.

Спасибо за использование MySQL!

server1:~ #

Теперь ваша установка MySQL должна быть защищена.

9 Amavisd-new, Spamassassin и Clamav

Установите Amavisd-new, Spamassassin и антивирус Clamav. Запустите

zypper install amavisd-new clamav clamav-db zoo unzip unrar bzip2 unarj perl-DBD-mysql

Откройте /etc/amavisd.conf…

vi /etc/amavisd.conf

… и добавьте строку $myhostname с вашим правильным именем хоста под строкой $mydomain:

| [...] $mydomain = 'example.com'; # удобный стандарт для других настроек $myhostname = "server1.$mydomain"; [...] |

Затем создайте символическую ссылку из /var/run/clamav/clamd в /var/lib/clamav/clamd-socket:

mkdir -p /var/run/clamav  
ln -s /var/lib/clamav/clamd-socket /var/run/clamav/clamd

OpenSUSE 13.1 имеет каталог /run для хранения данных времени выполнения. /run теперь является tmpfs, и /var/run теперь смонтирован в /run из tmpfs, и, следовательно, очищается при перезагрузке.

Это означает, что после перезагрузки каталог /var/run/clamav, который мы только что создали, больше не будет существовать, и, следовательно, clamd не сможет запуститься. Поэтому мы создаем файл /etc/tmpfiles.d/clamav.conf, который создаст этот каталог при запуске системы (см. http://0pointer.de/public/systemd-man/tmpfiles.d.html для получения дополнительной информации):

vi /etc/tmpfiles.d/clamav.conf

| D /var/run/clamav 0755 root root - |

Перед тем как запустить amavisd и clamd, мы должны отредактировать инициализационный скрипт /etc/init.d/amavis - я не смог надежно запустить, остановить и перезапустить amavisd с помощью стандартного инициализационного скрипта:

vi /etc/init.d/amavis

Закомментируйте следующие строки в секции запуска и остановки:

| [...] start) # ZMI 20100428 проверка на устаревший pid файл #if test -f $AMAVIS_PID ; then # checkproc -p $AMAVIS_PID amavisd # if test $? -ge 1 ; then # # pid файл устарел, удалите его # echo -n "(устаревший pid файл amavisd $AMAVIS_PID найден, удаление. Amavisd упал?)" # rm -f $AMAVIS_PID # fi #fi echo -n "Запуск сканера вирусов (amavisd-new): " $AMAVISD_BIN start #if ! checkproc amavisd; then # rc_failed 7 #fi rc_status -v #if [ "$AMAVIS_SENDMAIL_MILTER" == "yes" ]; then # rc_reset # echo -n "Запуск amavis-milter:" # startproc -u vscan $AMAVIS_MILTER_BIN -p $AMAVIS_MILTER_SOCK > /dev/null 2>&1 # rc_status -v #fi ;; stop) echo -n "Выключение сканера вирусов (amavisd-new): " #if checkproc amavisd; then # rc_reset $AMAVISD_BIN stop #else # rc_reset #fi rc_status -v #if [ "$AMAVIS_SENDMAIL_MILTER" == "yes" ]; then # rc_reset # echo -n "Выключение amavis-milter: " # killproc -TERM $AMAVIS_MILTER_BIN # rc_status -v #fi ;; [...] |

Поскольку мы изменили инициализационный скрипт, мы должны выполнить

systemctl --system daemon-reload

Теперь, чтобы запустить clamav, нам нужно загрузить базу данных и продолжить с командой

freshclam

Примечание: Загрузка базы данных занимает много времени, вам не рекомендуется прерывать и не останавливать службу обновления freshclam в процессе

Чтобы включить службы, выполните:

systemctl enable amavis.service  
systemctl enable clamd.service  
systemctl start amavis.service  
systemctl start clamd.service

10 Установка веб-сервера Apache 2 с PHP5, Ruby, Python, WebDAV

Установите Apache2 и suphp. Запустите:

zypper install apache2 apache2-mod_fcgid

Установите PHP5:

zypper install php5-bcmath php5-bz2 php5-calendar php5-ctype php5-curl php5-dom php5-ftp php5-gd php5-gettext php5-gmp php5-iconv php5-imap php5-ldap php5-mbstring php5-mcrypt php5-mysql php5-odbc php5-openssl php5-pcntl php5-pgsql php5-posix php5-shmop php5-snmp php5-soap php5-sockets php5-sqlite php5-sysvsem php5-tokenizer php5-wddx php5-xmlrpc php5-xsl php5-zlib php5-exif php5-fastcgi php5-pear php5-sysvmsg php5-sysvshm ImageMagick curl apache2-mod_php5
zypper install http://download.opensuse.org/repositories/server:/php/openSUSE_13.1/x86_64/suphp-0.7.1-5.3.x86_64.rpm

Затем выполните эти команды, чтобы включить модули Apache (включая WebDAV):

a2enmod socache_shmcb
a2enmod suexec  
a2enmod rewrite  
a2enmod ssl  
a2enmod actions  
a2enmod suphp  
a2enmod fcgid  
a2enmod dav  
a2enmod dav_fs  
a2enmod dav_lock  
a2enmod logio  
chown root:www /usr/sbin/suexec2  
chmod 4755 /usr/sbin/suexec2
a2enflag SSL

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

zypper --gpg-auto-import-keys addrepo --name "Поддержка Python (Apache_openSUSE_13.1)" http://download.opensuse.org/repositories/Apache:/Modules/openSUSE_13.1/  apache-Modules
zypper install apache2-mod_python
a2enmod python

Далее мы устанавливаем phpMyAdmin:

zypper install phpMyAdmin

Чтобы убедиться, что мы можем получить доступ к phpMyAdmin со всех веб-сайтов, созданных через ISPConfig позже, используя /phpmyadmin (например, http://www.example.com/phpmyadmin) и /phpMyAdmin (например, http://www.example.com/phpMyAdmin), откройте /etc/apache2/conf.d/phpMyAdmin.conf…

vi /etc/apache2/conf.d/phpMyAdmin.conf

… и добавьте следующие два псевдонима сразу в начале:

| Alias /phpMyAdmin /srv/www/htdocs/phpMyAdmin Alias /phpmyadmin /srv/www/htdocs/phpMyAdmin [...] |

Перед запуском apache нам нужно перейти по ссылке и внести изменения в httpd.conf

vi /etc/apache2/httpd.conf

Закомментируйте эти строки и добавьте эти строки

#  
#    Options None  
#    AllowOverride None  
#    Order deny,allow  
#   Deny from all  
#  
  
  
Options None  
AllowOverride None  
Require all denied  

Теперь запустите службу Apache

systemctl enable apache2.service  
systemctl start apache2.service

10.1 PHP-FPM

Начиная с ISPConfig 3.0.5, есть дополнительный режим PHP, который вы можете выбрать для использования с Apache: PHP-FPM.

Чтобы использовать PHP-FPM с Apache, нам нужен модуль mod_fastcgi Apache (пожалуйста, не путайте его с mod_fcgid - они очень похожи, но вы не можете использовать PHP-FPM с mod_fcgid). Мы можем установить PHP-FPM и mod_fastcgi следующим образом:

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

Далее мы устанавливаем Fastcgi и PHP-FPM:

zypper install fastcgi php5-fpm

Теперь загрузите и установите mod_fastcgi:

cd /tmp  
wget http://download.opensuse.org/repositories/home:/munix9/openSUSE_13.1/x86_64/apache2-mod_fastcgi-2.4.7_SNAP_0910052141-3.1.x86_64.rpm  
rpm -i apache2-mod_fastcgi-2.4.7_SNAP_0910052141-3.1.x86_64.rpm  
a2enmod mod_fastcgi

Перед тем как запустить PHP-FPM, переименуйте /etc/php5/fpm/php-fpm.conf.default в /etc/php5/fpm/php-fpm.conf:

mv /etc/php5/fpm/php-fpm.conf.default /etc/php5/fpm/php-fpm.conf

Измените права доступа к каталогу сессий PHP:

chmod 1733 /var/lib/php5

Затем откройте /etc/php5/fpm/php-fpm.conf…

vi /etc/php5/fpm/php-fpm.conf

… и измените error_log на /var/log/php-fpm.log:

| [...] error_log = /var/log/php-fpm.log [...] |

Для PHP-FPM под OpenSUSE 13.1 нет файла php.ini, поэтому мы копируем php.ini CLI:

cp /etc/php5/cli/php.ini /etc/php5/fpm/

Далее откройте /etc/php5/fpm/php.ini…

vi /etc/php5/fpm/php.ini

… и установите cgi.fix_pathinfo на 0:

| [...] ; cgi.fix_pathinfo предоставляет *реальную* поддержку PATH_INFO/PATH_TRANSLATED для CGI. PHP ; предыдущее поведение заключалось в том, чтобы устанавливать PATH_TRANSLATED в SCRIPT_FILENAME, и не понимать, ; что такое PATH_INFO. Для получения дополнительной информации о PATH_INFO смотрите спецификации cgi. Установка ; этого значения в 1 заставит PHP CGI исправить свои пути в соответствии со спецификацией. Установка ; нуля заставляет PHP вести себя как раньше. Значение по умолчанию - 1. Вы должны исправить свои скрипты ; чтобы использовать SCRIPT_FILENAME вместо PATH_TRANSLATED. ; http://php.net/cgi.fix-pathinfo cgi.fix_pathinfo=0 [...] |

Далее создайте ссылки для запуска системы для php-fpm и запустите его:

systemctl enable php-fpm.service   
systemctl start php-fpm.service

PHP-FPM - это демон, который запускает сервер FastCGI на порту 9000, как вы можете видеть в выводе

netstat -tapn
server1:~ # netstat -tapn  
Активные интернет-соединения (серверы и установленные)  
Протокол  Recv-Q  Send-Q  Локальный адрес           Удаленный адрес         Состояние       PID/Имя программы  
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      2329/nginx  
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1204/sshd  
tcp        0      0 127.0.0.1:9000          0.0.0.0:*               LISTEN      2511/php-fpm.conf)  
tcp        0      0 0.0.0.0:3306            0.0.0.0:*               LISTEN      2059/mysqld  
tcp        0      0 192.168.0.100:22        192.168.0.199:1632      ESTABLISHED 1284/0  
tcp        0      0 :::22                    :::*                     LISTEN      1204/sshd  
server1:~ #

Далее включите следующие модули Apache…

a2enmod actions  
a2enmod fastcgi  
a2enmod alias

… и перезапустите Apache:

systemctl restart apache2.service
Share: X/Twitter LinkedIn

Get new posts in your inbox

No spam. Unsubscribe anytime.