Linode VPS 使用记录


系统配置

linux 版本信息

$ cat /etc/os-release
NAME="CentOS Linux"
VERSION="7 (Core)"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="7"
PRETTY_NAME="CentOS Linux 7 (Core)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:7"
HOME_URL="https://www.centos.org/"
BUG_REPORT_URL="https://bugs.centos.org/"

CENTOS_MANTISBT_PROJECT="CentOS-7"
CENTOS_MANTISBT_PROJECT_VERSION="7"
REDHAT_SUPPORT_PRODUCT="centos"
REDHAT_SUPPORT_PRODUCT_VERSION="7"
$ uname -a
Linux li1854-130.members.linode.com 3.10.0-1127.el7.x86_64 #1 SMP Tue Mar 31 23:36:51 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux

时区设置为东八区Shanghai

默认情况下,Amazon Linux 实例设置为 UTC (协调世界时) 时区,将其修改为东八区,即上海

1、确保系统中有 Shanghai 的时区文件 /usr/share/zoneinfo/Asia/Shanghai
2、在 /etc/localtime 与时区文件之间创建一个符号链接,以便实例在引用本地时间信息时找到此时区文件。
sudo ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
3、重启系统,以便所有服务和应用程序接受新时区信息。
sudo reboot
不想重启系统的话,可以分别重启需要读取新时区的应用,以便读取新时区。


给linux添加swap交换文件(即虚拟内存)

1、创建大小为 2G 的交换文件 sudo dd if=/dev/zero of=/swapfile1 bs=1M count=2048

2、修改文件的权限,避免其他用户对这个文件进行误操作:
sudo chmod 600 /swapfile1

3、使用mkswap命令来设置交换文件 sudo mkswap /swapfile1

4、启用交换文件:
sudo swapon /swapfile1

5、写入 /etc/fstab, 以便在系统启动时自动加载交换文件:
/swapfile1 none swap defaults 0 0

# cat /etc/fstab

#
# /etc/fstab
# Created by anaconda on Tue May 26 21:38:41 2020
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/sda /                       ext4    defaults        1 1
/dev/sdb none                    swap    defaults        0 0
/swapfile1 none swap defaults 0 0

新添了交换分区并启用它之后,请查看 cat /proc/swapsfreeswapon -s 命令的输出来确保交换分区已被启用了。


创建用于远程登录的新账户

root 账户远程登录不安全,创建一个新账户

1 useradd testuser 创建用户 testuser
2 passwd testuser 给已创建的用户 testuser 设置密码
3 usermod -aG wheel testuser 将用户加入 wheel 用户组,以便可以使用 sudo 提升权限

之后的所有远程登录和操作都使用这个新账号,不使用 root


FirewallD防火墙配置

hexo 博客搭建好后始终无法从外网访问,原来是 centos7 默认开启了 firewalld 防火墙,拦截了所有外网流量,关闭防火墙或按需配置规则。

1 启动和启用 firewalld

sudo systemctl start firewalld
sudo systemctl enable firewalld

2 禁用和停止 firewalld

sudo systemctl stop firewalld
sudo systemctl disable firewalld

3 查看 firewalld 运行状态,结果是 runningnot running

sudo firewall-cmd --state

4 查看 firewalld 状态,会输出一些详细信息

sudo systemctl status firewalld

Introduction to FirewallD on CentOS
https://www.linode.com/docs/security/firewalls/introduction-to-firewalld-on-centos/


ssh密钥登录配置

本机生成密钥

1 ssh-keygen -f linode 一路回车不需要密码,得到私钥 linode 和公钥 linode.pub

服务器添加ssh公钥

linode 管理界面上有添加公钥的地方,但添加后不起作用,登录还是需要输入密码,需要手动在服务器上添加。

使用 非 root 账户登录服务器后
1、创建 .ssh 目录 和 authorized_keys 文件
mkdir -p ~/.ssh && touch ~/.ssh/authorized_keys

2、修改权限
chmod 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys

3、拷贝公钥到 authorized_keys 中

注意:如果是用 root 账号 创建的 .ssh 目录 和 authorized_keys 文件,还需要把 .ssh 的 owner 改为实际登录的账户
chown -R your_username:your_username /home/your_username/.ssh

Use Public Key Authentication with SSH
https://www.linode.com/docs/security/authentication/use-public-key-authentication-with-ssh/

设置ssh回话超时时间

基于安全的理由,如果用户连线到 SSH Server 后闲置,SSH Server 会在超过特定时间后自动终止 SSH 连线。
为了避免总是被强行退出,可设置ssh超时时间。
编辑 sshd_config 配置文件
sudo vi /etc/ssh/sshd_config
找到注释掉的如下2个配置项,改为:

ClientAliveInterval 60
ClientAliveCountMax 3

ClientAliveInterval 指定了服务器端向客户端请求no-op包的时间间隔, 默认是0, 不发送。设置60表示每60秒发送一次, 然后客户端响应, 这样就保持长连接了。
ClientAliveCountMax 表示服务器发出请求后客户端没有响应的次数达到一定值, 就自动断开。正常情况下, 客户端不会不响应,使用默认值3即可。

修改后重新启动 sshd 服务
sudo service sshd restart

本机配置ssh别名

Host linode
    HostName 127.0.0.1
    IdentityFile ~/.ssh/linode.rsa
    User linodeuser

之后直接 ssh linode 即可免密登录了


安装git并连接GitHub

使用 非 root 账户 登录后

1 直接yum安装即可
sudo yum install git
git 需要依赖 perl 等库,会自动安装这些依赖。

2 ssh-keygen -P '' -f github 生成密钥对, 使用默认加密算法,文件名指定github,得到私钥文件 github,公钥文件 github.pub
登录github页面,添加公钥到github

3 配置 ~/.ssh/config 文件(没有的话自己重建一个),指定不同域名使用不同key

Host github.com *.github.com
    IdentityFile ~/.ssh/github

修改 config 文件权限 sudo chmod 600 config
否则提示 Bad owner or permissions on .ssh/config
ssh -T git@github.com 测试连接是否成功

注意:
1、执行 ssh-keygen 命令时,不要加 sudo,否则生产的文件拥有者是root,当前账户无法读取密钥文件,会导致 Permission denied (publickey)
2、执行 ssh -T git@github.com 测试连接是否成功时,也不能加 sudo,否则账户不对,读取不到密钥。


安装docker ce

Docker 分为 CE 和 EE 两大版本。CE 即社区版(免费,支持周期 7 个月),EE 即企业版,强调安全,付费使用,支持周期 24 个月。
参考笔记 Docker

安装 docker repo

1 安装 yum 仓库管理工具 yum-utils, 以及 device-mapper-persistent-data, lvm2

$ sudo yum install -y yum-utils \
  device-mapper-persistent-data \
  lvm2

2 安装 docker repo

$ sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo

安装完可以在 /etc/yum.repos.d/ 中看到 docker-ce.repo 文件
docker-ce.repo 中默认只有 docker-ce-stable 是开启的,即只开启稳定版的repo

yum安装最新版docker

sudo yum install docker-ce docker-ce-cli containerd.io
我安装的版本信息

已安装:
containerd.io.x86_64 0:1.2.13-3.2.el7
docker-ce.x86_64 3:19.03.12-3.el7
docker-ce-cli.x86_64 1:19.03.12-3.el7

启动docker并验证

启动docker
sudo systemctl start docker
设置开机启动
sudo systemctl enable docker
验证
sudo docker run hello-world
注意必须加 sudo,启动 ducker 需要 root 权限
此命令将从 dokcerhub 下载一个 hello-world 镜像并启动一个容器
看到如下提示说明安装正确
Hello from Docker!
This message shows that your installation appears to be working correctly.

将当前用户加入docker用户组

默认情况下,docker 命令会使用 Unix socket 与 Docker 引擎通讯。
而只有 root 用户和 docker 组的用户才可以访问 Docker 引擎的 Unix socket。
出于安全考虑,一般 Linux 系统上不会直接使用 root 用户。
因此,更好地做法是将需要使用 docker 的用户加入 docker 用户组。
1 sudo groupadd docker 建立 docker 组
2 sudo usermod -aG docker $USER 将当前用户加入 docker 组
3 docker run hello-world 退出 linux 重新登录,不加 sudo 执行 docker,成功说明当前用户加入docker用户组没问题。


hexo环境搭建

git拉取hexo项目代码

yum安装node和npm

Installing Node.js via package manager
https://nodejs.org/en/download/package-manager/

NodeSource Node.js Binary Distributions
https://github.com/nodesource/distributions/blob/master/README.md

使用官方脚本添加NodeSource源

nodejs 官方制作了添加 node 源的在线脚本,直接下载执行就行,不需要再手动添加 epel 和 remi 源了

# As root
curl -sL https://rpm.nodesource.com/setup_14.x | bash -

# No root privileges
curl -sL https://rpm.nodesource.com/setup_14.x | sudo bash -

最后会提示执行 sudo yum install -y nodejs 来安装 nodejs 和 npm

安装nodejs

按照安装 NodeSource 源时输出信息的提示,使用 yum 来安装 nodejs
sudo yum install -y nodejs

安装 nodejs 时自动会安装 npm 工具,完成后查看版本验证安装成功:

$ node -v
v14.8.0
$ npm -v
6.14.7

nodejs降级为稳定版本

最新版 nodejs 有问题,hexo g 生成的博客 index.html 页面是 0kb 空白的,降级为稳定版。
1 sudo npm install n -g 安装 node 版本管理模块 n

2 sudo n stable 安装最新稳定版 node
我这里安装的稳定版是 12.18.3
安装后可能由于缓存不会立即生效,node -v 查看默认node版本还是之前的,登出系统后再登入即可。

npm安装hexo

sudo npm config -g set unsafe-perm 全局设置 npm 的 unsafe-perm 标识,避免出现权限问题。
sudo npm install -g hexo-cli,安装hexo最新版
进入 hexo 项目目录
sudo npm install,根据 package.json 安装依赖