Skip to the content.

AI部署前后端

轻量级书签管理系统部署与使用指南(AI编写)

项目概述

本项目旨在构建一个轻量级的书签管理系统,适合个人用户进行网址收藏与管理。系统采用单用户模式,以 SQLite 作为数据库存储书签信息,后端使用 Node.js 搭建服务,前端提供简单的交互界面。整体架构设计注重轻量化,以适应内存较小的服务器环境。

功能特性

  • 单用户管理:仅需一个用户账户即可完成书签的添加、删除、分类等操作。
  • 轻量化设计:对服务器内存要求低,整体内存占用小于 100MB。
  • 数据库支持:采用 SQLite 数据库,无需复杂的数据库管理系统。
  • 跨域支持:配置了跨域访问,方便前后端交互。
  • HTTPS 支持:可通过配置 SSL 证书实现 HTTPS 安全访问。

环境准备

服务器要求

  • 操作系统:建议使用基于 Debian 或 Ubuntu 的 Linux 发行版。
  • 内存:最低 512MB,推荐 1GB 及以上。
  • CPU:1 核及以上。

安装必要软件

# 更新系统软件包
sudo apt update && sudo apt upgrade -y

# 安装 Node.js 16.x
curl -fsSL https://deb.nodesource.com/setup_16.x | sudo -E bash -
sudo apt install -y nodejs

# 安装 SQLite
sudo apt install sqlite3

# 安装 Nginx
sudo apt install nginx

# 验证安装
node -v
npm -v
sqlite3 --version

项目部署

1. 克隆项目

cd /var/www
git clone https://github.com/1523090155/book.git project
cd project

2. 后端部署

安装依赖

cd backend
npm install

初始化数据库

sqlite3 database/database.db < database/init.sql

配置环境变量

backend 目录下创建 .env 文件,内容如下:

PORT=3000
DB_PATH=./database/database.db

启动后端服务

使用 PM2 管理后端服务,确保服务在后台稳定运行:

# 全局安装 PM2
npm install -g pm2

# 启动后端服务
pm2 start server.js --name backend

# 配置 PM2 开机自启
pm2 startup
pm2 save

3. 前端部署

配置 Nginx 虚拟主机

创建 Nginx 配置文件 /etc/nginx/sites-available/frontend,内容如下:

server {
    listen 80;
    server_name 140.82.5.217;  # 替换为你的服务器 IP 或域名
    root /var/www/project/frontend/public;
    index index.html;

    location / {
        proxy_pass http://127.0.0.1:3000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;

        # 允许跨域
        add_header 'Access-Control-Allow-Origin' '*';
        add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
        add_header 'Access-Control-Allow-Headers' 'Content-Type';

        # 处理预检请求
        if ($request_method = OPTIONS) {
            return 204;
        }
    }
}

激活配置:

# 创建软链接到 sites-enabled 目录
sudo ln -s /etc/nginx/sites-available/frontend /etc/nginx/sites-enabled/

# 检查 Nginx 配置文件语法
sudo nginx -t

# 重启 Nginx 服务
sudo systemctl restart nginx

直接启动静态服务器(可选)

若不想使用 Nginx,也可使用 http-server 直接提供静态文件服务:

# 全局安装 http-server
npm install -g http-server

# 启动静态服务器
http-server ./frontend/public

数据库操作

SQLite 操作

连接数据库

sqlite3 /var/www/project/backend/database.db

常用命令

  • 列出所有表:

      .tables
    
  • 查看 users 表结构:

      PRAGMA table_info(users);
    
  • 查询特定用户:

      SELECT * FROM users WHERE username = 'test';
    
  • 退出 SQLite CLI:

      .exit
    

MySQL 操作(可选)

若使用 MySQL 数据库,可参考以下常用命令:

  • 连接到 MySQL:

      mysql -u root -p
    
  • 查找所有数据库:

      SHOW DATABASES;
    
  • 进入指定数据库:

      USE cloud_nav;
    
  • 查找数据库中的所有表:

      SHOW TABLES;
    
  • 查看表结构:

      DESCRIBE 表名;
    
  • 查看表中的所有数据:

      SELECT * FROM 表名;
    

API 测试

登录测试

curl -X POST http://localhost:3000/login \
-H "Content-Type: application/json" \
-d '{"username": "test", "password": "123"}'

其他测试示例

curl -X POST -H "Content-Type: application/json" -d '{"username": "newuser", "password": "$2a$10$newlygeneratedhash"}' http://140.82.5.217/login
curl -X POST -H "Content-Type: application/json" -d '{"username": "newuser", "password": "newpassword"}' http://140.82.5.217/login

安全配置

SSL 证书配置

将 SSL 证书文件放置在以下路径:

/var/www/project/111600key.key
/var/www/project/111600cet.pem

然后修改 Nginx 配置文件,添加 HTTPS 支持:

server {
    listen 443 ssl;
    server_name 140.82.5.217;  # 替换为你的服务器 IP 或域名
    root /var/www/project/frontend/public;
    index index.html;

    ssl_certificate /var/www/project/111600cet.pem;
    ssl_certificate_key /var/www/project/111600key.key;

    location / {
        proxy_pass http://127.0.0.1:3000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;

        # 允许跨域
        add_header 'Access-Control-Allow-Origin' '*';
        add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
        add_header 'Access-Control-Allow-Headers' 'Content-Type';

        # 处理预检请求
        if ($request_method = OPTIONS) {
            return 204;
        }
    }
}

重启 Nginx 服务使配置生效:

sudo systemctl restart nginx

防火墙配置

建议使用防火墙限制非必要端口访问,例如使用 ufw

# 允许 SSH 连接
sudo ufw allow ssh

# 允许 HTTP 和 HTTPS 访问
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp

# 启用防火墙
sudo ufw enable

日常维护

服务监控

  • 查看 PM2 服务列表:

      pm2 list
    
  • 查看后端服务日志:

      pm2 logs backend
    
  • 重启后端服务:

      pm2 restart backend
    

数据库备份

为防止数据丢失,建议定期备份数据库:

sqlite3 /var/www/project/backend/database.db ".backup db_backup_$(date +%F).db"

项目结构

/var/www/project/
├── backend
│   ├── database
│   │   ├── database.db
│   │   └── init.sql
│   ├── .env
│   └── server.js
├── frontend
│   └── public
│       └── index.html
└── ...

常见问题与解决方案

  1. 后端服务无法启动
    • 检查依赖是否安装:确保 backend 目录下的依赖已正确安装,可再次执行 npm install
    • 查看日志文件:使用 pm2 logs backend 查看后端服务的日志,根据日志信息排查问题。
  2. Nginx 配置错误
    • 检查配置文件语法:使用 sudo nginx -t 检查 Nginx 配置文件的语法是否正确。
    • 查看 Nginx 日志:查看 /var/log/nginx/error.log 文件,获取详细的错误信息。
  3. 数据库连接失败
    • 检查数据库文件路径:确保 .env 文件中的 DB_PATH 配置正确。
    • 检查数据库文件权限:确保数据库文件具有正确的读写权限。

以上就是完整的项目部署与使用指南,按照上述步骤操作,您可以顺利搭建并运行轻量级书签管理系统。如有其他问题,请随时联系。

Categories: