如何在个人服务器(阿里云/腾讯云等)安装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/,注册个账号,点击新建应用(右边是我新建好的)
新建好之后,就可以在左边栏的API Keys
看到你的这两个东西了
NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY=pk_test_******
CLERK_SECRET_KEY=sk_test_******
将这两个复制到你的ecosystem.config.js
里面即可
配置完毕之后,就可以启动前端了,一般来说,安装配置好pm2
之后,只需要在standalone
目录下执行pm2 start
即可,可以通过pm2 log
查看相关日志
大功告成了!