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
完工~