将VPS系统切换到CentOS7

纠结了很久,终于决定和CentOS6说拜拜,主要还是对新的systemd比较感兴趣,确实使用起来很方便。同时也是彻底抛弃WordPress的时候了,这个庞然大物用起来越发的觉得不痛快了。主要原因还是并不能原生支持纯粹的Markdown写作,而团队已经开始大量使用Markdown来撰写文档了。

切换过程

切换之前当然要对之前博客里的数据做个备份了,直接设置里导出XML完事,图片都不要了(主要还是因为懒得搞)。

VPS ChangeOS

直接在VPS后台ChangeOS即可,数据会被清空,一般5分钟内搞定,就可以登录开始配置了。

安装软件

  • shadowsocks
  • openresty
  • git
  • nodejs
  • hexo

额外优化和安全配置

  • 添加用户
  • 修改ssh端口,禁止root用密码登录
  • 添加swap空间大小

初探systemd

CentOS 7 使用systemd替换了SysV。Systemd目的是要取代Unix时代以来一直在使用的init系统。systemd的特性有:

  • 支持并行化任务
  • 同时采用socket式与D-Bus总线式激活服务
  • 按需启动守护进程(daemon)
  • 利用 Linux 的 cgroups 监视进程
  • 支持快照和系统恢复
  • 维护挂载点和自动挂载点
  • 各服务间基于依赖关系进行精密控制

检视和控制systemd的主要命令是systemctl。该命令可用于查看系统状态和管理系统及服务。详见man systemctl。

systemctl常见用法

复杂的用法我们一般也用不着,就列几个常用的命令:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 立即激活service:
systemctl start $service_name
# 立即停止service:
systemctl stop $service_name
# 重启service:
systemctl restart $service_name
# 命令service重新读取配置:
systemctl reload $service_name
# 输出service运行状态:
systemctl status $service_name
# 检查service是否配置为自动启动:
systemctl is-enabled $service_name
# 开机自动激活service:
systemctl enable $service_name
# 取消开机自动激活service:
systemctl disable $service_name

添加自己的service

CentOS 7的服务systemctl脚本存放在:/usr/lib/systemd/,有系统(system)和用户(user)之分,像需要开机不登陆就能运行的程序,还是存在系统服务里吧。即:/usr/lib/systemd/system目录下
每一个服务以.service结尾,一般会分为3部分:[Unit]、[Service]和[Install]。

以nginx为例,我的nginx版本是openresty源码编译的,因此没有自带service配置,我们可以自己写一个。

1
2
3
4
5
6
7
8
9
10
11
12
13
[Unit]
Description=Nginx an HTTP and reverse proxy server.
After=network.target

[Service]
Type=forking
ExecStart=/usr/local/bin/nginx
ExecStop=/usr/local/bin/nginx -s stop
ExecReload=/usr/local/bin/nginx -s reload
PrivateTmp=true

[Install]
WantedBy=multi-user.target

具体解释请看文档。从以上示例可以发现,我们无需再自己重复编写繁琐的init.d脚本,还是很方便的。

FireWall的常见用法

之前的防火墙用的是iptables,每次设置还得找教程,CentOS7默认使用firewalld作防火墙。
添加ssh端口,https端口都要用到,正好简单学习下。

1
2
3
4
5
6
7
8
9
10
# 开放端口
firewall-cmd --add-port=1234/tcp
# 关闭端口
firewall-cmd --remove-port=1234/tcp
# 永久开放端口
firewall-cmd --add-port=443/tcp --permanent
# 重新加载配置使其立即生效
firewall-cmd --reload
# 查看当前配置
firewall-cmd --list-all