本人博客几经周折,最初 BPS,到独立的域名、空间,每一次也是为向更自由的管理迈进一步。现在终于搞了个 VPS,不过是在美国的,慢是慢了点,不过自己想怎么弄就怎么弄,现也无需经常性的找客服了。
VPS 是 768M RAM, 1536 的交换空间,40G硬盘空间,2500G带宽,两固定 IP,其实我只要一个就行了。服务器是在我所在的城市,所以管理起来应该要快些,至少感觉会有点。
基于系统资源和稳定性的考虑,我选择了 Debian 系统,Ubuntu 就是基于它的。在一个干净的系统上要搭建 WordPress 需要预先准备好 Apache2+PHP5+MySQL5 这样的环境,Apache2 是以 worker 模式运行,PHP 是 FastCGI 方式,Wordpress 连接 MySQL 可以本地 Socket 方式。下面是步骤:
一. 系统设置
配置时区,方便查看日志能对应上你当地的时间
#dpkg-reconfigure tzdata
选择相应的城市,这步会修改 /etc/timezone 和 /etc/localtime 文件
要能让 WordPress 发送外部邮件,使用的是 exim4, 要修改文件 /etc/exim4/update-exim4.conf.conf, 把
dc_eximconfig_configtype 的值由 local 改成 internet
保存,然后重启 exim4 服务。关于此可参见 debian 无法向外发送邮件
二. Apache2 安装
#apt install apache2
Apache2 的控制命令是
# /etc/init.d/apache2 {start|stop|graceful-stop|restart|reload|force-reload|start-htcacheclean|stop-htcacheclean|status}
要停掉所有的 Apache2 进程,使用命令
#killall apache2
Apache2 所有配置文件在 /etc/apache2 目录下
Apache2 默认的字符集配置在 /etc/apache2/conf.d/charset 文件中,如果不用默认的 utf-8 的话就修改为其他的值
和许多系统下的 Apache2 不一样,/etc/apache2/httpd.conf 是个空文件,你会发现某些原来在 httpd.conf 中的内容移入到了 apche2.conf 中了,多数的配置分散在了众多的文件中去了,这样做更好理解了。
比如环境配置在 evnvars 中,启用的模块在 mods-enabled 目录中,启用的站点在 sites-enabled 目录中等等,用
#ls -l /etc/apache2
看下就知道了,这里的 apache2.conf 才是所有配置文件的统领,每个配置文件都打开来瞧一瞧就知道它们是怎么分担任务的。
我们的 WordPress 一般会用到 rewrite 模块,需要启用它,命令是
#a2enmod rewrite
Apache2 的命令,a2dismod, a2ensite, a2dissite 再上前面的 a2enmod 都在 /usr/sbin 目录中,可能需要手动在 ~/.profile 中把 /usr/sbin 加到 PATH 上去
前面步骤安装的 Apache2 是随系统自动启动的,Debian 也有一个像 RedHat 中的 chkconfig 那样的工具,能查看和设置自动启动的程序,非系统自带,要安装
#apt install sysv-rc-conf
#sysv-rc-conf --help
如果启动 apache2 时提示你如下的话语
apache2apache2 Could not reliably determine the server's fully qualified domain name ....
那就创建一个文件 /etc/apache2/conf.d/fqdn,在其中配置一个 ServerName,参考:
ServerName unmi.cc
这里有两篇文章很有用 Debian 下Apache2安装与设置 一 ZT 和 Debian下Apache 2 配置指令 二 ZT
三. 安装 MySQL 5
#apt install mysql-server
这步会自动安装上 mysql-client,安装好 MySQL 后也是自动启动的
MySQL 的控制命令是
/etc/init.d/mysql start|stop|restart|reload|force-reload|status
酌情而定是否要改下 MySQL 的默认字符集为 utf8,因为可以指定当前数据库的字符集。有这个必要的话请修改 /etc/mysql/my.cnf,相应的位置处加下如下内容:
[client]
default-character-set=utf8
[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci
改后重启 MySQL 可用命令看看字符集
mysql> show varaibles like 'character_set_%'
记得创建数据库时指定好参数
mysql> create database wordpress character set utf8 collate utf8_general_ci
可能在导入数据时需指定字符集,像下面的命令来导入数据
#mysql -uusername -p --default-character-set=utf8 wordpress < wordpress.sql
MySQL 的乱码有时也会让人头疼一下,只要统一成 utf8 总是办法。参考下 彻底解决mysql中文乱码的办法。
四. PHP5 的安装配置
#apt install libapache2-mod-fcgid
fcgid 模块的配置,编辑 /etc/apache2/mods-available/fcgid.conf,完整内容如下:
<IfModule mod_fcgid.c>
AddHandler fcgid-script .php .py .pl .fcgi
SocketPath /var/lib/apache2/fcgid/sock
IPCConnecTimeout 20
FcgidMaxRequestLen 10485760
</IfModule>
#apt install php5-cgi
如果上面 FcgidMaxRequestLen 的默认值为 131072, 需要设置一个合适的请求数据的最大长度,如若不然,基本上传图片都是显示 HTTP Error, 原因是
mod_fcgid: HTTP request length 132478 (so far) exceeds MaxRequestLen (131072), referer: http://yanbin.blog/wp-admin/post.php?post=Xxx&action=edit&message=6
编辑相应的站点文件,如编辑 /etc/apache2/sites-available/default,相应位置加上或改成紫色内容
<Directory />
FCGIWrapper /usr/bin/php5-cgi .php
Options FollowSymLinks
AllowOverride All
</Directory>
<Directory /var/www/>
Options Indexes FollowSymLinks ExecCGI
AllowOverride All
Order allow,deny
allow from all
</Directory>
FCGIWrapper 是处理 php 的需要,AllowOverride 设置为 All 是为了启用 .htaccess 的功能。
#apt php5-mysql php5-curl ......任何你想要的 php 模块,或以后缺什么被会都行
如果上一步有提示把 apche2-mpm-worker 给卸了的话,就重新安上它
#apt install apache2-mpm-worker
重启下 apache 后在 /var/www/ 目录下建个 index.php 文件测试下,是否运行正常,是否是 FastCGI 方式,并支持了前面安装的模块。
Apache 性能初步调优可参考(http://linxucn.blog.51cto.com/1360306/736322)
1 2 3 4 5 6 7 8 9 10 11 12 |
Timeout 30 KeepAlive On MaxKeepAliveRequests 100 KeepAliveTimeout 2 <IfModule prefork.c> ServerLimit 150 StartServers 4 MinSpareServers 4 MaxSpareServers 10 MaxClients 150 MaxRequestsPerChild 100 </IfModule> |
特别留意 MaxRequestPerChild 默认为 0 表示永不重启 Apache 服务进程不退出,很要命。这里设置为一个 Apache 服务进程处理完 100 次请求之后自动重启。然后就是 Timeout 选择一个合适的值。
五. WordPress 相关
这里不是介绍 WordPress 的安装,只把碰到的几个问题解决一下。其实前面有说 WordPress 中发不了邮件,必须把某个 local 值改为 internet。
再就是在线安装 WordPress 插件时,如果收到要进行 FTP 的配置的话,是因为目录权限的问题。Debian 运行 Apache2 的用户是 www-data 组,www-data 用户,可在 /etc/apache/envvars 中看到,所以需更改目录所属组和用户
#chown -R www-data:www-data /var/www
另外一个,因为这里 MySQL 是运行在同一机器上,所以在 WordPress 的 wp-config.php 中的 MySQL hostname 可定义为
#define('DB_HOST', 'localhost:/var/run/mysqld/mysqld.sock');
这个 sock 文件可在 /etc/mysql/my.cnf 中找到。
这样配置的效率上有多少改善还未可知,感觉好象连接数据库没绕那么一下,可能根本就毫无差别。
好啦,现在服务器基本上处在我们自己的控制之下了,你可以完全动用系统资源为我们服务,出什么状况自己进行处理。对系统的资源,各类日志的监控等,快速定位真正的问题。系统想怎么配置就怎么配置,只要系统资源允许的情况下,挂多少个域名,数据库都是随意的。也可以不依赖于插件,直接在系统一级用 cron 进行定时备份文件和数据库。
本文链接 https://yanbin.blog/debian-vps-for-wordpress/, 来自 隔叶黄莺 Yanbin Blog
[版权声明] 本文采用 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 进行许可。
[…] Unmi 本人博客几经周折,最初 […]