共计 23722 个字符,预计需要花费 60 分钟才能阅读完成。
提醒:本文最后更新于 2019-03-07 18:31,文中所关联的信息可能已发生改变,请知悉!
比如在 VPS 上搭建 WordPress 博客,其实根本就不需要你精通什么编程,懂什么系统,你只要掌握一些常用到命令就能 DIY。因为在互联网时代,很多东西都是现成的,你只要会搜索,会整合,会学习使用就万事不难了。
当然,如果你是个什么都懂的 IT 男,想必更是极好的。
言归正传,这篇文章主要记录了我放弃虚拟主机后,如何一步步在 VPS 上安装 CentOS6 系统和 LAMP 环境进而搭建 WordPress 博客的。
#1为什么要用 WordPress 建站
WordPress 是一种使用 PHP 语言和 MySQL 数据库开发的个人博客系统,其稳定可靠,易于使用,且是免费开源的。而最让我看重的,是它支持一大波优秀的插件和模板,比如 SEO 优化、静态缓存和数据备份等。
具体可参看百度文库相关介绍:http://baike.baidu.com/item/WordPress
#2
在回答这个问题之前,让我们先来弄清楚虚拟主机和 VPS 的区别。
#2.1
虚拟主机(Virtual Hosting)又叫共享主机(Shared Hosting),是使用特殊的软硬件技术,把一台真实的主机分割成多个的逻辑存储单元,每个单元都没有物理实体,但是每一个物理单元都能像真实的物理主机一样在网络上工作,具有共享 IP 地址 (或独立 IP 地址) 以及必要的互联网功能。
通俗一点讲,就是一个出租屋里分了好多床位,租客们共用水、电、卫生间等生活设施。
- 优点:便宜、便捷,自带被褥,拎包即住
- 缺点:居住性能差
#2.2什么是 VPS
VPS(Virtual Private Server)即虚拟专用服务器,就是利用虚拟化技术(如 KVM、Xen、OpenVZ 等)把一台真实的服务器分割成若干虚拟的服务器,具有独立的操作系统及开关机等功能,能自行搭建和配置特定的服务。
通俗的说,就如同买了小区里的一套房子,空间及设施都是自己的,想怎么装就怎么装。
- 优点:爱咋用咋用,居住性能好
- 缺点:价格价高,需要懂点技术
由上可以看出,究竟是选用虚拟主机还是 VPS 建站主要看你的使用目的和性能要求。
一般来说,如果你对服务器配置和维护并不太懂,且个人博客的访问量不大(比如日均 1000PV 以下),虚拟主机(带独立 IP 最好)是首选,价格通常年付二三百 RMB 的样子。
但是,如果你和博主一样喜欢折腾,喜欢追求更高性能,同时也想学习一点 Linux 相关知识,那么可以考虑使用 VPS。
实际上有些性能很不错的国外 VPS 也很便宜,一般月付 5 美元甚至更少即可。这样算下来,其实并不比虚拟主机贵到哪去。
博主选用的是美国 Vultr 公司的最便宜的一款 VPS,美国西海岸洛杉矶机房。
具体购买及安装过程详见下文。
#3注册域名
考虑到性价比(免费隐私保护)和支付便利(支持支付宝),在这也推荐给大家。
- NameSilo:https://www.namesilo.com/
【优惠活动】2018 年 12 月 31 日前,使用 NameSilo 优惠码 the1usd 可减免一美元,首年只需 $7.99!
#4如何选购便宜的 VPS
坦白说,虽然网上有不少推荐和介绍,比如知乎回答和一些评测博客,但如何选择一款便宜好用且性能不错的 VPS 还着实让我头疼了一阵。
为什么呢?
网上有些推荐的文章仅仅只是为了推荐而推荐,拿来主义,人云亦云,缺乏实际的使用体验。这就可能导致推荐者对 VPS 整体的稳定性缺乏深入的评测,而稳定可靠恰恰是一个网站长期发展的重要保障。
尽管 128MB 甚至更低内存的 VPS 也可以搭建 WordPress 建站,但博主并不推荐这样做。因为我们的目的是要做一个省时省力又能长期稳定运行的网站,而不是炫耀 VPS 优化技术。
于是,在兼顾价格(5 美元以下)、速度(ping 值 200 左右)以及稳定性(在线率 99.95 以上)三个前提下,最终筛选出三个便宜的国外 VPS:Vultr、BandwagonHost(搬瓦工)和DigitalOcean(DO)。
但是这三个到底哪个最适合自己呢?感觉还是一头雾水。
纸上得来终觉浅,绝知此事要躬行。于是,就三个 VPS 全部试用了一遍,并通过我能用得到的各种测试,最终选定了 Vultr-VPS(日本机房)。
#4.1搬瓦工 VPS 和 Vultr 哪个好
首先,Vultr 和 DigitalOcean(DO)几乎一样,最便宜的一款 VPS 月付都是 5 美元。但是 Vultr 给的内存是 768MB,DO 的则只有 512MB。
尽管 DO 在 SSD 空间上比较大方,给了 20GB,而 Vultr 的则是 15GB。但是,博主可以很负责任的告诉你,一般的网站存储 备份 环境一共 5 -10GB 的空间就足够了。显然,内存比空间更实用!
其次,Vultr 快照(Snapshot)是免费的,且不同 VPS 甚至不同机房之间可以无缝迁移。
第三,Vultr\BandwagonHost(搬瓦工)现在都有使用 KVM 虚化技术的。
搬瓦工年付 19.99 刀的 VPS 不错,无论 CPU 性能还是硬盘 I / O 读写速度(可达 900MB/s,见下图)目前都比 Vultr(平均 450MB/s)要好一些。若优化得当,搭建三两个流量不大的 WordPress 博客应该不是问题。
再来看下经过优化加速之后,本页面(多图长文)的全国打开速度:(可点击放大)
实际上,便宜的 VPS 不超售是不可能的。因为 VPS 商家是做生意赚钱的,而不是来搞慈善。
但是,从过去几个月的使用情况来看,搬瓦工这款 年付 19.99 美元(512MB/500GB)VPS 速度和稳定性确实很不错。
在过去的几个月里,除了博主备份系统时 reboot 几下,还从未宕过机。经过适当的优化(见下文)后,博客页面也基本可以达到秒开。
搬瓦工 VPS 和 Vultr 到底哪个更适合,博主的建议是:
如果你只有三两个流量不大的网站,比如每天 5000PV 以内,搬瓦工 256MB/500GB 这款小鸡还是完全能够胜任的。
因为,博主经过测试(LoadImpact),模拟 5 分钟内 100 个访客持续访问本页也没有搞垮这个小鸡。非但没搞垮,这款小内存 VPS 表现还很不错。
不相信博主?有图有真相,直接上图(看不清可点击放大):
从上图可以看出,在 5 分钟内,模拟 100 个访客持续访问本页,打开时间基本维持在 0.8-1.2 秒之间。倘若从早 10 点至晚 22 点算起(百度上网时间分布统计),按 12 个小时持续访问的话,每天有大约 15000PV 的访问量!
是否可以这样理解:即使像本页面这样有这么多的图片和文字,每天大约 15000PV 的流量,经过适当的优化,在搬瓦工这款 256MB 的小内存 VPS 上也基本是秒开的。
是不是有点吓到了?
再来看一下 100 访客在线时 VPS 的系统平均负载:
内存耗尽是意料之中的事情,毕竟只有 256MB。但出乎博主意料的是:系统平均负载并不高,甚至还不到 0.2!这么高的流量,博主原以为起码也要超过 1 的,即 CPU 刚好跑满。现在非但没有跑满,竟还有足够多的剩余。不得不说,搬瓦工的技术还真是可以!
由此可见,小内存 VPS 不一定就不能搭建大流量 WordPress 博客,关键要优化得当。
当然了,如果网站真有每天超过 10000PV 的流量,博主还是建议提升下 VPS 配置,比如升级到搬瓦工 1024MB/1024GB 这个套餐。因为每天 10000PV 的流量即便挂 Adsense 广告每天也该有 10 美元的收入了,就不要再扣 VPS 月租这点小钱了。
- 便宜:最低 $19.99/ 年(使用优惠码更省)
- 稳定:承诺 99.5% 在线率保证,经博主过去一年多对本站的检测来看,除了博主认为重启之外,在线率实际几乎 100%
- 够快:洛杉矶机房,CN2 线路,ping 值低,速度快(本站所用);香港机房更快,但是价格就无爱了
- IP 可换:可多机房间相互转移,实现随意更换 IP 地址(博主大爱)
- 备份方便:后台一键 SnapShot 备份整机,省心放心
- 进行 SnapShot 时强制关闭 VPS,持续 5 分钟左右(不如 Vultr 周到)
- 系统过于精简,建站时某些必备软件可能需要自己手动安装
- 香港机房 VPS 太贵,真心贵
建议首选 KVM 架构,最低 $19.99/ 年,可安装 BBR 加速科学上网,看视频方便。
限时供货,使用优惠码 BWH1ZBPVK 可省 6%(目前最高);
推荐 洛杉矶 CN2直连线路(后台切换);请务必确保注册信息真实有效,且与登录 IP 地址相符。否则,大概率会被视为欺诈(Fraud)而上黑名单。
一般来说,512MB 内存足够个人建站使用了。但若是年付 $19.99 这款紧俏套餐已经脱销,或者你需要更高配置的,年付 $49.99 这款也足够好:20GB 空间,1024MB 内存,多机房可自由切换。
至于其余的高价套餐,博主以为仅对搭建 wordpress 博客来说,性价比并不高。因此,也就没必要去花冤枉钱(土豪请随意)。
【温馨提示】DigitalOcean 只支持信用卡和 PayPal 付款,而搬瓦工和 Vultr 则可使用支付宝(Alipay)。
#4.2如何购买搬瓦工 VPS
#5SSH 连接 VPS
SSH(Secure Shell)即安全外壳协议,是目前较可靠、专为远程登录会话和其他网络服务提供安全性的协议。我们需要一种 SSH 工具来连接 VPS,个人推荐 PuTTY.exe,最好使用英文原版。(注意区分 32-bit 和64-bit)
下载地址:https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html
下载后免安装,直接打开。填入刚才开通的 VPS 地址,默认端口 22。然后点击 Open 打开,弹出的新窗口点击左边“Yes”。
回到我们刚才打开的 Vultr-VPS 管理页面,左边有登陆名 root 和密码,复制密码。
在 PuTTY 界面输入 root 后回车,单击右键即可输入密码。
【温馨提示】PuTTY 中输入密码是不显示的,单击右键即为粘贴。
登陆成功后,首先需要修改 root 密码,因为初始密码太复杂不好记,也不一定安全。
# passwd
回车后设置新密码,再回车重新输入。然后界面显示如下,说明密码修改成功。
(密码长度建议 20 字符以上,字母大小写 数字 特殊字符)
为防止 SSH 登录一段时间后自动断开,可更改如下设置以保持 SSH 长时间在线。
# vi /etc/ssh/sshd_config
将如下两行代码前的 # 去掉,然后做相应修改:(若无此两行代码请在末尾自行添加)
#Compression delayed
ClientAliveInterval 30
ClientAliveCountMax 5
#ShowPatchLevel no
#UseDNS yes
保存,重启 SSH 即可生效:
# service sshd restart
之后,最好再升级一下系统,以保证获得最新的软件和内核。
# yum -y update
回车,等待升级完成。
开启 BBR 加速
【温馨提示】开启 BBR 对科学上网尤其是看视频有加速作用,但如果你和博主一样,喜欢站梯分离(推荐),可以不用开启 BBR。
BBR 是 Google 提出的一个开源的 TCP 拥塞控制算法,应用于 Linux4.9 内核上,对提升网速效果显著。
因此,对于 KVM 架构的 VPS,博主倾向于在正式部署生产环境之前,首先开启 BBR。
但这并不意味着你一定要这么做。倘若你的 VPS 线路已经很不错,完全可以跳过这一步。
切换到 root 目录:
# cd ~
下载脚本并安装 BBR:
# wget --no-check-certificate https://github.com/teddysun/across/raw/master/bbr.sh && chmod x bbr.sh && ./bbr.sh
如提示 wget: command not found,可执行命令 # yum -y install wget 进行安装。
按要求输入 y 后,自动重启 VPS。
重新登入后,查看结果:
# sysctl net.ipv4.tcp_available_congestion_control
出现形如以下字样时,说明 BBR 开启成功。
#6搭建 LAMP 环境
LAMP 指的是 Linux(操作系统)、Apache(HTTP 服务器),MySQL(数据库软件)和 PHP(有时也是指 Perl 或 Python)的第一个字母,主要用来建立 web 应用平台。
博主使用的是 LNMP 一键安装包,具体可参看这里:https://lnmp.org/install.html
当然也可以安装 BT 宝塔面板,直接可视化安装 Wordpress,适合无代码基础的人士。具体参考这里:BandwagonHost 搬瓦工 VPS 安装 BT 宝塔 Web 面板
【温馨提示】为提高效率,可直接复制代码,然后在 PuTTY 窗口单击右键进行粘贴。
首先,创建 screen 会话:
# screen -S lamp
如提示 screen: command not found,可执行命令 # yum -y install screen 安装。
如果安装过程中出现异常中断,重新登入 VPS 后,输入 # screen -r lamp 恢复安装界面。
由于 LNMP1.5/1.4 版本可一键设置 SSL,所以推荐优先安装 1.5 版本:
# wget -c http://soft.vpser.net/lnmp/lnmp1.5-full.tar.gz && tar -zxf lnmp1.5-full.tar.gz && cd lnmp1.5-full && ./install.sh lamp
升级过程中可能出问题,新手的话还是不建议升级了,直接安装 lnmp1.5 版本吧。
以下安装过程不再赘述,选项一般默认即可,主要设置详见如下(LNMP1.5 示意)。
这里设置的数据库 ROOT 密码 务必记牢,下面添加域名时会用到!!
LNMP 安装成功之后,如果数据库密码忘记了,可参看这里 进行重置。
| LNMP V1.5 for CentOS Linux Server, Written by Licess |
————————————————————————
| A tool to auto-compile & install LNMP/LNMPA/LAMP on Linux |
————————————————————————
| For more information please visit https://lnmp.org |
————————————————————————
You have 10 options for your DataBase install.
1: Install MySQL 5.1.73
2: Install MySQL 5.5.60 (Default)
3: Install MySQL 5.6.40
4: Install MySQL 5.7.22
5: Install MySQL 8.0.11
6: Install MariaDB 5.5.60
7: Install MariaDB 10.0.35
8: Install MariaDB 10.1.33
9: Install MariaDB 10.2.14
0: DO NOT Install MySQL/MariaDB
Enter your choice (1, 2, 3, 4, 5, 6, 7, 8, 9 or 0): 2
You will install MySQL 5.5.60
===========================
Please setup root password of MySQL.
Please enter: mysqlpasswd
===========================
Do you want to enable or disable the InnoDB Storage Engine?
Default enable,Enter your choice [Y/n]: n
You will disable the InnoDB Storage Engine!
===========================
You have 8 options for your PHP install.
1: Install PHP 5.2.17
2: Install PHP 5.3.29
3: Install PHP 5.4.45
4: Install PHP 5.5.38
5: Install PHP 5.6.36 (Default)
6: Install PHP 7.0.30
7: Install PHP 7.1.18
8: Install PHP 7.2.6
Enter your choice (1, 2, 3, 4, 5, 6, 7 or 8): 5
You will install PHP 5.6.36
===========================
You have 3 options for your Memory Allocator install.
1: Don\’t install Memory Allocator. (Default)
2: Install Jemalloc
3: Install TCMalloc
Enter your choice (1, 2 or 3): 1
You will install not install Memory Allocator.
===========================
Please enter Administrator Email Address: admin@seoimo.com
===========================
Server Administrator Email: admin@seoimo.com
===========================
You have 2 options for your Apache install.
1: Install Apache 2.2.34
2: Install Apache 2.4.33 (Default)
Enter your choice (1 or 2): 2
You will install Apache 2.4.33Press any key to install…or Press Ctrl c to cancel
当出现上图中的绿字 “Press any key to install…or Press Ctrl c to cancel” 后,按回车键确认开始安装。
安装大约持续半个小时左右。安装成功后的界面如下图所示(Ctrl c 退出安装界面):
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
tcp6 0 0 :::80 :::* LISTEN
tcp6 0 0 :::22 :::* LISTEN
Install lnmp takes 36 minutes.
Install lnmp V1.5 completed! enjoy it.
至此,LAMP 环境已经在 VPS 上搭建完成。输入 VPS 的 IP 访问,会出现以下界面:
重要提示:★★★★★
①为了安全,建议将 phpmyadmin 目录重命名为不容易猜到的目录(比如 hereispma , ..):
# cd /home/wwwroot/default
# mv phpmyadmin hereispma
②此安装成功页面是 IP 访问 时的默认页面(非域名),建议删除或改名:
# rm -rf index.html 或者
# mv index.html random-name.html
③如需要开启 IP 访问网站域名,请更改 IP 访问默认路径(此步骤可选,不推荐):
# vi /usr/local/apache/conf/extra/httpd-vhosts.conf
将 DocumentRoot“/home/wwwroot/default” 及 Directory“/home/wwwroot/default” 两处中的 “/home/wwwroot/default” 修改为需要 IP 访问的域名,如 “/home/wwwroot/seoimo.com”。
在安装 WordPress 之前,建议 安装 PHP 缓存加速类扩展,对降低 VPS 压力和提高 WordPress 速度大有裨益。
推荐安装两个:OPcache 和 Memcached。
首先,需要进入 LNMP 解压目录 lnmp1.5-full:
# cd /root/lnmp1.5-full
回车,接下来安装 Opcache:
# ./addons.sh install opcache
回车,再回车。
当出现 “Opcache installed successfully, enjoy it!” 字样时,即表示安装成功。
接着安装 Memcached:
# ./addons.sh install memcached
回车,选择 2,回车,再回车。
当出现 “Memcached installed successfully, enjoy it!” 字样时,即表示安装成功。
此时,可以删除之前下载的 lnmp1.5 安装包,以节省空间。
# rm -rf /root/lnmp1.5-full.tar.gz
回车即可。
接下来就可以添加域名安装 WordPress 了。
#7添加域名 / 虚拟主机
请提前做好域名解析(建议至少提前半个小时),例如:
可直接略过解释说明,查看详细操作步骤。
同时,建议在操作前先开启 443 端口:CentOS7 防火墙中开启相关端口
添加域名:
# lnmp vhost add
回车,提示输入域名:
# seoimo.com
回车,提示是否添加多个域名:
# y
回车,博主习惯绑定带 www 的域名:
# www.seoimo.com
回车,显示网站目录。默认 /home/wwwroot/seoimo.com 即可。
若是绑定二级域名,必须 输入完整的目录路径。例如:
将 tools.seoimo.com 绑定到网站根目录下的 tools 文件夹,则应输入:
/home/wwwroot/seoimo.com/tools
回车。博主习惯不需要日志记录,但建议你开启(y):
# n
会车后,输入站长邮箱。
继续回车,提示数据库名和数据库用户名是否保持一致。
# y
回车,输入 root 用户的数据库密码(不会显示,在 #6 搭建 LAMP 环境 中设置好的)。
回车,输入数据库名,自行设置。例如:
# sjk_seoimo
回车,设置数据库密码。例如:
# sjkmmseoimo
是否需要开启 SSL/HTTPS 访问,推荐开启:
# y
这里使用免费的 Let\’s Encrypt 证书,所以选择 2。
详细操作步骤 如下所示:
Please enter domain(example: www.lnmp.org): seoimo.com
Your domain: seoimo.com
Enter more domain name(example: lnmp.org *.lnmp.org): www.seoimo.com
domain list: www.seoimo.com
Please enter the directory for the domain: seoimo.com
Default directory: /home/wwwroot/seoimo.com:
Virtual Host Directory: /home/wwwroot/seoimo.com
Allow access log? (y/n) n
Disable access log.
Please enter Administrator Email Address: admin@seoimo.com
Server Administrator Email:admin@seoimo.com
Create database and MySQL user with same name (y/n) y
Enter current root password of Database (Password will not shown):
OK, MySQL root password correct.
Enter database name: sjk_seoimo
Your will create a database and MySQL user with same name: sjk_seoimo
Please enter password for mysql user sjk_seoimo: sjkmmseoimo
Your password: sjkmmseoimo
Add SSL Certificate (y/n) y
1: Use your own SSL Certificate and Key
2: Use Let\’s Encrypt to create SSL Certificate and Key
Enter 1 or 2: 2
It will be processed automatically.Press any key to start create virtul host…Create Virtul Host directory……
set permissions of Virtual Host directory……
Test Apache configure file…
test apache configure… Syntax OK
done
Restart Apache…
restart apache… done
Add database Sucessfully.
–2018-08-05 22:22:37– https://soft.vpser.net/lib/acme.sh/latest.tar.gz
Resolving soft.vpser.net (soft.vpser.net)… 45.34.93.228, 2600:3c01::f03c:91ff:fe92:1a06
Connecting to soft.vpser.net (soft.vpser.net)|45.34.93.228|:443… connected.
HTTP request sent, awaiting response… 200 OK
Length: 107645 (105K) [application/octet-stream] Saving to:‘latest.tar.gz’100%[================================================>] 107,645 –.-K/s in 0.02s2018-08-05 22:22:38 (5.57 MB/s) –‘latest.tar.gz’saved [107645/107645] [Sat Aug 5 22:22:38 CST 2018] It is recommended to install socat first.
[Sat Aug 5 22:22:38 CST 2018] We use socat for standalone server if you use standalone mode.
[Sat Aug 5 22:22:38 CST 2018] If you don\’t use standalone mode, just ignore this warning.
[Sat Aug 5 22:22:38 CST 2018] Installing to /usr/local/acme.sh
[Sat Aug 5 22:22:38 CST 2018] Installed to /usr/local/acme.sh/acme.sh
[Sat Aug 5 22:22:38 CST 2018] Installing alias to \’/root/.bashrc\’
[Sat Aug 5 22:22:38 CST 2018] OK, Close and reopen your terminal to start using acme.sh
[Sat Aug 5 22:22:38 CST 2018] Installing alias to \’/root/.cshrc\’
[Sat Aug 5 22:22:38 CST 2018] Installing alias to \’/root/.tcshrc\’
[Sat Aug 5 22:22:38 CST 2018] Installing cron job
no crontab for root
no crontab for root
[Sat Aug 5 22:22:38 CST 2018] Good, bash is found, so change the shebang to use bash as preferred.
[Sat Aug 5 22:22:38 CST 2018] OK
Starting create SSL Certificate use Let\’s Encrypt…
[Sat Aug 5 22:22:39 CST 2018] Registering account
[Sat Aug 5 22:22:40 CST 2018] Registered
[Sat Aug 5 22:22:40 CST 2018] ACCOUNT_THUMBPRINT=\’oKzGuf4OhgE8SZtXn_3e9mnKUn49QPyPwd54i-asQd8\’
[Sat Aug 5 22:22:40 CST 2018] Creating domain key
[Sat Aug 5 22:22:41 CST 2018] The domain key is here: /usr/local/apache/conf/ssl/seoimo.com/seoimo.com.key
[Sat Aug 5 22:22:41 CST 2018] Multi domain=\’DNS:seoimo.com,DNS:www.seoimo.com\’
[Sat Aug 5 22:22:41 CST 2018] Getting domain auth token for each domain
[Sat Aug 5 22:22:41 CST 2018] Getting webroot for domain=\’seoimo.com\’
[Sat Aug 5 22:22:41 CST 2018] Getting new-authz for domain=\’seoimo.com\’
[Sat Aug 5 22:22:41 CST 2018] The new-authz request is ok.
[Sat Aug 5 22:22:42 CST 2018] Getting webroot for domain=\’www.seoimo.com\’
[Sat Aug 5 22:22:42 CST 2018] Getting new-authz for domain=\’www.seoimo.com\’
[Sat Aug 5 22:22:42 CST 2018] The new-authz request is ok.
[Sat Aug 5 22:22:42 CST 2018] Verifying:seoimo.com
[Sat Aug 5 22:22:46 CST 2018] Success
[Sat Aug 5 22:22:46 CST 2018] Verifying:www.seoimo.com
[Sat Aug 5 22:22:49 CST 2018] Success
[Sat Aug 5 22:22:49 CST 2018] Verify finished, start to sign.
[Sat Aug 5 22:22:50 CST 2018] Cert success.
[Sat Aug 5 22:22:50 CST 2018] Your cert is in /usr/local/apache/conf/ssl/seoimo.com/seoimo.com.cer
[Sat Aug 5 22:22:50 CST 2018] Your cert key is in /usr/local/apache/conf/ssl/seoimo.com/seoimo.com.key
[Sat Aug 5 22:22:51 CST 2018] The intermediate CA cert is in /usr/local/apache/conf/ssl/seoimo.com/ca.cer
[Sat Aug 5 22:22:51 CST 2018] And the full chain certs is there: /usr/local/apache/conf/ssl/seoimo.com/fullchain.cer
[Sat Aug 5 22:22:51 CST 2018] Run reload cmd: /etc/init.d/httpd graceful
graceful apache… done
[Sat Aug 5 22:22:51 CST 2018] Reload success
Let\’s Encrypt SSL Certificate create successfully.
Test Apache configure file…
test apache configure… Syntax OK
done
Restart Apache…
restart apache… done
================================================
Virtualhost infomation:
Your domain: seoimo.com
Home Directory: /home/wwwroot/seoimo.com
Enable log: no
Database username: sjk_seoimo
Database userpassword: sjkmmseoimo
Database Name: sjk_seoimo
Create ftp account: no
Enable SSL: yes
=>Let\’s Encrypt
================================================
此外,开启 SSL/HTTPS 访问后,还需要进行以下几点操作:
① – 开启 HSTS;② – 关闭 SNI;③ – HTTP 全部 301 重定向到 HTTPS
关于 FTP 功能
LNMP1.5 默认是不安装 FTP 服务的。
需要上下传文件时,设置 FTP 软件(如 FlashFXP)连接类型为“SFTP over SSH”即可。
但是,特定情况下仍需要开启 FTP 服务的话,可进行如下操作:
# cd /root/lnmp1.5-full
# ./pureftpd.sh
安装成功后,添加 FTP 用户:
# lnmp ftp add
设置好 FTP 用户名、密码以及访问目录的 绝对路径(以“/”开头)!!
特别提示:
使用 FTP 软件连接 VPS 后,若无法进行上传和下载,并提示“553 Can’t open that file: Permission denied”时,可能需要更改下权限:
# chown www:www -R / 目录路径 /
#8安装 WordPress 程序
以下的步骤想必应该很熟悉,和带 Cpanel 或 DirectAdmin 面板安装 WordPress 过程比较类似。只不过,在面板上操作是可视化的,比较直观。而在这里是通过命令执行的,非可视。只要输入命令时细心点,一般是不会出问题的。
首先,进入添加的域名目录:
# cd /home/wwwroot/seoimo.com
回车。然后浏览器中打开WordPress 中文站点,下载最新的程序压缩包:
# wget https://cn.wordpress.org/wordpress-4.9.4-zh_CN.tar.gz
回车。等待下载完之后,解压压缩包:
# tar -zxvf wordpress-4.9.4-zh_CN.tar.gz
回车。
接下来,将解压出来的 wordpress 文件夹内全部文件移动到当前的域名目录下(别忘了后面的.)。
# mv wordpress/* .
回车。然后,可以选择删掉空文件夹 wordpress 及源程序(可选)。
# rm -rf wordpress
# rm -rf wordpress-4.9.4-zh_CN.tar.gz
回车,搞定。
为避免因权限的问题导致安装出错,比如 wp-config.php 无法创建、需要提供 FTP 用户密码以及主题和插件不能更新等,建议赋予网站根目录文件的可写权限。
# chmod -R 755 /home/wwwroot && chown -R www /home/wwwroot
【温馨提示】以后每添加一个域名,都要对应地执行一次以上操作。
好了,打开博客网址进行最后的安装吧!(记得要提前设置好域名解析)
安装 SSL 证书后,建议打开 HTTPS 开头的网址安装。如已经使用 HTTP 安装,需要把 HTTP 替换为 HTTPS 网址。
至此,在 VPS 上通过搭建 LAMP 环境安装 WordPress 博客已经大功告成了。
接下来,我们来对 VPS 进行必要的配置优化,以便进一步提高主机性能。
#9VPS 配置优化
关于 VPS 服务器方面的配置优化绝对是个技术活,如果深入研究的话会比较复杂。博主非技术大牛,在这里仅介绍一下常用的三点:优化 php.ini 配置、添加 swap 交换分区 和开启 Keep-Alive 功能 优化 Httpd 配置。
#9.1优化 php.ini 配置
用 vi 命令修改 php.ini 文件。
# vi /usr/local/php/etc/php.ini
单击 i 键进入 insert 模式,按“上下左右”四个方向键找到并修改以下两项:
memory_limit = 128M
前者表示允许脚本最大执行时间 300 秒,后者表示允许单个脚本允许使用的最大内存 128M(通常 1G 内存以下设置 64M 或 128M 即可)。
单击 Esc 键退出 insert 模式,输入以下命令保存退出。注意英文状态下输入!
# :wq
回车。然后重启一下 LNMP:
# lnmp restart
回车。
#9.2添加 Swap 交换分区
①此方法只适用于虚拟化技术为 KVM 和 Xen 的 VPS,OpenVZ 不支持添加 Swap 交换分区;
②若搬瓦工 VPS 管理后台 Swap 状态长期显示红色,则表明 VPS 内存已满,该考虑升级 VPS 了。
关于 Swap 分区的具体含义在此不再赘述,详细可以参考百度百科:Swap 分区
简单来说,当 VPS 的物理内存不够用时,系统会占用一部分 Swap 分区作为临时内存,目的是防止因物理内存耗尽而可能出现的错误。
因此,对小内存 VPS 来说,设置一定大小的 Swap 交换分区显然很有意义。
但是,由于硬盘的 I/O 读写速度远不能和内存的读写速度相提并论(可能相差几十倍),使用 Swap 交换分区时,系统可能会变得特别缓慢、卡顿,甚至程序会出现错误。
因此,要尽量避免使用 Swap 分区,不得不使用时也不宜设置过大(大了也没用还占用空间),也就是说:我们不能指望用 Swap 来代替物理内存使用。甚至于,当你的 VPS 物理内存很充足时,完全可以禁用 Swap 以提高 VPS 的响应速度。
当物理内存(实际使用内存)长期处于耗尽状态时,正确的做法就是该升级套餐了。
添加 Swap 交换分区
使用 root 用户登陆 PuTTY,先看看是否已经添加了 Swap:
# free -m
若显示为 Swap = 0 的话,表明没有添加。否则,说明系统已自带 Swap 交换分区。
进入 var 文件目录:
# cd /var/
获取 256MB 的文件块(一般设置为内存的一半或相等即可):
# dd if=/dev/zero of=swapfile bs=1M count=256
创建 Swap 文件:
# /sbin/mkswap swapfile
激活 Swap 文件:
# /sbin/swapon swapfile
为了安全,建议修改一下权限:
# chmod 0600 /var/swapfile
将 swapfile 添加到 fstab 文件中,开机自动启动:
# echo "/var/swapfile swap swap defaults 0 0" >> /etc/fstab
搞定了。此时查看内存信息:
# free -m
出现“Swap: 256”字样表示设置成功。
修改 swappiness 默认值
上面说了,我们要尽量避免使用 Swap 分区。所以,这里我们需要额外做些修改,使系统尽可能的优先使用物理内存。
首先查看下 swappiness 的默认值:
# cat /proc/sys/vm/swappiness
通常,返回值是 60(默认值)。
实际上,swappiness = 0 表示最大限度使用物理内存,然后才使用 swap 分区;swappiness = 100 表示系统积极的使用 swap 分区,然后才使用物理内存。
显然,这里我们需要降低 swappiness 的默认值。
# vi /etc/sysctl.conf
在里面添加 vm.swappiness = 10 字段,然后退出保存。
或者:
# echo "vm.swappiness = 10" >> /etc/sysctl.conf
然后 # reboot 一下 VPS 即可。
如操作过程中提示 “swapoff failed: Cannot allocate memory” 错误,表示 swapoff 失败,无法分配内存。由于更改 Swap 配置也是需要内存的,所以,如果目前 VPS 内存不够用,就会出现此类错误。
解决办法很简单,关闭其他程序释放内存即可,比如关闭 LNMP:# lnmp stop
创建完成之后,再重启 LNMP:# lnmp start
删除 / 重置 Swap 交换分区
若系统已设置 Swap,但是需要对其做出更改的话,可以将其删除。
首先查看 Swap 位置:
# swapon -s
比如显示为 /var/swapfile,则停止并删除 swap:
# /sbin/swapoff /var/swapfile
# rm -rf /var/swapfile
然后,将其删除开机启动:
# vi /etc/fstab
将 /var/swapfile swap swap defaults 0 0 该行删除,然后保存退出。
#9.3开启 Keep-Alive 功能 优化 Httpd 配置
开启 Keep-Alive 功能可使客户端到服务器端的连接持续有效,当出现对服务器的后继请求时,Keep-Alive 功能避免了建立或者重新建立连接。可见,对访问静态网页时,开启 Keep-Alive 是很有用的。
因为在进行 WordPress 管理方面上的优化时,需要安装静态缓存插件,所以,开启 Keep-Alive 功能十分必要。
# vi /usr/local/apache/conf/extra/httpd-default.conf
依次修改以下四条:
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 5
退出,保存:
# :wq
接下来优化 Httpd 配置(prefork 模式下),以降低 Apache 内存占用。此步骤对小内存 VPS(如搬瓦工 256MB 方案)尤为重要。
# vi /usr/local/apache/conf/extra/httpd-mpm.conf
依次修改如下:
退出,保存:
# :wq
然后,重启 httpd 服务:
# service httpd restart
#10删除 mysql-bin.0000* 日志文件
博主所用的 LNMP 一键安装包默认开启了日志记录,这样就会在 /usr/local/mysql/var/目录下面生成大量 mysql-bin.0000* 类似的文件,大小甚至达到几个 G!
所以,我们需要做下调整,禁止保留日志记录以防止占用太多空间。
于是,编辑 /etc/my.cnf 文件:
# vi /etc/my.cnf
找到以下两行代码,在前面添加 #,彻底禁用 MySQL 日志:
open_files_limit = 65535
#log-bin=mysql-bin
#binlog_format=mixed
server-id = 1
expire_logs_days = 10
保存退出,重启一下 MySQL:
# /etc/init.d/mysql restart
#11Linux-VPS 安全配置 / 防护措施
博主以为,VPS 的安全防护绝对是运行网站的重中之重。防护措施做不好,轻者给后期运行带来无穷无尽的烦恼,重者造成网站瘫痪甚至数据清空,那就真的欲哭无泪了。
好在 Linux 本身已经足够安全稳定,只要你不泄露关键的登录信息(比如 SSH 端口和 ROOT 密码等),通常不会产生重大事故。但即便如此,我们还是应该未雨绸缪,提前做好 VPS 的安全防护措施。
那么,VPS 安全配置究竟该如何做呢?
在这里,博主结合自己建站经验,介绍一下 Linux-VPS 安防措施里最有效的三个方面:修改 SSH 端口 、 阻止 SSH 暴力破解 和防御 DDOS 攻击。
#11.1修改 SSH 端口(强烈推荐)
首先,编辑配置文件:
# vi /etc/ssh/sshd_config
找到 #Port 22
这行(默认端口 22),把前面的 # 去掉,然后再添加一个新的端口(不超过 65535),比如 Port 56789:
保存,重启 SSH 即可:
# service sshd restart
接下来,在防火墙 /etc/sysconfig/iptables 里开启此端口:
# iptables -A INPUT -p tcp -m tcp --dport 56789 -j ACCEPT
保存并重启防火墙:
# service iptables save
# service iptables restart
或者,也可以编辑 /etc/sysconfig/iptables 文件,复制端口 22 的规则,粘贴在其下另起一行。
按 :wq 保存退出后,重启防火墙。
查看防火墙状态,看看端口是否开启成功:
# service iptables status
现在,使用新的端口连接 SSH。
若成功登录,则再次编辑 /etc/ssh/sshd_config,将里面的 Port 22
前加 # 保存后,重启 SSH 即可。
CentOS7 防火墙中开启相关端口:
CentOS7.X 中默认的防火墙 firewalld 而非 CentOS6.X 中的 iptables。如果你也像博主一样感觉用着很不爽,需要换回 iptables 的,可以参考如下设置。
1、关闭 firewall 并禁止开启启动:
# service firewalld stop
# systemctl disable firewalld.service
2、安装 iptables:
# yum -y install iptables-services
3、修改 iptables 配置:
# vi /etc/sysconfig/iptables
粘贴如下内容(可按需要自行增删):
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state –state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp –dport 22 -j ACCEPT
-A INPUT -p tcp -m tcp –dport 56789 -j ACCEPT
-A INPUT -p tcp -m tcp –dport 80 -j ACCEPT
-A INPUT -p tcp -m tcp –dport 3306 -j DROP
-A INPUT -p tcp -m tcp –dport 443 -j ACCEPT
-A INPUT -p tcp -m tcp –dport 11211 -j DROP
-A INPUT -p udp -m udp –dport 11211 -j DROP
-A INPUT -j REJECT –reject-with icmp-host-prohibited
-A FORWARD -j REJECT –reject-with icmp-host-prohibited
COMMIT
按 :wq 保存退出后,重启 iptables,并设置为开机启动:
# service iptables restart
# systemctl enable iptables.service
【温馨提示】搬瓦工 VPS 生成的 SSH 端口是随机的(非默认端口 22),因此,可无需再次修改。
#11.2阻止 SSH 暴力破解(可选)
设置高强度密码 更改默认 SSH 的 22 端口后,已经可以阻止绝大多数的 SSH 非法请求了。因此,安装 DenyHosts 这步可以省略。
如果遇到程序自动扫描 SSH 端口并进行暴力破解,那么仅仅修改端口的话,可能 还是不够的。因此,我们需要安装 DenyHosts 进行自动拦截。
首先,下载 DenyHosts 并解压到 root 目录:
# cd ~
# wget http://soft.vpser.net/security/denyhosts/DenyHosts-2.6.tar.gz
# tar -zxvf DenyHosts-2.6.tar.gz
# cd DenyHosts-2.6
接下来,进行安装和配置:
# python setup.py install
# cd /usr/share/denyhosts/
# cp denyhosts.cfg-dist denyhosts.cfg
# cp daemon-control-dist daemon-control
然后,设置开机启动:
# chown root daemon-control
# chmod 700 daemon-control
# ./daemon-control start
# echo "/usr/share/denyhosts/daemon-control start" >> /etc/rc.local
至此,DenyHosts 就算安装完成了。通常,DenyHosts 默认的阻拦配置就可以。当然,你也可以自行设置:
# vi /usr/share/denyhosts/denyhosts.cfg
自行设置如下几个主要的参数:
DENY_THRESHOLD_INVALID = 5
DENY_THRESHOLD_VALID = 5
DENY_THRESHOLD_ROOT = 5
HOSTNAME_LOOKUP = NO
最后,重启一下 DenyHosts 即可:
# /usr/share/denyhosts/daemon-control restart
倘若自己的 IP(如何查看)被误封,可在 /etc/hosts.deny 中删除对应的 IP 后重启 DenyHosts 即可。
卸载 DenyHosts
卸载 DenyHosts 比较麻烦,官方貌似没有提供具体卸载方法。
不过,我们可以通过 停用 + 禁止开机启动 来将其关闭。
停用 DenyHosts:
# /usr/share/denyhosts/daemon-control stop
禁止开机启动,编辑 /etc/rc.local:
# vi /etc/rc.local
将 /usr/share/denyhosts/daemon-control start 这行删除,保存退出。
如此,就实现了停用 DenyHosts 的目的。
#12MySQL 数据库优化
众所周知,LAMP 是比较依赖数据库的。尤其是搭建的 WordPress 博客没进行 HTML 静态缓存的情况下,对数据库的依赖更加严重。
在我看来,对 MySQL 数据库的优化是特别重要也是特别困难的一项工作。不仅仅是因为 MySQL 设置里参数众多,让人看着头疼迷糊,更是因为这些参数没有一个固定的最优组合。参数设置的激进,浪费 VPS 资源,设置的保守,又可能限制程序的正常运行。
那么,究竟该怎么设置才合理呢?
根据博主的经验,对 MySQL 众多参数中最重要的以下几点进行合理的优化后,基本可以保证中小流量(比如<5000IP/ 天)博客的正常访问。
为确保安全,首先备份一下 /etc/my.cnf:
# cp /etc/my.cnf /etc/my.cnf.old
接下来,修改 /etc/my.cnf 中的以下参数:
# vi /etc/my.cnf
max_connections = 100
修改后,保存退出。重启一下 MySQL 数据库即可:
# /etc/init.d/mysql restart
特别提示:★★★★★
随着博客流量的日益增长,这些设置可能不再适合,需要不断调整,以达到最合理的方案。
那么,如何调整呢?
在这里,博主根据自己的实际经验,提供以下方法。同时,也建议你定期监测调整。
一、连接 MySQL 数据库:
# mysql -uroot -p
回车,输入数据库密码(root 用户)。
出现提示符 mysql> 后,即表示成功进入 MySQL 数据库中。
二、查看服务器响应的最大连接数(Max_used_connections):
mysql> show global status like \'Max_used_connections\';
返回值中,Max_used_connections 表示服务器过去发生的最大连接数。
博主建议:
max_connections / Max_used_connections = 1.5
比值可以大一些,但太小的话可能出现 1040 错误:“MySQL: ERROR 1040: Too many connections”
三、查看 key_buffer_size 使用情况:
mysql> show global status like \'key_read%\';
得到返回值(单位:Byte),索引未命中缓存的概率:
key_cache_miss_rate = Key_reads / Key_read_requests * 100%
博主建议:
key_cache_miss_rate < 0.1% 即可,表示 1000 个索引读取请求才有一个直接读硬盘;
如果比值过小(比如< 0.01%),则表示 key_buffer_size 分配的过多,可适当减少。
四、查询缓存(query cache)利用率:
mysql> show global status like \'qcache%\';
返回值中,Qcache_free_memory 表示缓存中的空闲内存(单位:Byte)
则查询缓存利用率:
x = (query_cache_size – Qcache_free_memory) / query_cache_size * 100%
博主建议:
查询缓存利用率 >80% 时,可适当提高 query_cache_size 数值;
查询缓存利用率 <20% 时,可适当降低 query_cache_size 数值。
五、退出 MySQL 数据库:
mysql> exit
#14WordPress 博客的备份和迁移
网站备份的重要性就不需要博主多说了。在 Linux 系统下,对 WordPress 进行备份其实并不难。主要涉及两部分:文件备份和数据库备份
#14.1 文件备份
温馨提示:以下命令中涉及的数据库和域名,请根据你 VPS 上具体设置,自行修改。
为了方便管理,我们先建立一个文件夹专门存放备份数据,比如 /home/backup/:
# mkdir /home/backup
以本站所在文件夹 seoimo.com 为例,压缩整站并移动到 /home/backup/ 文件夹下(为方便管理,博主添加了备份日期):
# cd /home/wwwroot
# tar -zcf seoimo.com-20171001.tar.gz seoimo.com
# mv seoimo.com-20171001.tar.gz /home/backup/
好了,整站已经打包备份完成。接下来,开始备份数据库。
#14.2 数据库备份
首先,打开 /home/backup/ 文件夹,我们需要将数据库备份在这里:
# cd /home/backup
# lnmp database list
输入 root 数据库密码,即可查看当前数据库列表。
选择需要备份网站的对应数据库,以选定 sjk_seoimo 为例:
mysqldump -uroot -p sjk_seoimo > sjk_seoimo-20171001.sql
再次输入数据库密码,即可完成数据库备份。
可键入命令 # ls 查看当前目录下已经存在了备份好的文件。
此时,可以用通过 FTP 下载到本地保存,也可上传到别的 VPS 上备份保存。
也可以查看:WordPress 站点备份插件 -UpdraftPlus Premium
#14.3 WordPress 迁移 / 搬家
某些情况下,我们可能需要进行网站迁移,从一个 VPS 搬家到另一个 VPS 上。如果是没有开通 SSH 功能的虚拟主机,搬家起来可能会比较麻烦,来来回回的下载和上传。但是,在 VPS 上操作则相对简单的多。
假设新 VPS 的 IP 为 8.8.8.8,SSH 端口为 22,则打开备份目录,选择需要的文件备份和数据库备份上传:
# cd /home/backup
# ls
# scp -P 22 seoimo.com-20171001.tar.gz root@8.8.8.8:/home/backup
# scp -P 22 sjk_seoimo-20171001.sql root@8.8.8.8:/home/backup
回车后,按要求输入新的 VPS 登陆密码。
接下来,SSH 登入新的 VPS。然后解压或替换网站域名目录:
# cp /home/backup/seoimo.com-20171001.tar.gz /home/wwwroot
# cd /home/wwwroot
# tar -zxf seoimo.com-20171001.tar.gz
# rm -rf seoimo.com-20171001.tar.gz
搬家后解压的文件可能存在权限的问题,建议赋予网站根目录文件的可写权限。
# chmod -R 755 /home/wwwroot/seoimo.com
# chown -R www /home/wwwroot/seoimo.com
之后,导入数据库,仍以 sjk_seoimo 为例:
# cd /home/backup
# ls
# mysql -uroot -p sjk_seoimo < sjk_seoimo-20171001.sql
倘若虚拟主机转虚拟主机,或者虚拟主机转 VPS,数据库密码和某些插件文件路径可能不同,这就需要额外去查找更改了。
但如果都是在 VPS 上通过 LNMP 搭建 WordPress,通常则无需再做额外操作。
注意:如果网站开启了 HTTPS
访问,且是安装的 Let\'s Encrypt
提供的免费 SSL 证书,那么除了上面的操作之外,还需要使用命令 # lnmp ssl add
再重新添加 SSL 证书。
【温馨提示】数据库的导出用的符号是 “>”,导入用的是 “<“;注意方向,千万别搞错了。
根据该教程 https://www.seoimo.com/wordpress-vps/#centos7-iptables-port 结合自己的建站整理二而成。