Linode VPS 使用记录
2020.6.26
2G 内存的 aws lightsail 上部署的应用太多,hexo 博客生成进程经常被 killed,再买个 linode 专门部署博客。
用 docker 部署的 nginx 有问题,一直是空白页面。
后来又研究了下 hexo 进程被 killed 的原因,改了改 aws lightsail 的 linux 内核参数,增大交互空间的可用比例,以避免被 linux 的 oom killer 机制 kill 进程,解决了这个问题,就把 linode 的实例删了,继续用一个 aws lightsail 部署所有应用。
一天的试用感觉 linode 速度不错,但没 aws 用着顺手。第二个实例可能还会买 aws
2020.8.23
反正 linode 中还有赠送的 100 刀优惠券,不用白不用,又创建了一个实例玩。
还是先搭建 hexo 环境,docker 安装 nginx 并配置转发后 hexo 博客页面还是空白,不过这次排查到不是 nginx 的问题,是 hexo g 生成的页面本身就是 0kb 空白的。
再排查 hexo 的问题,发现是 nodejs 新版本导致的,把 nodejs 降级为稳定版后解决。
就继续保留这个 linode 实例了。
系统配置
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/swaps
或 free
或 swapon -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 运行状态,结果是 running
或 not 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/configssh -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并验证
启动dockersudo 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 来安装 nodejssudo 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
安装依赖
页面信息
location:
protocol
: host
: hostname
: origin
: pathname
: href
: document:
referrer
: navigator:
platform
: userAgent
: