Запуск Mailman на Nginx (LEMP) в Debian Squeeze / Ubuntu 11.04/11.10
Пакет Mailman из репозиториев Debian/Ubuntu поставляется с настройками для Apache, но не для nginx. Данная статья расскажет как вы можете использовать Mailman из репозитория Debian Squeeze/Ubuntu 11.04/11.10 c виртуальным хостом nginx. Nginx – это HTTP сервер, который использует гораздо меньше ресурсов, чем Apache и отдает страницы, особенно статические, намного быстрее.
1. Подготовка к работе
Допустим, мы хотим использовать Mailman на виртуальном хосте www.example.com/example.com с корневой директорией/var/www/www.example.com/web.
Также, у вас должна быть рабочая инсталляция LEMP (включая установленный MySQL), как описано в этих статьях:
- Установка nginx с поддержной PHP5 и MySQL на Debian Squeeze
- Установка nginx с поддержкой PHP5 (а также PHP-FPM) и MySQL на Ubuntu 11.04
Замечание для пользователей Ubuntu:
Раз нам надо выполнять все команды в статье от с привилегиями суперпользователя, мы можем писать в начале каждой команды sudo или стать суперпользователем просто выполнив:
1
|
sudo su |
2. Установка Fcgiwrap
Для того, чтобы разрешить nginx обрабатывать веб-интерфейс Mailman, нам нужен установленный пакет fcgiwrap:
1
|
apt-get install fcgiwrap |
После установки демон fcgiwrap скорее всего уже запущен; его сокет/var/run/fcgiwrap.socket. Если он не запущен, вы можете использовать скрипт/etc/init.d/fcgiwrap чтобы запустить его.
3. Настройка виртуального хоста
Если вы еще не настроили виртуальный хост nginx, вы можете это сделать следующим образом:
Корневой директорией моего сайта www.example.com является/var/www/www.example.com/web – если её еще нет, создайте её:
1
|
mkdir -p /var/www/www .example.com /web |
Дальше мы создаем базовую конфигурацию виртуального хоста www.example.comв nginx. Для этого в директории /etc/nginx/sites-available/ создаем файл www.example.com.vhost:
1
|
vi /etc/nginx/sites-available/www .example.com.vhost |
С настройками нашего хоста:
server { listen 80; server_name www.example.com example.com; root /var/www/www.example.com/web; if ($http_host != "www.example.com") { rewrite ^ http://www.example.com$request_uri permanent; } index index.php index.html; location = /favicon.ico { log_not_found off; access_log off; } location = /robots.txt { allow all; log_not_found off; access_log off; } # Deny all attempts to access hidden files # such as .htaccess, .htpasswd, .DS_Store (Mac). location ~ /. { deny all; access_log off; log_not_found off; } location ~* .(jpg|jpeg|png|gif|css|js|ico)$ { expires max; log_not_found off; } }
Чтобы разрешить этот хост, мы создадим к нему символическую ссылку из директории /etc/nginx/sites-enabled/ :
1
2
|
cd /etc/nginx/sites-enabled/ ln -s /etc/nginx/sites-available/www .example.com.vhost www.example.com.vhost |
Перезапустите nginx, чтобы изменения вступили в силу:
1
|
/etc/init .d /nginx reload |
4. Установка Mailman + настройка виртуального хоста Mailman
Упрощенно установка Mailman выглядит следующим образом:
1
|
apt-get install mailman |
Перед запуском Mailman, должен быть создан первый список рассылки с названием mailman :
1
|
newlist mailman |
Результат выполнения команды:
root@server1:~# newlist mailman
Enter the email of the person running the list: <– email администратора, напр.: info@example.com
Initial mailman password: <– пароль администратора для списка mailman
To finish creating your mailing list, you must edit your /etc/aliases (or
equivalent) file by adding the following lines, and possibly running the
`newaliases’ program:
## mailman mailing list
mailman: “|/var/lib/mailman/mail/mailman post mailman”
mailman-admin: “|/var/lib/mailman/mail/mailman admin mailman”
mailman-bounces: “|/var/lib/mailman/mail/mailman bounces mailman”
mailman-confirm: “|/var/lib/mailman/mail/mailman confirm mailman”
mailman-join: “|/var/lib/mailman/mail/mailman join mailman”
mailman-leave: “|/var/lib/mailman/mail/mailman leave mailman”
mailman-owner: “|/var/lib/mailman/mail/mailman owner mailman”
mailman-request: “|/var/lib/mailman/mail/mailman request mailman”
mailman-subscribe: “|/var/lib/mailman/mail/mailman subscribe mailman”
mailman-unsubscribe: “|/var/lib/mailman/mail/mailman unsubscribe mailman”
Hit enter to notify mailman owner… <– здесь нажмите ENTER
root@server1:~#
После этого откройте /etc/aliases :
1
|
vi /etc/aliases |
и добавьте следующие строки:
[...] mailman: "|/var/lib/mailman/mail/mailman post mailman" mailman-admin: "|/var/lib/mailman/mail/mailman admin mailman" mailman-bounces: "|/var/lib/mailman/mail/mailman bounces mailman" mailman-confirm: "|/var/lib/mailman/mail/mailman confirm mailman" mailman-join: "|/var/lib/mailman/mail/mailman join mailman" mailman-leave: "|/var/lib/mailman/mail/mailman leave mailman" mailman-owner: "|/var/lib/mailman/mail/mailman owner mailman" mailman-request: "|/var/lib/mailman/mail/mailman request mailman" mailman-subscribe: "|/var/lib/mailman/mail/mailman subscribe mailman" mailman-unsubscribe: "|/var/lib/mailman/mail/mailman unsubscribe mailman"
Потом выполните команду:
1
|
newaliases |
и перезапустите Postfix:
1
|
/etc/init .d /postfix restart |
Далее запустите демон Mailman:
1
|
/etc/init .d /mailman start |
Откройте /etc/nginx/sites-available/www.example.com.vhost :
1
|
vi /etc/nginx/sites-available/www .example.com.vhost |
и добавьте следующую часть в контейнер server {} :
server { [...] location /cgi-bin/mailman { root /usr/lib/; fastcgi_split_path_info (^/cgi-bin/mailman/[^/]*)(.*)$; include /etc/nginx/fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param PATH_INFO $fastcgi_path_info; fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info; fastcgi_intercept_errors on; fastcgi_pass unix:/var/run/fcgiwrap.socket; } location /images/mailman { alias /usr/share/images/mailman; } location /pipermail { alias /var/lib/mailman/archives/public; autoindex on; } [...] }
Убедитесь, что вы используете правильный сокет в строке fastcgi_pass unix. Стандартно сокет fcgiwrap расположен в /var/run/fcgiwrap.socket.
Это определяет алиас /cgi-bin/mailman/ для вашего виртуального хоста. Это означает, что вы можете получить доступ к админ-интерфейсу Mailman для списка по адресу http://<виртуальный хост>/cgi-bin/mailman/admin/<имя списка>, и страница для пользователей списка рассылки доступна по адресуhttp://<виртуальный хост>/cgi-bin/mailman/listinfo/<имя списка>.
По адресу http://<vhost>/pipermail вы можете найти архивы списка рассылки.
Пкркзапустите nginx:
1
|
/etc/init .d /nginx reload |
Вот и всё! Сейчас вы можете зайти на http://www.example.com/cgi-bin/mailman/admin/mailman для управления списком рассылки mailman:
и по адресу http://www.example.com/cgi-bin/mailman/listinfo/mailman для доступа к публичной странице списка рассылки mailman (где пользователи могут подписаться):
По адресу http://www.example.com/pipermail вы можете найти архив списка рассылки: