如何安装一个完整的LEMP(Linux - EngineX(Nginx HTTP SERVER) - Mysql - PHP)服务器(不是LAMP ...)在Ubuntu / Debian
该HowTo将描述一个高效的http服务器和邮件服务器的设置,用于小型或中型配置(低至96 MB)。 所以这个配置是一个小VPS的理想选择。 您可以在德国的托管公司x | encon找到一个便宜且性能优异的VPS(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(); ?>