使用BGI Online CLI下载华大基因释放的数据

1. 华大基因释放数据邮件信息

在华大基因测序完成后,释放数据的邮件信息示例:

XXX老师:

您好!

您该项目 XXXXX 数据已上传,请按照以下说明操作:

1. 下载GUI软件并解压,链接:https://pan.genomics.cn/ucdisk/s/AZjime
Windows64位系统(推荐使用):双击GUI-win\GUI-win-3.0目录下Windows批处理文件bgionline_gui.bat,打开登录界面

Windows32位系统:参考上述链接下的帮助文档

OS X和Linux系统:将当前路径移到解压文件夹,在命令行执行“sh bgionline.sh”登录界面

2. 输入账号、密码
账号:20190227F18FTSCCWLI4389
密码:WHFUNrdmE_20190227

2. 安装BGI Online CLI

若在windonws图形化界面中下载数据,则比较简单方便。若数据量较大,推荐使用Linux命令行下载数据,直接下载到服务器上。则需要安装BGI Online CLI软件:

安装软件
$ pip install bgionline
更新软件
$ pip install --upgrade bgionline 

3. 使用命令行方式下载数据

$ bo login
Logging into https://app.bgionline.cn:1001
Username: 20190227F18FTSCCWLI4389
Password: WHFUNrdmE_20190227
    输入邮件中的用户名和密码,即可生成相应的配置文件夹~/.bgionline/。
ou are now logged in. Your configurations are stored in /share/disk02_8T/home/chenlianfu/.bgionline/setting. 

Use bo select to choose your working project...

Available projects:

+-------+--------------------------------------+-------------------------+
| index | project id                           | project name            |
+-------+--------------------------------------+-------------------------+
|   0   | 3d7d64df-b0a6-439a-a443-fb73058f9925 | 20190227F18FTSCCWLJ4389 |
+-------+--------------------------------------+-------------------------+
Pick a numbered choice :0
    选择一个目标项目。
Setting current project to: 20190227F18FTSCCWLJ4389 

$ bo ls
F18FTSCCWLJ4389_FUNrdmD/
    可以列出选定项目中的文件信息
$ bo tree
/
└──F18FTSCCWLJ4389_FUNrdmD
   └──Upload_Delivery_F18FTSCCWLJ4389_FUNrdmD_PureSequence
        ├──BGI_result
        │    └──Separate

4 directories 
    以树形式列出选定项目中所有的文件夹层次信息

$ bo dowload / ./
    将项目中的所有文件夹下载到当前工作目录下。

使用wtdbg2利用三代数据进行基因组de novo组装

wtdbg2软件下载与安装

$ wget https://github.com/ruanjue/wtdbg2/archive/v2.4.tar.gz -O ~/software_packages/wtdbg-v2.4.tar.gz
$ tar zxf /share/disk02_8T/home/chenlianfu/software_packages/wtdbg-v2.2.tar.gz -C /opt/biosoft/
$ cd /opt/biosoft/wtdbg2-2.4/
$ make -j 4
$ echo 'PATH=$PATH:/opt/biosoft/wtdbg2-2.4' >> ~/.bashrc
$ source ~/.bashrc

wtdbg2软件使用

进行基因组装
$ wtdbg2 -t 16 -i reads.fa.gz -fo prefix -L 5000

得到一致性序列
$ wtpoa-cns -t 16 -i prefix.ctg.lay -fo prefix.ctg.lay.fa

利用三代reads的比对结果对基因组序列进行打磨修正
$ minimap2 -t 16 -x map-pb -a prefix.ctg.lay.fa reads.fa.gz | samtools view -Sb - >prefix.ctg.lay.map.bam
$ samtools sort prefix.ctg.lay.map.bam prefix.ctg.lay.map.srt
$ samtools view prefix.ctg.lay.map.srt.bam | ./wtpoa-cns -t 16 -d prefix.ctg.lay.fa -i - -fo prefix.ctg.lay.2nd.fa

Linux系统下使用MegaCli软件对磁盘阵列进行操作

若管理的服务器比较多,服务器的硬盘经常会坏掉。可以使用megacli命令来查看磁盘阵列中的磁盘是否损坏。

1. CentOS6系统下安装MegaCli软件

在一些rpm网站中搜索megacli。然后下载megacli的rpm包进行安装:

# wget http://rpmfind.net/linux/openmandriva/3.0/repository/x86_64/non-free/release/megacli-8.02.21-4-omv2015.0.x86_64.rpm
# wget http://mirror.rosalab.ru/openmandriva/3.0/repository/x86_64/media/non-free/release/megacli-8.02.21-4-omv2015.0.x86_64.rpm # yum install megacli-8.02.21-4-omv2015.0.x86_64.rpm megacli的使用需要依赖libsysfs库文件 # yum install libsysfs # ln -s /usr/lib64/libsysfs.so.2.0.1 /usr/lib64/libsysfs.so.2.0.2

2. 使用megacli命令查看磁盘

# megacli -PDList -aALL 
此命令可以查看所有物理磁盘的信息。
若Media Error Count和Other Error Count的值大于0,则表示磁盘可能坏掉了。
megalci命令的参数后接其值,中间没有空格。-a参数表示使用的adapter编号。 # megacli -LDInfo -LALL -aAll 此命令查看所有逻辑磁盘的信息。

# megacli -LdPdInfo -a1
此命令列出第2个阵列卡上各逻辑磁盘及其所属的物理磁盘信息。 # megacli -AdpAllInfo -aALL 查看阵列卡信息 # megacli -AdpBbuCmd -aAll 查看阵列卡电池信息

3. 使用megalci命令删除或创建阵列

我有一台服务器,其第一个阵列卡上有3块硬盘发生了损坏,导致10块硬盘组RAID6的逻辑盘数据丢失。现在拔掉损坏的硬盘,将后面位置的2块硬盘拔下补入到前面的硬盘位上,再对剩下的硬盘重新组阵列。

首先,删除第一个阵列卡上的第二个逻辑盘。该逻辑盘由于物理硬盘损坏数据丢失,数据咱也不要了,直接删除它。
# megacli -CfgLdDel -L1 -a0
-L参数接逻辑磁盘的ID编号,-a参数接阵列卡编号。

当拔掉后面的硬盘插入前面损坏盘的槽位时,硬盘状态变为Unconfigured(bad),需要将其变为Unconfigured(good)。将第一阵列卡上的Enclosure Device ID: 3/Slot Number: 2硬盘变为Unconfigured(good)。
# megacli -PDMakeGood -PhysDrv[3:2] -a0
# megacli -PDMakeGood -PhysDrv[3:4] -a0

若插拔硬盘换位发生在删除逻辑分区之前,则移位的硬盘没有删除逻辑分区信息,变为Foreign配置,需要清除其Foreign信息。若不清楚Foreign信息,后续使用其硬盘组RAID会报错:Mix of configured and unconfigured drives are not possible.
# megacli -CfgForeign -Scan -a0
# megacli -CfgForeign -Clear -a0
将外源磁盘阵列导入到阵列卡中
# megacli -CfgForeign -Import -a0

对剩下的7块硬盘组RAID6,并使其中一个硬盘为热备盘。这些磁盘可能都比较脆弱了,可能容易坏,做非常安全的RAID策略。
# megacli -CfgLdAdd -r6[3:1,3:2,3:3,3:4,3:5,3:6] WB ADRA Direct CachedBadBBU -Hsp[3:7] -a0
设置WB ADRA Direct CachedBadBBU等缓存策略参数为该逻辑盘的默认策略。

对磁盘换成策略解释如下:

WT/WB: 设置磁盘写入策略。WT为Write Through,即直写,表示将数据写入硬盘时,不经过阵列卡缓存直接写入,是默认策略;WB为Write Back,即回写,表示数据写入硬盘时,先写入阵列卡缓存,当缓存写满时再写入硬盘。毫无疑问,缓存写入速度快,将数据写入缓存能提高读写速度,极大减少真实的磁盘写入时间。这样使用回写策略既能提高逻辑盘写入性能,也能增加磁盘寿命。使用回写策略,数据可能会留在缓存,在服务器断电且阵列卡没有电池时会导致数据丢失。
NORA/RA/ADRA:设置磁盘读取策略。NORA为NO Read Ahead,即不预读;RA为Read Ahead,即强制预读,在进行读取操作时,预先把后面顺序的数据载入阵列卡卡缓存,这样能在顺序读写环境提供很好的性能,但是在随机读的环境中反而降低读取性能,它适合文件系统,而不适合数据库系统;ADaptive Read Ahead,即自适应预读,在缓存和I/O空闲时进行预读,是默认策略。
Direct/Cached:Direct表示读取操作不缓存到阵列卡缓存,是默认策略;Cached表示读取操作先缓存到阵列卡,这有利于数据的再次快速读取。
CachedBadBBU/NoCachedBadBBU:CachedBadBBU为Write Cache OK if Bad BBU,即在电池损坏时依然采取回写缓存策略;后者表示当电池损坏时采取只写缓存策略。

在本台服务器上,第二个阵列卡由于电池容量低需要更换,导致该阵列卡上第一个逻辑磁盘的写入策略变为Write Through,通过megacli命令修改该阵列卡上第一个逻辑磁盘的缓存策略:

# megacli -LDSetProp CachedBadBBU -L0 -a1

4. 使用megalci命令修改阵列中虚拟磁盘信息

当阵列已经做好,可能需要对现有的虚拟硬盘进行配置修改。将第一个阵列卡上的第一个虚拟硬盘的磁盘缓存策略修改回写。

# megacli -LDSetProp WB -L0 -a0

给第一个阵列卡上第一个虚拟硬盘配置热备盘。

# megacli -PDHSP -Set -Dedicated -Array0 -PhysDrv [28:1]  -a0

其中-a0表示第一个阵列卡,-Array0表示第一个虚拟硬盘,[28:1]前后有中括号,对应数字分别是Enclosure Device ID和Slot Number的值。

使用高版本SMRT Analysis软件对Pacbio reads进行基因组De novo组装

1. SMRT Analysis简介

SMRT Analysis软件是由Pacbio Science公司开发的软件,现在是SMRT Link软件的一部分,用于对Pacbio Long Reads数据进行分析。其2.3版本仅能用于对Pacbio RSII测序仪获得的h5格式测序数据进行,该版本持续了较长一段时间。后来Pacbio测序仪增添Sequel平台后,SMRT Analysis软件更新到3.0,增加支持对Pacbio Sequel测序仪获得的bam格式数据进行分析。现在(2018.09.02)最新版本的SMRT Analysis到了5.1版本。

2. 下载并安装SMRT Link软件

将SMRT Link安装到CentOS 6.9系统中。安装软件前需要做一些准备:

首先,确定主机名是localhost并指向127.0.0.1的IP地址。刚安装完毕的系统一般都满足此要求。
保证/etc/hosts文件中含有以下一行信息:
127.0.0.1    localhost

其次,修改/etc/security/limits.conf文件,尾部增添如下4行:
chenlianfu      soft    nproc   10240
chenlianfu      hard    nproc   102400
chenlianfu      soft    nofile  10240   
chenlianfu      hard    nofile  102400
注意chenlianfu是安装SMRT Analysis软件所使用的用户的用户名。
该步骤用于增加chenlianfu用户的权限,这是与SMRT软件较高的资源消耗和较多的并行化相关的。
此外,注意此步骤过后,从新登陆

然后,修改/etc/sysconfig/iptables文件,增加5432(PostGresql数据库需要)、9090和8243(软件网页端使用tomcat提供服务时需要9090和8423)端口。在该文件中正确的位置增加如下两行:
-A INPUT -m state --state NEW -m tcp -p tcp --dport 5432 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 9090 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 8243 -j ACCEPT
然后重启防火墙,让修改生效:
# /etc/init.d/iptables restart

最后,启动PostGresql数据库。
# /etc/init.d/postgresql initdb
# /etc/init.d/postgresql start
# chkconfig postgresql on

从Pacbio Science官网下载SMRT Link软件

将SMRT Link安装到 ~/biosoft 目录下
$ mkdir ~/biosoft
$ cd ~/biosoft
$ wget https://downloads.pacbcloud.com/public/software/installers/smrtlink_5.1.0.26412.zip
$ unzip smrtlink_5.1.0.26412.zip
    要求输入密码,可以从下载该软件的网页中找到。
$ ./smrtlink_5.1.0.26412.run
    根据提示一步一步进行配置,基本都是直接使用默认值,按Enter键即可。
    设置软件临时文件夹的时候,要选择一个较大分区所对应的目录。我将其设置为/home/chenlianfu/biosoft/tmp/smrtlink
$ /home/chenlianfu/biosoft/smrtlink/admin/bin/services-start
    启动SMRT Link软件。

3. 使用HGAP4进行基因组De novo组装

1. SMRT Link软件必须要在Chrome浏览器中打开。在Chrome浏览器中输入安装有SMRT Link软件机器的IP地址,并接:9090,例如:192.168.30.1:9090,就可以连接到软件的用户登陆界面,输入用户名admin,密码admin则会进入软件。

2. 点击Data Management,再点击VIEW OR IMPORT SEQUENCE DATA,点击IMPORT并从下拉菜单中点击Sequel Sequence Data,从弹出的浏览设置中选择路径/home/chenlianfu/biosoft/smrtlink/install/smrtlink-release_5.1.0.26412/bundles/smrtinub/install/smrtinub-release_5.1.0.25847/private/pacbio/canneddata/lambdaTINY/m150404_101626_42267_c100807920800000001823174110291514_s1_p0.subreadset.xml,点击IMPORT,运行一段时间后,导入数据成功。

3. 返回到软件主界面,点击SMRT Analysis,点击CREATE NEW ANALYSIS,在Analysis Application下拉菜单中选择Assembly(HGAP 4),Analysis Name栏随便填写字符串Lambda_HGAP4,在Genome Length栏将基因组大小修改为58000,在Data Sets中勾选lambda/007_tiny,最后点击START,开始程序运行。

4. 值得注意的是公司给的测序数据文件夹中常常不包含sts.xml、adapters.fasta和scraps bam等文件,而在总的xml文件中却包含了这些信息,需要将其对应的行(第7行到第15行)删除掉后再运行HGAP4,否则程序运行会失败。

5. 程序运行结果在/home/chenlianfu/biosoft/smrtlink/userdata/jobs_root/目录下的一个数字编号(按运行顺序从000001开始编号)的文件夹中。该文件夹中的的主要结果文件(也可以在网页中下载):
./tasks/pbcoretools.tasks.contigset2fasta-0/file.fasta 最终的基因组组装结果。
./tasks/pbcoretools.tasks.gather_fasta-1/file.fasta 按某个长度

使用TeamViewer突破内网封锁远程连接服务器

1. TeamViewer作用

经常由于学校对端口的封锁,在校外难以使用OpenSSH连接学校内网的服务器。这个时候,可以在学校内网的服务器上开启图形化界面运行TeamViewer软件,同时在外网的笔记本电脑上同时运行TeamViewer软件。在两个软件上输入相同的用户名和密码,则可以通过该软件连接学校内网的服务器桌面,从而对内网服务器进行操作。

2. 内网服务器上安装TeamViewer软件

我的服务器系统是CentOS 6.9 64位系统,在TeamViewer网站上下载Linux 64位版本的TeamViewer软件。目前最新是V13版本的TeamViewer,貌似支持CentOS7。对于CentOS 6则下载V12版本的TeamViewer

# wget https://dl.tvcdn.de/download/version_12x/teamviewer_12.0.93330.i686.rpm
# yum install teamviewer_13.2.13582.x86_64.rpm

然后再内网服务器进入图形化桌面,在桌面上的各种菜单中寻找TeamViewer图标启动软件,输入用户名和密码登陆软件软件或记录其ID和密码。

3. 外网笔记本电脑上TeamViewer软件安装和使用

在TeamViewer官网下载windows系统的软件安装并运行。登陆用户名和密码进入软件控制远程服务器,或输入ID和密码来控制远程服务器。

使用ossutil命令下载诺禾致源释放的数据

1. 诺禾致源的数据释放邮件信息

诺禾致源释放数据的内容在诺禾致源释放数据的邮件中,可以找到如下示例内容:

AccessKeyId: LTAI2SeW6yzC54B2
AccessKeySecret: XTpXkjeqATP29sft8YE30ueN6UafCX
预设OSS路径: oss://novo-data-nj/customer-Cbd6p59N/
区域: 华东1(杭州)

2. 在CentOS系统上安装ossutil软件

诺禾致源的数据存放到aliyun系统上,并支持使用ossutil命令下载。

wget http://gosspublic.alicdn.com/ossutil/1.6.0/ossutil64
 -O ~/bin/ossutil
chmod 755 ~/bin/ossutil

3. 使用ossutil下载数据

首先,配置下载用户名、密码和数据服务器存放区(Endpoint)

ossutil config -e oss-cn-hangzhou.aliyuncs.com -i LTAI2SeW6yzC54B2 -k XTpXkjeqATP29sft8YE30ueN6UafCX

-e 设置数据服务器存放区。华东1(杭州)对应上述的路径。若是其它区域,则使用其它的路径,例如华北2(北京)为oss-cn-beijing.aliyuncs.com。
-i 设置用户名AccessKeyId。
-k 设置密码AccessKeySecret。

然后,下载数据:

ossutil cp -r -f --jobs 3 --parallel 2 oss://novo-data-nj/customer-Cbd6p59N/ ./

-r 表示复制目录
-f 表示强制覆盖已有的文件结果
--jobs 3 表示从3个位置下载同一个文件
--parallel 2 表示同时下载2个文件。

若提示“RequestTimeTooSkewed”错误,则可能是服务器的时间和阿里云服务器的时间差较大,这时同步下时间即可:

sudo ntpdate time.nist.gov

启用windows10的linux子系统

1. 首先,在windows10中启用开发者模式。按windows+x键,打开系统管理菜单;点击应用和功能,再点击主页;点击更新和安全,再点击开发者选项,勾选开发人员模式。在联网情况下,系统会安装高级开发功能。

2. 然后,启用windows10的linux子系统。按windows+x键,打开系统管理菜单,点击页面右边的程序和功能;在弹出的页面中点击启用和关闭windows功能,在继续弹出的页面中勾选适用于Linux的Windows子系统,点击确定,并重启windows10系统。

3. 最后,按windows键,点击并打开应用商店;在搜索栏搜索linux,然后选择一个喜欢的linux发行版本,比如debian或ubuntu等,进行下载和安装。

4. 我选择了debian进行下载和安装,最后,提示输入用户名和密码。该用户自动是超级管理员用户,可以使用sudo su -命令切换到root用户。

5. 使用windows系统下的linux子系统,相比于使用linux虚拟机更加方便,更少消耗内存。

6. window10下的debian子系统是最小安装的系统,很多软件无法使用。需要先对apt源进行修改后再安装软件。对/etc/apt/sources.list文件内容进行修改,将内容修改成如下内容(163源):

deb http://mirrors.163.com/debian/ jessie main non-free contrib
deb http://mirrors.163.com/debian/ jessie-updates main non-free contrib
deb http://mirrors.163.com/debian/ jessie-backports main non-free contrib
deb-src http://mirrors.163.com/debian/ jessie main non-free contrib
deb-src http://mirrors.163.com/debian/ jessie-updates main non-free contrib
deb-src http://mirrors.163.com/debian/ jessie-backports main non-free contrib
deb http://mirrors.163.com/debian-security/ jessie/updates main non-free contrib
deb-src http://mirrors.163.com/debian-security/ jessie/updates main non-free contrib

再安装软件:

# apt-get update
# apt-get install openssh-client
# apt-get install openssh-server

# apt-get remove vim-common
# apt-get install vim

使用nucmer进行全基因组序列比对

1. MUMmer简介

MUMmer(Maximal Unique Match mer)软件中使用率最高的命令nucmer能用于对两个基因组assemblies进行比较。现在最新版本的MUMmer4相比于MUMmer3,能用于更大的基因组序列比较,运行速度更快。

2. MUMmer4软件安装

先安装高版本autoconf、automake和yaggo

$ wget http://ftp.gnu.org/gnu/autoconf/autoconf-2.69.tar.gz -P ~/software_packages/
$ tar zxf ~/software_packages/autoconf-2.69.tar.gz
$ cd autoconf-2.69
$ ./configure --prefix=/opt/sysoft/autoconf-2.69
$ make -j 24 && make install
$ echo 'PATH=/opt/sysoft/autoconf-2.69/bin/:$PATH' >> ~/.bashrc
$ source ~/.bashrc
$ cd .. && rm -rf autoconf-2.69

$ wget http://ftp.gnu.org/gnu/automake/automake-1.16.tar.gz -P ~/software_packages/
$ tar zxf ~/software_packages/automake-1.16.tar.gz
$ cd automake-1.16
$ ./configure --prefix=/opt/sysoft/automake-1.16
$ make -j 24 && make install
$ echo 'PATH=/opt/sysoft/automake-1.16/bin/:$PATH' >> ~/.bashrc
$ source ~/.bashrc
$ cd .. && rm -rf automake-1.16

$ wget https://github.com/gmarcais/yaggo/releases/download/v1.5.10/yaggo-1.5.10.tgz -P ~/software_packages/
$ tar zxf ~/software_packages/yaggo-1.5.10.tgz -C /opt/sysoft/
$ make
$ echo 'PATH=/opt/sysoft/yaggo-1.5.10:$PATH' >> ~/.bashrc
$ source ~/.bashrc

再安装MUMmer4

$ wget https://github.com/mummer4/mummer/archive/v4.0.0beta2.tar.gz -O -P ~/software_packages/mummer-4.0.0beta2.tar.gz
$ tar zxf ~/software_packages/mummer-4.0.0beta2.tar.gz
$ cd mummer-4.0.0beta2
$ autoreconf -fi
$ ./configure --prefix=/opt/biosoft/mummer-4.0.0beta2
$ source ~/.bashrc.gcc    要使用高版本GCC进行编译
$ make -j 24 && make install
$ cp -r MANUAL.md docs /opt/biosoft/mummer-4.0.0beta2/
$ cd .. && rm -rf mummer-4.0.0beta2
$ cd /opt/biosoft/mummer-4.0.0beta2/docs/
$ latex maxmat3man.tex
$ dvipdf maxmat3man.dvi
$ echo 'PATH=$PATH:/opt/biosoft/mummer-4.0.0beta2/bin/' >> ~/.bashrc
$ source ~/.bashrc

若需要使用MUMmer调用gunplot绘图,则需要安装高版本的gunplot

$ wget https://sourceforge.net/projects/gnuplot/files/gnuplot/5.2.2/gnuplot-5.2.2.tar.gz -P ~/software_packages/
$ tar zxf ~/software_packages/gnuplot-5.2.2.tar.gz 
$ cd gnuplot-5.2.2
$ ./configure --prefix=/opt/sysoft/gnuplot-5.2.2 && make -j 24 && make install
$ cd .. && rm -rf gnuplot-5.2.2
$ echo 'PATH=/opt/sysoft/gnuplot-5.2.2/bin/:$PATH' >> ~/.bashrc
$ source ~/.bashrc

3. mumer命令

mummer命令是MUMmer软件的核心程序。其它程序,如nucmer就是perl编写的调用此核心程序进行数据分析的脚本。由于该程序是核心程序,MUMmer软件给出了该命令的详细说明文档。

mummer命令用于计算query assembly和reference assembly中>=20bp的匹配序列(maximal matches),该段maximal matches序列在query和reference基因组序列中完全一致,且延长到最长。

mumer命令的使用:

mumer用法
$ mummer [options] <ref.fasta> <query1.fasta> [query2.fasta] ...
    mummer只能输入一个reference assembly文件,最多支持输入32个query 
assembly文件。程序将结果输出到标准输出。
常用示例:
$ mummer -mumreference -l 20 -b -n -c -F ref.fa query.fa > out.txt

常用参数:
-mum
-mumreference
-maxmatch
    mummer程序用于计算获得maximal matches。程序通过suffix array算法将
reference assembly构建索引数据库,然后再将query assembly和数据库比对,
搜索并得到maximal matches。
    有很多maximal matches可能属于重复序列,而重复序列的比对可能没太大意义,
且重复序列的比对极大消耗计算量。因此,需要考虑是否需要得到重复序列的比对结果。
    以上3个参数则对应重复序列的处理方法:默认是-mumreference参数,表示构建
数据库时,去掉了reference assemly中的重复序列,得到的结果中,maximal 
matches在reference assembly中是unique的,这种方法计算速度最快;-mum参数
则是在前者基础上,对query assembly先去除重复序列,再进行比对,得到的结果中,
maximal matches在reference assembly和query assembly中都是unique的,
这种方法计算速度较慢;-maxmatch参数则完全不考虑重复序列,该方法计算速度最慢,
同时生成的结果文件非常大。

-l <int>    default: 20
    设置maximal match的最小长度。

-b
-r
    默认设置下,mummer进行maximal matches搜索时,要求query和reference
上的maximal matches序列完全一致;若加上-r参数,则要求query和reference
上的maximal matches序列反向互补;若加上-b参数,则以上两种情况都考虑。

-n
    mummer对query和reference序列进行比较时,能识别任意字符,且对字符大小写
不敏感,因此,也适合于蛋白序列的比较。若加入该参数,则仅识别ATCG四种碱基字符,
所有其他字符都认为是不能匹配的。适合于assembly中含有W/Y/N等简并碱基的情况。

-c
    若加入参数-b或-r,则会考虑maximal matches序列反向互补匹配的情况。这时,
mummer将query序列转换成反向互补序列,在输出文件中,>一行后面有reverse字样,
其结果中第三列的值也是该反向互补序列的比对位点,表示query反向互补序列从该位点
开始往后是maximal matches序列;若加入-c参数,则将第三列的值转换成query序列
的位点(query序列长度 - 第三列值 + 1),表示从该位点往前是maximal matches
序列。

-F
    程序默认设置下,一般会生成4列数据,第一列表示reference的序列ID,若
reference序列仅有一条,则不会给出该列数据。加入该参数,则强制性给出该列
数据。

mummer命令的结果解读:

1. 结果中>开头行表示某条query序列,之后的行表示该条query序列的详细比对结果;
若该行有reverse,则表示该query序列的反向互补序列的结果。
2. 第一列是reference序列ID;第二列表示reference起始位点;第三列表示query
序列或其反向互补序列的起始位点;第四列表示maximal matches序列长度。
对一段3000bp的序列作为reference序列,对其841-1800区段进行反向互补后,作为
query序列

1. 不加 -b 参数,则不会对query序列反向互补序列进行分析
$ mummer -n -F ref.fa query.fa
> query_seq
  ref_seq         1         1       840
  ref_seq      1801      1801      1140

2. 加 -b 不加 -c 参数,额外给出反向互补序列的结果
$ mummer -b -n -F ref.fa query.fa
> query_seq
  ref_seq         1         1       840
  ref_seq      1801      1801      1140
> query_seq Reverse
  ref_seq       841      1141       960
注意 Reverse 表示反向互补结果,query反向互补序列从其1141位点往后共960bp属于
maximal match。

3. 加 -b 和 -c 参数
$ mummer -b -c -n -F ref.fa query.fa
> query_seq
  ref_seq         1         1       840
  ref_seq      1801      1801      1140
> query_seq Reverse
  ref_seq       841      1800       960

注意 Reverse 表示反向互补结果,query序列从其1800位点往前960bp属于maximal 
match。

4. nucmer命令

nucmer命令用于对nucleotide序列进行比对。相比于mummer命令,nucmer命令能将相邻的maximal matches连起来作为cluster,然后对cluster两端进行延伸,形成大的匹配区域;并且计算SNP数量和INDEL间的距离。

nucmer命令是MUMmer软件使用最多的命令,常用于相似性很高的核酸序列比较,特别是通一
个物种间的基因组序列比较,或不同De novo组装软件得到的assemblies之间的比较。

nucmer命令的使用:

用法和常用示例:
$ nucmer [options] ref:path query:path

$ nucmer -c 200 -g 200 ref.fa query.fa
常用参数:
-p <string>    default: out
    设置输出文件前缀。
--num
--mumreference
--maxmatch
    mummer程序用于计算获得maximal matches。程序通过suffix array算法将
reference assembly构建索引数据库,然后再将query assembly和数据库比对,
搜索并得到maximal matches。
    有很多maximal matches可能属于重复序列,而重复序列的比对可能没太大意义,
且重复序列的比对极大消耗计算量。因此,需要考虑是否需要得到重复序列的比对结果。
    以上3个参数则对应重复序列的处理方法:默认是-mumreference参数,表示构建
数据库时,去掉了reference assemly中的重复序列,得到的结果中,maximal 
matches在reference assembly中是unique的,这种方法计算速度最快;-mum参数
则是在前者基础上,对query assembly先去除重复序列,再进行比对,得到的结果中,
maximal matches在reference assembly和query assembly中都是unique的,
这种方法计算速度较慢;-maxmatch参数则完全不考虑重复序列,该方法计算速度最慢,
同时生成的结果文件非常大。
    nucmer命令调用mummer程序进行计算,沿用了以上3个参数,只是参数的使用由
一个中划线变成了两个中划线。
    若比较两个基因组,希望得到更大的比对区域,则考虑使用--maxmatch参数;若
想整合两个assemblies,则最好不对重复序列进行比对,考虑使用--mumreference
参数。

-f | --forward
-r | --reverse
    默认设置下,程序对正负链都进行比对;加入-f参数则仅对正链进行比对;加入-r
参数则仅对负链进行比对。

-l <int>    default: 20
    设置maximal match的最小长度。

-g <int>    default: 90
    将两个相邻的maximal matches连起来,作为一个cluster,要求这两个matches
之间的距离不超过该参数指定的碱基数。

-c <int>    default: 65
    一个cluster中所有maximal matches的长度总和要不小于该参数值。

-d <float>    default: .12
-D <int>    default: 5
    若cluster中相邻的两个maximal matches和中间Gap区段中,变异的碱基比率
要低于-d参数值;变异的个数要少于-D参数值。
--extend
--noextend
    设置是否对clustering两端进行延伸。默认设置是--extend。

-b <int>    default: 200
    对cluster两端进行延伸(cluster侧翼存在一定长度的匹配区域)时,不能跨越
长度超过200bp的低匹配得分区域。

-t | --threads <int>    
    设置程序运行所使用的线程数。默认值是使用计算机所有CPU线程数。nucmer多
线程效率不高:例如,80线程服务器运行一个nucmer命令,平均负载不到40,真实的
CPU线程资源消耗不到20。

--save <string>
    加入该参数,则能生成reference序列的索引数据库,该参数值是生成的索引数
据库文件前缀。

--load <string>
    输入reference索引数据库前缀。使用前一个参数和此参数,在多次利用nucmer
命令进行分析时,能节约计算时间。

nucmer程序输出文件为out.delta。该文件示例内容:

/home/username/reference.fasta /home/username/query.fasta
NUCMER
>ref_seq1 query_seq1 500 2000000
88 198 1641558 1641668 0 0 0
0
167 4877 1 4714 15 15 0
2456
1
-11
769
950
1
1
-142
-1
0
>ref_seq2 query_seq4 50000 30000
5198 22885 5389 23089 18 18 0
-6
-32
-1
-1
-1
7
1130
0

out.delta文件格式解析:

1. 文件第一行是两个需要比较的基因组序列fasta文件的绝对路径。
2. 第二行是比对类型,可以是NUCMER或PROMER。
3. 第三行往后是比对结果。每个比对结果以行首为 > 号开头,整行为 0 结尾。
4. 比对结果第一行以 > 号开头,后面包含空格分割的4列,分别是:reference序列
   ID、query序列ID、该reference序列长度、该query序列长度。
5. 比对结果第二行包含空格分割的7列数值,分别是:reference序列比对起始位点、
   reference序列比对结束位点、query序列比对起始位点、query序列比对结束位
   点、错配位点数、不相似位点数(在蛋白序列比对中有意义,核酸序列比对中和前
   一个数值一致)、非字母字符个数(在蛋白序列比对中表示终止密码子个数,在核
   酸序列比对中一般是0)
6. 第三行往后是Delta值,表示离下一个IDNEL之间的距离,正数表示在reference
   中是Inserion,负数表示在reference中是Deletion。最后一行是0。
   例如: reference  acg.tagctgag$
             query  .cggtag.tgag$
   Delta = (1, -3, 4, 0)。

5. promer命令

promer命令和nucmer命令类似,不过会将核酸序列翻译成6个读码框后,在蛋白水平进行比对,从而适合于核酸水平上相似性较低,蛋白水平上相似性较高的核酸序列比对。

promer相对使用较少,是使用参数和nucmer基本一致。

6. delta-filter命令

delta-filter命令能对nucmer或promer的结果文件进行过滤,去除低质量的匹配区域。其
使用方法:

用法:
$ delta-filter [options] <deltafile>

常用示例:
$ delta-filter -i 90 -l 2000 -m out.delta > out.f.delta

常用参数:
-i <float>    default: 0
    该参数的值必须设定为0~100,表示过滤掉Identity低于此值的比对结果。

-l <float>    default: 0
    过滤掉匹配区域长度低于此值的比对结果。

-u <float>    default: 0
    要求比对区域的unique序列所占的百分比不低于此值。

-q
    对query序列的每个比对位点,仅选择其在reference序列上的最优比对结果。
若需要将contigs序列或reads定位到reference genome上,考虑使用-q参数。

-r
    对reference序列的每个比对位点,仅选择其在query序列的最优比对结果。

-g
    加入该参数,则要求比对区域内部的maximal matches之间不能有重排,如
移位、倒位等。
 
-m
    加入该参数,表示取-q和-r参数的并集。一个query位点可能比对到ref上多
个位点,仅保留其最优比对结果;一个ref位点也可能比对到query上多个位点,仅
保留其最优比对结果;以上两个处理方法的输入信息是一样的,都是所有的比对结果;
若使用 -q -r 参数,则是先运用第一种方法处理,得到的结果再运用第二种方法
处理,其结果相比于仅使用 -m 参数,输出的比对结果更少。一般情况下,使用 -m
参数是最优的方法。

-1
    加入该参数,表示取-q和-r参数的交集。一个query位点可能比对到ref上多
个位点,一个ref位点也可能比对到query上多个位点;加入该参数,表示要求query
位点和ref位点能相互比对上,且它们是相互最佳比对;若使用 -q -r 参数,得到的
虽然也是1对1的比对结果,但其不一定是相互最佳比对,-1参数的输出对结果更少。
若需要得到SNP结果,则需要加入该参数来确保结果的准确性。

delta-filter对比对结果进行过滤时,有多种过滤参数,过滤顺序是:-i -l -u
-q -r -g -m -1。

7. dnadiff命令

使用github进行项目开发与程序维护

1. github简介

我对GitHub不甚了解。现在很多生物信息学软件的Paper中都提供了软件的Github网址。

个人理解,GitHub能很方便用于开源软件的存储和代码维护。软件开发人员在Github网站注册一个账户后,相当于在Github服务器上有了账户和密码;开发某个项目的软件后,可以将软件源代码通过该账号和密码上传到Github服务器上;每次软件维护和代码上传,都会详细记录更新的内容;其它人可以将代码下载,并进行修改,形成软件的分支。

2. 在Github软件上注册用户

Github注册页面注册一个账户,Username: train-chenlianfu;Email address:910432211@qq.com;Password: train123456;再点击Create an account,完成注册。

3. 安装git软件

在CentOS系统上,虽然自带git软件,但是推荐使用高版本git,否则可能版本过低,导致不能兼容https而不能使用。

下载并安装最新版本git软件:

$ wget https://github.com/git/git/archive/v2.17.0.tar.gz -O git-v2.17.0.tar.gz
$ tar zxf git-v2.17.0.tar.gz 
$ cd git-2.17.0/
$ make configure
$ ./configure --prefix=/opt/sysoft/git-2.17.0
$ make -j 24
$ make install
$ echo 'PATH=/opt/sysoft/git-2.17.0/bin/:$PATH' >> ~/.bashrc
$ source ~/.bashrc
$ cd .. && rm -rf git-2.17.0

4. 在GitHub创建一个项目

新注册账号会弹出需要验证邮箱地址的信息,在邮箱收件箱中点击链接,进入GitHub主页;

点击GitHub主页右上角的加号“+”,弹出一个菜单,点击New repository;

在Repository name栏输入一个软件名称,例如:blast_tools;

再勾选Initialize this repository with a README,表示给本项目直接生成一个文件README.md;

在Add a license下拉菜单中选择GNU General Public License v3.0,表示本项目是开源项目,软件中自动增加一个文件LICENSE;

点击Create repository,创建项目。

5. 使用git管理代码的上传和更新

从GitHub上下载blast_tools软件:

$ git clone https://github.com/train-chenlianfu/blast_tools.git
$ git clone git@github.com:train-chenlianfu/blast_tools.git
推荐使用后者ssh方式来clone软件,特别是需要密钥支持时。 $ cd blast_tools/ $ ls LICENSE README.md 在当前工作目录下生成文件夹blast_tools,该文件夹中包含两个文件:LICENSE和README.md。 其中README.md中仅包含一行内容:“# blast_tools”;该文件内容能直接显示在GitHub网站的本项目主页上;#号表示该行使用加粗加黑加大字体显示。 其实,在当前文件夹下,还存在一个隐藏文件夹.git,该文件夹 $ git pull 当需要更新相应的软件时,使用pull将更新的数据下载过来。

在blast_tools/文件夹中写软件代码,例如编写了perl程序blast.pl,并修改了README.md文件内容。

此外,若由于网络原因导致github使用不佳,需要代理:

设置git代理
git config --global http.proxy "47.104.224.181:3128"
git config --global https.proxy "47.104.224.181:3128"

取消代理
git config --global --unset http.proxy
git config --global --unset https.proxy

点击GitHub主页最右上角的用户图标,在下拉菜单中选择Settings,进入用户设置;在左边一栏中点击SSH and GPG keys;再点击New SSH key;在Title一栏中随意输入字符train_ssh;再在Key一栏中输入OpenSSH的公钥(点击进入本博客OpenSSH公钥生成方法的介绍文章);最后点击Add SSH key;添加公钥后,则可以将本地的软件代码通过git命令同步到GitHub网址上。

将本地修改或增加的文件上传到GitHub上:

$ git config user.email "910432211@qq.com"
$ git config user.name "train-chenlianfu"
  以上两行命令设置该项目对应的GitHub项目的用户名和邮箱地址,用于修改.git/config配置文件内容。

$ git add *
  对当前工作目录中的所有文件提出更改。当然git add命令后可以接指定的多个文件或文件夹。

$ git rm -r files
  删除文件或文件夹。若直接使用系统的rm命令,则仅删除本地的。使用git rm命令则可以删除githhub上的文件。

$ git commit -m "first submit"
  提交本次改动,本次改动的所有文件,在GitHub中全部被批注成"first submmit"。
  程序会自动检测有有多少个文件有改动,插入多少字符,删除多少字符等。这些改动信息会存于本地.git文件夹中。

$ git push origin master
  将改动信息和文件推送到origin(GitHub项目)的master分支(一个项目可能有多个分支,此处将本地改动推送到主分支)上。可能会弹出界面需要输入用户名和密码。
  origin是一个远程项目,在.git/config配置文件中有定义origin指向了GitHub的网址https://github.com/train-chenlianfu/blast_tools.git。 

6. 设置github的ssh密钥,用于数据推送和下载

从2021.8.13开始,github不再支持输入密码进行代码上传和下载了。此时,推荐使用SSH密钥来进行快捷安全的操作。需要注意的是github不支持普通的dsa和rsa密钥,推荐使用ed25519类型的密钥,并要求公钥尾部是github的注册邮箱。具体操作方法:

先在Linux服务器中生成一堆密钥:
ssh-keygen -t ed25519 -P '' -f ~/.ssh/id_ed25519 -C chenllianfu@foxmail.com
cat ~/.ssh/id_ed25519.pub  >> ~/.ssh/authorized_keys 

然后将~/.ssh/id_ed25519.pub的内容填入到github网站中:登录github网站,点击右上角用户的设置,然后在左边栏目中点击SSH and GPG keys,按提示输入公钥信息并保存。

最后,在Linux服务器中检测是否成功:
ssh -T git@github.com
出现一下信息,则表示成功:
Hi chenlianfu! You've successfully authenticated, but GitHub does not provide shell access.

7. 重新对自己的软件构建本地仓库

若本地软件被删除了,则可以从github上下载最新的软件,然后继续对软件维护和更新。

首先从https方式下载软件,例如:

git clone https://github.com/chenlianfu/geta.git

然后修改下载软件中的 git 配置文件 geta/.git/config:

    url = https://github.com/chenlianfu/geta.git
将以上网址修改为以下的网址,表示ssh连接github,才能上传数据。
    url = git@github.com:chenlianfu/geta.git

将WordPress博客迁移到全新Aliyun服务器上

1. 购买Aliyun服务器并配置安全组

购买Aliyun服务器后,在Aliyun官网登录个人用户,然后打开云服务器ECS服务器——实例与镜像——实例——在实例列表中点击目标实例的管理——点击配置信息中的专有网络名称——点击安全组一栏中的数字1——在安全组列表中点击配置规则——点击快速创建规则,按如下方式创建规则:

网卡类型:内网
规则方向:入方向
授权策略:允许
常用端口(TCP):HTTP (80) HTTPS (443) 根据需要勾选相应的端口,我勾选了如上端口,或通过下方自定义端口方式进行设置。
自定义端口:TCP  80
优先级:1
授权类型:IPv4地址段访问
授权对象:0.0.0.0/0 

推荐使用自定义端口方法,每次开放一个端口。比如,开放21,22,25,80,443,3306、8080和9090等端口。
新版本的设置可以同时一次性设置多个端口。使用1-65535则可直接在安全组中开放所有端口。
我个人选择开放52000-53000端口。

创建以上安全组,表示允许通过相应的端口访问Aliyun服务器的公网IP。需要注意默认设置下,aliyun服务器使用ifconfig查看网卡时是没有公网IP网卡的,所以即使服务器系统中设置了开放80端口,外网也不能访问Aliyun服务器的80端口。以前的Aliyun服务器没有安全组设置,所有端口都是开放的,则使用起来更方便。

2. 进入Aliyun服务器, 安装启动httpd和mariadb软件并配置系统

配置Aliyun服务器,选择64位的CentOS 8.1操作系统。第一次启动Aliyun服务器后,登录root用户,配置ssh和root权限:

perl -i.bak -e 'while (<>) { if (/^root/) { print; print "chenlianfu   ALL=(ALL)       NOPASSWD:ALL\n"; last; } else { print } }' /etc/sudoers

# 修改/etc/ssh/sshd_config配置文件,使openssh远程登录更安全,更快速
perl -p -i -e 's/#RSAAuthentication/RSAAuthentication/' /etc/ssh/sshd_config
perl -p -i -e 's/#PubkeyAuthentication/PubkeyAuthentication/' /etc/ssh/sshd_config
perl -p -i -e 's/#AuthorizedKeysFile/AuthorizedKeysFile/' /etc/ssh/sshd_config
perl -p -i -e 's/.*PermitRootLogin.*/PermitRootLogin no/' /etc/ssh/sshd_config
perl -p -i -e 's/.*Protocol\s+2.*/Protocol 2/' /etc/ssh/sshd_config
perl -p -i -e 's/.*ClientAliveInterval.*/ClientAliveInterval 60/' /etc/ssh/sshd_config
perl -p -i -e 's/.*ClientAliveCountMax.*/ClientAliveCountMax 10/' /etc/ssh/sshd_config
perl -p -i -e 's/.*UseDNS.*/UseDNS no/' /etc/ssh/sshd_config
perl -p -i -e 's/GSSAPIAuthentication yes/GSSAPIAuthentication no/' /etc/ssh/sshd_config
perl -p -i -e 's/.*GatewayPorts.*/GatewayPorts yes/' /etc/ssh/sshd_config
systemctl restart sshd.service

# 注意,一定要设置GatewayPorts参数值为yes,有利于使用其它端口直接通过本服务器为跳板登录内网服务器。否则,当使用Aliyun云服务器的反向隧道一步直接登录内网服务器会不成功。

使用yum安装系统软件:

yum install httpd mariadb mariadb-devel mariadb-server php php-mysqlnd php-json

开放系统防火墙端口

# 启动防火墙服务
systemctl start firewalld.service
systemctl enable firewalld.service

# 开启80/8080/3306端口
firewall-cmd --add-port=80/tcp --permanent
firewall-cmd --add-port=3306/tcp --permanent
firewall-cmd --add-port=8080/tcp --permanent
firewall-cmd --add-port=52000-53000/tcp --permanent
# 加入--permanent参数,使永久生效。
# 重启防火墙服务
systemctl restart firewalld.service
# 重启后,再查看端口,则生效了。
firewall-cmd --list-ports

# 启动httpd和mariadb(mysqld)服务
systemctl start httpd.service
systemctl start mariadb.service
#设置服务开机启动
systemctl enable httpd.service
systemctl enable mariadb.service

初始化mysql数据库并启动mysql数据库 :

cat << EOF > /etc/my.cnf
[client]
port                    = 3306
socket                  = /var/lib/mysql/mysql.sock
[mysqld]
port                    = 3306
socket                  = /var/lib/mysql/mysql.sock
skip-external-locking
key_buffer_size         = 384M
max_allowed_packet      = 1M
table_open_cache        = 512
sort_buffer_size        = 2M
read_buffer_size        = 2M
read_rnd_buffer_size    = 8M
myisam_sort_buffer_size = 64M
thread_cache_size       = 8
query_cache_size        = 32M
thread_concurrency      = 8
log-bin=mysql-bin
server-id               = 1
[mysqldump]
quick
max_allowed_packet      = 16M
[mysql]
no-auto-rehash
[myisamchk]
key_buffer_size         = 256M
sort_buffer_size        = 256M
read_buffer             = 2M
write_buffer            = 2M
[mysqlhotcopy]
interactive-timeout
EOF

systemctl restart mariadb.service
/usr/bin/mysql_secure_installation

3. 配置httpd来搭建网站

主要为3个人搭建了个人博客网站。首先在Aliyun服务器中创建3个人的账户信息:

cat <<EOF > users.txt
chenlianfu
zhengyue
wuchangsong
EOF

#创建3个账户并随即生成密码,修改家目录权限和apache用户权限
for i in `cat users.txt`
do
    useradd $i &> /dev/null
    create_random_passwd.pl $i
    chmod 750 /home/$i
    usermod -aG $i apache
done

修改httpd配置文件/etc/httpd/conf/httpd.conf,修改几处内容:

# 将文件夹权限设置宽松,有利于展示其它生信软件的网页结果
perl -i -e 'while (<>) { $mo = 1 if m#<Directory />#; $mo = 0 if m#<Files \".ht\*\">#; s/Require all denied/#Require all denied/ if $mo == 1; print; }' /etc/httpd/conf/httpd.conf
# 使.pl .sh .py等文件的内容直接在浏览器中展示
perl -p -i -e 's/(AddType text\/html .shtml)/$1\nAddType text\/plain .pl\nAddType text\/plain .py\nAddType text\/plain .sh/' /etc/httpd/conf/httpd.conf
# 使.cgi文件能在浏览器中运行程序生成网页结果
perl -p -i -e 's/#AddHandler cgi-script .cgi/AddHandler cgi-script .cgi/' /etc/httpd/conf/httpd.conf
# 重启网页服务,使配置文件的修改生效
systemctl restart httpd.service

根据需要展示的文件夹信息,在etc/httpd/conf/httpd.conf尾部增加:

Alias /public "/home/public"
<Directory "/home/public">
    AllowOverride None
    Options Indexes MultiViews FollowSymLinks ExecCGI
    Order allow,deny
    Allow from all
</Directory>

根据建站需要添加建站信息,在/etc/httpd/conf/httpd.conf尾部增加:

#以下是3个人的博客网站
<VirtualHost *:80>
    DocumentRoot /home/chenlianfu/wordpress
    ServerName www.chenlianfu.com
</VirtualHost>
<VirtualHost *:80>
    DocumentRoot /home/zhengyue/wordpress
    ServerName zhengyue90.com
</VirtualHost>
<VirtualHost *:80>
    DocumentRoot /home/wuchangsong/wordpress
    ServerName www.wuchangsong.com
</VirtualHost>

#以下是我的网址导航页面网站
<VirtualHost *:80>
    DocumentRoot /home/chenlianfu/homepage
    ServerName homepage.chenlianfu.com
</VirtualHost>
<Directory "/var/www/chenlianfu_homepage">
    AllowOverride None
    Options MultiViews FollowSymLinks ExecCGI
    Order allow,deny
    Allow from all
</Directory>

在/etc/httpd/conf.d目录下分别生成对3个网站对应的数据文件夹的权限配置文件,用于禁止一些不好的IP(博客中出现垃圾评论的网址)对网站的访问。例如,生成名为deny_chenlianfu.conf的文件,其内容:

<Directory "/home/chenlianfu/wordpress">
    AllowOverride None
    Options MultiViews FollowSymLinks ExecCGI
    Order allow,deny
    Allow from all
    Deny from 1.9.8.6
    Deny from 100.42.17.90
    Deny from 101.4.136.34
    ...
    Deny from 95.85.80.82
    Deny from 95.85.80.86
    Deny from 98.174.90.36
</Directory>

最后,重启httpd服务:

systemctl restart httpd.service

4. 迁移软件安装文件夹和Mysql数据库

WordPress数据分两部分:第一部分是WordPress软件安装文件夹;第二部分数据位于Mysql数据库中。

直接将第一部分WordPress软件安装文件夹copy到Aliyun新服务器上,再修改一些权限:

chmod 775 /home/chenlianfu/wordpress
cd /home/chenlianfu/wordpress
find ./ -perm 755 -exec chmod 775 {} \;
find ./ -perm 644 -exec chmod 664 {} \;

将原来wordpress的mysql数据库复制到/var/lib/mysql/目录下,再修改一些权限:

chown -R mysql:mysql /var/lib/mysql/wordpress_chenlianfu/
chown -R apache:chenlianfu /home/chenlianfu/wordpress

5. 每天自动备份WordPress数据到邮箱

首先,搭建邮箱服务器

# 安装postfix软件
yum install -y postfix*

# 修改postfix配置文件
perl -p -i -e 's/.*myhostname = host.*/myhostname = chenlianfu.com/' /etc/postfix/main.cf
perl -p -i -e 's/inet_interfaces = localhost/inet_interfaces = all
/' /etc/postfix/main.cf
perl -p -i -e 's/localhost,\s*\n/localhost, chenlianfu\n/ if m/^mydestination/' /etc/postfix/main.cf
echo "message_size_limit = 100000000" >> /etc/postfix/main.cf

# 开放系统25号端口
firewall-cmd --add-port=25/tcp --permanent
systemctl restart firewalld.service

# 启动postfix服务
systemctl restart postfix.service 
systemctl enable postfix.service

然后,生成脚本程序,能备份WordPress并将数据发送到邮箱。

echo '/bin/tar -C /var/lib/mysql/ -zc -f /var/lib/mysql/wordpress_chenlianfu_mysql_$(date +%Y%m%d).tar.gz wordpress_chenlianfu/
/bin/date | /bin/mail -s wordpress_chenlianfu_mysql_$(date +%Y%m%d).tar.gz -a /var/lib/mysql/wordpress_chenlianfu_mysql_$(date +%Y%m%d).tar.gz chenllianfu@foxmail.com' > /root/bakup_wordpress_mysql.sh

echo '/bin/tar -C /home/chenlianfu -zc -f /home/chenlianfu/wordpress_chenlianfu_dir_$(date +%Y%m%d).tar.gz wordpress/
/bin/date | /bin/mail -s wordpress_chenlianfu_dir_$(date +%Y%m%d).tar.gz -a /home/chenlianfu/wordpress_chenlianfu_dir_$(date +%Y%m%d).tar.gz chenllianfu@foxmail.com' > /root/bakup_wordpress_dir.sh

chmod 755 bakup_wordpress_*

# 需要注意的是Aliyun禁止了25号端口对外发送数据。所以需要申请解封25号端口才能正常发送邮件。
# 可能申请不会成功,则考虑使用具有SSL加密功能的IMAP服务发送邮件(http://www.chenlianfu.com/?p=3227),需要邮箱支持。

最后,设置定时执行备份程序。

# 设置每天1点钟时备份mysql数据库数据,并发送到邮箱
# 设置每星期一1点5分钟时备份wordpress文件夹数据,并发送到邮箱
crontab -l > /root/.crontab
echo -e "0\t1\t*\t*\t*\t/root/bakup_wordpress_mysql.sh" >> /root/.crontab
echo -e "5\t1\t*\t*\t1\t/root/bakup_wordpress_dir.sh" >> /root/.crontab
sort /root/.crontab | uniq | crontab

6. 定时自动重启服务,让网站更稳定

# 生成一个重启网站服务的脚本文件
cat << EOF > /root/restart_webServer.sh
/bin/systemctl restart mariadb.service
/bin/systemctl restart httpd.service
/bin/systemctl restart postfix.service
EOF
chmod 755 /root/restart_webServer.sh

# 设置每小时零分钟时运行一次重启程序
crontab -l > /root/.crontab
echo -e "0\t*\t*\t*\t*\t/root/restart_webServer.sh" >> /root/.crontab
sort /root/.crontab | uniq | crontab

7. 服务器其它资料迁移

服务器中需要迁移的其它文件或文件夹:

/root/create_random_passwd.pl
/root/monitoring_netflow_of_IPs.pl
/root/monitoring_netflow_of_IPs.sh
/root/.certs/
/etc/mail.rc

# 根据需求决定是否copy以下文件,这些文件可能在上述流程中已经修改好了。
/etc/httpd/conf/httpd.conf
/etc/my.cnf

# 此外,各用户的家目录内容根据需要copy。

服务器需要安装的其它系统软件和服务启动项:

yum install -y nss-tools

# 先开启9090端口,再启用cockpit服务,则可以在浏览器中输入ip地址:9090登录服务器,监控服务器各项信息,并连接服务器终端进行操作。
firewall-cmd --add-port=9090/tcp --permanent
systemctl restart firewalld.service
systemctl enable --now cockpit.socket