记录一次我在服务器上的环境配置过程

前言

由于昨天作大死把我的一台个人服务器系统搞挂了,其实就是博客这台。紧急联系了主机服务商的技术人员以提供恢复支持,才终于把数据拯救回来了(其实就是白忙活一场辣,不过这中间的过程并不重要)。
所以这台服务器的环境于今天被我简短的配置了一下,并且当你的新旧环境一直保持有一致性以后便可以自动化全过程。

注意

我的系统是 Ubuntu 14.04,Xen 虚拟化的独立主机。如果是 OpenVZ 虚拟化或者非 Ubuntu 系统则不能通用这个过程。
并且,我这里涉及到的所有软件都是最新的稳定版,不用官方源内的软件。
关于权限:由于我的个人服务器没有多个用户权限划分这一说,直接使用的 root 用户。非 root 自行加 sudo 以及更改 node 在线脚本参数。

Docker

这个是必备的,我的一些应用以及数据库都是由 Docker 容器管理以及集群运行的。配置方法如下:

apt purge docker docker-engine
apt install -y --no-install-recommends \
    linux-image-extra-$(uname -r) \
    linux-image-extra-virtual
sudo apt install \
    apt-transport-https \
    ca-certificates \
    curl \
    software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
   $(lsb_release -cs) \
   stable"

依次执行上边的语句,分别是卸载可能存在的旧版本、安装必要依赖、安装证书和添加源。然后便可以安装 Docker 了(普通用户用 docker-ce 即可):

apt update && apt install -y docker-ce

注意:Docker 的镜像、容器等数据都在 /var/lib/docker 目录下,如果你想整个迁移 Docker 可以将此目录备份安装好以后替换。
PS: 如果手动升级内核导致的 Docker 不能使用请参考这篇文章:https://blog.bluerain.io/p/docker-storeage-driver.html

注意:如果 lsb_release 提示:“No LSB modules are available.”,请安装:

apt install -y lsb-core

Nginx

add-apt-repository ppa:nginx/stable
apt update && apt install -y nginx

添加最新稳定版更新的 nginx 源,然后直接安装即可。一般来讲,nginx 需要备份 /etc/nginx/conf.d 目录,因为这个目录通常是用户自己编写配置最多的地方。
nginx 是所有对外 HTTP 服务的前端。

注意:如果提示 ““The following packages have been kept back…“,导致 nginx 无法安装到最新版本,那么请:

sudo apt dist-upgrade

Ruby

apt-add-repository ppa:brightbox/ruby-ng
apt update && apt install -y ruby2.4 ruby2.4-dev

跟 Nginx 一样,添加额外源以后直接安装最新版即可。本博客的后端就是使用 Ruby 语言构建的(但非 ROR)。

安装 Bundler:

gem install bundler

Bundler 不解释,Ruby 必备版本管理工具。

Python

有人会质疑,Python 这种内置的软件也需要安装或者升级吗?假设你的系统包含了 Python3 ,那么你可以选择不安装或升级。但是不要以为多个 Python 版本“不能共存”,其实多个 Python 小版本都是可以共存的。我的所有 Python3 程序的入口文件 Shebang 都是:

#!/usr/bin/env python3.6

而非:

#!/usr/bin/env python3

或者

#!/usr/bin/env python

系统内置 Python2 和 Python3 也好,通常 Python3 不是最新的,我都会单独装一个最新的 Python3,例如目前的 3.6 版本。
添加 PPA:

add-apt-repository ppa:jonathonf/python-3.6
apt update && apt install python3.6

安装完成以后往往没有安装 pip 包(并且 PPA 也不带 deb 安装包),需要手动以 python3.6 执行 get-pip.py,我们在线执行即可:

curl -sL https://bootstrap.pypa.io/get-pip.py | python3.6

需要提一下,bin 目录中的 python3 和 pip3 其实都是符号链接,在你安装新的 Python3 之前,它们可能指向系统原来的 Python3 版本,但是你装了新版本以后链接文件可能被覆盖了一次,指向了最新安装的 Python3,但是其实你原本的 Python3 仍然在原本的位置,也没有任何库文件被覆盖,仅仅是入口链接没了而已。
所以你应该将系统原来的 python3 和 pip3 链接恢复成系统内置的版本(防止破坏系统软件),而不应该使用覆盖后的 3.6 版本的。使用新装的 python 的时候就使用具体版本的链接文件即可,例如:

python3.6 www.py

而不是

python3 www.py

使用 Shebang 的话也应该用具体版本(3.6),而不是大版本号(2 或者 3)。

FIrefox

服务器上用 Firefox 并不是为了远程桌面浏览网页用,对于我(包括大多数人)都不会给服务器安装 X.org 以及桌面。安装 Firefox 是为了使用 Selenium ,至于为什么不用 PhantomJs 而用 Firefox?因为 PhantomJs 在某些情况下效果不尽人意。
其实 Firefox 也没有必要用测试版,没有必要使用 PPA 。但是因为最近的 Firefox 支持了 Headless,不用 PPA 中的最新版体验不到,所以:

add-apt-repository ppa:mozillateam/firefox-next
apt update && apt install firefox

最新版 FIrefox 走起!

安装 Driver:

由于 GeckoDriver 是从 GIthub 发布页发布二进制包的,所以没有办法方便的使用简单的命令自动化安装,不过好在它不需要什么配置或者安装步骤,直接往 bin 目录扔即可。当然更好的做法是存放在某个目录,然后链接至 bin 。
发布页:https://github.com/mozilla/geckodriver/releases

Node

由于我个人已经习惯 Node 作为绿色形式安装,所以没去找 PPA。服务器上安装跟我在自己电脑上安装其实是一样的,那就是用一个在线脚本:

curl -sL https://shell.bluerain.io/release/commons | bash -s /data/env 0:0 node

附加:不了解使用方法的请看 https://github.com/Hentioe/autocfg-linux 项目。
PS: 博客的整个前端是基于依赖 node 的技术所构建的。

安装 Yarn:

curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add -
echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list
apt update && apt install yarn

Yarn 是使用 Node 必备的一个第三方包管理(替代 NPM),使用源安装不会受 Node 升级的影响,所以推荐使用源而非 npm 安装 Yarn 。

Go

curl -sL https://shell.bluerain.io/release/commons | bash -s /data/env 0:0 golang

安装 Glide:

sudo add-apt-repository ppa:masterminds/glide && sudo apt update
sudo apt install glide

Glide 是 Golang 平台好用的一个第三方包管理工具,曾经写文章介绍过它:https://blog.bluerain.io/p/Golang-Glide.html

Jenkins

后续单独发文。

最后

这篇文章出现的东西,经过我后续的更新已经不止发文时指的那台服务器所包含的内容了。目前这篇文章算是我各种服务器环境的一个备忘记录,需要的时候可以直接进来 COPY ,方便我自己。””