如何在个人服务器(阿里云/腾讯云等)安装Innei/Shiro个人博客网站

2024 年 7 月 24 日 星期三(已编辑)
67
2
这篇文章上次修改于 2024 年 7 月 24 日 星期三,可能部分内容已经不适用,如有疑问可询问作者。

如何在个人服务器(阿里云/腾讯云等)安装Innei/Shiro个人博客网站

首先我在网上的网址是https://github.com/Innei/Shiro,感觉是一个很惊艳的个人网站,于是想要部署一下

但是该网址上的安装步骤并不是很详细,所以我决定记录一下怎么安装好的,因为还是有点曲折

首先参考https://mx-space.js.org/docs部署网站后端,我这里采用的是docker-compose的形式,因为最简单。

官方提供的步骤是这样的

wget https://fastly.jsdelivr.net/gh/mx-space/core@master/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
      - ALLOWED_ORIGINS=localhost
      - JWT_SECRET=YOUR_SUPER_SECURED_JWT_SECRET_STRING
    volumes:
      - ./data/mx-space:/root/.mx-space
    ports:
      - '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
    image: mongo
    volumes:
      - ./data/db:/data/db
    networks:
      - mx-space
    restart: unless-stopped

  redis:
    image: redis:alpine
    container_name: redis
    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

-d 表示后台执行,不会占用你的终端,然后基本上这一步只要是能跑起来都没问题

然后设置你的服务器的防火墙或者是反代,这里以nginx为例,给大家提供一份配置文件,刚好能和上面的compose文件一起用,但是如果你要改端口,那么请你在所有出现端口的地方都要改,目前的后端端口是2333,前端还没有部署,但我们也先写上去,端口默认是2323,我部署的域名是dawnmagnet.xyz,大家记得改一下,SSL证书可以参考https://arthals.ink/posts/web/shiro的步骤申请一个

server {
    listen 80 ; 
    listen 443 ssl http2 ; 
    listen [::]:443 ssl http2 ; 
    listen [::]:80 ; 
    ## 绑定域名 
    server_name dawnmagnet.xyz; 
    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"; 
    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 /proxy {
        proxy_pass http://127.0.0.1:2333/proxy; 
    }
    location ~* \/(feed|sitemap|atom.xml) {
        proxy_pass http://127.0.0.1:2333/$1; 
    }
    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; 
    if ($scheme = http) {
        return 301 https://$host$request_uri; 
    }
    ssl_certificate /www/sites/dawnmagnet.xyz/ssl/fullchain.pem; 
    ssl_certificate_key /www/sites/dawnmagnet.xyz/ssl/privkey.pem; 
    add_header Strict-Transport-Security "max-age=31536000"; 
    proxy_set_header X-Forwarded-Proto https; 
    ssl_stapling on; 
    ssl_stapling_verify on; 
}

放好之后,你理论上来说可以打开{你的域名}/qaqdmin了,然后就是一些常规基本设置,这里就不截图了。着重讲一下部署前端的步骤。

(这句话和下面的代码块是Shiro仓库里的)首先在 https://github.com/Innei/Shiro/releases 中下载预构建好的 release.zip。然后解压它。

cd standalone
vim .env # 修改你的 ENV 变量
export PORT=2323
node server.js

这里有好几个问题:

  • release中提供的server.js不一定能运行成功(问题1)

    可能会报错,原因不详,先尝试使用nodejs 20版本,如果还是不行,解决办法是自行编译,直接把整个仓库克隆到本地(或者服务器,如果算力够的话,2核4G以下的就别考虑在服务器上编译了),编译好之后再将所有文件上传到服务器上

  • node部署很麻烦,没法统一管理(问题2)

    这里修改.env变量是一个较为复杂的动作,而且其实PORT也不是不能放进去,本质上这些参数都是为了最后的部署服务的,但是如果仅使用node很不方便。这里我们采用pm2,很方便,很快捷的一个nodejs项目部署小工具,不需要每次node啥啥一大串和环境变量的。(而且官方的文件夹里也提供了这样的部署方式)

你可以在与.next/standalone文件夹找到一个文件,叫做ecosystem.config.js,这个就是pm2的配置文件,根据如下规则编写你自己的配置文件

module.exports = {
  apps: [
    {
      name: 'Shiro',
      script: 'node server.js',
      instances: 1,
      autorestart: true,
      watch: false,
      max_memory_restart: '180M',
      env: {
        PORT: 2323,
        NODE_ENV: 'production',
        NEXT_SHARP_PATH: process.env.NEXT_SHARP_PATH,
        "NEXT_PUBLIC_API_URL": "https://dawnmagnet.xyz/api/v2",
        "NEXT_PUBLIC_GATEWAY_URL": "https://dawnmagnet.xyz/",
        "NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY": "pk_test_*********",
        "CLERK_SECRET_KEY": "sk_test_********",
        "NEXT_PUBLIC_CLERK_SIGN_IN_URL": "/sign-in",
        "NEXT_PUBLIC_CLERK_SIGN_UP_URL": "/sign-up",
        "NEXT_PUBLIC_CLERK_AFTER_SIGN_IN_URL": "/",
        "NEXT_PUBLIC_CLERK_AFTER_SIGN_UP_URL": "/"
      },
      log_date_format: 'YYYY-MM-DD HH:mm:ss',
    },
  ],
}

其中有个东西需要你去申请,clerk是用于接入账户登陆的,有了这个别人就可以评论你的博客了

打开https://dashboard.clerk.com/,注册个账号,点击新建应用(右边是我新建好的)

clerk官网截图

clerk官网截图

新建好之后,就可以在左边栏的API Keys看到你的这两个东西了

clerk API页面截图

clerk API页面截图
NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY=pk_test_******
CLERK_SECRET_KEY=sk_test_******

将这两个复制到你的ecosystem.config.js里面即可

配置完毕之后,就可以启动前端了,一般来说,安装配置好pm2之后,只需要在standalone目录下执行pm2 start即可,可以通过pm2 log查看相关日志

大功告成了!

  • Loading...
  • Loading...
  • Loading...
  • Loading...
  • Loading...