利用 Hexo 搭建个人博客(二)VPS 初始环境配置

VPS 购买

正如前期准备里所说,你需要先选择一个 VPS ,这里我使用了 Linode 。登录、注册就不详细讲解了,实在看不懂可以去网上搜流程,购买需要使用信用卡, Linode 不支持支付宝和微信支付。套餐选择 5 美元/月的足够,节点可以选择日本,也可选择美国和其他地区,按需求考虑。

部署镜像

网页端选择 Linodes - Dashboard - Deploy an Image,然后你需要选择系统。Linux 有许多发行版,请选择你所熟悉的版本,个人选择 CentOS 7。至于其他建议默认就好,之后需要设置 root 密码,请牢记你设置的密码。

然后请点击 Deploy 就会自动开始部署,等大概一两分钟即可完成。

首次登陆

在 Dashboard 界面点击 boot ,等右侧 Server Status 显示 Running 后你就可以进行远程登陆了。

通过 SSH 登陆

SSH 登陆工具有很多,windows 端推荐 XShell,Mac 平台推荐 iTerm2,或直接使用终端也行。

IP 查找

之后请去 Linodes - Remote Access 下找到服务器的 IP 地址,SSH 登陆需要它。

指令输入

以使用 iTerm 为例,首先输入 ssh root@xxx.xxx.xxx.xxx ,回车,第一次登陆会有提示,直接输入 yes 回车即可。之后会提示你输入密码,注意终端下输入密码是不会显示的,所以不要以为你键盘坏了。当你登陆成功后屏幕会出现 root@liXXX-XXX:~#,这时你就可以对系统执行各种操作了。

(注)如果 Rebuild 服务器

若 SSH 远程连接被拒绝,简单粗暴的解决办法是删除 .ssh 文件夹下的 known_hosts 文件。( OS X / Linux 系统 ,请通过命令行删除,图形界面看不到 .ssh 文件夹 )

登陆成功后

软件升级

首先请执行 yum update ( CentOS ) 进行软件升级,所需时间取决网速还看脸,一般五分钟不到。

时区

接着设置时区,输入 timedatectl set-timezone 'Asia/Shanghai' 回车执行。输入 date 回车查看设置后服务器时间。

添加新用户

之后请设置一个新用户,一般不推荐用 root 用户直接在系统上执行操作。输入 useradd example_user && passwd example_user ( 请用你自己设定的名称代替 example_user ) ,输入你设定的密码,回车生效。接着输入 usermod -aG wheel example_user 给予 sudo 权限。

注:更多安全设置请见参考,即 Linode 文档,或自行搜索 Linux 相关知识。

安装 fail2ban

fail2ban 主要用于封禁尝试 SSH 暴力破解的 IP 地址。

安装命令( CentOS 7 )

  1. yum update && yum install epel-release (升级,安装 EPEL 库)
  2. yum install fail2ban (安装 fail2ban)
  3. yum install sendmail (邮件通知,可选择)
  4. 运行 fail2ban
    • systemctl start fail2ban (启动 fail2ban)
    • systemctl enable fail2ban (开机启动 fail2ban)
    • systemctl start sendmail (可选,如果装了邮件通知)
    • systemctl enable sendmail (同上)

修改 jail.local 文件

  1. 执行 cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local 即拷贝 jail.conf 文件并重命名为 jail.local
  2. 修改 jail.local 文件,找到 backend = auto ,将 auto 修改为 systemd 。( 修改文件操作请自行搜索 )
  3. 同上,仍然在 jail.local 文件下查找 #[sshd] #enable = true,修改为 [sshd] enable = true,即去掉 #
  4. 还是 jail.local 文件下,查找 bantime = 600,这是设置封禁时间,单位是秒,个人修改为 24 小时,即 bantime = 86400
  5. 找到 findtime = 600maxretry = 3。这两个代码的含义是在十分钟内最多允许登陆三次,修改成你想要的值。
  6. 其余设置见参考
  7. 保存文件后使用 systemctl restart fail2ban 重启应用。

其他命令

  1. 检测 fail2ban 是否成功运行: fail2ban-client ping。回应 pong 即成功。
  2. 检测状态: fail2ban-client status
  3. 查看被禁 IP : fail2ban-client status sshd
  4. 白名单添加 IP : fail2ban-client set sshd addignoreip 192.168.123.456
  5. 白名单删除 IP : fail2ban-cilent set sshd delignoreip 192.168.123.456
  6. 查看日志: tail /var/log/fail2ban.log

错误

缺少文件

啟動 fail2ban 出現錯誤訊息
systemctl status fail2ban
● fail2ban.service - Fail2Ban Service
Loaded: loaded (/usr/lib/systemd/system/fail2ban.service; enabled; vendor preset: disabled)
Active: failed (Result: start-limit) since Fri 2017-02-17 12:46:16 CST; 2min 55s ago
Docs: man:fail2ban(1)
Process: 972 ExecStart=/usr/bin/fail2ban-client -x start (code=exited, status=255)

Feb 17 12:46:16 NPC11 systemd[1]: Failed to start Fail2Ban Service.
Feb 17 12:46:16 NPC11 systemd[1]: Unit fail2ban.service entered failed state.
Feb 17 12:46:16 NPC11 systemd[1]: fail2ban.service failed.
Feb 17 12:46:16 NPC11 systemd[1]: fail2ban.service holdoff time over, sche…t.
Feb 17 12:46:16 NPC11 systemd[1]: start request repeated too quickly for f…ce
Feb 17 12:46:16 NPC11 systemd[1]: Failed to start Fail2Ban Service.
Feb 17 12:46:16 NPC11 systemd[1]: Unit fail2ban.service entered failed state.
Feb 17 12:46:16 NPC11 systemd[1]: fail2ban.service failed.
Hint: Some lines were ellipsized, use -l to show in full.

檢查 /var/log/message 中的紀錄

grep -i fail2ban /var/log/message

Feb 17 04:46:15 NPC11 systemd: Starting Fail2Ban Service…
Feb 17 04:46:15 NPC11 fail2ban-client: ERROR There is no directory /var/run/fail2ban to contain the socket file /var/run/fail2ban/fail2ban.sock.
Feb 17 04:46:15 NPC11 systemd: fail2ban.service: control process exited, code=exited status=255
Feb 17 04:46:15 NPC11 systemd: Failed to start Fail2Ban Service.
Feb 17 04:46:15 NPC11 systemd: Unit fail2ban.service entered failed state.
Feb 17 04:46:15 NPC11 systemd: fail2ban.service failed.

看起來似乎是在 /var/run/fail2ban 目錄下找不到 fail2ban.sock 這一個檔案
解決方式:

  1. 建立目錄
    mkdir /var/run/fail2ban
  2. 重新啟動 fail2ban 就正常了!
    systemctl enable fail2ban.service;systemctl start fail2ban.service
[sshd] 没有去掉注释

error:
[xxx@xxxxxxxx ~]# fail2ban-client reload ERROR Failed during configuration: File contains no section headers. file: /etc/fail2ban/jail.local, line: 24 'enabled = true\n'

解决方式:
去掉 #[sshd] 前面的 #

配置 FirewallD 防火墙

CentOS 7 自带 FirewallD ,但没有启动。

  • 输入 systemctl start firewalld 启动。
  • 输入 systemctl enable firewalld 设置开机自启。
  • 输入 systemctl stop firewalld 禁用。
  • 输入 systemctl disable firewalld 停止。
  • firewall-cmd --state 检查防火墙状态。
  • firewall-cmd --zone=public --list-ports 查看防火墙打开的端口。
  • firewall-cmd --reload 重新更新防火墙规则。
  • firewall-cmd --zone=public --add-port=80/tcp --permanent 添加 80 端口,没有–permanent参数在防火墙重启后失效。请自行添加其他所需端口。
  • firewall-cmd --zone=public --remove-port=80/tcp --permanent 删除 80 端口( 仅做举例 )

修改 SWAP 分区大小

  1. 查看 SWAP 分区:free -h 或者 free -m

  2. 删除所有 SWAP 分区:swapoff -a

  3. 新增 SWAP 分区:

    1
    dd if=/dev/zero of=/root/swapfile bs=1M count=1024

    bs 是每块的大小,count 是块的数量,bs * count 就是 SWAP 分区的大小了。
    /root/swapfile 是 SWAP 文件的路径,可以根据需求修改。

  4. 格式化交换分区:mkswap /root/swapfile

  5. 启动分区:swapon /root/swapfile

  6. 添加开机启动:
    修改 /etc/fstab 文件,添加或修改:

    1
    /root/swapfile swap swap defaults 0 0

CentOS 7 安装 wget

wget 是一个自动下载文件的工具,即可以在用户退出登陆后继续在后台执行任务。

  • yum -y install gcc gcc-c++ make kernel-devel
  • yum -y install wget
  • yum -y install setup
  • yum -y install perl

安装 git

  • yum install git
  • git config --global user.name examplename 设置名称
  • git config --global user.email user@example.com 设置邮箱
  • git config --list 检查设置

安装 Node.js

  • 推荐使用 nvm ,即 node version manager ( Node 版本管理器 )。
  • Wget: wget -qO- https://raw.github.com/creationix/nvm/master/install.sh | sh
  • cURL: curl https://raw.github.com/creationix/nvm/master/install.sh | sh
  • 以上两者二选一,安装完成后重启终端。
  • nvm ls-remote 查看版本。
  • nvm install stable 安装稳定版
  • nvm install v8.5.0 安装某个版本 (此处为 v8.5.0 版本 )
  • 各个版本 node 安装路径为: ~/.nvm/versions/node/

其它:卸载 Node.js

包管理卸载

  • yum remove nodejs npm -y

手动卸载

  • /usr/local/lib 下删除 nodenode_modules 文件夹
  • /usr/local/include 下删除 nodenode_modules 文件夹
  • 删除 /usr/local/bin/npm
  • 删除 /usr/local/share/man/man1/node.1
  • 删除 /usr/local/lib/dtrace/node.d
  • rm -rf /home/[homedir]/.npm
  • rm -rf /home/root/.npm

安装 Nginx

  1. rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
  2. yum install -y nginx
  3. systemctl start nginx

接着访问 localhost ,你就能看到欢迎界面。

Nginx 默认路径

  • 配置路径: /etc/nginx/
  • PID 目录: /var/run/nginx.pid
  • 错误日志: /var/log/nginx/error.log
  • 访问日志: /var/log/nginx/access.log
  • 默认站点目录: /usr/share/nginx/html

安装 PM2

PM2 是一个带有负载均衡功能的 Node 应用的进程管理器。

安装

  • npm install -g pm2

用法

  • pm2 start xxx.js 启动某进程
  • pm2 start app.js --watch 当文件变化时自动重启应用
  • pm2 list 显示所有进程
  • pm2 monit 监视每个进程 CPU 和内存使用情况
  • pm2 logs 显示所有进程日志
  • pm2 stop all 停止所有进程
  • pm2 restart all 重启所有进程
  • pm2 reload all 重载所有进程
  • pm2 stop 0 停止某个进程
  • pm2 delete all 删除所有进程
  • pm2 delete 0 删除某个进程
  • pm2 startup 创建开机自启动命令
  • pm2 save 保存当前应用列表
  • pm2 resurrect 重新加载保存的应用列表

参考

  1. Linode : getting-started
  2. Linode : securing-your-server
  3. Linode : using-fail2ban-for-security
  4. CentOS 7 使用 firewalld 打开关闭防火墙与端口
  5. Linode : introduction-to-firewalld-on-centos
  6. Linode : how-to-configure-git
  7. PM2 使用介绍