当前位置 : 首页 » 文章分类 :  开发  »  Linode VPS 使用记录

Linode VPS 使用记录

2G 内存的 aws lightsail 上部署的应用太多,hexo 博客生成进程经常被 killed,再买个 linode 专门部署博客。
用 docker 部署的 nginx 有问题,一直是空白页面。
后来又研究了下 hexo 进程被 killed 的原因,改了改 aws lightsail 的 linux 内核参数,增大交互空间的可用比例,以避免被 linux 的 oom killer 机制 kill 进程,咱时解决这个问题了。
就把 linode 的实例删了,继续用一个 aws lightsail 部署所有应用。
一天的试用感觉 linode 速度不错,但没 aws 用着顺手。第二个实例可能还会买 aws


系统配置

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 账户远程登录不安全,创建一个新账户
useradd testuser,创建用户testuser
passwd testuser 给已创建的用户testuser设置密码


FirewallD防火墙配置

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

启动和启用 firewalld

sudo systemctl start firewalld
sudo systemctl enable firewalld

禁用和停止 firewalld

sudo systemctl stop firewalld
sudo systemctl disable firewalld

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

sudo firewall-cmd --state

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

sudo systemctl status firewalld

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


ssh配置

服务器添加ssh公钥

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

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


安装git并连接GitHub

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

ssh-keygen -P '' -f github 生成密钥对, 使用默认加密算法,文件名指定github,得到私钥文件 github,公钥文件 github.pub
登录github页面,添加公钥到github
ssh -T git@github.com 测试连接是否成功

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

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

修改 config 文件权限 sudo chmod 600 config
否则提示 Bad owner or permissions on .ssh/config

注意:
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

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

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

安装 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 用户组。
建立 docker 组:
sudo groupadd docker
将当前用户加入 docker 组:
sudo usermod -aG docker $USER
退出linux重新登录,不加 sudo 执行docker
docker run hello-world
成功说明当前用户加入docker用户组没问题。


hexo环境搭建

git拉取hexo项目代码

yum安装node14和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 -

安装nodejs

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

sudo yum install -y nodejs

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

node -v
v14.4.0
npm -v
6.14.5

上一篇 LeetCode.程序员面试金典.0201.Remove Duplicate Node 移除重复节点

下一篇 LeetCode.139.Word Break 单词拆分

阅读
评论
2,024
阅读预计9分钟
创建日期 2020-06-26
修改日期 2020-06-26
类别

页面信息

location:
protocol:
host:
hostname:
origin:
pathname:
href:
document:
referrer:
navigator:
platform:
userAgent:

评论