惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Google DeepMind News
Google DeepMind News
Martin Fowler
Martin Fowler
Google DeepMind News
Google DeepMind News
大猫的无限游戏
大猫的无限游戏
雷峰网
雷峰网
MyScale Blog
MyScale Blog
G
GRAHAM CLULEY
云风的 BLOG
云风的 BLOG
MongoDB | Blog
MongoDB | Blog
WordPress大学
WordPress大学
Y
Y Combinator Blog
The Register - Security
The Register - Security
宝玉的分享
宝玉的分享
S
Schneier on Security
N
News and Events Feed by Topic
T
Threat Research - Cisco Blogs
C
Cyber Attacks, Cyber Crime and Cyber Security
G
Google Developers Blog
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园_首页
S
Security @ Cisco Blogs
H
Hackread – Cybersecurity News, Data Breaches, AI and More
V
Visual Studio Blog
M
MIT News - Artificial intelligence
U
Unit 42
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
人人都是产品经理
人人都是产品经理
W
WeLiveSecurity
Latest news
Latest news
博客园 - 【当耐特】
P
Palo Alto Networks Blog
博客园 - 叶小钗
Simon Willison's Weblog
Simon Willison's Weblog
Jina AI
Jina AI
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
T
Troy Hunt's Blog
L
LangChain Blog
腾讯CDC
Microsoft Azure Blog
Microsoft Azure Blog
博客园 - Franky
C
Check Point Blog
O
OpenAI News
C
Cisco Blogs
T
Tor Project blog
A
About on SuperTechFans
F
Full Disclosure
D
Darknet – Hacking Tools, Hacker News & Cyber Security
L
Lohrmann on Cybersecurity
Attack and Defense Labs
Attack and Defense Labs

Razeen`s Blog

Let's Encrypt 推出 Gen Y 根证书架构:揭示 Web PKI 的五大未来趋势 通过 Wi-Fi 自动备份你的 iPhone 到 Nas 管理培训感悟:从技术视角看管理之路 UPS 一拖多:保护你的 NAS 和 Linux 服务器 从影音中心到 AI 助手:我的50款 Homelab 服务清单 从SSL证书有效期将缩短到47天聊开去 部署一个自己的 Running Page 谈谈特斯拉 Model Y 用车一年的感受和费用分析 弃用 Disqus 评论,使用自建 Waline 使用 Prometheus 和 Grafana 搭建你的证书监控面板 服务器迁移记:一次磁盘换板引发的Linux分区与挂载的学习 改善信息来源, 利用 RSS 高效获取资讯 (RSShub + Reeder5 + WeWe RSS) 多种 Docker 镜像拉取解决方案与实践 App分享 | AppCleaner - Mac上的卸载神器 Azure OpenAI API 申请和使用 如何开通 OneKey 虚拟信用卡,并充值消费 如何拥有一个可长期在国内使用的国外手机号码 分享开通 ChatGPT Plus 过程 如何开通 Depay 虚拟信用卡,并充值消费 如何开通欧易Web3钱包, 交易入账 如何5分钟内1块钱注册 ChatGPT 如何注册美区的 Apple ID (2023年/无需科学上网) NAS折腾记(11): NASTool3.0体验和降级 NAS折腾记(10): Docker版本的NASTool配置 NAS折腾记(9): NASTool与微信交互,微信发送消息远程下载电影【多图】 NAS折腾记(8):群晖安装 NASTool 实现影音半自动化【多图】 内网穿透(2):Tailscale 组网实现内网穿透,操作简单,无成本 内网穿透(1):总结了11中内网穿透的方式,总有一种适合你 NAS折腾记(7):从零开始设置(黑)群晖系统 NAS折腾记(6):黑群晖系统安装好后怎么洗白? NAS折腾记(5):群晖硬盘休眠设置与分析 NAS折腾记(4): 20分钟手把手带你完美安装 DS918+ 黑群晖7.1.1 NAS折腾记(3):NAS 装机 NAS折腾记(2):B360-ITX 双M.2 双2.5G网口 6 SATA主版 开箱 NAS折腾记(1):328元的4盘位Nas机箱开箱 Openwrt + Clash 全局科学上网 Newifi3 刷入 OpenWrt 固件 v21.02 利用 Markdown 画一些流程图、时序图、甘特图等 Homelab(8): 搭建自用 Gitlab 与 Docker 仓库 Nginx Tcp 转发保留客户端真实 IP (PROXY Protocol) Homelab (7):IPSec VPN(基于证书认证)客户端设置 Homelab (6): 基于自签发证书的 IPSec VPN 搭建 Homelab (5): DDNS 动态域名解析 Homelab (4): Linux 服务器基础环境准备 Homelab (3): 整体网络与基础硬件介绍 Go学习笔记(十)老项目迁移 go module 大型灾难记录 Github Actions 初体验之自动化部署 Hexo 博客 记一次 Nginx DNS 缓存导致转发问题 Homelab (2): 电信悦me网关修改桥接模式,路由器拨号 Homelab (1):5分钟上手黑群晖 NAS 终极 Bash 脚本指南 Typora 自动上传图片到七牛云 Ubuntu 20.04 LTS 有线网卡驱动安装 折腾 Ubuntu 20.04 LTS 开发环境 Go学习笔记(九) 计时器的生命周期[译] 利用 git hook 规范你的代码与 commit message 规范 git commit message 与自动化版本控制 超详细 vim 配置 (with MacVim) Golang 中的 RESTful API 最佳实践 折腾服务器(开篇) 我的第一台个人服务器 Newifi3 实现低成本家庭级科学上网 Go学习笔记(八) | 使用 os/exec 执行命令 如何用 Go 调用 Windows API Mac OS 自动根据 WI-FI 名字改变网络位置 关于 Docker 清理 MIME Types 速查表 Go学习笔记(七) | 理解OAuth 2.0并实现一个客户端 我又又又把博客迁移了 Go学习笔记(六) | 使用swaggo自动生成Restful API文档 Go学习笔记(五) | 使用代码片段(snippets)提高编码效率 书单 - 2018 IPFS 初体验,利用 IPFS 托管你的静态网站 记一次 PostgreSQL LIKE 索引优化,联合字段 LIKE 查询优化。 Disqus 添加有趣的 Reactions 的功能 TLS 1.3 详解 (RFC 8446解读) gRPC在Go中的使用(三)gRPC实现TLS加密通信与流模式 gRPC在Go中的使用(二)gRPC实现简单通讯 gRPC在Go中的使用(一)Protocol Buffers语法与相关使用 CentOS 安装 tshark 抓包工具 Go学习笔记(四) | win上使用VSCode搭建Go开发环境 日常 Postgres 数据库点滴记录 简单了解 PKCS 规范 美食篇 | DIY戚风蛋糕(烤箱做蛋糕) Go学习笔记(三) | 怎么写Go基准测试(性能测试) TLS1.3正式更新,为Nginx添加TLS1.3的支持 一次诡异的数据库删除 GitHub Pages自定义域名开启HTTPS 证书透明度是什么?它是怎么工作的? Go学习笔记(二) | 我对 recover 的一点误解 搭建证书透明度(certificate-transparency)日志服务之从入门到放弃 修复远程登陆 Centos 时,出现 UTF-8 Warning HTTPS篇之SSL握手过程详解 Go学习笔记(一) | postgres与golang点点滴滴 AWS 命令行界面(aws-cli)从安装到快速上手 数字证书分类及怎么区分各类数字证书 常用 linux 命令小结(一)文件目录操作 云服务器搭建 hexo 博客,git hooks自动更新 SSH 免密登陆, SSH Config 配置 Golang CGO Mac 交叉编译 Windows 使用 goose 让数据库迁移更加轻松
开始使用Ghost
2017-03-23 · via Razeen`s Blog

总想有点地方写一些杂碎的东西,今天抽了一会功夫搭了个ghost博客。我会在这里写一些比较零碎的学习笔记之类的东西。我们首先说一下该博客的搭建过程。

其实ghost搭建起来很简单,一个docker-compose.yaml文件就解决了。也正是由于它的简单,搭建起来不费时间,后台写博客方便等等,我才使用它。 话不多说 ,我们开始。

整体架构

  • ghost + docker
  • nginx
  • 七牛
  • disqus

Ghost

我是使用docker-compose运行ghost的,所以你首先需要安装docker以及docker-compose. 至于docker以及docker-compose怎么安装,这里就不说了,自行Google。

我的docker-compose是这么写得:

version: '3'
services:
    ghost:
        image: ghost:2.0.3-alpine
        ports:
            - "2368:2368"
        restart: always
        volumes:
            - ./content:/var/lib/ghost/content
            - ./config.production.json:/var/lib/ghost/config.production.json
        environment:
            - url=https://netcj.com
        ulimits:
            nofile: 65535

直接docker-compose up -d 即可启动一个ghost服务。

你一定注意到一点,容器卷中,我将容器的配置config.production.json暴露出来了。该文件基本内容如下:

{
  "url": "http://netcj.com",
  "server": {
    "port": 2368,
    "host": "0.0.0.0"
  },
  "database": {
    "client": "sqlite3",
    "connection": {
      "filename": "/var/lib/ghost/content/data/ghost.db"
    }
  },
  "mail": {
    "transport": "Direct"
  },
  "logging": {
    "transports": [
      "file",
      "stdout"
    ]
  },
  "process": "systemd",
  "paths": {
    "contentPath": "/var/lib/ghost/content"
  }
}

这里配置了服务的域名,端口,数据库等。

我这里用的数据库是sqlite3,我觉得一个小博客系统够了,mysql太重了。

Nginx

博客系统已经跑起来了,现在我们需要一个nginx服务,关于nginx的安装你可以看这里

我的nginx配置如下:

server {
    listen                       443 ssl  http2 default fastopen=3 reuseport;

    server_name                  netcj.com www.netcj.com;
    server_tokens                off;

    access_log                   /www/nginx/logdata/netcj.com.log;

    include                      /www/nginx/ip.blacklist;

    ssl_trusted_certificate      /www/nginx/certs/ca_file.pem;
    ssl_certificate              /www/nginx/certs/*.netcj.com_rsa.cer;
    ssl_certificate_key          /www/nginx/certs/*.netcj.com_rsa.key;
    ssl_certificate              /www/nginx/certs/*.netcj.com_ecc.cer;
    ssl_certificate_key          /www/nginx/certs/*.netcj.com_ecc.key;
    ssl_dhparam                  /www/nginx/dhparams.pem;
    ssl_ecdh_curve               X25519:P-256:P-384:P-224:P-521;
    ssl_ciphers                  TLS13-AES-256-GCM-SHA384:TLS13-CHACHA20-POLY1305-SHA256:TLS13-AES-128-GCM-SHA256:TECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;

    ssl_prefer_server_ciphers    on;
    ssl_protocols                TLSV1.1 TLSV1.2 TLSV1.3;
    ssl_session_cache            shared:SSL:50m;
    ssl_session_timeout          1d;
    ssl_session_tickets          on;
    ssl_stapling                 on;
    ssl_stapling_verify          on;
    resolver                     114.114.114.114 8.8.8.8 valid=300s;
    resolver_timeout             10s;


   # webmaster 站点验证相关
    location ~* (google4c90d18e696bdcf8\.html|BingSiteAuth\.xml)$ {
        root                     /www/static;
        expires                  1d;
    }


    add_header               Public-Key-Pins 'pin-sha256="Vjs8r4z+80wjNcr1YKepWQboSIRi63WsWXhIMN+eWys="; pin-sha256="YLh1dUR9y6Kja30RrAn7JKnbQG/uEtLMkBgFF2Fuihg="; pin-sha256="S4AbJNGvyS57nzJwv8sPMUML8VHSqH1vbiBftdPcErI="; pin-sha256="MunFWpgz45SKZDTvitbhyy0Vu9Axb6CHIdM9R7DXFjs=";pin-sha256="qiYwp7YXsE0KKUureoyqpQFubb5gSDeoOoVxn6tmfrU="; max-age=2592000; report-uri="https://netcj.report-uri.com/r/d/hpkp/enforce"';

    add_header               Strict-Transport-Security "max-age=31536000; includeSubDomains; preload";
    add_header               X-Frame-Options deny;
    add_header               X-Content-Type-Options nosniff;
    add_header               Expect-Ct 'enforce,max-age=30,report-uri="https://netcj.report-uri.com/r/d/ct/enforce"';
    add_header               Referrer-Policy "origin-when-cross-origin";


    add_header               Cache-Control no-cache;
    add_header               X-Via AQ;
    add_header               X-XSS-Protection "1; mode=block";


    location / {
        proxy_http_version       1.1;

        proxy_ignore_headers     Set-Cookie;
        proxy_hide_header        Vary;
        proxy_hide_header        X-Powered-By;

        proxy_set_header         Connection       "";
        proxy_set_header         Host             netcj.com;
        proxy_set_header         X-Real-IP        $remote_addr;
        proxy_set_header         X-Forwarded-For  $proxy_add_x_forwarded_for;
        proxy_set_header         X-Forwarded-Proto $scheme;

        proxy_pass               http://127.0.0.1:2368;
    }
}

server {
    server_name                  netcj.com www.netcj.com;
    server_tokens                off;

    access_log                   /dev/null;

    if ($request_method !~ ^(GET|HEAD|POST|OPTIONS)$ ) {
        return                   444;
    }

    # letsencrypt file verify
    location ^~ /.well-known/acme-challenge/ {
        alias                    /www/nginx/challenges/;
        try_files                $uri =404;
    }

    location / {
        rewrite                  ^/(.*)$ https://netcj.com/$1 permanent;
    }
}

七牛

ghost默认图片等静态文件都放在服务器上,一方面耗费流量,一方面我的服务器是小水管,加载太慢,考虑将图片放到七牛云。

ghost官方也有相关文档

这里我们首先要添加一个插件qn-store

$ cd ghost文件夹
$ mkdir -p content/adapters/storage
$ cd content/adapters/storage
$ git clone https://github.com/Minwe/qn-store.git

然后我们需要修改config.production.json文件,添加以下内容:

"storage": {
    "active": "qn-store",
    "qn-store": {
      "accessKey": "xxxx",
      "secretKey": "xxxx",
      "bucket": "xxxx",
      "origin": "https://xxxx",
      "fileKey": {
        "safeString": true,
        "prefix": "/YYYYMM/"
      },
      "uploadURL": "up-z2.qiniup.com"
    }
  },

其中需要关注的是:

  • accessKey\secretKey 七牛的授权密钥
  • bucket 七牛存储空间名
  • origin 七牛绑定的空间域名
  • prefix 上传文件的前缀
  • uploadURL 七牛上传的地址,各个地区不一样,我这里是华南的。

配置好这些之后,docker-compose restart 即可。

disqus各个主题的支持方式应该有所不同,该主题(attila)只要在发博客时,博客头部插入<script>var disqus = 'YOUR_DISQUS_SHORTNAME';</script> 即可。

jietu20180905-230612

邮箱设置

我设置的QQ邮箱,QQ 邮箱需要使用 授权码 代替密码才能登陆(邮箱独立密码也无法登陆)。

授权码生成地址: 设置 > 账户 > POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务 。

修改config.production.json文件,添加以下内容:

"mail": {
  "from": "<邮箱,需要与下面的邮箱一致>",
  "transport": "SMTP",
  "options": {
    "service": "QQ",
    "auth": {
      "user": "<邮箱>",
      "pass": "<授权码>" 
    }
  }
},

最后

myssl.com 检测以下网站配置是否安全。A+ 还不错。

img

如果你没有证书,可以到这里申请免费证书

如果有问题,请留言,我们一起解决。