完美的服务器 - CentOS 7 x86_64(nginx,Dovecot,ISPConfig 3)
版本1.0
作者:Till Brehm,Srijan Kishore和Falko Timme
在Twitter上关注youcl
本教程将介绍如何准备安装ISPConfig 3的CentOS 7 x86_64服务器,以及如何在其上安装ISPConfig 3。 ISPConfig 3是一个Web主机控制面板,允许您通过Web浏览器配置以下服务:nginx Web服务器,Postfix邮件服务器,MySQL,BINDNameservers,PureFTPd,SpamAssassin,ClamAV,Mailman等等。 自3.0.4版以来,除了Apache之外,ISPConfig还全面支持nginx Web服务器; 本教程介绍了使用nginx而不是Apache的服务器的设置。 这里提供了ISPConfig 3 apache完美的服务器教程。
ISPConfig 3手册
为了学习如何使用ISPConfig 3,我强烈建议您下载ISPConfig 3手册 。
在大约300页上,它涵盖了ISPConfig(管理员,经销商,客户端)背后的概念,介绍了如何安装和更新ISPConfig 3,为ISPConfig中的所有表单和表单域以及有效输入示例提供了参考,并提供了教程这是ISPConfig 3中最常见的任务。它还排除了如何使服务器更安全,并在最后添加了故障排除部分。
要求
要安装这样的系统,您将需要以下内容
- 从您旁边的镜像下载两个CentOS 7.0 DVD(镜像列表可以在这里找到: http : //isoredirect.centos.org/centos/7/isos/x86_64/CentOS-7.0-1406-x86_64-DVD。 iso 。
- 快速的互联网连接
2.初步说明
在本教程中,我使用hostname server1.example.com
,IP地址为192.168.0.100
和网关192.168.0.1
。 这些设置可能会有所不同,因此您必须在适当的情况下更换它们。 请安装本教程链接中的最小CentOS 7安装,然后再继续。
3安装nano编辑器并调整/ etc / hosts
yum -y install nano wget
接下来我们编辑/ etc / hosts
。 看起来像这样:
nano /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 192.168.0.100 server1.example.com server1 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
并将主机名设置为server1.example.com
:
echo 'server1.example.com' > /etc/hostname
4配置防火墙并安装一些基本的网络软件
(如果在基本系统安装结束时已经禁用了防火墙,可以跳过本章。)
我想在本教程末尾安装ISPConfig,并附带自己的防火墙。 这就是为什么我现在禁用默认的CentOS防火墙。 当然,您可以自由地将其配置为您的需要(但是后来您不应再使用任何其他防火墙,因为它可能会干扰CentOS防火墙)。
跑
systemctl stop firewalld.service[root @ server1〜]#systemctl disable firewalld.service
systemctl disable firewalld.service
rm'/etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service'
rm'/etc/systemd/system/basic.target.wants/firewalld.service'
[root @ server1〜]#
并禁用防火墙。
要检查防火墙是否已被禁用,可以运行
firewall-cmd --state
之后。 输出应如下所示:
[root@server1 ~]# firewall-cmd --state
not running
[root@server1 ~]#
yum -y install net-tools NetworkManager-tui
5禁用SELinux
SELinux是CentOS的安全扩展,应该提供扩展的安全性。 在我看来,你不需要配置一个安全的系统,它通常会导致更多的问题,而不是优势(考虑到你做了一周的故障排除后,因为一些服务不能按预期工作,然后你发现一切都OK,只有SELinux造成问题)。 因此我禁用它(如果你想稍后安装ISPConfig,这是必须的)。
编辑/ etc / selinux / config
并设置SELINUX = disabled
:
nano /etc/selinux/config
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
SELINUX=disabled
# SELINUXTYPE= can take one of these two values:
# targeted - Targeted processes are protected,
# mls - Multi Level Security protection.
SELINUXTYPE=targeted
之后我们必须重新启动系统:
reboot
6启用其他存储库并安装一些软件
我们将在我们的CentOS系统上启用EPEL存储库,因为我们将在本教程中安装的许多软件包在官方CentOS 7.0存储库中不可用:
yum -y install epel-release
yum -y install yum-priorities
编辑/etc/yum.repos.d/epel.repo
...
nano /etc/yum.repos.d/epel.repo
...并将行优先级= 10
添加到[epel]
部分:
[epel]
name=Extra Packages for Enterprise Linux 7 - $basearch
#baseurl=http://download.fedoraproject.org/pub/epel/7/$basearch
mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-7&arch=$basearch
failovermethod=priority
enabled=1
priority=10
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
[...]
然后我们更新系统上现有的软件包:
yum update
现在我们安装一些稍后需要的软件包:
yum -y groupinstall 'Development Tools'
7配额
(如果您选择了不同于我的分区方案,则必须调整本章,以便配额适用于您需要的分区。)
要安装配额,我们运行这个命令:
yum -y install quota
现在我们检查是否已经为网站(/ var / www)和maildir数据(var / vmail)存储的文件系统启用了配额。 在这个例子中,我有一个大的根分区,所以我搜索'/':
mount | grep ' / '
[root@server1 ~]# mount | grep ' / '
/dev/mapper/centos-root on / type xfs (rw,relatime,attr2,inode64,noquota)
[root@server1 ~]#
如果您有一个单独的/ var分区,那么请使用:
mount | grep ' /var '
代替。 如果该行包含单词“ noquota ”,则继续执行以下步骤以启用配额。
在/(根)分区上启用配额
通常,您将在/ etc / fstab文件中启用配额,但如果文件系统是根文件系统“/”,则必须通过Linux内核的引导参数启用配额。
编辑grub配置文件:
nano /etc/default/grub
搜索开始的行 GRUB_CMDLINE_LINUX
并添加 rootflags = uquota,gquota
到命令行参数,以便生成的行如下所示:
[...]
GRUB_CMDLINE_LINUX="rd.lvm.lv=centos/swap vconsole.font=latarcyrheb-sun16 rd.lvm.lv=centos/root crashkernel=auto vconsole.keymap=us rhgb quiet rootflags=uquota,gquota"
[...]
并通过运行以下命令应用更改。
cp /boot/grub2/grub.cfg /boot/grub2/grub.cfg_bak
grub2-mkconfig -o /boot/grub2/grub.cfg
并重新启动服务器。
reboot
现在检查配额是否启用:
mount | grep ' / '
[root@server1 ~]# mount | grep ' / '
/dev/mapper/centos-root on / type xfs (rw,relatime,attr2,inode64,usrquota,grpquota)
[root@server1 ~]#
当配额处于活动状态时,我们可以在装载选项列表中看到“ usrquota,grpquota ”。
在单独的/ var分区上启用配额
如果你有一个单独的/ var分区,那么编辑 / etc / fstab
并添加 ,uquota,gquota
到了 /
分区( / dev / mapper / centos-var
):
nano /etc/fstab
#
# /etc/fstab
# Created by anaconda on Sun Sep 21 16:33:45 2014
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/centos-root / xfs defaults 1 1
/dev/mapper/centos-var /var xfs defaults,uquota,gquota 1 2
UUID=9ac06939-7e43-4efd-957a-486775edd7b4 /boot xfs defaults 1 3
/dev/mapper/centos-swap swap swap defaults 0 0
然后跑
mount -o remount /var
quotacheck -avugm
quotaon -avug
启用配额。
8同步系统时钟
将系统时钟与NTP进行同步是一个好主意 t ime 协议)服务器。 只需运行
yum -y install ntp
您的系统时间将始终保持同步。
9安装MariaDB
我们将安装MariaDB服务器和客户端,如下所示:
yum -y install mariadb mariadb-server
我们希望Mariadb服务在启动后运行,并启动服务:
systemctl enable mariadb.service
systemctl start mariadb.service
设置MySQL根帐户的密码:
mysql_secure_installation
[root @ server1〜]#mysql_secure_installation
/ usr / bin / mysql_secure_installation:行379:find_mysql_client:命令未找到
注意:运行本脚本的所有部分都是为所有MariaDB推荐的
服务器生产使用!
请仔细阅读每一步!
为了登录到MariaDB来保护它,我们需要当前的
root用户的密码。
如果你刚刚安装了MariaDB,
您还没有设置root密码,密码将为空,
所以你应该刚刚进入这里。
< - ENTER
输入root的当前密码(输入无): < - ENTER
OK,成功使用密码,移动...
设置root密码确保没有人可以登录到MariaDB
root用户没有正确的授权。
设置root密码?
[Y / n]
< - ENTER
新密码: < - yourmariadbpassword
重新输入新密码: < - yourmariadbpassword
密码更新成功!
重新载入特权表..
...成功!
默认情况下,MariaDB安装有一个匿名用户,允许任何人
登录到MariaDB,而不必创建用户帐户
他们。
这仅适用于测试和进行安装
顺利一点
你应该删除它们,然后再进入
生产环境。
删除匿名用户?
[Y / n]
< - ENTER
...成功!
通常,root只能被允许从'localhost'连接。
这个
确保有人无法从网络的root密码猜测。
禁止root登录远程?
[Y / n]
< - ENTER
...成功!
默认情况下,MariaDB带有一个名为“test”的数据库,任何人都可以
访问。
这也仅用于测试,应该删除
在进入生产环境之前。
删除测试数据库并访问它?
[Y / n]
< - ENTER
- 删除测试数据库...
...成功!
- 删除测试数据库的权限...
...成功!
重新加载权限表将确保所有更改到目前为止
将立即生效。
现在重新加载权限表?
[Y / n]
< - ENTER
...成功!
打扫干净...
全做完了!
如果您已完成上述所有步骤,您的MariaDB
安装应该是安全的。
感谢您使用MariaDB!
[root @ server1〜]#
10安装Dovecot
Dovecot可以安装如下:
yum -y install dovecot dovecot-pigeonhole dovecot-mysql
创建一个空的dovecot-sql.conf文件和符号链接:
touch /etc/dovecot/dovecot-sql.conf
ln -s /etc/dovecot/dovecot-sql.conf /etc/dovecot-sql.conf
现在创建系统启动链接并启动Dovecot:
systemctl enable dovecot.service
systemctl start dovecot.service
11安装Postfix
Postfix可以安装如下:
yum -y install postfix
然后关闭Sendmail并启动Postfix:
systemctl enable mariadb.service
systemctl start mariadb.service
systemctl stop sendmail.service
systemctl disable sendmail.service
systemctl enable postfix.service
systemctl restart postfix.service
12安装Getmail
Getmail可以安装如下:
yum -y install getmail
13安装Amavisd-new,SpamAssassin和ClamAV
要安装amavisd-new,spamassassin和clamav,请运行以下命令:
yum -y install amavisd-new spamassassin clamav clamd clamav-update unzip bzip2 unrar perl-DBD-mysql
编辑freshclam配置文件/etc/freshclam.conf
nano /etc/freshclam.conf
并注释掉“示例”行
[....]
# Example
[....]
然后我们启动freshclam,amavisd和clamd.amavisd:
sa-update
freshclam
systemctl enable amavisd.service
14安装Nginx,PHP5(PHP-FPM)和Fcgiwrap
Nginx可用作CentOS 7.0(从EPEL)的软件包,我们可以安装如下:
yum -y install nginx
如果系统上已经安装了Apache2,请立即停止...
systemctl stop httpd.service
...并删除Apache的系统启动链接:
systemctl disable httpd.service
然后我们为nginx创建系统启动链接并启动它:
systemctl enable nginx.service
systemctl start nginx.service
(如果安装了Apache2和nginx,ISPConfig 3安装程序会询问您要使用哪一个 - 在这种情况下应答nginx
,如果只安装了这两个安装,则ISPConfig将自动执行必要的配置。)
我们可以通过PHP-FPM使PHP5在nginx中工作(PHP-FPM(FastCGI Process Manager)是一种替代的PHP FastCGI实现,具有对任何大小的网站尤其是繁忙的站点有用的其他功能)。 我们可以像php-cli
一样安装php-fpm
,还有一些PHP5模块,如php-mysql
,如果要从PHP脚本中使用MySQL,则需要如下所示:
yum -y install php-fpm php-cli php-mysql php-gd php-imap php-ldap php-odbc php-pear php-xml php-xmlrpc php-pecl-apc php-magickwand php-mbstring php-mcrypt php-mssql php-snmp php-soap php-tidy
接下来我们打开/etc/php.ini
...
nano /etc/php.ini
...并更改错误报告(以便不再显示通知):
[...]
;error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT
error_reporting = E_ALL & ~E_NOTICE
[...]
还设置cgi.fix_pathinfo = 0
:
nano /etc/php.ini
[...]
; cgi.fix_pathinfo provides *real* PATH_INFO/PATH_TRANSLATED support for CGI. PHP's
; previous behaviour was to set PATH_TRANSLATED to SCRIPT_FILENAME, and to not grok
; what PATH_INFO is. For more information on PATH_INFO, see the cgi specs. Setting
; this to 1 will cause PHP CGI to fix its paths to conform to the spec. A setting
; of zero causes PHP to behave as before. Default is 1. You should fix your scripts
; to use SCRIPT_FILENAME rather than PATH_TRANSLATED.
; http://www.php.net/manual/en/ini.core.php#ini.cgi.fix-pathinfo
cgi.fix_pathinfo=0
[...]
(请阅读http://wiki.nginx.org/Pitfalls了解为什么你应该这样做)
除此之外,为了避免错误等
[08-Aug-2011 18:07:08] PHP Warning: phpinfo(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected 'Europe/Berlin' for 'CEST/2.0/DST' instead in /usr/share/nginx/html/info.php on line 2
...在/var/log/php-fpm/www-error.log中,
当您在浏览器中调用PHP脚本时,应在/etc/php.ini中
设置date.timezone
:
[...]
[Date]
; Defines the default timezone used by the date functions
; http://www.php.net/manual/en/datetime.configuration.php#ini.date.timezone
date.timezone = "Europe/Berlin"
[...]
接下来创建php-fpm
的系统启动链接并启动它:
systemctl enable php-fpm
systemctl restart php-fpm
PHP-FPM是在端口9000
上运行FastCGI服务器的守护进程(具有init脚本/etc/init.d/php-fpm
)。
要在nginx中获得CGI支持,我们安装了Fcgiwrap。
Fcgiwrap是一个CGI包装器,它也适用于复杂的CGI脚本,可用于共享托管环境,因为它允许每个虚拟机使用自己的cgi-bin
目录。
由于CentOS 7.0没有fcgiwrap
软件包,我们必须自己构建它。 首先我们安装一些先决条件:
yum -y install fcgi-devel
现在我们可以建立fcgiwrap
,如下所示:
cd /usr/local/src/
git clone git://github.com/gnosek/fcgiwrap.git
cd fcgiwrap
autoreconf -i
./configure
make
make install
这将fcgiwrap
安装到/ usr / local / sbin / fcgiwrap
。
接下来,我们安装了spawn-fcgi
软件包,它允许我们作为守护进程运行fcgiwrap
:
yum -y install spawn-fcgi
打开/ etc / sysconfig / spawn-fcgi
...
nano /etc/sysconfig/spawn-fcgi
...并修改文件如下:
# You must set some working options before the "spawn-fcgi" service will work.
# If SOCKET points to a file, then this file is cleaned up by the init script.
#
# See spawn-fcgi(1) for all possible options.
#
# Example :
#SOCKET=/var/run/php-fcgi.sock
#OPTIONS="-u apache -g apache -s $SOCKET -S -M 0600 -C 32 -F 1 -P /var/run/spawn-fcgi.pid -- /usr/bin/php-cgi"
FCGI_SOCKET=/var/run/fcgiwrap.socket
FCGI_PROGRAM=/usr/local/sbin/fcgiwrap
FCGI_USER=apache
FCGI_GROUP=apache
FCGI_EXTRA_OPTIONS="-M 0770"
OPTIONS="-u $FCGI_USER -g $FCGI_GROUP -s $FCGI_SOCKET -S $FCGI_EXTRA_OPTIONS -F 1 -P /var/run/spawn-fcgi.pid -- $FCGI_PROGRAM"
现在将用户nginx
添加到组apache中
:
usermod -a -G apache nginx
创建spawn-fcgi
的系统启动链接...
chkconfig spawn-fcgi on
...并启动如下:
systemctl start spawn-fcgi
您现在应该在/var/run/fcgiwrap.socket
中找到fcgiwrap
套接字,由用户和组apache拥有
(某些脚本,例如Mailman,希望由用户/组apache
运行,这就是为什么我们不运行spawn -fcgi
作为用户/组nginx
,而是将nginx
添加到apache
组)。
14.1其他PHP版本
从ISPConfig 3.0.5开始,可以通过FastCGI和PHP-FPM在一个服务器上(通过ISPConfig可选)拥有多个PHP版本。 本教程介绍了在CentOS中构建其他PHP版本的过程: 如何使用多个PHP版本(PHP-FPM和FastCGI)与ISPConfig 3(CentOS 6.3)