过早优化是万恶之源”(premature optimization is the root of all evil)     -Donald Knuth

所以这篇文章目的就是让小老弟们的博客跑起来再说,话不多说,马上开始

目录

  • 1.Ghost 简介
  • 2.搭建前准备清单
  • 3.开始搭建
  • 4.全站 Https
  • 5.管局备案 / 公安备案
  • 6.CDN 优化访问速度
  • 7.后期维护

一.Ghost简介

Ghost 是一套基于 Node.js 构建的开源博客平台(Open source blogging platform),具有易用的书写界面和体验,博客内容默认采用 Markdown 语法书写,新版的Ghost1.0v已经支持了表格,很实用。

想具体了解的小老弟可以点这里 https://docs.ghost.org/concepts/introduction/

二.搭建前的准备

在本教程开始时,小老弟们只需要有一个服务器即可

博主条件:
搬瓦工最廉价vps一个 - 操作系统 - Centos 7 x86_64 bbr

不要告诉我你不会用ssh连接服务器

三. 开始搭建

我们按下方列表顺序来

  1. Node
  2. Nginx
  3. Mysql
  4. Ghost-cli

第一步.NodeJs环境搭建

26_3

  1. node版本下载地址 https://nodejs.org/en/download/releases/

  2. 官方推荐版本如图7af02aa1550c6db0632b26596baf40d

  3. 随便选一个8.X版本安装

     $ wget https://nodejs.org/dist/latest-v8.x/node-v8.13.0-linux-x86.tar.gz
    
     $ tar zxvf node-v8.13.0-linux-x86.tar.gz
    
     $ cd node-v8.13.0 
    
     $ ./configure 
    
     $ make && make install                  #
     
     $ node -v                               #这一步是看看node版本号,出来数字就对了
    
Linux命令小课堂

一. tar zxvf命令
打包:将一大堆文件或目录变成一个总的文件【tar命令】
压缩:将一个大的文件通过一些压缩算法变成一个小文件【gzip,bzip2等】
Linux中很多压缩程序只能针对一个文件进行压缩,这样当你想要压缩一大堆文件时,你得将这一大堆文件先打成一个包(tar命令),然后再用压缩程序进行压缩(gzip bzip2命令)。

tar: 将文件打包或解压
x : 从 tar 包中把文件提取出来
z : 表示 tar 包是被 gzip 压缩过的,所以解压时需要用 gunzip 解压
v : 显示详细信息
f xxx.tar.gz : 指定被处理的文件是 xxx.tar.gz

二.make命令
make是一个命令工具,是一个解释makefile中指令的命令工具。它可以简化编译过程里面所下达的指令,当执行 make 时,make 会在当前的目录下搜寻 Makefile (or makefile) 这个文本文件,执行对应的操作。make 会自动的判别原始码是否经过变动了,而自动更新执行档。

第二步.Nginx安装

参考资料:https://www.cyberciti.biz/faq/how-to-install-and-use-nginx-on-centos-7-rhel-7/

26_4
Nginx是一款轻量级的Web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行。

由于 yum 源中没有我们想要的 nginx,那么我们就需要创建一个/etc/yum.repos.d/nginx.repo的文件,其实就是新增一个 yum 源。

     $ vi /etc/yum.repos.d/nginx.repo

然后写入

    [nginx] 
    name=nginx repo  
    baseurl= http://nginx.org/packages/centos/$releasever/$basearch/ 
    gpgcheck=0 
    enabled=1

保存。
按i编辑,按Esc结束编辑,:x保存修改并退出,:q!强制退出,放弃修改,:wq也是保存并退出。
现在用yum安装nginx

    yum install nginx

先让systemctl可以调用nginx命令

    systemctl enable nginx

启动nginx

    systemctl start nginx

这样Nginx就安装成功了,在浏览器中输入你的服务器的IP地址就可以看到提示:“Welcome to Nginx!”

接下来配置nginx

配置一个代理服务器给我们的博客一个入口

vi /etc/nginx/conf.d/ghost.conf

复制粘贴

 server {
    listen 80; # 这次先不设置ssl
    server_name xx.xx.xx.xx superbear.wang; #这里写你的域名或者ip地址,用空格隔开

    location / {
        proxy_set_header   X-Real-IP $remote_addr;
        proxy_set_header   Host      $http_host;
        proxy_pass         http://127.0.0.1:2368;
    }
}

重启nginx

systemctl restart nginx

Nginx完成,撒花!

Linux命令小课堂

一.什么是yum源,yum的工作原理又是什么?

参考资料:
①yum源 https://www.cnblogs.com/jdxn/p/6755136.html
②rpm包 https://www.cnblogs.com/274914765qq/p/4477252.html
③systemctl http://www.ruanyifeng.com/blog/2016/03/systemd-tutorial-commands.html

RPM包:一种用于互联网下载包的打包及安装工具,解决源码包不易安装和软件包相互之间依赖问题。
yum源:基于RPM包管理,能够从指定的服务器自动下载RPM包并且安装。
yum源就相当是一个目录项,当我们使用yum机制安装软件时,若需要安装依赖软件,则yum机制就会根据在yum源中定义好的路径查找依赖软件,并将依赖软件安装好

yum源分析

    [nginx]           
    `nginx yum源的名称,起到标记yum源的作用`
    name=nginx repo   
    `仅仅是对yum的描述,作用是使用户可以更容易的读懂该文件gpg检查就是在使用yum安装软件是对软件输入公钥进行验证,看是否来源安全。`
    baseurl= http://nginx.org/packages/centos/$releasever/$basearch/  
    `查找依赖关系软件的路径`
    gpgcheck=0 
    `是否进行gpg检测,0表示不进行,1表示进行。`
    enabled=1 
    `enabled 0表示baseurl定义的路径是不可用的,1表示定义的路径是可用的。`

三.Mysql安装

26_5

Ghost 默认使用 sqlite3 数据库,对于一般使用足够了,但是内容多的话,就会拖慢整个系统,也就影响页面打开速度了,不想使用Mysql的朋友可以跳过这步。

CentOS7的yum源中默认好像是没有mysql的。为了解决这个问题,我们要先下载mysql的repo源。

1.下载mysql的repo源
$ wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm

2.安装mysql-community-release-el7-5.noarch.rpm包
$ sudo rpm -ivh mysql-community-release-el7-5.noarch.rpm

3.安装mysql
$ sudo yum install mysql-server

4.重置密码
$ mysql -u root

这里有可能会报错
ERROR 2002 (HY000): Can‘t connect to local MySQL server through socket ‘/var/lib/mysql/mysql.sock‘
具体解决措施我有点记不清了,下面两种都试一下就好

$ sudo chown -R root:root /var/lib/mysql

$ service mysqld start #确保mysql服务启动
$ mysql -u #无密码
$ mysql -u root -p password #password替换为密码

5. 配置Mysql
输入mysql_secure_installation配置Mysql:

$ Set root password? [Y/n] # 设置root密码 
$ anonymous users? [Y/n] # 删除匿名用户 
$ Disallow root login remotely? [Y/n] # 禁止root用户远程登录 
$ Remove test database and access to it? [Y/n] # 删除默认的 test 数据库 
$ Reload privilege tables now? [Y/n] # 刷新授权表使修改生效 

为了避免数据库存放的中文是乱码,我们还需要设置Mysql的编码:
$ vi /etc/my.cnf

复制粘贴

[client]
default-character-set=utf8 
[mysql]
default-character-set=utf8
[mysqld]
character-set-server=utf8 
collation-server=utf8_general_ci

保存退出,重启Mysql:

service mysqld restart

最后我们需要新建一个数据库,用来存放博客的数据:

$ mysql -u root -p # 输入设置好的密码 
$ create database ghost; # 创建ghost数据库 
$ grant all privileges on ghost.* to 'ghost'@'%' identified by '123456'; # 新建一个用户ghost,密码为123456,这里自己设置 
$ flush privileges # 重新读取权限表中的数据到内存,不用重启mysql就可以让权限生效 

Mysql数据库就安装配置完成了。

相关名词:

1.SQLITE是单机数据库。功能简约,小型化,追求最大磁盘效率
MYSQL是完善的服务器数据库。功能全面,综合化,追求最大并发效率

2.chown 命令
用途:更改文件的所有者或组。命令由单词change owner组合而成。
-R 递归式地改变指定目录及其下的所有子目录和文件的拥有者。
-v 显示chown命令所做的工作。
使用示例:
chown –R root:root rootfs 将rootfs文件夹及其子录的权限和组均改为root

3.mysqld是服务,mysql是客户端
mysqld其实是SQL后台程序(也就是MySQL服务器),它是关于服务器端的一个程序,mysqld意思是mysql daemon,在后台运行,监听3306端口,如果你想要使用客户端程序,这个程序必须运行,因为客户端是通过连接服务器来访问数据库的。你只有启动了mysqld.exe,你的mysql数据库才能工作
mysql是一个客户端软件,可以对任何主机的mysql服务(即后台运行的mysqld)发起连接,mysql自带的客户端程序一般都在cmd或者终端下进行操作

四.Ghost安装

92_1

新版的Ghost已经提供了脚手架https://docs.ghost.org/install/ubuntu/
但是基于ubuntu系统,因此小老弟们还是要做点调整蛤

设置 Swap 分区

Ghost 需要至少 1GB 物理内存,否则会报错,可以通过设置 swap 分区解决(大于等于 1GB 可不用设置)。

查看主机物理内存和虚拟内存:

$ free

在 /var/swap 创建 1024k 个 1k 大小的空文件:

$ dd if=/dev/zero of=/var/swap bs=1k count=1024k
1048576+0 records in
1048576+0 records out
1073741824 bytes (1.1 GB) copied, 18.4951 s, 58.1 MB/s

创建 swap 分区:

$ mkswap /var/swap
Setting up swapspace version 1, size = 1048572 KiB
no label, UUID=9a1b4bf2-cc39-4ab7-8dd9-9e0f25d0695d

启用 swap 分区:

$ swapon /var/swap
swapon: /var/swap: insecure permissions 0644, 0600 suggested.

写入分区信息:

$ echo '/var/swap swap swap default 0 0' >> /etc/fstab

再次查看 swap 分区大小:

$ free
安装Ghost-cli

Ghost-CLI 可以方便对未来的 Ghost 状态管理,升级。装上 Ghost-CLI 以后,之后的版本升级只需要 ghost update 一下就可以了。

$ npm i -g ghost-cli
$ ghost -v #看看装好了没
创建新用户

注意: 如果已有拥有 sudo 权限的非 root 用户,跳过此步骤。

1.新建一个用户:
$ adduser <user>
注意:user 为新建用户的用户名。注意这个名字不能为 ghost,因为 Ghost 会创建一个叫 ghost 的用户。

2.设置用户密码:
passwd <user>
输入两遍用户密码。

3.修改新用户权限

$ chmod -v u+w /etc/sudoers
$ vi /etc/sudoers

找到这里

## Allow root to run any commands anywhere
root    ALL=(ALL)       ALL

修改为

# 该用户在使用 sudo 命令时不需要输入密码
<user>    ALL=(ALL)       NOPASSWD:ALL
# or 该用户在使用 sudo 命令时需要输入密码
<user>    ALL=(ALL)       ALL
    
$ chmod -v u-w /etc/sudoers
Ghost 目录创建

1.创建目录
切换到一个非 root 且拥有 sudo 权限的用户,且用户名不为 ghost 的其他用户:
$ su <user>
[注1] 可以用exit切换回root用户
[注2] ghost-cli 会创建一个用户名为 ghost 的系统用户和用户组来自动运行 Ghost。

2.创建网站目录并设置权限进入:

$ sudo mkdir -p /var/www/ghost
$ sudo chown <user>:<user> /var/www/ghost
$ sudo chmod 775 /var/www/ghost
$ cd /var/www/ghost

注意:user为当前登陆的非 root 用的的用户名。

安装 Ghost

虽然官方文档上写的推荐 OS 是 Ubuntu 16.04,不过 CentOS 一样可以安装,只要加上 --no-stack 参数即可。
$ ghost install --no-stack
然后会一步步设置ghost
有几步需要注意(其它就回车吧)

  ? Enter your blog URL: (http://localhost:2368) #填写你的ip或者域名http://xx.xx.xx:2368
  ? Enter your MySQL username: root #填写的是root
  ? Do you wish to set up Systemd? Yes
    ✔ Creating systemd service file at /var/www/ghost/system/files/<ghost_ghost-local> 
     #记住files后面的文件名,这里是ghost_ghost-local.后面启动Ghost服务会用到
  ? Do you want to start Ghost? (Y/n) #这个时候start好像有点问题,记不清了

到这一步位置,借助Ghost-cli的神力我们已经基本完成了安装

Ghost配置

在 /var/www/ghost/ 文件夹下面有一个 config.production.json 文件,这文件是对 ghost 的一些配置。

1.修改文件
$ vi /var/www/ghost/config.production.json

2.例子

{
  "url": "http://xx.xx.xxx.xxx/",
  "server": {
    "port": 2368,
    "host": "127.0.0.1"
  },
  "database": {
    "client": "mysql",
    "connection": {
      "host": "127.0.0.1",
      "user": "root",
      "password": "xxxxxx",
      "database": "ghost",
      "charset": "utf8"
    }
  },
  "mail": {
    "transport": "Direct"
  },
  "logging": {
    "transports": [
      "file",
      "stdout"
    ]
  },
  "process": "systemd",
  "paths": {
    "contentPath": "/var/www/ghost/content"
  }
}

3.ghost服务命令

用到了之前的服务名安装 Ghost部分

systemctl start ghost_ghost-local #启动ghost服务
systemctl status ghost_ghost-local #查看ghost服务状态
systemctl status ghost_ghost-local #停止ghost服务
Linux命令小课堂

一.free命令
可以显示Linux系统中空闲的、已用的物理内存及swap内存,及被内核使用的buffer。在Linux系统监控的工具中,free命令是最经常使用的命令之一。

二.[if=/dev/zero of=的含义是什么?Linux 下的dd命令使用详解 ](https://www.cnblogs.com/mahocon/p/7675907.html)
dd:用指定大小的块拷贝一个文件,并在拷贝的同时进行指定的转换。

  1. if=文件名:输入文件名,缺省为标准输入。即指定源文件。< if=input file >
  2. of=文件名:输出文件名,缺省为标准输出。即指定目的文件。< of=output file >
  3. count=blocks:仅拷贝blocks个块,块大小等于ibs指定的字节数。
  4. bs=bytes:同时设置读入/输出的块大小为bytes个字节。

三.mkswap
可将磁盘分区或文件设为Linux的交换区。
mkswap [-cf][-v0][-v1][设备名称或文件][交换区大小]

四.Linux swapon命令
用于激活Linux系统中交换空间,Linux系统的内存管理必须使用交换区来建立虚拟内存。(相对的,自然有一个swapoff命令用于关闭swap)

五.echo '/var/swap swap swap default 0 0' >> /etc/fstab
等同于
vi /etc/fstab
写入
/var/swap swap swap default 0 0

六./etc/fstab文件的作用
1、我们把磁盘手动挂载之后如果不把它写入/etc/fstab这个文件中,下次开机启动时仍然需>要重新挂载。
2、系统开机时会主动读取/etc/fstab这个文件中的内容,根据文件里面的配置挂载磁盘。这样>我们只需要将磁盘的挂载信息写入这个文件中我们就不需要每次开机启动之后手动进行挂载了

七.Linux下磁盘挂载的概念
在DOS/Windows中,C盘和D盘是并列的最顶级目录,但Linux中没有C盘D盘E盘的概念,整个文件系统就只有一个顶级的根目录(/),所有的物理磁盘都是根目录(/)下的一个子目录而已。所以,如果你要给现在的系统加快硬盘或添加分区,就先创建一个目录,然后用MOUNT和相应的格式参数把
硬盘或分区挂载到你创建的那个目录中去,成功后,访问那个目录既是访问你加上的硬盘或分区。

四.可能会碰到的一些问题

Breathe neon signage
Photo by Tim Goedhart / Unsplash

Q1:
报错Job for nginx.service failed because the control process exited with error code. See "systemctl status nginx.service" and "journalctl -xe" for details.
A1:可能性很多,用systemctl status nginx.service查看错误原因即可
比如:
systemctl restart nginx 时端口被占用

netstat -lnp|grep 80 找到进程号
kill -9 xxx 杀掉进程

Q2:netstat: command not found centos07
centos7最小化安装默认没有net-toolsne
yum -y install net-tools

Q3:
linux命令etc路径的由来?
.etc不是什么缩写,是and so on的意思 来源于 法语的 et cetera 翻译成中文就是 等等 的意思. 至于为什么在/etc下面存放配置文件, 按照原始的UNIX的说法(linux文件结构参考UNIX的教学实现MINIX) 这下面放的都是一堆零零碎碎的东西, 就叫etc, 这其实是个历史遗留.
这个目录一般用来存放程序所需的整个文件系统的配置文件.
https://blog.csdn.net/mianjunan/article/details/6684966