Tag Archives: WordPress

低配置VPS安装WordPress之后的优化

在白嫖的AWS(Amazon Linux 2,单核,1G内存,30G硬盘)安装Wordpress之后,主页经常出现数据库链接错误:Error Establishing a Database Connection。一看是mariadb挂掉了,重启之后可以解决。查看日志发现是内存不足所致,通过 free -m查看系统只有1G内存,而且快用完了,于是给系统增加了SWAP,并做了一些优化,目前工作比较正常。大部分命令都需要sudo,这里就不专门指出了。

一、增加SWAP

创建 swapfile,大小一般为物理内存的两倍:

dd if=/dev/zero of=/swapfile bs=1M count=2048

配置 swap 文件:

mkswap /swapfile

设置正确的权限类型:

chmod 600 /swapfile

启用 swapfile:

swapon /swapfile


在 /etc/fstab 中添加下面一行,这样可以在系统下次重启时自动生效创建的 swapfile:

/swapfile       swap    swap defaults   0 0

二、修改mysql配置

在/etc/my.cnf增加下面一行,将InnoDB缓存改成32M(默认128M):

innodb_buffer_pool_size=32M

可以登录mariadb后用SQL查看当前配置:

SELECT @@innodb_buffer_pool_size/1024/1024;


三、利用crontab守护Mariadb

使用crontab -e命令在crontab添加一行计划任务(拷贝下面的命令到末尾保存即可):每分钟对Mariadb进程进行检查,若进程不存在则重新启动数据库服务:

*/1 * * * * if [ -z `ps -ef|grep mariadb|grep -v grep|awk '{print $2}'` ];then systemctl start mariadb;fi 

重载crontab使配置生效:

systemctl reload crond.service


开机自启crontab,编辑/etc/rc.d/rc.local文件,在末尾添加以下内容并保存即可:

systemctl start crond.service

四、优化php-fpm

修改/etc/php-fpm.d/www.conf里的下列配置:

pm = dynamic
pm.max_children = 15
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 15

在AWS EC2 Amazon Linux 2 上安装WordPress

首先还是要赞一下AWS,虽然是海外版,但中文文档还是准备得很不错的,而且基本上都是可用的。

安装步骤大概分以下几步:

  • 1、 EC2上创建Amazon Linux 2实例

找一个邮件地址注册AWS的账号,注意只有海外版AWS才能免费用一年。创建实例的时候选Amazon Linux 2 AMI,HTTP和HTTPS端口都打开,硬盘直接30G即可。实例启动之后申请一个Elastic IP并绑定到该实例,然后去域名提供商那里改DNS指向该IP。AWS的ROUTE 53也可以做域名解析,但是是收费的。

  • 2、安装 LAMP

基本上安装官方文档来即可:在 Amazon Linux 2 上安装 LAMP。phpMyAdmin 我没装。

  • 3、Apache配置域名

提前给Apache配置好域名,否则生成证书的时候会报错。

cd /etc/httpd/conf.d
sudo vi yourDomainName.conf

添加下面内容:

<VirtualHost *:80>
    ServerName yourDomainName.com
    DocumentRoot /var/www/html
    ServerAlias www.yourDomainName.com
    ErrorLog /var/www/error.log
    CustomLog /var/www/requests.log combined
</VirtualHost>

保存之后:

    sudo systemctl httpd restart  
  • 4、配置HTTPS和证书

官方文档:在 Amazon Linux 2 上配置 SSL/TLS。就选用文档里说的免费证书: Let’s Encrypt 项目,用Certbot 自动创建。但是Certbot手册 里让你选择OS的时候根本没有Amazon Linux 2可选,勉强选了CentOS之后按照CentOS的方式安装snapd和Certbot,但是出错了,后来找到这个:albuild-snap,里面提供了Amazon Linux 2需要的RPM包。但最后运行Cerbot的时候还是报错了:

An error occurred while fetching Certbot snap plugins: your version of snapd is outdated.
Please run "sudo snap install core; sudo snap refresh core" in your terminal and try again.
An unexpected error occurred:
requests.exceptions.HTTPError: 404 Client Error: Not Found for url: http://snapd/v2/connections?snap=certbot&interface=content
意思是snapd版本太低,但实际上是最新的。官方找到一个TICKET:Error in aws ec2 instances #8377,往下看时有点失望,有一个人好像是Certbot开发人员,说暂时还不支持Amazon Linux 2,然后就看到有别人说他成功了,虽然他是nginx,然后也不妨一试,把nginx改成apache:
cd /home/ec2-user/
wget -O epel.rpm –nv https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
sudo yum install -y ./epel.rpm
sudo yum install python2-certbot-apache.noarch
sudo certbot --apache

然后一直输入需要的信息就可以了,证书自动安装成功。

  • 5、安装WordPress
这一步也按照官方文档:在 Amazon Linux 2 上托管 WordPress 博客 一步一步操作即可。如果是像我这样恢复以前的博客,那么需要通过WinSCP把原来的数据库文件和图片上传,而且导入数据的时候要注意新旧数据库的名字是不是一致。最后打开博客的时候页面空白,登录到管理页面发现是原来使用的Theme没有安装,重新安装一下即可。

Blog又又回来了

上次恢复之后没多久,发现我买的三年还是五年的Bluehost VPS到期了,想了一下,没有续费也没有重新购买,大概理由有几个:

一是莫名其妙中毒,导致WEB文件全部损坏。

二是找客服太麻烦,响应也不及时。上次让客服帮我恢复文件,再三确认过的,人说已经创建了TICKET有人会去处理的,结果等我过完年回来,啥也没发生,而且他们只保留一个月的备份,所以再也找不回来了。我只能从本地找到一个2017年的备份,恢复之后2017年以后的文章里的图片暂时都看不到,需要重新上传。

三就是Shared Host没有权限太麻烦,干啥都不行。

四就是从几年前开始,Bluehost修改了SSH配置,SSH不能当代理了。

所以到期之后Blog下线了一段时间,最近媳妇儿发现我手机上有AWS的账单,问是啥东西,我说原来公司在AWS服务器架了一个网站,后来网站不用了那服务器现在就当SSH代理用,她说那也太贵了吧,一个月二十刀呢,你就不能搞个不要钱的么?想想也是,那就白嫖一下AWS吧,找了一个AWS官方的文档,花了两个下午都搞定了,具体过程回头专门写一篇文章来说,目前看来一切都好,就看EC2这免费流量够不够吧。至于一年以后,再说吧,有时间重新搭一个继续白嫖,没时间那就付费呗,这应该也是AWS所期望的吧,:)。

Chinese Word Count插件导致WordPress白屏无法访问

每天早上开机之后看到WordPress提示有插件更新,一般也不仔细看,直接就点批量更新了。昨天早上好像也有两个插件可更新,点了之后就没再细看。后来下午在客户端上发布完中午拍的照片,结果网站无法访问了,直接。看了一下后台的PHP日志,有报错:

[21-Apr-2014 05:18:35 UTC] PHP Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 32 bytes) in /home3/shelunet/public_html/wp-includes/pluggable.php on line 1317

看样子是内存不够了,加了内存,结果问题还在;以为是刚才上传的那篇文章有什么问题,于是客户端删除,结果还是不行,看来XMLPRC接口没问题,UI访问有问题。

于是找HostMonster的客服,说wordpress无法访问了,他说可能是Theme或者Plugin的问题,帮我弄了一下,结果就可以了。俺当然要问什么情况,后来他就给了个链接:

WordPress White Screen of Death

看了一下,再想想日志里头那个pluggable.php,应该就是插件的问题,早上升级过的,后来没注意,以为是上传的文章有问题。链接里头是通过cPanel操作的,我是直接在Terminal上,过程也有点不一致,他是要把plugins目录移走,但是似乎光移走不行,还得再放回去,总之就是把那个目录挪动一下就行。然后wordpress就可以登录了,到Plugins页面一看,所有的插件都Disabled了,一个一个Active,很快就发现是这个Chinese Word Count引起的问题,一看版本,14.4.19,应该就是早上更新过,所以出问题了。这个插件如果在浏览器上写文章还有点用处,现在我都用客户端,也没什么意义了,索性不用了。

WordPress连接新浪微博插件:wp-tsina和sina-connect

最近其他的社交网站都不太上了,也就是新浪微博每天还会看看,顺便也把自己的文章同步到微博上,就当是打广告了。

原先用的一直是wp-tsina,主要是功能比较单一,用起来也比较简单,但是似乎不太稳定,感觉好像从草稿箱发布post的时候有问题;最近是彻底不行了。网上也没找到什么资料,作者的主页也打不开了,似乎是太监了。

试着自己修复一下,但是没什么有用的信息,只在error_log里头找到一行:

[11-Sep-2012 11:11:04] PHP Warning: session_start() [<a href=’function.session-start’>function.session-start</a>]: The session id is too long or contains illegal characters, valid characters are a-z, A-Z, 0-9 and ‘-,’ in /home3/shelunet/public_html/wp-content/plugins/wp-tsina/wp-tsina.php on line 12
但是是9月11日的,可是这插件是10月份还能用,而且后面发Post他没有同步也没有报错,只有放弃了。

在他的源文件夹下有一个connect_issue.txt,上面说:
如果你正在使用sina-connect插件,可能会出现无法登陆的状况。
暂时的解决办法:
打开sina-connect下的sinaOAuth.php,把下面这行:
require_once(‘OAuth.php’);
改为:
if( !class_exists( ‘OAuthToken’ ) ){
require_once(‘OAuth.php’);
}
即可。

新浪连接(sina-connect)我没用,但是既然提到了那我就看看吧,功能比wp-tsina要多一些,不但可以自动同步到新浪微博,也可以让评论者用微博帐号来登录,也可以选择是否同步评论到微博,这功能也还是蛮有意义的,可以提高评论率,先试试看吧,看他是不是稳定。

装完了配置也很简单,安装激活之后,你应该在留言框处可以看到用新浪微博登录的按钮(注意要先退出原来的WordPress登录)。如果没有的话按照说明自己改一下comments.php

WordPress中文支持

其实WordPress对于中文的支持还是不错的,默认安装的英文版输入和显示中文都没有问题,而不像有些人说的要是去Mysql数据库和PHP什么的,其实数据库是什么编码方式都无所谓,只要PHP在存取的时候用同一种编码方式就可以了。

唯一有一点点问题的是编辑Post时Word Count不正确,不识别中文,这个可以通过安装Chinese Word Count插件解决。

WordPress也提供中文界面,安装起来也很容易,但是个人来说还是英文版好理解。