Jayden

Jayden

Mix Space 部署

介紹#

請使用 1C1G 以上的系統,1G 內存可能會在前端編譯時出現問題。

推薦使用 Ubuntu 等現代 Linux 操作系統,使用 CentOS 7 等操作系統因無法安裝足夠高版本的 Node.js 從而導致部署失敗。

後端部署#

參考:https://mx-space.js.org/docs/docker

安裝 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

部署#

  1. 拉取配置文件
cd && mkdir -p $HOME/mx-space/core && cd $_ # 拉取 docker-compose.yml 文件
wget https://fastly.jsdelivr.net/gh/mx-space/core@master/docker-compose.yml
  1. 創建環境變量
vi .env
  1. 填入以下內容後,按 ESC 鍵,輸入 :wq 保存退出
JWT_SECRET= #JWT 密鑰:需要填寫長度不小於 16 個字符,不大於 32 個字符的字符串,用於加密用戶的 JWT,務必保存好自己的密鑰,不要洩露給他人。
ALLOWED_ORIGINS= #被允許的域名:需要填寫被允許的域名,通常是前端的域名,如果允許多個域名訪問,用英文逗號,分隔。
ENCRYPT_ENABLE= #如果你確定要開啟加密,將 false 改為 true,開啟加密後,你需要在下方填寫加密密鑰。
ENCRYPT_KEY= #如果你不知道這是什麼,那麼不建議開啟此功能,具體內容可參考 https://mx-space.js.org/usage/security.html
  1. 啟動後端
docker compose up -d

前端部署#

參考:https://mx-space.js.org/themes/shiro

前期準備#

  1. 部署好後端並啟動
  2. 註冊 Clerk 帳號,並獲取公鑰私鑰:參考
  3. 安裝 node.js、pnpm

部署#

  1. 拉取倉庫(以 Shiro 為例)
git clone https://github.com/Innei/Shiro $HOME/mx-space/Shiro && cd $HOME/mx-space/Shiro
  1. 生成環境變量
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
  1. 安裝依賴並啟動
sudo pnpm i
sudo pnpm build
npx next start -p 2323
  1. 如果以上能夠正常啟動前端,則可以使用 pm2 進行部署
npm install -g pm2
pm2 start #
pm2 restart 0 #重新編譯後用此命令重新部署,其中 0 為任務號

Nginx 反向代理#

  1. 將域名解析至伺服器。

  2. 根據 該文 的方法申請證書。

  3. 設置反向代理:

    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

故障排除#

解決評論用戶衝突問題#

參考:Clerk 登錄與 Mix Space 後端綁定

  1. 獲取 PEM:https://clerk.com/docs/backend-requests/handling/manual-jwt
  2. 獲取 id:在 Shiro 用 clerk 登錄後,通過 console 抓取請求

獲取 id

添加搜索#

參考:https://mx-space.js.org/usage/search

  1. 註冊:https://dashboard.algolia.com/users/sign_up
  2. New Application -> Create Application -> Create Index,需要記住 Create Index
  3. API Keys -> Application ID & Admin API Key
  4. 在後台輸入 Index & Application ID & Admin API Key

此文由 Mix Space 同步更新至 xLog 原始鏈接為 https://xxu.do/posts/geek/Mix-Space

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。