随着 VestaCP 0.9.8-17 版本的发布,增加了对 Ubuntu 16.04(Xenial) 的支持 —— 这意味着在 Ubuntu16 上面安装 VestaCP 就可以直接获得 PHP 7.0 环境了!
因此,为了能顺利获得 PHP7 环境,我们必须抛弃 CentOS7,换用 Ubuntu 16 作为 VPS 服务器的操作系统。
阿里云 ECS 服务器不提供 Ubuntu 16
但是,在给阿里云的 ECS 云服务器安装操作系统时,“公共镜像”里面列出的 Ubuntu 最高版本是14.04,没有 Ubuntu16 的影子!而Ubuntu 14.x 无法实现 PHP7,怎么办?
“目前还不支持ubuntu 16 操作系统”
话说别的云服务器提供商(例如:腾讯云)早就给客户提供 Ubuntu16 镜像了,但是我们不能马上换过去,因为换服务器提供商还是很麻烦的一件事。所以,我们只能想办法来自己解决这个难题。
突破阿里云限制,手工升级 Ubuntu 14 到 Ubuntu 16
在网上搜索了一下网友的经验,发现有人写了一篇教程,非常短,只有不到200字吧,说阿里云的 ubuntu14 可以升级到 16,执行下面一条命令即可:
# sudo do-release-upgrade -d
那篇文章中说执行这个就顺利完成升级了。但是我测试时发现,执行之后立即报错,根本没法顺利执行下去。
后来,经过一番摸索,才发现还有一些小问题需要解决,才能通过上述命令实现从 Ubuntu 14.04 到 Ubuntu 16.04 的升级。所以,今天专门写一篇详细教程来介绍这个过程。
第一步:对现有 Joomla 网站做全站备份,网站离线(给访客显示“正在维护”);备份其它可能存在的数据(例如:RoundCube 里面的邮件,等等)。如果你的 ECS 服务器是全新的,还没有搭建网站也没有个人数据,就忽略这一步,从下一步开始。
第二步:在阿里云ECS控制台将云服务器实例“停止”,然后选择“重置系统盘”。接下来进入镜像选择页面(如本文开头截图所示),选择“公共镜像”里面的 Ubuntu 14.04 来安装(需要手工填写root用户密码,确保密码记录下来),整个安装过程非常快,大概不到1分钟就完成了。
第三步:将全新的Ubuntu14服务器“启动”,然后通过 Xshell 或者 Putty 等 SSH 终端,以 root 用户身份连接这个服务器(用户名:root,密码:安装镜像时你所填写的密码)。
实际上,在 SSH 连接建立的时候,屏幕上已有升级提示:
Welcome to Ubuntu 14.04.4 LTS (GNU/Linux 3.13.0-86-generic x86_64)
* Documentation: https://help.ubuntu.com/
New release '16.04.1 LTS' available.
Run 'do-release-upgrade' to upgrade to it.
Welcome to aliyun Elastic Compute Service!
第四步:在 Xshell 命令行界面输入前面提到的命令:
# sudo do-release-upgrade -d
执行的结果是:
Checking for a new Ubuntu release
0% [Working]
0% [Connecting to mirrors.aliyun.com]
0% [Connecting to mirrors.aliyun.com (112.124.140.210)]
0% [Waiting for headers]
Get:1 Upgrade tool signature [836 B]
0% [1 0 B/836 B 0%]
99% [Working]
99% [Waiting for headers]
Get:2 Upgrade tool [1,266 kB]
0% [2 0 B/1,266 kB 0%]
51% [2 648 kB/1,266 kB 51%]
96% [2 1,228 kB/1,266 kB 96%]
100% [Working]
Fetched 1,267 kB in 0s (0 B/s)
authenticate 'xenial.tar.gz' against 'xenial.tar.gz.gpg'
extracting 'xenial.tar.gz'
Reading cache
Checking package manager
Continue running under SSH?
This session appears to be running under ssh. It is not recommended
to perform a upgrade over ssh currently because in case of failure it
is harder to recover.
If you continue, an additional ssh daemon will be started at port
'1022'.
Do you want to continue?
Continue [yN] y
Starting additional sshd
To make recovery in case of failure easier, an additional sshd will
be started on port '1022'. If anything goes wrong with the running
ssh you can still connect to the additional one.
If you run a firewall, you may need to temporarily open this port. As
this is potentially dangerous it's not done automatically. You can
open the port with e.g.:
'iptables -I INPUT -p tcp --dport 1022 -j ACCEPT'
To continue please press [ENTER]
Reading package lists... 0%
Reading package lists... 100%
Reading package lists... Done
Building dependency tree... 0%
Building dependency tree... 50%
Building dependency tree
Reading state information... 0%
Reading state information... Done
Building data structures... 0%
Building data structures... 1%
...
Building data structures... 99%
Building data structures... Done
Required depends is not installed
The required dependency 'dpkg (>= 1.17.5ubuntu5.6)' is not installed.
这么多返回结果,大家只看开头和末尾就行了:开头几行显示找到了升级信息(意味着有新版本可升级),接下来在用户输入“y”表示同意之后,进行了那么多的下载、读取、构建工作,就在我们窃喜以为要成功的时候,最后两行显示了报错消息然后该命令终止执行:
Required depends is not installed
The required dependency 'dpkg (>= 1.17.5ubuntu5.6)' is not installed.
这里提到了“必须的依赖包”叫做 dpkg 。由于缺少这个依赖包,导致升级无法进行下去。这就是本次升级过程关键所在,解决这个问题就能顺利升级了。
第五步:手工安装 dpkg 依赖包
在 Xshell 命令行执行下面的指令:
# cd /tmp
# wget https://mirrors.aliyuncs.com/ubuntu/pool/main/d/dpkg/dpkg_1.17.5ubuntu5.6_amd64.d
这是从阿里云仓库下载 dpkg 安装包(我们下载到了 /tmp 临时目录中)。很快就下载完成了(文件大小约 1.9MB),然后执行安装命令:
# sudo dpkg -i dpkg_1.17.5ubuntu5.6_amd64.deb
安装成功之后,再执行升级命令:
# sudo do-release-upgrade -d
在升级过程中,多次需要用户选择“是”或“否”,建议直接按 Enter (回车键),表示“接受默认选择”。整个升级过程大概10分钟,最后屏幕上显示:
System upgrade is complete.
Restart required
To finish the upgrade, a restart is required.
If you select 'y' the system will be restarted.
Continue [yN]
我们按下 y 同意之后,系统重启。然后查看操作系统版本:
# lsb_release -a
执行这个命令返回的结果是:
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 16.04.1 LTS
Release: 16.04
Codename: xenial
这就证明我们已经将阿里云 ECS 自带的 Ubuntu 14.04 成功升级到了 16.04 版本。尽管这篇文章看起来很长,但是算上安装 dpkg 的指令及升级系统的指令,是不是只用了3行代码?我们就成功实际了目标。
顺便说一下:Ubuntu 16.04 搭建的服务器比 CentOS 还有一个重大的改进,就是自动使用内存创建了虚拟磁盘(RamDisk),使得服务器速度大幅提升。