前言

由于主题原因,打算把博客从 WordPress 平台转到Ghost。但由于 Ghost 官方推荐使用 Ubuntu,而我暑假打算学习 Linux ,用的是 CentOS,所以打算在 CentOS 7 安装 Ghost 博客,但由于技术过浅,无法在 CentOS7 驾驭 Ghost ,折腾三天后退而求次,使用同款 Typecho 主题。以下是一次失败的折腾的记录,主要是卡在 Ghost 与 Nginx 识别以及域名无法访问,如果有哪位大佬知道解决方案,请不吝赐教!

以下仅供参考。

版本信息

  • 机器配置:腾讯云学生机 1核2G 1 Mbps
  • 系统:CentOS 7.7

安装前的准备

更新软件

首次登入 CentOS 后,先把系统所有的软件包更新一遍。

yum update -y  # 更新软件包
yum groupinstall "Development Tools" -y # 安装“开发工具”软件包
# 建议运行以下命令确保已安装 gcc-c++ 、make
yum install gcc-c++ make -y

创建用户

由于Ghost无法使用root用户安装,但有的命令要用到管理员权限,所以要自己创建一个管理员用户。

这里的user为演示用户,请改为自己要创建的用户名

useradd user  # 把user改为你要创建的用户名,不可以使用ghost为用户名
passwd user # 给user用户设置密码

useradd命令会自动在/home/目录下创建以用户名命名的文件夹以及自动创建与用户名相同的用户组,接下来将新建的用户设置为管理员。

chmod -v u+w /etc/sudoers # 赋予 sudoers 文件可写权限
vim /etc/sudoers # 修改 sudoers 文件

进去后按i进入编辑模式,

在 ## Allow root to run any commands anywhere 下面加入

user ALL=(ALL) ALL

如图:

exevirus1.png

编辑完后按Esc键,然后输入 :wq 保存退出。

# 别忘了把sudoers文件的可写权限去掉
chmod -v u-w /etc/sudoers # 解除 sudoers 文件可写权限

安装Node.js

安装 Node.js 可以直接添加源后直接安装,不需要编译。如果你喜欢编译安装,请跳过这一步。

命令如下:

# 添加 Node.js 源
curl -sL https://rpm.nodesource.com/setup_12.x | sudo -E bash -
yum install nodejs -y  # 安装 Node.js
node -v  # 查看 Ndoe.js 的版本
npm -v # 查看 npm 的版本

安装Nginx

在这里不提供编译安装的教程,只提供通过添加 yum 源安装的方法:

touch /etc/yum.repos.d/nginx.repo  # 添加存放 yum 源文件
vim /etc/yum.repos.d/nginx.repo    # 编辑
# 在nginx.repo加入以下内容
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

# 保存退出
yum makecache

# 以上默认安装nginx为稳定版,如果你需要最新版本,执行以下命令
sudo yum-config-manager --enable nginx-mainline

yum install nginx -y # 安装 Nginx
nginx -v # 查看 Nginx 安装版本
service nginx start # 启动 Nginx
systemctl enable nginx # 开机启动 Nginx

启动 Nignx 后,要为 Ghost 添加反向代理。

/etc/nginx/conf.d/下的 default.conf 改为 ghost.conf , 然后修改。

# 修改
vim /etc/nginx/conf.d/ghost.conf

# 在第七行找到
location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }
# 改为
location / {
        proxy_pass http://127.0.0.1:2368;
        proxy_redirect default;
        root   /usr/share/nginx/html;  # 把这里的路径改为你设置的网站路径
        index  index.html index.htm;
    }

# 请把第二行的 server_name 改为自己的域名,可以填多个
# 保存退出
nginx -s reload   # 重新加载

安装MySQL

CentOS 7 版本将 MySQL 数据库软件从默认的程序列表中移除,并用 mariadb 代替了,所以我们需要到 MySQL 官网 下载 yum repo 配置文件。官网给的配置文件是最新版本的,如果需要安装低版本的 MySQL ,可以根据官方提供的A Quick Guide to Using the MySQL Yum Repository 方法安装或者从网上找低版本的 yum repo 配置文件。

最新版本的 MySQL 为8.0,官方要求 MySQL 的版本不能大于或等于8.0,所以我安装的是 MySQL 5.7 版本。

# 下载 MySQL 5.7的 yum repo 配置文件
wget https://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm 
# 安装 rpm 包
rpm -ivh mysql57-community-release-el7-10.noarch.rpm
# 安装 MySQL 
yum install mysql-server -y 
# 启动 MySQL
systemctl start mysqld
# 设置开启启动 MySQL
systemctl enable mysqld

好了,MySQL 安装成功,/etc/my.cnf存放 MySQL 住配置文件,/var/lib/mysql存放MySQL数据库的数据库文件,/var/log/mysql存放数据库的日志文件,下面进行一些 MySQL 的配置。

# 获取随机密码
grep 'temporary password' /var/log/mysqld.log

如图所示 (那个冒号不是!)

exevirus1.png

mysql -u root -p # 登陆
# 回车后会显示 Enter password:,输入这个随机密码
# 进入 mysql 管理后,每一条命令后面必须要有 ";" 
# 修改密码前先修改密码策略
set global validate_password_policy=0; 
# 0代表判断密码基于密码长度;1代表符合长度,且必须含有数字,小写或大写字母,特殊字符
set global validate_password_length=4; # 修改密码长度最小值为4

# 修改密码
ALTER USER 'root'@'localhost' IDENTIFIED BY 'pwd';
#请把 pwd 改为你要设置的密码

# 授权远程访问
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'pwd' WITH GRANT OPTION;
#请把 pwd 改为你设置的密码
# 刷新权限
FLUSH PRIVILEGES; 

# 退出 MySQL 管理界面
quit  # 这个不需要 ";" 

其他一些基本的命令:

systemctl start mysqld  # 启动MySQL服务
systemctl stop mysqld   # 停止MySQL服务
systemctl status mysqld # 查看MySQL服务状态
systemctl restart mysqld # 重启MySQL服务

安装 Ghost-Cli & Ghost

首先安装 Ghost-Cli:

npm install ghost-cli@latest -g # 安装Ghost-Cli

然后创建网站目录:

# 创建目录
mkdir -p /home/www
# 目录可以自定义,但要确保之前创建的用户有 rw 的权限
# 如果目录自定义,接下来的 /home/www 都改为自己定义的目录

# 更改目录所有者
chown user:user /home/www
# 请将 user 改为你之前创建的用户名

# 赋权
chmod 775 /home/www

# 进入目录
cd /home/www

最后安装 Ghost :

# 安装Ghost
ghost install -V

看到这个说明你已经安装成功,下面进行一些基本信息的设置。

exevirus1.png

  • Enter your blog URL: //输入你的域名,以 http://https:// 开头
  • Enter your MySQL hostname://输入MySQL主机名,默认 localhost
  • Enter your MySQL username://输入MySQL用户名
  • Enter your MySQL password://输入MySQL密码
  • Enter your Ghost Database name://输入 Ghost 博客数据库的名称
  • Sudo Password //输入 user 用户名的密码,用于创建 ghost 用户和修改网站目录的所有者为Ghost
  • Do you want to set up “ghost” mysql user ? //设置数据库的用户名为 ghost ,默认是 y
  • Do you wish to set up Nginx ? // 自动化Nginx,推荐y
  • Do you wish to set up SLL ? // 配置SSL证书
  • Do you wish to set up Systemd ? //使用 ghost 进程管理工具
  • Do you want to start Ghost ? // 启动 Ghost

FAQ

  • Q1:出现stdout maxBuffer exceeded的Message。

exevirus1.png

  • A1:请使用12.x版本的 Node.js。如果 Node.js 是12.x版本,仍出现同样错误,可以尝试执行ghost install -V时把-V去掉。
  • Q2:出现Command failed: /bin/sh -c sudo -S -p '#node-sudo-passwd#' systemctl is-active ghost_49-235-2-52

如图:

exevirus1.png

  • A2:个人认为 Ghost-cli 中调用 systemctl 时使用的命令为 Ubuntu 系统的,所以在 CentOS 运行的时候会报错,要自己手动启动。 在非 root 用户执行 sudo systemctl start ghost_xghost start。具体参考 这里。特别说明,ghost_x 中的 x 为 Message 提示中 ghost 后面那一串。
  • Q3:出现Unit nginx.service cannot be reloaded because it is inactive.

exevirus1.png

  • A3:执行systemctl start nginx
Last modification:July 19th, 2020 at 01:36 pm
救救孩子吧!孩子快饿死了 ^\_/^