Blog 搭建

LDUKGZ
关于技术也折腾了挺久的,有的时候就会觉得的确需要一个很简单使用,后期维护起来又比较方便的博客系统.

考虑了许久,相比较于之前的hexo + github-pages 搭建Blog 系统我还是太懒了, 谁知道以后还有没有兴趣折腾? 技术型太强的东西维护不易啊~

最终选择了 WordPress(Cloud) + Obsidian(Local) 的方案.

需要的工具:

  • Cloud Solution:
    1. Cloud Server (腾讯云方案) + ssl 证书
    2. Docker 部署 WordPress + Nginx (SSL)
  • Local Solution
    1. Obsidian
    2. Obsidian Advanced Slides Plugin
    3. Obsidian WordPress Plugin

Cloud Solution

首先由于我们用的是Wordpress 方案这意味着我们需要我们的一个Cloud server, 这里选择的是腾讯云(主要是便宜) + 域名. 同时要能够https 访问需要搭建Nginx 服务. 这样我们的方案主要是腾讯云下的Wordpress + Nginx 方案. 为了能够方便后期的维护,选择了Docker部署的方案.

Cloud Server + SSL 证书的获取

阿里云、腾讯云、华为云、亚马逊云、谷歌云...大家可以自行挑选合适的套餐购买。

Docker 部署Wordpress + Nginx (SSL)

为什么要用Docker 部署Wordpress + Nginx 呢,主要还是希望能够让轻量的应用服务器能够做更多的任务.(如果性能不够再升级下)
如果已经有了Docker , Docker-compose 不用下面这一步(选择+Docker 的镜像就好了...) ,如果没有也不用担心,在cloud server 终端下执行:

# 安装docker
sudo curl -sSL https://get.daocloud.io/docker | sh
# 安装docker-compose
sudo curl -L "https://github.com/docker/compose/releases/download/v2.2.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

创建持久化目录

# 以 website mingzailao.live 为例

mkdir ~/mingzailao.live
cd ~/mingzailao.live

# 创建mysql 配置目录,mysql 数据目录, wordpress文件目录 ,nginx文件目录
mkdir db db_data wordpress_data nginx

# 创建mysql配置文件
cat > ./db/mysql.cnf << EOF
[mysqld]
explicit_defaults_for_timestamp=true
wait_timeout=86400
interactive_timeout=7200
EOF


# 先启动一个ngninx的镜像
docker run -it -d --name nginx nginx:latest
# 将容器内的/etc/nginx目录拷贝到本地
docker cp nginx:/etc/nginx ./nginx/conf
# 将容器内的/usr/share/nginx/html目录拷贝到本地
docker cp nginx:/usr/share/nginx/html ./nginx/html
# 创建ngnix的日志目录
mkdir ./nginx/log
# 文件拷贝完毕移除ngnix镜像
docker stop nginx
docker rm nginx

然后编辑docker-compose 配置文件

vim docker-compose.yml
version: '3'
services:
  nginx:
    image: nginx:latest
    restart: always
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./nginx/conf:/etc/nginx:ro
      - ./nginx/html:/usr/share/nginx/html:rw
      - ./nginx/log:/var/log/nginx:rw
      - ./nginx/ssl:/etc/ssl:ro
 
  wpdatabase:
    image: mysql:latest
    volumes:
      - ./db_data:/var/lib/mysql
      - ./db/mysql.cnf:/etc/my.cnf
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: root # 数据库管理员密码,推荐改为强密码
      MYSQL_DATABASE: wordpress # wordpress数据库
      MYSQL_USER: wordpress # wordpress用户
      MYSQL_PASSWORD: wordpress # wordpress用户的密码,推荐改为强密码
 
  wordpress:
    depends_on:
      - wpdatabase
    image: wordpress:latest
    volumes:
      - ./wordpress_data:/var/www/html
    restart: always
    environment:
      WORDPRESS_DB_HOST: wpdatabase:3306
      WORDPRESS_DB_USER: wordpress # 上面配置的mysql用户
      WORDPRESS_DB_PASSWORD: wordpress # 上面配置的mysql用户的密码

启动容器

sudo docker-compose up -d

但是现在 Nginx 还没有配置好代理,需要创建一个配置文件

vim ./nginx/conf/conf.d/wordpress.conf

写入以下配置


server {
  listen 80;
  server_name x.x.x.x; # 此处修改为你的主机IP
 
  location / {
    proxy_pass http://wordpress;
    proxy_redirect off;
 
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-Host $host;
    proxy_set_header X-Forwarded-Server $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    # 转发host信息
    proxy_set_header Host $host;
  }
}

重启nginx 容器并访问网站

sudo docker-compose restart nginx

注意此时需要访问的是服务器ip 地址而不是域名,下面才是域名绑定

SSL 证书配置

在腾讯云获取SSL 证书之后上传到服务器,

cp /path/to/xxx.crt ./nginx/conf
cp /path/to/xxx.key ./nginx/conf

curl https://ssl-config.mozilla.org/ffdhe2048.txt > ./nginx/conf/dhparam.pem

对 ./nginx/conf/conf.d/wordpress.conf 修改


server {
    listen 80;
    listen [::]:80;

    server_name _;
    server_name mingzailao.live www.mingzailao.live; # 这里改为自己的域名

    location / {
        return 301 https://mingzailao.live$request_uri; # 这里改为自己的域名
    }
}

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name mingzailao.live www.mingzailao.live; # 这里改为自己的域名

    location / {
      proxy_pass http://wordpress;

          proxy_http_version    1.1;
          proxy_cache_bypass    $http_upgrade;

          proxy_set_header Upgrade            $http_upgrade;
          proxy_set_header Connection         "upgrade";
          proxy_set_header Host                $host;
          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_set_header X-Forwarded-Host    $host;
          proxy_set_header X-Forwarded-Port    $server_port;
    }

    ssl_certificate 1_mingzailao.live_bundle.crt; # 这里改为自己的ssl证书
    ssl_certificate_key 2_mingzailao.live.key; # 这里改为自己的ssl证书密钥
    ssl_session_timeout 1d;
    ssl_session_cache shared:MozSSL:10m;  # about 40000 sessions
    ssl_session_tickets off;

    # curl https://ssl-config.mozilla.org/ffdhe2048.txt > /path/to/dhparam
    ssl_dhparam dhparam.pem;

    # intermediate configuration
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
    ssl_prefer_server_ciphers off;

    # HSTS (ngx_http_headers_module is required) (63072000 seconds)
    add_header Strict-Transport-Security "max-age=63072000" always;
    add_header X-Frame-Options "SAMEORIGIN";
    add_header X-XSS-Protection "1; mode=block";
    add_header X-Content-Type-Options "nosniff";

    # OCSP stapling
    ssl_stapling on;
    ssl_stapling_verify on;

    # verify chain of trust of OCSP response using Root CA and Intermediate certs
    ssl_trusted_certificate 1_mingzailao.live_bundle.crt; # 这里改为自己的ssl证书

    # replace with the IP address of your resolver
    resolver 8.8.8.8;

    location ~* /xmlrpc.php {
        deny all;
    }

    if ( $fastcgi_script_name ~ \..*\/.*php ) {
        return 403;
    }

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

}

重启Nginx 即可通过https 访问

sudo docker-compose restart nginx

Local Solution

在本地主要的需求有两个

  1. 快速的Presentation制作
  2. Blog 的发布

这两个功能通过 Obsidian 都可以完成的比较好, 其中通过Obsidian + Advanced Slides Plugin 制作 Presentation可以参见 Obsidian制作presentation. 可以通过同样的方式配置Wordpress 插件实现Blog 的快速发布. 或者用MWeb 编辑器做blog 的发布亦可.

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇