# 手工搭建Ghost博客（Ubuntu 22.04）
#### 简介
Ghost是基于Node.js的开源博客平台，可以为用户提供更加便捷的写作与发布平台，本文以Ubuntu 22.04操作系统云服务器为例，介绍了在华为云上如何使用弹性云服务器的Linux实例部署Ghost博客。
#### 前提条件
1. 弹性云服务器已绑定弹性公网IP，具体操作请参考[绑定弹性公网IP](https://support.huaweicloud.com/usermanual-ecs/zh-cn_topic_0174917535.html)。
2. 弹性云服务器所在安全组添加了如下表所示的安全组规则，具体步骤参见[为安全组添加安全组规则](https://support.huaweicloud.com/usermanual-vpc/zh-cn_topic_0030969470.html)。
   表1安全组规则 
   | 方向  | 优先级 | 策略 | 类型     | 协议端口     | 源地址         |
   |:---|:---|:---|:---|:---|:---|
   | 入方向  | 1     | 允许    | IPv4  | TCP: 22   | 0.0.0.0/0 |
   | 入方向  | 1       | 允许   | IPv4    | TCP: 80  | 0.0.0.0/0  |
   | 入方向 | 1   | 允许   | IPv4 | TCP: 443 | 0.0.0.0/0    |
      
   
 
#### 步骤一：创建新用户
由于Ghost官方不推荐使用root用户直接操作，因此需要重新创新的用户，并为其配置权限。
1. 登录弹性云服务器。 具体操作请参见[Linux ECS登录方式概述](https://support.huaweicloud.com/usermanual-ecs/zh-cn_topic_0013771089.html)。
   
2. 执行以下命令，创建新用户。本文以user为例。
   ```
   adduser user
   ```
   回显信息如下：
   ```
   Adding user `user' ...
   Adding new group `user' (1000) ...
   Adding new user `user' (1000) with group `user' ...
   Creating home directory `/home/user' ...
   Copying files from `/etc/skel' ...
   New password:
   Retype new password:
   passwd: password updated successfully
   Changing the user information for user
   Enter the new value, or press ENTER for the default
           Full Name []:
           Room Number []:
           Work Phone []:
           Home Phone []:
           Other []:
   Is the information correct? [Y/n] Y
   ```
   1. 在**New password:** 和**Retype new password:**提示信息中，请按照提示输入并确认用户密码，密码默认不显示，输入完成后按Enter。
   
   2. 在**Enter the new value, or press ENTER for the default**提示信息中，按Enter保持默认即可，您也可以根据实际情况填写用户相关信息。
   
   3. 在**Is the information correct? \[Y/n\]** 提示信息中，输入**Y**确认信息，并按Enter，完成设置。
    
3. 执行以下命令，将新创建的用户添加到组。
   ```
   usermod -aG sudo user
   ```
   
4. 执行以下命令，切换到user用户。
   ```
   su - user
   ```
   
 
#### 步骤二：安装Nginx
部署Ghost博客，需要安装Nginx作为HTTP服务器，本节以安装Nginx 1.18.0版本为例。
1. 执行以下命令，更新Linux操作系统和软件包。
   ```
   sudo apt-get update
   sudo apt-get upgrade -y
   ```
   
2. 执行以下命令，安装Nginx。
   ```
   sudo apt-get install -y nginx
   ```
   
3. 执行以下命令查看Nginx版本。
   ```
   nginx -v
   ```
   回显信息如下：
   ```
   nginx version: nginx/1.18.0 (Ubuntu)
   ```
   
4. 调整防火墙（可选）。 UFW（Uncomplicated Firewall）是一个iptables的接口，可以简化配置防火墙的过程。Ubuntu默认安装了UFW，执行以下命令查看防火墙的状态。
   ```
   sudo ufw status
   ```
   如果你没有也不想开启防火墙，则可以直接跳过此步骤，如果你想要开启防火墙可以通过以下命令实现。
   ```
   sudo ufw enable
   ```
   之后再次检查防火墙状态验证是否成功开启防火墙。
   在测试Nginx之前，需要重新配置防火墙软件以允许访问Nginx。执行以下命令，将Nginx自动注册在UFW。
   ```
   sudo ufw app list
   ```
   回显信息：
   ```
   Available applications:
     Nginx Full
     Nginx HTTP
     Nginx HTTPS
     ...
   ```
   - Nginx Full：此配置文件打开端口 80（正常，未加密的Web流量）和端口443（TLS / SSL加密流量）
   
   - Nginx HTTP：此配置文件仅打开端口 80（正常，未加密的Web流量）
   
   - Nginx HTTPS：此配置文件仅打开端口 443（TLS / SSL加密流量）
   
   
   执行以下命令确保防火墙允许HTTP和HTTPS连接。
   ```
   sudo ufw allow 'Nginx Full'
   ```
   
5. 验证Nginx是否正常工作。 在浏览器中通过域名或者IP地址进行访问Nginx，如果Nginx正常启动则会打开Welcome to nginx的欢迎页面。
   使用浏览器访问 "http://*云服务器IP地址*"，显示如下页面，说明Nginx安装成功。
   ![](https://support.huaweicloud.com/bestpractice-ecs/zh-cn_image_0000002611738319.png "点击放大")
   
 
#### 步骤三：安装MySQL
MySQL是一种开源数据库管理系统，通常作为流行的LAMP（Linux，Apache，MySQL，PHP / Python / Perl）堆栈的一部分安装。它使用关系数据库和SQL结构化查询语言）来管理其数据。
1. 执行以下命令，安装MySQL。
   ```
   sudo apt-get install -y mysql-server
   ```
   
2. 执行以下命令查看MySQL版本。
   ```
   mysql -V
   ```
   回显信息如下：
   ```
   mysql  Ver 8.0.45-0ubuntu0.22.04.1 for Linux on x86_64 ((Ubuntu))
   ```
   
3. 执行以下命令，连接MySQL。
   ```
   sudo mysql
   ```
   
4. 执行以下命令，创建Ghost使用的数据库。本文以ghost_data为例。
   ```
   CREATE DATABASE ghost_data;
   ```
   
5. 执行以下命令，设置root账户密码。
   ```
   ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'xxxxx';
   ```
   其中'*xxxxx*'为待设置的密码。
   
6. 执行以下命令，重新加载MySQL的授权表，确保数据库权限的更改生效。
   ```
   FLUSH PRIVILEGES;
   ```
   
7. 执行以下命令，退出MySQL。
   ```
   exit
   ```
   
 
#### 步骤四：安装Node.js
1. 下载并导入NodesourceGPG密钥。
   ```
   sudo apt-get update
   sudo apt-get install -y ca-certificates curl gnupg
   sudo mkdir -p /etc/apt/keyrings
   curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | sudo gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
   ```
   
2. 创建deb仓库。
   ```
   NODE_MAJOR=22
   echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_$NODE_MAJOR.x nodistro main" | sudo tee /etc/apt/sources.list.d/nodesource.list
   ```
   
3. 更新并安装Node.js。
   ```
   sudo apt-get update
   sudo apt-get install -y nodejs
   ```
   
4. 安装完成后，执行以下命令查看Node.js版本。
   ```
   node -v
   ```
   回显信息如下：
   ```
   root@ecs-c47c:~# node -v
   v22.22.2
   ```
   
 
#### 步骤五：Ghost 安装与配置
Ghost v1.0.0 及以上版本已加入了Ghost-CLI，因此可以直接安装配置Ghost-CLI。
1. 执行以下命令，安装Ghost-CLI。
   ```
   sudo npm install ghost-cli@latest -g
   ```
   当出现如下图所示时，表示已安装Ghost-CLI命令行工具。
   ![](https://support.huaweicloud.com/bestpractice-ecs/zh-cn_image_0000002581441642.png "点击放大")
   
2. 依次执行以下命令，创建Ghost安装目录并授权。
   ```
   sudo mkdir -p /var/www/ghost 
   sudo chown user:user /var/www/ghost 
   sudo chmod 775 /var/www/ghost
   ```
   
3. 依次执行以下命令，安装Ghost。
   ```
   cd /var/www/ghost 
   ghost install
   ```
   
4. 配置Ghost。 如果上面在 /var/www/ghost/ 目录下运行**ghost install**成功的话，会要求配置相关参数：
   ![](https://support.huaweicloud.com/bestpractice-ecs/zh-cn_image_0000002611844395.png "点击放大")
   - Enter your blog URL：输入已解析的域名，例如：http://example.com。
   
   - Enter your MySQL hostname：输入数据库连接地址。本示例中MySQL数据库与Ghost部署在同一台实例中，直接按Enter保持默认即可。
   
   - Enter your MySQL username：输入数据库用户名，输入root后按Enter。
   
   - Enter your MySQL password ：输入数据库密码，输入[5]中设置的数据库密码后按Enter。
   
   - Enter your Ghost database name：输入Ghost使用的数据库名称。输入ghost_data后按Enter。
   
   
   完成设置后，界面下方会输出Ghost的管理员访问地址。例如：http://49.4.XX.XX/ghost。
   ![](https://support.huaweicloud.com/bestpractice-ecs/public_sys-resources/note_3.0-zh-cn.png)
   如果配置后需要修改可以通过以下命令去文件中进行配置：
   ```
   vim config.production.json
   ```
   打开之后就是生产环境配置内容了。参考配置见下图：
   ![](https://support.huaweicloud.com/bestpractice-ecs/zh-cn_image_0000002581285626.png "点击放大")
   
5. 验证Ghost搭建完成。
   如果成功的安装Ghost之后，就可以通过域名访问到Ghost博客。
   - **前台首页**
     在本地Windows主机或其他任意具有公网访问能力的Windows主机中，打开浏览器并输入http://*ECS实例公网IP地址*，访问Ghost前台首页。
     
   
   - **后台管理页面**
     在本地Windows主机或其他任意具有公网访问能力的Windows主机中，打开浏览器并输入http://ECS实例公网IP地址/ghost，访问Ghost后台管理页面。
     
     
 
#### 后续操作
如果您有建站需求，但还没有属于自己的域名，可以先购买域名。购买域名后，如果您的网站部署在中国内地节点服务器上，则必须先完成域名备案，再把域名解析至部署网站的ECS实例上。相关操作指引如下：
- 购买域名 为了便于网站的访问和使用，可以给网站设置一个单独的域名，使用域名访问网站。如果已有可用的域名，可以直接认证使用，如果没有域名，需要先购买域名，具体操作请参见[域名注册流程](https://support.huaweicloud.com/qs-domain/zh-cn_topic_0122928858.html)。
  
- 域名备案 根据工信部相关法律法规规定，部署在中国大陆节点的网站需要向管局提交备案申请，备案审核通过后才能开通网站。备案的管局审核需要3\~20个工作日。
  如果网站没有进行备案或者备案审核不通过，则对网站的访问请求会被阻断。具体操作请参见[快速完成ICP备案](https://support.huaweicloud.com/qs-icp/icp_07_0002.html)。
  
- 网站解析 网站解析将域名与网站服务器IP地址相关联，实现通过在浏览器中直接输入域名访问网站。具体操作请参见[快速添加网站解析](https://support.huaweicloud.com/qs-dns/dns_qs_0002.html)。
  
 
