从零开始部署Mx-Space + Shiro
Shiro
写在前面
最近把自己的Hexo+Next博客迁移到了Mx-Space,在这里记录一下迁移的完整过程,以下是开始前的必要准备。
一台服务器,这里我使用的是
Azure
的虚拟机,配置为1核1G
。一个域名,使用的是
腾讯云
的域名活动价。2.9
年/元
我的部署方式为后端docker
部署,前端使用vercel
自动化部署,使用Cloudflare
进行域名解析。 如果VPS
内存不足2G
,建议设置不少于4G
的swap
分区,否则服务器可能会卡死,这里我参考的是这篇文章。
后端Mx-Space
1. 安装docker
由于我的VPS
服务在国外,ssh
到服务器上后直接使用个官方脚本安装:
1 | curl -fsSL https://get.docker.com | bash -s docker |
如果是国内服务器,可以使用阿里云的镜像加速
1 | curl -sSL https://get.daocloud.io/docker | sh |
验证是否安装成功:
1 | docker -v |
2. 配置Core
创建目录并下载docker-compose.yml
文件:
1 | cd && mkdir -p mx-space/core && cd $_ |
修改docker-compose.yml
文件,在environment
字段下添加或修改以下内容:
1 | environment: |
JWT_SECRET
,长度不小于 16 个字符,不大于 32 个字符。ALLOWED_ORIGINS
为允许访问的域名,即前端域名,比如我的域名为beanljun.top
。ENCRYPT_ENABLE
为是否开启加密,直接填false
即可。ENCRYPT_KEY
为加密密钥,不开启加密时不需要填写。 填写的话请参考官方文档。
填写完之后,启动Core
服务:
1 | docker-compose up -d |
接下来还需要配置反向代理,然后通过绑定域名登录后台进行初始化。
3. 配置反向代理
安装宝塔面板
如果已经有了宝塔面板,可以跳过这一步。
1 | wget -O install.sh https://download.bt.cn/install/install-ubuntu_6.0.sh && sudo bash install.sh ed8484bec |
按照提示操作,安装完成后服务器放行16929
端口,一并放行路80,443,2333
端口,然后使用给出的外网面板地址,输入用户名和密码登录宝塔面板。
点击左侧网站
,提示安装nginx
,安装完成后点击添加站点
,填写后端域名(例如server.beanljun.top
),根目录
自动生成,点击确定
。
网站创建完成后,点击SSL证书
,签发证书,这里使用的是Let's Encrypt
,生成后部署即可。
配置反向代理
接下来点击设置
,弹出的页面中再点击反向代理
--> 添加反向代理
,代理名称
随意,目标URL
地址为http://127.0.0.1:2333
,发送域名为127.0.0.1
,然后点击确定
。
打开配置文件,将里面的内容替换为以下内容:
1 |
|
点击保存
,然后重启nginx
服务。
4. 域名解析
前面我们在服务器里创建了一个后端域名,但是现在输入这个域名是无法访问的,需要进行域名解析。将创建的后端域名解析到服务器的公网IP地址。
首先将腾讯云域名通过Cloudflare
进行解析,相关配置参考这篇文章。
打开Cloudflare
,点击域名
,选择DNS
,添加一条A
记录,名称
填写server
(因为我的后端域名是server.beanljun.top),IPv4地址
填写服务器的公网IP地址,代理状态
选择全程代理
,点击保存
。
4. 初始化后台
访问https://后端域名/proxy/qaqdmin
,进入登录页面,设置用户名和密码,登录后台,进行初始化操作。
至此,后端部署完成。
前端部署
前端直接使用vercel
进行自动化部署,具体操作参考官方文档的准备步骤以及通过 Vercel 部署,这里已经写的很详细了,不再赘述。
vercel
域名绑定
直接输入vercel
给出的域名,发现在不科学上网的情况下很难访问,需要绑定自己的域名。
打开vercel
项目,点击Settings
,Domains
,添加域名
,填写自己的域名。
然后在Cloudflare
中添加CNAME
记录,名称
填写www
,目标
填写vercel.app
给出的域名,cname.vercel-dns.com
。 再添加一条A
记录,名称
填写@
,IPv4地址
填写76.76.21.21
。
至此,前端部署完成,不出意外的话,访问自己的域名应该可以就可以看到Shiro
的首页了。
CORS跨域问题
在部署完成访问后,发现首页中最近发生的事
以及友链
和评论
等内容无法正常显示,查看控制台发现CORS
问题。
关于CORS
问题,可以参考这篇文章。
我的解决方法是在Cloudflare
中添加转换规则,如下图所示:
标头名称 | 值 |
---|---|
Access-Control-Allow-Headers | authorization,content-type,x-session-uuid |
Access-Control-Allow-Methods | GET,HEAD,POST,OPTIONS,PUT,PATCH |
Access-Control-Allow-Origin | https://www.beanljun.top(前端域名) |
如果还存在跨域问题,比较失败名称
所对应的响应头
的Access-Control-Allow-Headers
、Access-Control-Allow-Methods
是否包含了请求头
的内容,如果不包含在Cloudflare
添加即可。
不知道这种操作的安全隐患大不大,还请大佬解答。
添加完成后,刷新页面,问题完美解决。
Enjoy~