Intro#
请使用 1C1G 以上的系统,1G 内存可能会在前端编译时出现问题。
推荐使用 Ubuntu 等现代 Linux 操作系统,使用 CentOS 7 等操作系统因无法安装足够高版本的 Node.js 从而导致部署失败。
后端部署#
安装 Docker#
如果你的服务器在国内,建议使用阿里云的镜像加速,安装命令如下:
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
在国外,可以直接使用官方脚本安装:
curl -fsSL https://get.docker.com | bash -s docker
如果您成功安装了 Docker 和 Docker-Compose,可以通过以下命令查看版本:
docker -v
docker compose version
部署#
- 拉取配置文件
cd && mkdir -p $HOME/mx-space/core && cd $_ # 拉取 docker-compose.yml 文件
wget https://fastly.jsdelivr.net/gh/mx-space/core@master/docker-compose.yml
- 创建环境变量
vi .env
- 填入以下内容后,按
ESC
键,输入:wq
保存退出
JWT_SECRET= #JWT 密钥:需要填写长度不小于 16 个字符,不大于 32 个字符的字符串,用于加密用户的 JWT,务必保存好自己的密钥,不要泄露给他人。
ALLOWED_ORIGINS= #被允许的域名:需要填写被允许的域名,通常是前端的域名,如果允许多个域名访问,用英文逗号,分隔。
ENCRYPT_ENABLE= #如果你确定要开启加密,将 false 改为 true,开启加密后,你需要在下方填写加密密钥。
ENCRYPT_KEY= #如果你不知道这是什么,那么不建议开启此功能,具体内容可参考 https://mx-space.js.org/usage/security.html
- 启动后端
docker compose up -d
前端部署#
前期准备#
- 部署好后端并启动
- 注册 Clerk 账号,并获取公钥私钥:参考
- 安装 node.js、pnpm
部署#
- 拉取仓库(以 Shiro 为例)
git clone https://github.com/Innei/Shiro $HOME/mx-space/Shiro && cd $HOME/mx-space/Shiro
- 生成环境变量
vi .env
填入以下内容后,按 ESC
键,输入 :wq
保存退出
NEXT_PUBLIC_API_URL=https://yourdomain/api/v2
NEXT_PUBLIC_GATEWAY_URL=https://yourdomain
NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY=pk_test_XXXX
CLERK_SECRET_KEY=sk_test_XXXX
- 安装依赖并启动
sudo pnpm i
sudo pnpm build
npx next start -p 2323
- 如果以上能够正常启动前端,则可以使用 pm2 进行部署
npm install -g pm2
pm2 start #
pm2 restart 0 #重新编译后用此命令重新部署,其中 0 为任务号
Nginx 反向代理#
-
将域名解析至服务器。
-
根据 该文 的方法申请证书。
-
设置反向代理:
vi /etc/nginx/nginx.conf
修改下面示例中的域名及证书路径,添加到配置文件中:
点击获得示例
server {
listen 80;
listen 443 ssl http2 ;
## 绑定域名
server_name www.example.com;
index index.html;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $server_name;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
error_log /www/sites/www.example.com/log/error.log;
access_log /www/sites/www.example.com/log/access.log;
location /socket.io {
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
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;
}
location /api/v2 {
proxy_pass http://127.0.0.1:2333/api/v2;
}
location /render {
proxy_pass http://127.0.0.1:2333/render;
}
location / {
proxy_pass http://127.0.0.1:2323;
}
location /qaqdmin {
proxy_pass http://127.0.0.1:2333/proxy/qaqdmin;
}
location ~* \/(feed|sitemap|atom.xml) {
proxy_pass http://127.0.0.1:2333/$1;
}
ssl_certificate /www/sites/www.example.com/ssl/fullchain.pem;
ssl_certificate_key /www/sites/www.example.com/ssl/privkey.pem;
ssl_protocols TLSv1.3 TLSv1.2 TLSv1.1 TLSv1;
ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!3DES:!MD5:!PSK';
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
error_page 497 https://$host$request_uri;
limit_conn perserver 300;
limit_conn perip 25;
limit_rate 512k;
}
更新#
后端更新(Doker 部署)#
进入 core 所在文件夹,然后
cd $HOME/mx-space/core
docker compose pull && docker compose up -d
前端更新#
cd $HOME/mx-space/Shiro
git pull
sudo pnpm i
sudo pnpm build
pm2 restart 0
TroubleShooting#
解决评论用户冲突问题#
- 获取 PEM:https://clerk.com/docs/backend-requests/handling/manual-jwt
- 获取 id:在 Shiro 用 clerk 登录后,通过 console 抓取请求
添加搜索#
- 注册:https://dashboard.algolia.com/users/sign_up
- New Application -> Create Application -> Create Index,需要记住 Create Index
- API Keys -> Application ID & Admin API Key
- 在后台输入 Index & Application ID & Admin API Key
此文由 Mix Space 同步更新至 xLog
原始链接为 https://xxu.do/posts/geek/Mix-Space