Mix Space+Shrio 博客搭建教程

2025 年 6 月 15 日 星期日(已编辑)
/ , ,
77
这篇文章上次修改于 2025 年 6 月 16 日 星期一,可能部分内容已经不适用,如有疑问可询问作者。

Mix Space+Shrio 博客搭建教程

小白也是终于搞好了自己的博客(太不容易了~),所以第一篇博客就写怎么搭建和我同款的博客吧。

相关项目

准备内容

一个域名(国内域名需备案)

一台服务器

然后带上你的脑子

服务器安装 docker 及 docker-compose

比较简单,可以自行询问AI

后端部署

mkdir mx-space
cd mx-space
vim docker-compose.yml

docker-compose.yml 文件内容

services:
  app:
    container_name: mx-server
    image: innei/mx-server:latest
    environment:
      - TZ=Asia/Shanghai
      - NODE_ENV=production
      - DB_HOST=mongo
      - REDIS_HOST=redis
      - JWT_SECRET=
      - ALLOWED_ORIGINS=localhost,your_domain
      - ENCRYPT_ENABLE=false
      - ENCRYPT_KEY=
    volumes:
      - ./data/mx-space:/root/.mx-space
    ports:
      - '127.0.0.1:2333:2333'
    depends_on:
      - mongo
      - redis
    networks:
      - mx-space
    restart: unless-stopped
    healthcheck:
      test: [CMD, curl, -f, 'http://127.0.0.1:2333/api/v2/ping']
      interval: 1m30s
      timeout: 30s
      retries: 5
      start_period: 30s

  mongo:
    container_name: mongo-shiro
    image: mongo
    volumes:
      - ./data/db:/data/db
    networks:
      - mx-space
    restart: unless-stopped

  redis:
    image: redis:alpine
    container_name: redis-shiro
    volumes:
      - ./data/redis:/data
    healthcheck:
      test: [CMD-SHELL, 'redis-cli ping | grep PONG']
      start_period: 20s
      interval: 30s
      retries: 5
      timeout: 3s
    networks:
      - mx-space
    restart: unless-stopped

networks:
  mx-space:
    driver: bridge

保存后退出

启动 docker-compose up -d
停止 docker-compose down
更新 docker-compose pull

前端部署

mkdir shiro
cd shiro
touch docker-compose.yml
touch .env

docker-compose.yml 文件内容

version: '3'

services:
  shiro:
    container_name: shiro
    image: shiro-my
    volumes:
      - ./.env:/app/.env
    restart: always
    environment:
      - NEXT_SHARP_PATH=/usr/local/lib/node_modules/sharp
    ports:
      - 127.0.0.1:2323:2323

本地构建 docker 镜像(默认镜像概率出现无法访问轻管理界面)

参考此 issue: https://github.com/Innei/Shiro/issues/581 构建方式

git clone https://github.com/Innei/Shiro
cd Shiro
docker build -t shiro-my .

等待构建完成即可

.env 文件内容

NEXT_PUBLIC_API_URL=http://127.0.0.1:2333/api/v2
NEXT_PUBLIC_GATEWAY_URL=http://127.0.0.1:2333/
NEXT_PUBLIC_API_URL=https://your_domain/api/v2
NEXT_PUBLIC_GATEWAY_URL=https://your_domain

配置nginx反向代理并启用SSL

vim /etc/nginx/sites-available/blog.xxx.com
ln -s /etc/nginx/sites-available/blog.xxx.com /etc/nginx/sites-enabled/
nginx -t
ngins -s reload

配置内容

server {
    listen       80;
    listen       [::]:80;
    server_name  blog.xxx.com;

    # 所有请求跳转到 HTTPS
    return 301 https://$host$request_uri;
}
server {
    listen       443 ssl http2;
    listen       [::]:443 ssl http2;
    server_name  blog.xxx.com;
    index        index.html;

    #SSL/TLS 配置
    ssl_certificate      /root/cert/xxx.com.pem; #此处采用cloudflare的15年证书
    ssl_certificate_key  /root/cert/xxx.com.key;
    ssl_protocols        TLSv1.3 TLSv1.2;
    ssl_ciphers          'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384';
    ssl_prefer_server_ciphers off;
    ssl_session_cache    shared:SSL:10m;
    ssl_session_timeout  1d;
    ssl_session_tickets  off;
    ssl_stapling         on;
    ssl_stapling_verify  on;
    resolver             8.8.8.8 8.8.4.4 valid=300s;
    resolver_timeout     5s;

    #安全 Header
    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
    add_header X-Frame-Options "DENY" always;
    add_header X-Content-Type-Options "nosniff" always;
    add_header X-XSS-Protection "1; mode=block" always;

    #日志 & 客户端大小限制
    access_log           /www/sites/blog.yzual.com/log/access.log;
    error_log            /www/sites/blog.yzual.com/log/error.log warn;
    client_max_body_size 50m;

    #全局代理头
    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;

    #并发 & 限速
    limit_conn perip      25;
    limit_conn perserver  300;
    limit_rate           512k;

    # socket.io 长连接
    location /socket.io {
        proxy_set_header Upgrade $http_upgrade; 
        proxy_set_header Connection "Upgrade"; 
        proxy_buffering off; 
        proxy_set_header Host $host; 
        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:2333/socket.io; 
    }
    ## API 地址
    location /api/v2 {
        proxy_pass http://127.0.0.1:2333/api/v2; 
    }
    ## 简读 render 地址
    location /render {
        proxy_pass http://127.0.0.1:2333/render; 
    }
    ## Kami 地址
    location / {
        proxy_pass http://127.0.0.1:2323; 
    }
    ## 后台地址
    location /proxy {
        proxy_pass http://127.0.0.1:2333/proxy;
    }
    location /qaqdmin {
        proxy_pass http://127.0.0.1:2333/proxy/qaqdmin;
    }
}

配置云函数

参考 https://mx-space.js.org/docs/themes/shiro/deploy 首次访问的网址为 https://blog.xxx.com/proxy/qaqdmin 完工~

使用社交账号登录

  • Loading...
  • Loading...
  • Loading...
  • Loading...
  • Loading...