这个博客坚持了好多年了,经常会涉及到一些简单维护,因为频率低,很多操作会忘记,故特此记录。

2021年09月 迁移到Amazon Linux 2

看起来很简单,但是还是搞了大概3-4个小时吧,故记录如下。

最新的Wordpress推荐使用PHP 7.4以上的版本,才能比较好的使用最新的块编辑器;另外,最近要安装一个Resume插件也需要php 5.7以上的版本;另外,Amazon Linux在2020年底已经停止了标准支持(standard support),进入了维护支持的阶段(maintenance support phase,参考)。感觉,是时候升级一下EC2的主机了。

购买新主机EC2主机

安装httpd、mysql-server、php

Amazon Linux 2是一个类似RHEL/Centos/Fedora的发行版本,故使用类似的方法安装。

rpm -E %{rhel} 7 cat /etc/os-release NAME="Amazon Linux" VERSION="2" ID="amzn" ID_LIKE="centos rhel fedora" VERSION_ID="2" PRETTY_NAME="Amazon Linux 2" ANSI_COLOR="0;33" CPE_NAME="cpe:2.3:o:amazon:amazon_linux:2" HOME_URL="https://amazonlinux.com/"

安装httpd(默认安装版本是:2.4.48-2.amzn2):

sudo yum install httpd

安装MySQL:MySQL的按照还是比较复杂的,官方的MySQL已经不在一般的默认公共yum仓库中,而是需要单独配置Oracle官方的yum仓库。MariaDB一般都是在的,也许下一次升级的时候就会把Wordpress运行在MariaDB上了。暂时还是先用MySQL吧。

官方MySQL的详细安装说明:A Quick Guide to Using the MySQL Yum Repository。具体的步骤如下。

安装并启用相关MySQL的YUM仓库:

sudo rpm -Uvh mysql80-community-release-el7-3.noarch.rpm yum repolist all | grep mysql 打开MySQL 5.7(默认可能是8.0): sudo yum-config-manager --enable mysql57-community 或者通过编辑mysql仓库列表文件的方式: sudo vim /etc/yum.repos.d/mysql-community.repo -- 打开MySQL 5.7对应block的参数enable=1 sudo yum install mysql-community-server mysql -V mysql Ver 14.14 Distrib 5.7.35, for Linux (x86_64) using EditLine wrapper

启动并初始化MySQL:

sudo service mysqld start Redirecting to /bin/systemctl start mysqld.service --找到MySQL root的初始密码 sudo cat /var/log/mysqld.log |grep pass 为了简化把本地密码设置为空了,前提是需要在my.cnf中配置如下参数: validate-password=OFF

安装php7.4:默认安装的php版本时比较低的,需要使用amazon-linux-extra命令安装。

sudo amazon-linux-extras enable php7.4 yum install php 另外,一些相关的包也都要安装: yum install php-cli php-pdo php-fpm php-json php-mysqlnd

配置Web Server,安装Wordpress

在httpd配置中新增站点的配置文件,并将原来的站点目录文件都拷贝新主机下:

# DumpIOInput On # DumpIOOutput On # LogLevel debug # DumpIOLogLevel debug ServerAdmin [email protected] DocumentRoot /var/www/orczhou.com ServerName www.orczhou.com Redirect permanent / https://www.orczhou.com/ ErrorLog logs/orczhou.com-error_log CustomLog logs/orczhou.com-access_log common Options Indexes FollowSymLinks AllowOverride None Order allow,deny Allow from all

将MySQL中的数据导入新的数据库

source /var/www/backup.blog.210915/wp_orczhou.210915.sql 设置数据库的账号和密码: GRANT ALL PRIVILEGES ON `wp_orczhou`.* TO 'wp_orczhou'@'localhost' identified by 'wp_orczhou_123';

最后配置SSL:按照相关httpd模块,并把需要的两个秘钥文件拷贝到对应的目录下。

yum install mod_ssl service httpd restart

最后,测试完成后,再切换域名。

2021年09月 新增了resume builder插件

新增了该插件之后,为了更好地适配中文简历,并对样式做一些微调,对主题中的header.php做了如下修改:

<!--added by [email protected]>
<?php
/*
* Check if this is a page in "resume builder " page
*
* */
global $post;
//print_r($post);
if($post->post_type == "rb_resume"){
echo <<<EOT
<style>
#header { display: none;}
#footerbox { display: none;}
#single-post-title { display: none;}
#single-post-title-comment { display: none;}
#blogImg {display:none;}
#single-page-comments {display:none;}
.rbt-header .rbt-name {display:none;}
.rb-template-default .rbt-contact-info {margin-top:5px;margin-bottom: 15px;}
.rb-template-default .rbt-section-heading {margin-bottom:5px;}
.rb-template-default .rbt-history-blocks .rbt-history-block .rbt-history-place-time>span{ font-weight:normal; }
.rb-template-default .rbt-history-blocks .rbt-history-block .rbt-history-job-degree {font-size:14px;}
.rbt-history-description ul {margin-left: 0px; padding-left: 0px;}
html { margin-top: 1px !important; }
.rb-template-default .rbt-history-blocks .rbt-history-block .rbt-history-job-degree::after{top:5px;}
.rbt-header-wrapper {align-items: center;}
</style>
EOT;
}
?>
<!--END added by orczhou-->

2020年03月30日 博客升级为https支持

具体可以参考:基于httpd的wordpress站点升级为https

2019年12月01日 文件上传限制修改为25MB

分别修改php.ini中文件的:post_max_size = 25M upload_max_filesize = 25M

sudo vim /etc/php.ini upload_max_filesize = 25M post_max_size = 25M

2018年07月23日 使用fail2ban自动化一些BAN

httpd的访问日志中,有一些异常的访问,会导致httpd压力比较大,但是这些IP看起来是某个自动化的程序发送过来的,而且持续变化,无法手动ban,只能找一个自动化的程序,这里使用fail2ban,看起来工作的还可以:

sudo yum install fail2ban 日志信息 112.111.185.113 - - [23/Jul/2018:02:23:34 +0000] "GET /index.php/2011/09/thanks-percona-response-time-distribution HTTP/1.1" 301 - 112.111.185.113 - - [23/Jul/2018:02:23:34 +0000] "GET /index.php/2011/09/thanks-percona-response-time-distribution/ HTTP/1.1" 200 28759 112.111.185.113 - - [23/Jul/2018:02:23:44 +0000] "GET /index.php/2011/09/thanks-percona-response-time-distribution HTTP/1.1" 301 - 112.111.185.113 - - [23/Jul/2018:02:23:45 +0000] "GET /index.php/2011/09/thanks-percona-response-time-distribution HTTP/1.1" 301 - 112.111.185.113 - - [23/Jul/2018:02:23:45 +0000] "GET /index.php/2011/09/thanks-percona-response-time-distribution HTTP/1.1" 301 - 112.111.185.113 - - [23/Jul/2018:02:23:45 +0000] "GET /index.php/2011/09/thanks-percona-response-time-distribution HTTP/1.1" 301 - 112.111.185.113 - - [23/Jul/2018:02:23:46 +0000] "GET /index.php/2011/09/thanks-percona-response-time-distribution HTTP/1.1" 301 - 配置: jail.conf [apache-my-1] enabled = true filter = apache-my-1 logpath = /var/log/httpd/orczhou.com-access_log action = iptables[name=fail2banapach, port=http, protocol=tcp] bantime = 172800 ; 2 days findtime = 300; 1 day maxretry = 5 $ cat filter.d/apache-my-1.conf # Fail2Ban configuration file # # # [Definition] # # failregex = ^<HOST> -.*"(GET|POST).*HTTP.*"(?:%(badbots)s|%(badbotscustom)s)"$ # 112.111.185.113 - - [23/Jul/2018:02:15:11 +0000] "GET /index.php/2011/09/thanks-percona-response-time-distribution/ HTTP/1.1" 200 28725 failregex = ^<HOST> -.*thanks-percona-response-time-distribution.*$ # Option: ignoreregex # Notes.: regex to ignore. If this regex matches, the line is ignored. # Values: TEXT # ignoreregex = 查看是否ban成功: sudo tail -f -n 100 /var/log/messages|grep "fail2ban" Jul 23 02:26:00 ip-172-31-31-180 fail2ban.filter : INFO Added logfile = /var/log/httpd/orczhou.com-access_log Jul 23 02:26:00 ip-172-31-31-180 fail2ban.filter : INFO Set maxRetry = 5 Jul 23 02:26:00 ip-172-31-31-180 fail2ban.filter : INFO Set findtime = 600 Jul 23 02:26:00 ip-172-31-31-180 fail2ban.actions: INFO Set banTime = 172800 Jul 23 02:26:00 ip-172-31-31-180 fail2ban.jail : INFO Jail 'ssh-iptables' started Jul 23 02:26:00 ip-172-31-31-180 fail2ban.jail : INFO Jail 'apache-my-1' started Jul 23 02:26:22 ip-172-31-31-180 fail2ban.actions: WARNING [apache-my-1] Ban 112.111.185.113

2018年06月20日 Ban一些IP

Ban: sudo iptables -A INPUT -s 175.44.8.219 -j DROP Un-ban: sudo iptables -D INPUT -s 42.120.74.101 -j DROP

2018年01月21日 简单的博客备份脚本

#!/bin/bash bdir="backup.blog."`date +%y%m%d` mkdir $bdir && cd $bdir mysqldump -uroot wp_orczhou > wp_orczhou.`date +%y%m%d`.sql tar zcf orczhou.com.`date +%y%m%d`.tar.gz /var/www/orczhou.com cd .. && tar zcf $bdir.tar.gz $bdir

这个脚本需要使用sudo运行,原因是wp-config.php从安全的角度,给出尽可能少的权限:

-rw------- 1 apache apache 3.2K Jan 23 03:33 /var/www/orczhou.com/wp-config.php

可以看到,只有owner有rw权限,group和other都没有权限。

2018年01月21日 从digitalocean迁移到EC2

之前使用digitalocean主要是因为价格便宜(5$/月),使用体验也非常不错,界面也简单(大概是因为产品线少吧),所以从13年使用至今:
Snip20180123_99

对比了一下,现在AWS的价格也很便宜了(3年tokyo t2.micro ec2是$174),而且东京实例网络延迟也比欧美地区好非常多。所以,果断搬迁。

购买的是tokyo地区的EC2,可用区ap-northeast-1a,用的Amazon Linux,用的普通硬盘。环境搭建也比较简单,这里简单记录一下:

sudo yum install mysql57-server sudo service mysqld start # MySQL innodb buffer pool size改为50MB,my.cnf中新增: innodb_buffer_pool_size = 50M sudo service mysqld restart sudo yum httpd install sudo service httpd start # 配置httpd: 监听80端口,配置VirtualHost <VirtualHost *:80> ServerAdmin [email protected] DocumentRoot /var/www/orczhou.com ServerName www.orczhou.com ErrorLog logs/orczhou.com-error_log CustomLog logs/orczhou.com-access_log common </VirtualHost> <Directory "/var/www/orczhou.com"> Options Indexes FollowSymLinks AllowOverride None Order allow,deny Allow from all </Directory> # 安装php: sudo yum install php sudo yum install php-mysql sudo service httpd restart # 配置httpd,减少服务进程数量,减少内存 <IfModule prefork.c> StartServers 4 MinSpareServers 3 MaxSpareServers 6 ServerLimit 20 MaxClients 20 MaxRequestsPerChild 4000 </IfModule> # 导出导入数据库 mysqldump -uroot wp_orczhou > wp_orczhou.sql mysql -uroot wp_orczhou < wp_orczhou.sql #账号授权 grant all ON wp_orczhou.* TO 'wp_orczhou'@'localhost' IDENTIFIED BY PASSWORD 'xxxxxxx’;

基本上,上面的命令就可以完成整个安装了。其他一些记录的:(1) MySQL5.7的默认配置基本上满足需求,默认bp是128MB,对大一点的EC2应该也是OK的,我这个主机由于httpd占用内存较多,出现了OOM把mysqld kill掉的情况,所以调小到50MB。 (2) EC2开通的时候,需要注意选带公网IP的选项;另外,默认应该是只允许22端口开放,注意要在安全组新增80端口的开放。 (3) 插曲,之前还选了一次REDHAT Linux,后来发现RH Linux要比Amazon Linux贵非常多,就换了。不过,也可以看到Amazon上生态非常完善,如果是企业级应用,对稳定性诉求更高,可以选择RH Linux。

2017年12月27日 调整上传文件大小的限制

为了上传更大的文件(PDF),于是调整了上传文件大小限制。参考了这篇文章:Is The WordPress Upload Limit Giving You Trouble? Here’s How To Change It,操作包括:

更改了/etc/php.ini的配置:upload_max_filesize = 5M 重新启动httpd之后,配置生效。

2016年03月14日 关闭gravatar服务

鉴于速度太慢,关闭gravatar头像服务

2016年03月14日 删除Google Reader插件

2016年03月03日 删除xmlrpc.php

因为有个IP一直不断发送POST请求到xmlrpc.php,所以将xmlrpc.php重命名为xmlrpc.php.bak,当然相应功能也就没了。同时使用iptable禁用相应IP参考

iptables -A INPUT -s 185.130.5.243 -j DROP

2011年03月13日 修改主题 增加目录插件

修改主题,删除顶端的蓝色的条纹,缩小了banner的高度

/*--- Blog Pic ---*/
#blogImg {
background:#368be6 url(images/blogImg.gif) repeat-x;
/*height:109px;*/
height:4px;
width:100%;
}
#blogPic {
/*background:#368be6 url(images/blogPic.jpg);*/
/*height:109px;*/
width:960px;
margin:0 auto;
}
  • 目录使用插件Table of Contents Plus实现
  • 2010年10月08日 新增Quotmarks Replacer

    使用插件Quotmarks Replacer来解决半角引号会被自动替换成全角引号的问题

    2009年12月02日 新增了mycode样式的代码

    CSS样式如下:

    /*------added by [email protected]*/ .mycode { -moz-background-clip:border; -moz-background-inline-policy:continuous; -moz-background-origin:padding; -x-system-font:none; background:#222222 url(../image/code.gif) repeat scroll 0 0; border-left:6px solid #1664D9; color:#00CC00; display:block; font-family:"Courier New",Courier,monospace; font-size:1em; font-size-adjust:none; font-stretch:normal; font-style:normal; font-variant:normal; font-weight:normal; line-height:normal; margin-bottom:12px; overflow:auto; padding:10px; width:95%; } /*------added by [email protected]*/ .myt1{ color: red; margin-left: 30px; margin-bottom: 5px; } /*------modified by [email protected]*/ blockquote{ margin:0,28px,0,28px; }

    2009年08月09日 添加插件"WP-Cumulus"

    代码更改如下:
    <!--Modified by orczhou for Plugin-wp-cumulus-->
    <?/*php wp_tag_cloud('unit=px&smallest=12&largest=22&number=20'); */
    wp_cumulus_insert();?>

    评论已经关闭。