热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

从0开始捣鼓ghostblog

后记昨天第一次听说ghost,一时兴起今天花了半天的时间从0开始捣鼓,node只会基本使用,js也记不清多久没碰过了,不涉及高级使用姿势,像改主题、改js文件支持某些特性等等。个人

后记

昨天第一次听说ghost,一时兴起今天花了半天的时间从0开始捣鼓,node只会基本使用,js也记不清多久没碰过了,不涉及高级使用姿势,像改主题、改js文件支持某些特性等等。个人能力不够,也没有兴趣深入研究,就是为了看看这东西怎么用。

自己安装部署的部分就是完全照搬官方文档,没有掺杂任何原创性的姿势,可能略有修改或说明不准确的地方完全是个人失误。

Docker部分是自己尝试用的,因为平时几乎不自己装任何服务了,能用docker的就用docker了,这里也不涉及docker安装和使用的相关说明。

最后吐槽一点:完全配置结束后我把这篇全部粘贴发布到ghost,那叫一个难看,一点都不优雅,看来美还是需要精心调整的啊。最可恶的是竟然不支持表格…,查了一下,有方法支持,但是到此为止对我个人来讲已经没有必要继续了。

为什么把后记放到前面?因为看到这里如果没兴趣可以不要继续浪费时间了…

安装

安装node

  • 到node官网下载安装包

  • 傻瓜安装,会同时安装node和npm (macOS)

  • node版本不要太高,官方目前支持到4.xLTS

安装并运行ghost

  • 下载ghost包,下载地址

  • 找个目录解压,注意解压目录就是安装目录

  • 终端进入解压目录执行 npm install -production,等提示,没错误就OK,有错误解决错误

  • 安装结束后执行:npm start就开启了ghost服务

  • 访问localhost:2368查看主页,后台管理地址为localhost:2368/ghost

部署:保持运行

使用Forever保持Ghost在后台运行并在进程crash时重启服务

  • 安装forever

    npm install forever -g

  • ghost目录运行

    NODE_ENV=production forever start index.js

  • 结束进程与查看进程

    forever stop index.js
    forever list

使用PM2,这个比forever强大

  • 安装PM2

    npm install pm2 -g

  • 运行ghost服务

    NODE_ENV=production pm2 start index.js --name "Ghost"

  • 停止、重启服务

    pm2 stop Ghost
    pm2 restart Ghost
    # reload热重启
    pm2 reload Ghost

  • 远程部署,不需要,需要时再看pm2文档@deploy

  • 初始化脚本,服务自启动

    pm2 startup
    # 保存当前进程
    pm2 save

Supervisor

  • 安装supervisor并启动

    # debian/ubuntu
    apt-get install supervisor
    # fedora/centos
    yum install supervisor
    # 运行
    service supervisor start

  • 创建ghost启动脚本 /etc/supervisor/conf.d/ghost.conf

    cat > /etc/supervisor/conf.d/ghost.conf
    [program:ghost]
    command = node /path/to/ghost/index.js
    directory = /path/to/ghost
    user = ghost
    autostart = true
    autorestart = true
    stdout_logfile = /var/log/supervisor/ghost.log
    stderr_logfile = /var/log/supervisor/ghost_err.log
    envirOnment= NODE_ENV="production"
    ctrl-d

  • 启动与停止ghost

    supervisorctl start ghost
    supervisorctl stop ghost

初始化脚本: ubuntu

  • 创建脚本

    sudo curl https://raw.github.com/TryGhost/Ghost-Config/master/init.d/ghost -o /etc/init.d/ghost

  • 打开该文件修改:GHOST_ROOT为ghost安装目录,DAEMON为node运行目录

  • 创建用户并修改权限

    sudo useradd -r ghost -U
    sudo chown -R ghost:ghost /path/to/ghost
    sudo chmod 755 /etc/init.d/ghost

  • ghost服务管理

    sudo service ghost start
    sudo service ghost stop
    sudo service ghost restart
    sudo service ghost status

  • 注册系统启动

    sudo update-rc.d ghost defaults
    sudo update-rc.d ghost enable

  • 注意当前用户权限

    sudo adduser USERNAME ghost

配置详解(config.js)

安装ghost后,会在安装目录生成默认配置文件config.js,内容复制自config.example.js文件,可以修改配置域名、邮箱、数据库、资源目录等等。

配置项:

名称是否必须描述
urlY设置blog的url
mailY设置邮件,用于找回密码和邀请成员
databaseY配置数据库,默认使用sqlite3
serverYghost服务监听地址与端口
compressN开启gzip压缩
fileStorageN开启本地存储
updateCheckN禁止使用,用privacy.useUpdateCheck代替
privacyN功能管理,如update check,rpc ping, google fonts
forceAdminSSLN强制开启后台管理SSL访问,需配置SSL
urlSSLN定义第二个url用于SSL访问
pathsN自定义content目录
maintenanceN维护模式
referrerPolicyN配置referrer metadata属性

配置说明

  • url
    配置ghost服务URL,需要保持与访问地址一致,指定完整域名,例如:http://ghost-blog.com

  • email
    邮箱用于找回密码,邀请成员,官方说后面会增加邮件订阅等更多服务

mail: {
// 自定义from字段:默认为 Blog Title
from: 'name@address.com',
transport: 'SMTP',
options: {
host: 'smtp.126.com',
secureConnection: false,
port: 25,
auth: {
user: 'name@126.com',
pass: 'xxxxxx'
}
}
}

  • ssl 配置

    • 第一种方式是修改url配置前缀https://,开启全站SSL

    • 第二种只开启管理后台SSL:forceAdminSSL: true, http访问会自动跳转

    • 也可以禁止http访问不跳转,直接返回403:forceAdminSSL: {redirect: false}

  • database
    ghost默认配置使用SQLite作为数据库存储,但同时也支持MySQL和Postgres,Postgres支持有点小问题,这里不做说明,mysql配置实例:

database: {
client: 'mysql',
connection: {
host : '0.0.0.0',
user : 'ghost',
password : '',
database : 'ghost_testing',
charset : 'utf8'
},
// 可以配置pool修改连接池大小,这里是默认值
pool: {
min: 2;
max: 10
}
},

  • server
    配置ghost服务监听地址:

server: {
host: '127.0.0.1',
port: '2368'
}
# 也可以配置为socket监听:
server: {
socket: {
path: 'path/to/socket.sock',
permissions: '0666'
}
}

  • gzip compression
    默认开启,需要关闭修改:compress: false

  • fileStorage
    开启/关闭文件存储,有些服务器不支持持久存储的文件系统,所以禁止上传图片,关闭后:fileStorage: false,上传图片时将只允许输入图片url

  • paths
    ghost默认的content目录就在安装目录,可以通过paths配置自定义路径,如:

paths: {
contentPath: path.join(__dirname, 'path/to/content/dir')
},

  • privacy
    需要关闭所有可配置的功能科室直接配置useTinfoil,开启后所有privacy配置都将失效

privacy: {
useTinfoil: true
}
//单独配置每一项:
privacy: {
// 更新检查,不订阅官方邮件不会收到通知
useUpdateCheck: false,
// 使用谷歌字体服务,但不影响theme中使用的Google Fonts
useGoogleFonts: false,
// 使用哦Gravatar检测服务,默认会检查邮箱是否是Gravatar账户
useGravatar: false,
// 使用RPC Ping服务,默认开启
useRpcPing: false,
useStructureData: false
}

  • maintenance
    开启维护模式将返回503响应:maintenance: { enabled: true }

  • referrerPolicy
    配置referer metadta属性,更多关于referrer policy参考W3C@referrer

Nginx代理

  • 安装nginx,不在这里扯

  • 配置

# 创建虚拟主机配置文件
cat > /etc/nginx/sites-available/ghost.conf
server {
listen 80;
server_name example.com; location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $http_host;
proxy_pass http://127.0.0.1:2368;
}
}
ctrl-d
# 软链配置文件
sudo ln -s /etc/nginx/sites-available/ghost.conf /etc/nginx/sites-enabled/ghost.conf

  • 重启nginx生效

    sudo service nginx restart

  • 解析域名

SSL配置

  • 获取证书,正式的话就花钱买吧

  • 复制证书到nginx目录

mkdir /etc/nginx/ssl
cp server.crt /etc/nginx/ssl/server.crt
cp server.key /etc/nginx/ssl/server.key

  • 修改ghost-nginx配置/etc/nginx/sites-available/ghost.conf

server {
listen 80;
listen 443 ssl;
server_name example.com;
ssl_certificate /etc/nginx/ssl/server.crt;
ssl_certificate_key /etc/nginx/ssl/server.key;

location / {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://127.0.0.1:2368;
}
}

  • 重启nginx

  • 强制要求admin用户使用HTTPS,修改配置文件:forceAdminSSL: true

升级

准备工作

  • 备份
    登录管理后台,访问Labs设置页:yourblog.com/ghost/settings/labs/,导出数据.json文件,备份content目录

  • 确认服务重启命令
    升级后需要重启服务,确认安装时使用的服务管理方式forever/pm2/supervisor

  • 跨版本升级,和我没大关系

升级步骤

  • 下载新版ghost

    curl -LOk https://ghost.org/zip/ghost-latest.zip

  • 解压到一个临时目录,不要直接覆盖原安装目录

    unzip ghost-latest.zip -d ghost-temp

  • 进入当前ghost安装目录,删除core目录

    cd path/to/ghost
    rm -rf core

  • 进入临时解压目录,复制文件

    cd path/to/ghost-temp
    cp -R core path/to/ghost
    cp index.js *.json path/to/ghost
    cp -R content/themes/casper path/to/ghost/content/themes

  • 回到安装目录升级ghost

    cd path/to/ghost
    chown -R ghost:ghost *
    npm install --production

  • 重启服务

    # 注意使用安装时的服务管理方式
    service ghost restart
    forever restart index.js
    pm2 restart ghost

Docker方案: 去他的一坨~

下载nginx、ghost镜像

这两个服务都有官方镜像源,直接下载(非必须)

docker pull ghost
docker pull nginx

运行ghost

# 运行并挂载本地content目录到容器
docker run --name ghost \
-e NODE_ENV=production \
-v /path/to/ghost-content:/var/lib/ghost \
--restart=always \
-d ghost
# 后面使用nginx代理,所以这里不做端口映射,默认暴露`:2368`端口
# content目录可以包含自定义配置文件config.js,默认会自动复制config.example.js文件到content目录config.js
# 建议提前准备好自己的配置文件,默认production的配置是不完整的
# 注意NODE_ENV环境变量,不设置为production时默认为development
# 每次修改完配置文件重启: docker restart ghost

运行nginx

# 运行并挂载配置文件
docker run --name nginx \
-v path/to/nginx.conf:/etc/nginx/nginx.conf \
-v path/to/ghost.conf:/etc/nginx/conf.d/ghost.conf \
--link ghost:GHOST_HOST \
--restart=always \
-p 80:80 \
-d nginx
# 注意这里需要同时挂载nginx服务配置和ghost代理配置
# 两个配置文件虽然不是必须从容器外挂载,但还是分离开方便维护
# 注意修改上面示例中 ghost.conf 文件:proxy_pass: http://GHOST_HOST:2368

参考资料

  • 官方文档

  • 中文文档

  • PM2官网

  • forever包

  • ghost-docker镜像

  • nginx-docker镜像


推荐阅读
  • 在 Ubuntu 中遇到 Samba 服务器故障时,尝试卸载并重新安装 Samba 发现配置文件未重新生成。本文介绍了解决该问题的方法。 ... [详细]
  • 本文介绍了如何使用 Node.js 和 Express(4.x 及以上版本)构建高效的文件上传功能。通过引入 `multer` 中间件,可以轻松实现文件上传。首先,需要通过 `npm install multer` 安装该中间件。接着,在 Express 应用中配置 `multer`,以处理多部分表单数据。本文详细讲解了 `multer` 的基本用法和高级配置,帮助开发者快速搭建稳定可靠的文件上传服务。 ... [详细]
  • 全面解析JavaScript代码注释技巧与标准规范
    在Web前端开发中,JavaScript代码的可读性和维护性至关重要。本文将详细介绍如何有效地使用注释来提高代码的可读性,并探讨JavaScript代码注释的最佳实践和标准规范。通过合理的注释,开发者可以更好地理解和维护复杂的代码逻辑,提升团队协作效率。 ... [详细]
  • Parallels Desktop for Mac 是一款功能强大的虚拟化软件,能够在不重启的情况下实现在同一台电脑上无缝切换和使用 Windows 和 macOS 系统中的各种应用程序。该软件不仅提供了高效稳定的性能,还支持多种高级功能,如拖放文件、共享剪贴板等,极大地提升了用户的生产力和使用体验。 ... [详细]
  • 深入解析:React与Webpack配置进阶指南(第二部分)
    在本篇进阶指南的第二部分中,我们将继续探讨 React 与 Webpack 的高级配置技巧。通过实际案例,我们将展示如何使用 React 和 Webpack 构建一个简单的 Todo 应用程序,具体包括 `TodoApp.js` 文件中的代码实现,如导入 React 和自定义组件 `TodoList`。此外,我们还将深入讲解 Webpack 配置文件的优化方法,以提升开发效率和应用性能。 ... [详细]
  • CentOS 7环境下Jenkins的安装与前后端应用部署详解
    CentOS 7环境下Jenkins的安装与前后端应用部署详解 ... [详细]
  • 如何在 Node.js 环境中将 CSV 数据转换为标准的 JSON 文件格式? ... [详细]
  • 深入探索Node.js新框架:Nest.js第六篇
    在本文中,我们将深入探讨Node.js的新框架Nest.js,并通过一个完整的示例来展示其强大功能。我们将使用多个装饰器创建一个基本控制器,该控制器提供了多种方法来访问和操作内部数据,涵盖了常见的CRUD操作。此外,我们还将详细介绍Nest.js的核心概念和最佳实践,帮助读者更好地理解和应用这一现代框架。 ... [详细]
  • Vue应用预渲染技术详解与实践 ... [详细]
  • Dense Matrix Inversion Results in Segmentation Fault: Causes and Solutions ... [详细]
  • 本文详细介绍了在 Vue.js 前端框架中集成 vue-i18n 插件以实现多语言支持的方法。通过具体的配置步骤和示例代码,帮助开发者快速掌握如何在项目中实现国际化功能,提升用户体验。同时,文章还探讨了常见的多语言切换问题及解决方案,为开发人员提供了实用的参考。 ... [详细]
  • 在GitHub上克隆vue-element-admin项目时遇到依赖安装错误
    在 GitHub 上克隆 vue-element-admin 项目后,使用 `npm install` 安装依赖时遇到了未知的 Git 错误。具体错误信息为 `npm ERR! code 128`,提示命令执行失败。这可能是由于网络问题、Git 配置不正确或某些依赖包的仓库地址无效导致的。建议检查网络连接、更新 Git 版本并确保所有依赖项的 URL 正确无误。 ... [详细]
  • TypeScript 实战分享:Google 工程师深度解析 TypeScript 开发经验与心得
    TypeScript 实战分享:Google 工程师深度解析 TypeScript 开发经验与心得 ... [详细]
  • 深入解析 Vue 中的 Axios 请求库
    本文深入探讨了 Vue 中的 Axios 请求库,详细解析了其核心功能与使用方法。Axios 是一个基于 Promise 的 HTTP 客户端,支持浏览器和 Node.js 环境。文章首先介绍了 Axios 的基本概念,随后通过具体示例展示了如何在 Vue 项目中集成和使用 Axios 进行数据请求。无论你是初学者还是有经验的开发者,本文都能为你解决 Vue.js 相关问题提供有价值的参考。 ... [详细]
  • Node.js 教程第五讲:深入解析 EventEmitter(事件监听与发射机制)
    本文将深入探讨 Node.js 中的 EventEmitter 模块,详细介绍其在事件监听与发射机制中的应用。内容涵盖事件驱动的基本概念、如何在 Node.js 中注册和触发自定义事件,以及 EventEmitter 的核心 API 和使用方法。通过本教程,读者将能够全面理解并熟练运用 EventEmitter 进行高效的事件处理。 ... [详细]
author-avatar
胡敏qiang
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有