Ghost 部署博客 - 阿里云

Ghost 部署博客 - 阿里云
Photo by Danny Shives / Unsplash

Ghost 介绍

👉 Ghost 是当下非常流行的博客平台,提供订阅版和开源版本,功能强大,使用方便,之所以选用源码安装,是为了可以直接改代码。

  1. 强大的编辑功能。支持富文本、markdown、unsplash、youtube、codePen 等多种资源的嵌入
  2. 主题市场。提供了标准的体验和视觉良好的多种主题,免费版就很好看了。
  3. 插件系统,如对接支付。
  4. 开源可用,方便开发者进行定制和二开。

Ghost 非常适合用作个人站点、新闻网站或者企业的发布平台等,我的当前站点 https://www.meepo.me 就是基于它搭建的。

🤩 而且它是使用 NodeJS 开发,对我来说非常友好,即方便做定制,也能学习它的代码、工程架构。

安装

Ghost 官方提供了多种安装方式,👉 安装入口

提供了:

  1. 本地的开发部署。很方便在本机运行
  2. Docker 部署。官方提供镜像,配置也是很方便
  3. 源码安装。适合做功能定制
  4. 云服务安装。操作简单,无需自己提供服务器,每月固定支出 VPS 云服务的费用即可。
    1. Ghost Pro
    2. Digital Ocean
    3. Linode

服务器前置配置

最近阿里云推出了 99元/年 的 2c2g 的服务器,性价比非常高,第二年还能以 99 元/年的费用续费一次。

  • 我的服务器配置是阿里云 2c2g 版本的 Ubuntu 。
  • 域名也是在阿里云购买。
  • 做好域名映射 A 记录,到服务器 IP 地址。
  • 阿里云提供了免费的 SSL ,每次申请可以使用一年,下载申请到的 SSL Nginx 证书文件,后续提供给 Nginx 使用。
  • 打开阿里云安全组的 80 和 443 端口的访问。

Docker 配置

安装 Docker

1、安装 Docker Engine . 参考 Docker Engine 官方文档

# Add Docker's official GPG key:
sudo apt-get update
sudo apt-get install ca-certificates curl gnupg
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL <https://download.docker.com/linux/ubuntu/gpg> | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg

# Add the repository to Apt sources:
echo \\
  "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] <https://download.docker.com/linux/ubuntu> \\
  "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \\
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update

安装最新版本

sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

验证是否安装成功。hello-world 是 docker 的一个测试镜像,如果运行成功,说明 Docker Engine 安装成功

sudo docker run hello-world

2、安装 Docker Compose

sudo apt-get update
sudo apt-get install docker-compose-plugin

检查是否安装成功

创建一个 docker-compose.yml 文件,如下:

version: "3.1"

services:
  ghost:
    image: ghost:latest
    restart: always
    # 依赖 DB 的提前安装运行完毕
    depends_on:
      - db
    ports:
      - 8080:2368
    environment:
      # see <https://ghost.org/docs/config/#configuration-options>
      database__client: mysql
      database__connection__host: db
      database__connection__user: root
      database__connection__password: ghost_mysql_password
      database__connection__database: ghost
      # this url value is just an example, and is likely wrong for your environment!
      # 指定的宿主机暴露的地址,在生产环境,要填写线上的部署的域名地址
      url: <http://localhost:8080>
      # contrary to the default mentioned in the linked documentation, this image defaults to NODE_ENV=production (so development mode needs to be explicitly specified if desired)
      #NODE_ENV: development
    volumes:
      - /root/ghost/content:/var/lib/ghost/content

  db:
    image: mysql:8.0
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: ghost_mysql_password

引用官方镜像 ghost:latest ,设置好 volumes 挂载点到服务器指定目录

运行 Docker

docker compose up -d

Nginx 配置

创建一个 nginx 配置文件 www.captainjack.top.conf 配置如下:

server {
  listen 80;
  server_name www.captainjack.top;
  rewrite ^(.*)$ <https://$host$1>; #将所有HTTP请求通过rewrite指令重定向到HTTPS。
}

server {
  listen 443 ssl;
  server_name www.captainjack.top;
  ssl_certificate /root/ghost/certs/www.captainjack.top.pem;
  ssl_certificate_key /root/ghost/certs/www.captainjack.top.key;
  ssl_session_timeout 5m;
  #表示使用的加密套件的类型
  ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
  ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #表示使用的TLS协议的类型

  location / {
    proxy_set_header Host $http_host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-Proto https;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_pass <http://localhost:8080>;
  }
}

测试 Nginx 配置文件是否正确

sudo nginx -t

重启 Nginx 使配置生效

sudo nginx -s reload

完成上述配置后,Ghost 就部署到了你的服务器,并且能通过公网访问到,接下来可以对 Ghost 进行配置了 🎉

通过 https://xxx.com 可以进入博客首页,通过 https://xxx.com/ghost 可以进入系统的管理后台

Read more

AI 时代的一次远程面试经历

AI 时代的一次远程面试经历

今天聊了一个远程面试,记录一下自己的感受: 负责人也是技术出身,刚好负责两个团队,一个在美国做 AI Startup,还有一个在香港做软件开发,所以我们直接约了个群聊,相互介绍了团队和自己在当前节点的状态,以及对这个职位的预期 我对这两种业务模式都有兴趣,相当于是一次性参加了两个面试了: AI Startup 这种模式,我刚好在 23 年的时候,跟微软和字节的朋友一起做 AI 电商创业,当时从立项,研发逐步推进,MVP 构建,VC 融资,市场营销方面跟了下来,学习到了非常多的东西 而外包业务,我在很多年前就开始做一些副业,与甲方沟通需求,自己找 UI ,测试的成员组队,可能与多数人不同的是,我对外包项目的接受度很高(这里说的不是传统的如中软,东软那样的外包团队),而是创业型的外包公司,这种环境下,是真的可以在技术、业务、商务、业务视角学到很多。 远程面试一般比较直接,大家都直奔主题,能够迅速感知到候选人和团队的契合程度,在

郑州互联网薪资统计及 AI 时代的现状

郑州互联网薪资统计及 AI 时代的现状

22 年郑州前端薪资真实统计(200+份样本) 22 年我在郑州前端大群里面统计了一波郑州互联网薪资,当时以为只是开始,想着后面会有更多的企业来到郑州,情况会越来越好,而现在回头来看,没想到那时才是顶峰。 当时在群里面收集到 200+ 位投票,匿名填写自己的薪资情况,当时跟大家特意强调了要保证数据的真实性,也找群员验证过,基本真实性可信: * 🐣 3-6k 占比不少,主要是郑州的工资水平低,对于刚出来的,在小公司的这个薪资也正常,实习生 or 小作坊 * 🐰 6-12k 的占大多数,涵盖了郑州本土大多数互联网公司的薪资范畴,大多数的常规业务开发 * 🐵 12-20k 主要集中在本土大公司、一线城市在郑州的研发团队、外包公司,核心业务开发人员 🦄 20k+ 高学历 or 有大厂经验,主要为本土大公司或者一线公司在郑州的带队 leader ,能力较强,一般承担一些管理角色。 25年:职场寒冬来袭,状况还在持续恶化 一线公司研发部门的撤离 这也是我最在意的一条: 之前有一些一线城市的研发交付部门会在郑州有成立研发交付中心,从疫情之后,

RAG不是万能的,附常见误解与澄清

RAG不是万能的,附常见误解与澄清

能给人理清目前 AI 在生产落地的问题,是一件难能可贵的事情,AI 在生产落地会有哪些阻碍的讲解,讲干货的真的是很少,至少我自己曾经在这个问题上困惑了很久。 因为之前我在 AI 电商团队,做具体的 AI Sass 落地的时候,团队经常会沟通做到生产级可用的 AI,需要哪些东西,大概的门槛还是了解到一些的,我的能力也顶多在应用层面去做一些工作量的定制与代码衔接,涉及到模型层面,一概歇菜,很多人估计只是想着,写一个 Prompt ,就是真正的拥抱 AI 了。 当我看到自媒体里面铺天盖地的在讲 AI 如何帮助企业提效,如果重塑行业的时候,有种很复杂的感觉,他们真的懂 AI 吗,甚至他们真的懂软件吗? 基本上现在大家接触到的方式就几种: * 割韭菜卖课,讲概念,前景,这些基本上都是拿别人的产品来给自己做嫁衣,自己顶多是个工具的使用者和营销者,比如用 Midjourney,Kimi,豆包,海螺什么的,告诉大家用了就能提效,获得流量,

Shopify 构建商城页面的几种方式

Shopify 构建商城页面的几种方式

当用户需要对 Shopify 商城页面有自定义的需求时,一般会选择: 1、直接使用官方商城的 theme 来构建,可以使用,但是免费模板较少,只有 13 个。 2、使用第三方 theme 来构建,也有很多的模板可以选择,比如 envato 上有数百个 shopify 的模板,这是个非常大的市场。 3、完全自定义开发,自由度最高 当用户对 Shopify 商城页面,有完全自定义的需求,通常是常规主题无法满足需求,推荐使用 Shopify Hydrogen 的官方方案,开发人员可以对商城进行完全的页面级别的自定义。 而对于开发人员来说,官方的 Shopify Liquid 开发起来的效率和体验,是不如 Shopify Hydrogen 来的舒服,而且使用 Shopify Hydrogen ,还可以对性能有提升,