Серверные технологии · 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.servicesystemctl enable postfix.service
systemctl start postfix.servicesystemctl 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/clamdOpenSUSE 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.service10 Установка веб-сервера 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_php5zypper 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_shmcba2enmod 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/suexec2a2enflag 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-Moduleszypper install apache2-mod_pythona2enmod 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.service10.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.servicePHP-FPM - это демон, который запускает сервер FastCGI на порту 9000, как вы можете видеть в выводе
netstat -tapnserver1:~ # 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.serviceGet new posts in your inbox
No spam. Unsubscribe anytime.