如何安装一个完整的LEMP(Linux  -  EngineX(Nginx HTTP SERVER) -  Mysql  -  PHP)服务器(不是LAMP ...)在Ubuntu / Debian

如何安装一个完整的LEMP(Linux - EngineX(Nginx HTTP SERVER) - Mysql - PHP)服务器(不是LAMP ...)在Ubuntu / Debian

该HowTo将描述一个高效的http服务器和邮件服务器的设置,用于小型或中型配置(低至96 MB)。 所以这个配置是一个小VPS的理想选择。 您可以在德国的托管公司x | encon找到一个便宜且性能优异的V​​PS(XEN)的好选择。 他们提供许多可扩展的VPS解决方案,其中包含预先安装的Debian和Ubuntu光盘映像。

为什么选择LEMP而不是LAMP? NGINX是一个很好的替代品,具有非常低的内存占用和极大的稳定性。

注意:我将在Ubuntu Feisty Fawn服务器版本的最新安装中使用名为yourdomain.com的所有配置。

我们将不得不安装第一个Postfix来处理电子邮件,然后Dovecot将它们仅提供给pop3(imap使用太多的内存)。 但在此之前,让我们安装一些我们需要的有用工具:

apt-get install wget telnet build-essential

1.安装Postfix

apt-get install postfix libsasl2 sasl2-bin libsasl2-modules libdb3-util procmail

现在美丽的蓝色屏幕会出现,Postfix会问你一些问题。 回答如下:

一般配置类型? < - 互联网网站
邮件名称? < - yourdomain.com

然后运行:

dpkg-reconfigure postfix

再次,你会被问到一些问题:

一般配置类型? < - 互联网网站
邮件应该在哪里去 < - [空白]
邮件名称? < - yourdomain.com
其他目的地接受邮件? (空白为无) < - yourdomain.com,localhost.yourdomain.com,localhost.localdomain,localhost
在邮件队列上强制同步更新? < - 不
本地网络? < - 127.0.0.0/8
使用procmail进行本地交货? < - 是的
邮箱大小限制 < - 0
本地地址扩展字符? < - +
互联网协议使用? < - 全部

键入以下命令(您可以复制下面的所有内容,并将其粘贴到终端中一行,它将工作,但不要忘记按Enter键以验证最后一个命令):

postconf -e 'smtpd_sasl_local_domain ='
postconf -e 'smtpd_sasl_auth_enable = yes'
postconf -e 'smtpd_sasl_security_options = noanonymous'
postconf -e 'broken_sasl_auth_clients = yes'
postconf -e 'smtpd_recipient_restrictions = permit_sasl_authenticated,permit_mynetworks,reject_unauth_destination'
postconf -e 'inet_interfaces = all'
echo 'pwcheck_method: saslauthd' >> /etc/postfix/sasl/smtpd.conf
echo 'mech_list: plain login' >> /etc/postfix/sasl/smtpd.conf

现在我们必须为Postfix和Dovecot创建TLS证书:

mkdir /etc/ssl/yourdomain (the folder name can be of course anything such as the name of your mother...)
cd /etc/ssl/yourdomain
openssl genrsa -des3 -rand /etc/hosts -out yourdomain.key 1024
chmod 600 yourdomain.key
openssl req -new -key yourdomain.key -out yourdomain.csr
openssl x509 -req -days 3650 -in yourdomain.csr -signkey yourdomain.key -out yourdomain.crt
openssl rsa -in yourdomain.key -out yourdomain.key.unencrypted
mv -f yourdomain.key.unencrypted yourdomain.key
openssl req -new -x509 -extensions v3_ca -keyout cakey.pem -out cacert.pem -days 3650

接下来我们为TLS配置Postfix:

postconf -e 'smtpd_tls_auth_only = no'
postconf -e 'smtp_use_tls = yes'
postconf -e 'smtpd_use_tls = yes'
postconf -e 'smtp_tls_note_starttls_offer = yes'
postconf -e 'smtpd_tls_key_file = /etc/ssl/yourdomain/yourdomain.key'
postconf -e 'smtpd_tls_cert_file = /etc/ssl/yourdomain/yourdomain.crt'
postconf -e 'smtpd_tls_CAfile = /etc/ssl/yourdomain/cacert.pem'
postconf -e 'smtpd_tls_loglevel = 1'
postconf -e 'smtpd_tls_received_header = yes'
postconf -e 'smtpd_tls_session_cache_timeout = 3600s'
postconf -e 'tls_random_source = dev:/dev/urandom'
postconf -e 'myhostname = yourdomain.com'

重新启动Postfix:

/etc/init.d/postfix restart

认证将由saslauthd完成。 我们必须改变一些事情才能正常工作。 因为Postfix在/ var / spool / postfix中运行chroot,所以我们必须执行以下操作:

mkdir -p /var/spool/postfix/var/run/saslauthd

现在我们必须编辑/ etc / default / saslauthd才能激活saslauthd 。 将START设置为yes并将OPTIONS =“ - c”行更改为OPTIONS =“ - c -m / var / spool / postfix / var / run / saslauthd -r”

vi /etc/default/saslauthd
#
# Settings for saslauthd daemon
#
# Should saslauthd run automatically on startup? (default: no)
START=yes
# Which authentication mechanisms should saslauthd use? (default: pam)
#
# Available options in this Debian package:
# getpwent  -- use the getpwent() library function
# kerberos5 -- use Kerberos 5
# pam       -- use PAM
# rimap     -- use a remote IMAP server
# shadow    -- use the local shadow password file
# sasldb    -- use the local sasldb database file
# ldap      -- use LDAP (configuration is in /etc/saslauthd.conf)
#
# Only one option may be used at a time. See the saslauthd man page
# for more information.
#
# Example: MECHANISMS="pam"
MECHANISMS="pam"
# Additional options for this mechanism. (default: none)
# See the saslauthd man page for information about mech-specific options.
MECH_OPTIONS=""
# How many saslauthd processes should we run? (default: 5)
# A value of 0 will fork a new process for each connection.
THREADS=5
# Other options (default: -c)
# See the saslauthd man page for information about these options.
#
# Example for postfix users: "-c -m /var/spool/postfix/var/run/saslauthd"
# Note: See /usr/share/doc/sasl2-bin/README.Debian
OPTIONS="-c  -m /var/spool/postfix/var/run/saslauthd -

从此开始saslauthd

/etc/init.d/saslauthd start

要查看SMTP-AUTH和TLS是否正常工作,请运行以下命令:

telnet yourdomain.com 25

与Postfix邮件服务器类型建立连接后

ehlo yourdomain.com

输出应该如下所示:

250-yourdomain.com
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-STARTTLS
250-AUTH PLAIN LOGIN
250-AUTH=PLAIN LOGIN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN

我们现在已经运行了Postfix。 如果添加用户(adduser命令),Postfix将直接发送到位于主文件夹中的用户邮箱中的电子邮件。

2.安装Dovecot

Dovecot配置非常简单(记住我们将只使用pop3协议来节省内存):

apt-get install dovecot-common dovecot-pop3d

然后打开位于/ etc / dovecot /中的 dovecot conf。 您必须手动添加要使用的协议(pop3 pop3s

# Protocols we want to be serving: imap imaps pop3 pop3s
# If you only want to use dovecot-auth, you can set this to "none".
#protocols = imap imaps
protocols = pop3s pop3

并取消注释以下两行,告诉Dovecot在哪里弄清先前创建的证书

ssl_cert_file = /etc/ssl/yourdomain/yourdomain.crt
ssl_key_file = /etc/ssl/yourdomain/yourdomain.key

然后您需要重新启动Dovecot

/etc/init.d/dovecot restart

我们现在有一个功能邮件服务器。

3.安装PHP5(和xcache一起)

apt-get install php5-cli php5-cgi php5-mysql php5-xcache

请注意,xcache必须通过在/ etc / php5 / cgi /中的php.ini中添加以下行来手动实现(请根据您的系统调整此配置)。

[xcache-common]
extension = xcache.so
[xcache.admin]
xcache.admin.user = "mOo"
; xcache.admin.pass = md5($your_password)
xcache.admin.pass = ""
[xcache]
; ini only settings, all the values here is default unless explained
; select low level shm/allocator scheme implemenation
xcache.shm_scheme =        "mmap"
; to disable: xcache.size=0
; to enable : xcache.size=64M etc (any size > 0) and your system mmap allows
xcache.size  =                32M
; set to cpu count (cat /proc/cpuinfo |grep -c processor)
xcache.count =                 1
; just a hash hints, you can always store count(items) > slots
xcache.slots =                8K
; ttl of the cache item, 0=forever
xcache.ttl   =                 0
; interval of gc scanning expired items, 0=no scan, other values is in seconds
xcache.gc_interval =           0
; same as aboves but for variable cache
xcache.var_size  =            32M
xcache.var_count =             1
xcache.var_slots =            8K
; default ttl
xcache.var_ttl   =             0
xcache.var_maxttl   =          0
xcache.var_gc_interval =     300
xcache.test =                Off
; N/A for /dev/zero
xcache.readonly_protection = Off
; for *nix, xcache.mmap_path is a file path, not directory.
; Use something like "/tmp/xcache" if you want to turn on ReadonlyProtection
; 2 group of php won't share the same /tmp/xcache
; for win32, xcache.mmap_path=anonymous map name, not file path
xcache.mmap_path =    "/dev/zero"
; leave it blank(disabled) or "/tmp/phpcore/"
; make sure it's writable by php (without checking open_basedir)
xcache.coredump_directory =   ""
; per request settings
xcache.cacher =               On
xcache.stat   =               On
xcache.optimizer =            On
[xcache.coverager]
; per request settings
; enable coverage data collecting for xcache.coveragedump_directory and xcache_coverager_start/stop/get/clean() functions (will hurt executing performance)
xcache.coverager =          Off
; ini only settings
; make sure it's readable (care open_basedir) by coverage viewer script
; requires xcache.coverager=On
xcache.coveragedump_directory = ""

注意:您必须根据您的服务器手动调整xcache.size和xcache.var_size(默认情况下为0,意味着xcache根本没有启用)。 另一件事是xcache.count变量。 如果您有一个可以使用2个处理器的vps,那么可以放2个而不是2个处理器。

即使您的php配置尚未加载,您现在也可以这样做,因此当Nginx和fcgi进程启动时,所有内容都将处于良好状态。

4.安装Mysql和PhpMyAdmin

apt-get install mysql mysql-server

mysql常常出现设置root密码的问题。 所以最好的办法是先停止mysql:

/etc/init.d/mysql stop

然后更新用户表

mysqld --skip-grant-tables --skip-networking &
mysql mysql
UPDATE user SET password=PASSWORD('yourrootpassword') WHERE User="root" AND Host="localhost";
quit
/etc/init.d/mysql restart

5.安装NGINX(仅限Ubuntu,请参阅下面的Debian用户)

Feisty提出的nginx版本是史前的(更不用说drapper)。 幸运的是,有一个地方可以获得最新的稳定版本,或者如果你是冒险的话,最新的版本。

Debian用户的注意事项:我没有找到最近的.deb包,所以你可以选择从源编译,或者做一个apt-get install nginx来有一个没有这么新的版本。 有关Nginx的更多信息,请访问Nginx Wiki网站。 你可以找到所有的模块(ssl,auth_basic等)的源和一个很好的文档。

wget http://technokracy.net/nginx/nginx_0.5.32~grrr-1_i386.deb

(请注意,如果您正在AMD上运行,请使用amd64替换i386)

然后输入:

dpkg -i nginx_0.5.32~grrr-1_i386.deb

Nginx现在启动并运行在默认端口8000(以防万一你已经有Apache或其他端口80)。

默认的根文件夹是Nginx-default,位于/ var / www /

要改变它,并开始听fast-cgi,我们将在下面启动,你必须打开/ etc / nginx / sites-available / default

vi /etc/nginx/sites-available/default

您可以找到所有明显的选项来更改和添加(或取消注释原始php段落):

        location ~ \.php$ {
        include /etc/nginx/fastcgi_params;
        fastcgi_pass  127.0.0.1:9000;
        fastcgi_index index.php;
        fastcgi_param  SCRIPT_FILENAME  /var/www/nginx-default$fastcgi_script_name;
    }

我们刚刚要求Nginx在9000端口上听fcgi。所以我们现在要开始fcgi进程了。 我已经选择使用spawn-fcgi并使自己的init脚本(因此该过程将在重新启动后启动)。 要有spawn-fcgi,你必须配置lighttpd,但不需要安装它。 我们来抓最新版本:

wget http://www.lighttpd.net/download/lighttpd-1.4.18.tar.bz2
tar -xvjf lighttpd-1.4.18.tar.bz2 
cd lighttpd-1.4.18
./configure
make
cp src/spawn-fcgi /usr/bin/spawn-fcgi

请注意,我们没有键入make install ,所以lighttpd没有运行!

然后我们创建一个shell脚本,我们可以调用php-fastcgi或任何你想要的东西,并将该文件放在/ usr / bin /中 ,使其简单(因为php5-cgi和spawn-fcgi已经在那里了...)。

touch /usr/bin/php-fastcgi

然后编辑它:

vi /usr/bin/php-fastcgi

并添加以下内容:

#!/bin/sh
/usr/bin/spawn-fcgi -a 127.0.0.1 -p 9000 -u www-data -f /usr/bin/php5-cgi

这意味着每次调用此脚本时,fcgi将在端口9000上为用户www-data(默认用户)生成。

为了使其在启动时工作,我们现在需要创建一个init脚本:

touch /etc/init.d/init-fastcgi

编辑并添加:

vi /etc/init.d/init-fastcgi
#!/bin/bash
PHP_SCRIPT=/usr/bin/php-fastcgi
RETVAL=0
case "$1" in
    start)
      $PHP_SCRIPT
      RETVAL=$?
  ;;
    stop)
      killall -9 php
      RETVAL=$?
  ;;
    restart)
      killall -9 php
      $PHP_SCRIPT
      RETVAL=$?
  ;;
    *)
      echo "Usage: php-fastcgi {start|stop|restart}"
      exit 1
  ;;
esac      
exit $RETVAL

您可能需要通过键入以更改权限:

chmod 755 /etc/init.d/init-fastcgi

检查它是否可以通过键入:

/etc/init.d/init-fastcgi start

您应该有一个来自spawn-fcgi的归因归因于PID过程的答案。 使现在重新启动后的一切工作类型:

update-rc.d init-fastcgi defaults

我们完成了 要检查PHP是否正常工作,您可以先输入:

ps ax | grep php

要检查Nginx是否正在监听php,请在空的php文件中创建一个echo命令:

<? echo phpinfo(); ?>
赞(52) 打赏
未经允许不得转载:优客志 » 系统运维
分享到:

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏