从零开始:使用 1Panel 部署 Mix Space 后端
Note这是「Mix Space + Yohaku 部署系列」的第一篇,专注于后端(Core)的安装。前端主题 Yohaku 的部署请移步第二篇。
Mix Space 是一套现代化的前后端分离个人博客系统。后端 Core 提供 RESTful API、定时任务、备份、无服务器函数等全套服务,是整个系统安静运转的心脏;前端主题则与之分离,可以自由搭配。
这篇文章会带你用 1Panel 面板,把 Mix Space 后端跑在自己的服务器上——不需要太多折腾,一步一步来就好。
第一步 · 安装 1Panel 面板
1Panel 是一款现代化的开源 Linux 服务器运维面板,界面清爽、操作直观。有了它,后续的容器管理、文件上传、反向代理,都会变得格外顺手。
安装前的小小确认
| 检查项 | 要求 |
|---|---|
| 操作系统 | 主流 Linux 发行版(Debian / Ubuntu / CentOS 等) |
| 服务器架构 | x86_64、aarch64、armv7l 等均支持 |
| 可用内存 | 建议 1 GB 以上 |
| 网络环境 | 需能正常访问互联网 |
| 浏览器 | Chrome、Firefox、Edge 等现代浏览器 |
一行命令,完成安装
SSH 登录你的服务器,执行:
bash -c "$(curl -sSL https://resource.fit2cloud.com/1panel/package/v2/quick_start.sh)"
按照命令行提示操作,耐心等待安装完成。成功后,控制台会打印出类似这样的访问信息:
面板地址:http://你的服务器IP:端口/安全入口
忘记安全入口了?SSH 回到服务器,执行以下命令,entrance 字段的值就是入口路径:
1pctl user-info
如果 Docker 安装失败,先单独运行这条命令修复:
bash <(curl -sSL https://linuxmirrors.cn/docker.sh)
第二步 · 通过 1Panel 安装 Mix Space
2.1 下载应用包
在下面的仓库下载 mxspace.zip 文件备用:
2.2 上传应用包
登入 1Panel 面板,在左侧菜单进入 主机 → 文件,导航到路径:
/opt/1panel/resource/apps/local
点击上传,选择刚刚下载好的 mxspace.zip 文件。
2.3 解压,注意路径!
上传完成后,点击 mxspace.zip,选择解压。
这一步请务必注意!
解压时需要手动将目标路径补全为:
/opt/1panel/resource/apps/local/mxspace
路径填错会导致文件散落在错误的目录里,应用商店将无法识别此本地应用。
2.4 同步本地应用
前往 1Panel 应用商店,点击右上角的同步本地应用按钮,稍等片刻后在搜索框输入 mxspace,便能看到刚刚添加的应用了。
点击安装,进入配置页面。
2.5 填写安装配置项
安装页面有三条只读说明和五个配置项,从上到下依次填写:
Note页面顶部有三条灰色的「📌」提示文字,分别说明 JWT 密钥要求、域名格式和加密功能注意事项,仅供参考,不需要修改,跳过即可。
🔑 JWT 密钥(JWT Secret)
这是后端服务的核心安全凭证,长度要求不少于 16 个字符、不超过 32 个字符。建议使用随机生成的强密码,可以在终端执行:
openssl rand -base64 24
将生成的结果填入此处,并妥善保存——它就像这个博客系统的钥匙,丢失后需要重置,会带来一些麻烦。
🌐 被允许的域名(Allowed Origins)
填写允许访问后端 API 的前端域名,多个域名用英文逗号分隔。格式示例:
localhost:*,你的主题前端域名
部署 Yohaku 前端时,这里填入的就是 Yohaku 所在的域名。如果暂时还不确定,可以先填 localhost:*,后续在已安装应用的配置页修改即可。
🔒 是否开启加密(Enable Encryption)
下拉选择,默认为关闭(推荐)。
🗝️ 加密密钥(Encryption Key)
仅在上一项选择「开启」时才需填写。密钥必须为 64 位小写字母和数字,可通过以下命令生成:
openssl rand -hex 32
如选择关闭加密,此项留空即可。
🔢 HTTP 端口
默认为 2333,一般无需修改。如有端口冲突,可自行更改为其他可用端口。
Note不建议直接勾选端口外部访问,而是通过下一步的反向代理来对外提供服务,这样更安全、也更规范。
2.6 开始安装 🎉
确认配置无误,点击开始安装。
1Panel 会自动拉取 innei/mx-server、mongo:7、redis:alpine 三个镜像并编排启动。首次安装需要拉取镜像,耐心等待几分钟就好。
当状态显示为运行中(Running),Mix Space 后端就悄悄跑起来了 🌿
第三步 · 配置反向代理与 HTTPS
直接暴露端口的方式既不安全,也不美观。建议通过 Nginx 反向代理将服务绑定到你的域名,再配上 HTTPS,整套才算完整。
这里提供一份完整的 Nginx 配置,它做了一件很有意思的事——将 前端(Yohaku,端口 2323) 和 后端(Mix Space Core,端口 2333) 的路由都写在同一个 server 块里,用同一个域名对外服务。访客访问你的博客,前端页面和后端 API 悄悄在幕后各司其职,对外只露出一个干净的域名。
在 1Panel 的 网站 → OpenResty → 配置文件 中,或直接编辑服务器上的 Nginx 配置,填入以下内容:
使用前请将以下内容替换为你自己的值:
你的域名→ 替换为实际域名,共出现 7 处你的子网网段→ 替换为实际子网网段,共出现 1 处你的服务器IP→ 替换为实际服务器 IP,共出现 1 处(set_real_ip_from字段)- SSL 证书路径 → 替换为你实际的证书路径(
ssl_certificate和ssl_certificate_key) baidu_verify_*.html→ 如不需要百度站点验证,可删除对应 location 块
server {
# 监听 IPv4/IPv6 的 HTTP 与 HTTPS 端口
listen 80;
listen [::]:80;
listen 443 ssl;
listen [::]:443 ssl;
server_name 你的域名;
index index.php index.html index.htm default.php default.htm default.html;
root /www/sites/你的域名/index;
# 日志路径
access_log /www/sites/你的域名/log/access.log main;
error_log /www/sites/你的域名/log/error.log;
error_page 404 /404.html;
# 从 CDN/代理获取真实客户端 IP
real_ip_recursive on;
set_real_ip_from 你的子网网段(如172.19.0.0/16);
set_real_ip_from 你的服务器IP;
set_real_ip_from 127.0.0.1;
real_ip_header X-Forwarded-For;
# 向后端传递客户端信息
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;
# SSL 证书与安全配置
ssl_certificate /www/sites/你的域名/ssl/fullchain.pem;
ssl_certificate_key /www/sites/你的域名/ssl/privkey.pem;
ssl_protocols TLSv1.3 TLSv1.2;
ssl_ciphers ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:!aNULL:!eNULL:!EXPORT:!DSS:!DES:!RC4:!3DES:!MD5:!PSK:!KRB5:!SRP:!CAMELLIA:!SEED;
ssl_prefer_server_ciphers off;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
# 启用 HTTP/2 和 HSTS
http2 on;
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains";
# 百度验证文件直接返回
location = /baidu_verify_codeva-46XKS9HVjs.html {
root /www/sites/你的域名/index;
default_type text/plain;
try_files $uri =404;
}
# 根路径:去掉错误参数后重定向;否则正常转发
location = / {
if ($args ~* "error=please_restart_the_process") {
return 301 $scheme://$host;
}
proxy_pass http://127.0.0.1:2323;
}
# 隐藏敏感文件
location ~ ^/(\.user.ini|\.htaccess|\.git|\.env|\.svn|\.project|LICENSE|README.md) {
return 404;
}
# ACME 验证目录
location ^~ /.well-known/acme-challenge {
allow all;
root /usr/share/nginx/html;
}
# 禁止访问 .well-known 下的动态文件
location ~ ^/\.well-known/.*\.(php|jsp|py|js|css|lua|ts|go|zip|tar\.gz|rar|7z|sql|bak)$ {
return 403;
}
# WebSocket 代理
location /socket.io {
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_buffering off;
proxy_pass http://127.0.0.1:2333/socket.io;
}
# API、渲染、代理转发
location /api/v3 { proxy_pass http://127.0.0.1:2333/api/v3; }
location /render { proxy_pass http://127.0.0.1:2333/render; }
location /proxy { proxy_pass http://127.0.0.1:2333/proxy; }
location /qaqdmin { proxy_pass http://127.0.0.1:2333/proxy/qaqdmin; }
# 其他路径转发至后端(带缓冲优化)
location / {
proxy_buffer_size 128k;
proxy_buffers 4 256k;
proxy_busy_buffers_size 256k;
proxy_pass http://127.0.0.1:2323;
}
# HTTP 自动跳转 HTTPS
if ($scheme = http) {
return 301 https://$host$request_uri;
}
error_page 497 https://$host$request_uri;
}
配置保存后,执行 nginx -t 检验语法,再 nginx -s reload 重载即可生效。
路由逻辑一览:
| 路径前缀 | 代理目标 | 说明 |
|---|---|---|
/api/v3 | 后端 :2333 | Mix Space REST API |
/socket.io | 后端 :2333 | WebSocket 实时推送 |
/render | 后端 :2333 | 服务端渲染接口 |
/proxy | 后端 :2333 | 代理及管理后台入口 |
/qaqdmin | 后端 :2333 | 管理后台快捷入口 |
| 其余所有路径 | 前端 :2323 | Yohaku 页面 |
这意味着你只需要一个域名,前端博客和后端管理都在同一个入口下,整洁又优雅。
配置完成后,你的后端相关地址如下(后续部署 Yohaku 时会用到):
后端 API 地址:https://你的域名/api/v2
后端网关地址:https://你的域名
管理后台地址:https://你的域名/qaqdmin
请记下这几个地址。
第四步 · 初始化后台管理
反向代理配置完成后,在浏览器访问管理后台:
https://你的域名/qaqdmin
首次访问会引导你完成初始化,包括创建管理员账号、填写站点基本信息等,按提示操作即可。
常见问题
Q:安装后容器一直在重启,无法正常启动?
大概率是 MongoDB 或 Redis 的健康检查还没通过——它们需要一点时间完全就绪,Core 容器会自动重试。等待约 1 分钟,通常就能自己恢复。如果持续异常,可以在 1Panel 的容器日志里查看具体的报错信息。
Q:JWT 密钥忘记保存了怎么办?
在 1Panel 应用商店的已安装列表中,点击 mxspace 的编辑或配置,可以查看当前的环境变量值。
Q:想修改被允许的域名,怎么操作?
在已安装应用的配置页面中修改 ALLOWED_ORIGINS 环境变量,保存后重启容器即可生效。
Q:数据存储在哪里?
所有数据持久化存储在 /opt/1panel/apps/local/mxspace/mxspace/data/ 目录下,包含 MongoDB 数据、Redis 数据和 mx-space 运行时文件。定期备份此目录即可,也可随 1Panel 快照一并备份。
参考资料
后端已经稳稳落地了 🌱
接下来,前往第二篇,为它披上 Yohaku 这件漂亮的外衣吧。