3ecd3d75d4
Add implementation progress reports, review reports (CTO/quality/deploy), session log, signoff table, team roster, collaboration charter, tech-stack evaluation and inventory, research reports. Remove obsolete multisync_server.py. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
14 KiB
14 KiB
Nexus 部署指南 — Ubuntu 20.04 / 22.04 / 24.04
项目: Nexus — 服务器运维管理平台
版本: 6.0.0
技术栈: Python 3.12+ / FastAPI / Async SQLAlchemy / MySQL 8.4 / Redis 7 / PHP 8.2+ / Nginx
生产域名:api.synaglobal.vip(强制 HTTPS)
网站目录:/www/wwwroot/api.synaglobal.vip
更新日期: 2026-05-20
1. 系统依赖修复(⚠️ 首先运行)
Ubuntu 服务器部署时经常缺少编译和运行依赖。在安装任何服务之前,先运行以下命令修复所有基础依赖:
1.1 一键修复脚本
#!/bin/bash
# Nexus — Ubuntu 系统依赖一键修复脚本
# 适用于 Ubuntu 20.04 / 22.04 / 24.04
# 用法: sudo bash fix-deps.sh
set -e
echo "===== Nexus 系统依赖修复 ====="
# 更新软件源
apt update
# ── 核心编译工具 ──
apt install -y \
build-essential \
cmake \
autoconf \
automake \
libtool \
pkg-config \
gcc \
g++ \
make \
git \
curl \
wget \
unzip \
ca-certificates \
gnupg
# ── 通用开发库(所有组件共享)──
apt install -y \
libssl-dev \
libxml2-dev \
libcurl4-openssl-dev \
zlib1g-dev \
libpcre3-dev \
libpcre2-dev \
libbz2-dev \
libzip-dev \
liblz4-dev \
libzstd-dev \
liblzma-dev \
libffi-dev \
libncurses5-dev \
libncursesw5-dev \
libreadline-dev \
libsqlite3-dev \
libicu-dev \
libbrotli-dev
# ── Nginx 专用依赖 ──
apt install -y \
libgd-dev \
libgeoip-dev \
libxslt1-dev
# ── PHP 8.x 专用依赖 ──
apt install -y \
libonig-dev \
libsodium-dev \
libargon2-dev \
libjpeg-dev \
libpng-dev \
libfreetype6-dev \
libwebp-dev \
libgmp-dev \
libtidy-dev \
libpq-dev \
default-libmysqlclient-dev
# ── MySQL 8.4 专用依赖 ──
apt install -y \
bison \
gperf \
libevent-dev \
libnuma-dev \
libaio-dev \
protobuf-compiler \
libprotobuf-dev
# ── Python 3.12+ 专用依赖 ──
apt install -y \
libgdbm-dev \
libgdbm-compat-dev \
libmpdec-dev \
uuid-dev
# ── Redis 7 专用依赖 ──
apt install -y \
libjemalloc-dev
echo "===== 依赖修复完成 ====="
1.2 手动逐项安装(如果脚本不适用)
按组件分类的依赖列表:
通用依赖(所有组件都需要)
sudo apt install -y build-essential cmake autoconf automake libtool pkg-config \
gcc g++ make git curl wget unzip ca-certificates gnupg \
libssl-dev libxml2-dev libcurl4-openssl-dev zlib1g-dev \
libpcre3-dev libpcre2-dev libbz2-dev libzip-dev \
liblz4-dev libzstd-dev liblzma-dev libffi-dev \
libncurses5-dev libncursesw5-dev libreadline-dev \
libsqlite3-dev libicu-dev libbrotli-dev
Nginx 专用
sudo apt install -y libgd-dev libgeoip-dev libxslt1-dev
PHP 8.x 专用
sudo apt install -y libonig-dev libsodium-dev libargon2-dev \
libjpeg-dev libpng-dev libfreetype6-dev libwebp-dev \
libgmp-dev libtidy-dev libpq-dev default-libmysqlclient-dev
MySQL 8.4 专用
sudo apt install -y bison gperf libevent-dev libnuma-dev \
libaio-dev protobuf-compiler libprotobuf-dev
Python 3.12+ 专用
sudo apt install -y libgdbm-dev libgdbm-compat-dev \
libmpdec-dev uuid-dev
Redis 专用
sudo apt install -y libjemalloc-dev
2. 服务安装
2.1 Nginx
# 方式 A: apt 直接安装(推荐)
sudo apt install -y nginx
# 方式 B: 编译安装(需要更多自定义模块时)
# 编译依赖已在 1.1 中安装
wget http://nginx.org/download/nginx-1.26.2.tar.gz
tar -xzf nginx-1.26.2.tar.gz
cd nginx-1.26.2
./configure --prefix=/usr/local/nginx \
--with-http_ssl_module \
--with-http_v2_module \
--with-http_realip_module \
--with-http_gzip_static_module \
--with-http_brotli_module \
--with-stream \
--with-stream_ssl_module
make && sudo make install
2.2 MySQL 8.4 LTS
# 方式 A: apt 安装(推荐 — MySQL 官方 APT 源)
wget https://dev.mysql.com/get/mysql-apt-config_0.8.33-1ubuntu_all.deb
sudo dpkg -i mysql-apt-config_0.8.33-1ubuntu_all.deb
# 在配置界面选择 mysql-8.4-lts
sudo apt update
sudo apt install -y mysql-server mysql-client
# 安全初始化
sudo mysql_secure_installation
# 方式 B: 宝塔面板一键安装
# 在宝塔面板 → 软件商店 → MySQL 8.4 → 安装
2.3 Redis 7
# 方式 A: apt 安装
sudo apt install -y redis-server
# 方式 B: 编译安装(最新版本)
wget https://github.com/redis/redis/archive/refs/tags/7.4.2.tar.gz
tar -xzf 7.4.2.tar.gz
cd redis-7.4.2
make MALLOC=jemalloc
sudo make install
# 启动
redis-server --daemonize yes
2.4 PHP 8.2+
# 方式 A: apt 安装(Ubuntu 22.04+ 默认有 PHP 8.1)
sudo apt install -y php8.2 php8.2-fpm php8.2-cli \
php8.2-mysql php8.2-redis php8.2-gd php8.2-mbstring \
php8.2-xml php8.2-zip php8.2-curl php8.2-bz2 \
php8.2-intl php8.2-opcache php8.2-json php8.2-readline
# 如果需要 PHP 8.3(更新版本):
sudo add-apt-repository -y ppa:ondrej/php
sudo apt update
sudo apt install -y php8.3 php8.3-fpm php8.3-cli \
php8.3-mysql php8.3-redis php8.3-gd php8.3-mbstring \
php8.3-xml php8.3-zip php8.3-curl php8.3-bz2 \
php8.3-intl php8.3-opcache
# 方式 B: 宝塔面板安装
# 宝塔面板 → 软件商店 → PHP 8.2/8.3 → 安装
2.5 Python 3.12+
# 方式 A: apt 安装(Ubuntu 24.04 默认有 Python 3.12)
sudo apt install -y python3.12 python3.12-dev python3.12-venv \
python3-pip python3-venv
# Ubuntu 22.04 需要添加 deadsnakes PPA:
sudo add-apt-repository -y ppa:deadsnakes/ppa
sudo apt update
sudo apt install -y python3.12 python3.12-dev python3.12-venv
# 方式 B: 编译安装
wget https://www.python.org/ftp/python/3.12.7/Python-3.12.7.tar.xz
tar -xf Python-3.12.7.tar.xz
cd Python-3.12.7
./configure --enable-optimizations --with-ensurepip=install
make -j$(nproc)
sudo make altinstall # altinstall 防止覆盖系统 python3
3. Nexus 项目部署
3.1 克隆仓库
cd /opt
git clone http://66.154.115.8:3000/admin/Nexus.git
cd Nexus
3.2 Python 环境配置
# 创建虚拟环境
python3.12 -m venv venv
source venv/bin/activate
# 安装 Python 依赖
pip install -r requirements.txt
# 如果 pip 安装遇到编译错误(缺少依赖),回到步骤 1 修复依赖后重新安装
3.3 配置文件
# 复制配置模板
cp .env.example .env
# 编辑 .env 文件
nano .env
.env 必填项(⚠️ .env 文件不会被提交到 Git,已在 .gitignore 中排除):
# ⚠️ SECRET_KEY 必须设置,否则 Nexus 无法启动
NEXUS_SECRET_KEY=<生成一个随机密钥: python3 -c "import secrets; print(secrets.token_urlsafe(32))">
# 数据库连接(aiomysql 驱动)
NEXUS_DATABASE_URL=mysql+aiomysql://Nexus:<你的密码>@127.0.0.1:3306/Nexus
# Redis
NEXUS_REDIS_URL=redis://127.0.0.1:6379/0
# API Key(Agent 认证用)
NEXUS_API_KEY=<生成: python3 -c "import secrets; print(secrets.token_urlsafe(24))">
⚠️ 安全提示:
.env文件包含密码和密钥,绝不能提交到 Git。项目.gitignore已排除.env。
3.4 创建 MySQL 数据库
sudo mysql -u root -p
# 在 MySQL 中执行:
CREATE DATABASE Nexus CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'Nexus'@'localhost' IDENTIFIED BY '<你的数据库密码>';
GRANT ALL PRIVILEGES ON Nexus.* TO 'Nexus'@'localhost';
FLUSH PRIVILEGES;
EXIT;
注意: Nexus 启动时会自动创建所有数据表(
Base.metadata.create_all),无需手动建表。
3.5 启动 Nexus
# 方式 A: 直接运行(开发/调试)
source venv/bin/activate
uvicorn server.main:app --host 0.0.0.0 --port 8600
# 方式 B: Supervisor 守护进程(生产环境推荐)
sudo apt install -y supervisor
# 创建 supervisor 配置
sudo nano /etc/supervisor/conf.d/nexus.conf
nexus.conf 内容:
[program:nexus]
command=/www/wwwroot/api.synaglobal.vip/venv/bin/uvicorn server.main:app --host 0.0.0.0 --port 8600 --workers 4
directory=/www/wwwroot/api.synaglobal.vip
user=root
autostart=true
autorestart=true
stderr_logfile=/var/log/nexus/error.log
stdout_logfile=/var/log/nexus/access.log
# ⚠️ 不要在这里硬编码密码!Supervisor 配置文件可能被其他用户读取
# 改用 .env 文件方式:uvicorn 会自动读取 .env
sudo supervisorctl reread
sudo supervisorctl update
sudo supervisorctl start nexus
3.6 Nginx 反向代理配置
sudo nano /etc/nginx/sites-available/nexus
server {
listen 80;
server_name api.synaglobal.vip;
# 强制 HTTPS
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl http2;
server_name api.synaglobal.vip;
# SSL证书(宝塔面板 → 网站 → SSL → Let's Encrypt 一键申请)
# 证书路径在宝塔面板申请后自动生成,以下为宝塔默认路径:
ssl_certificate /www/server/panel/vhost/cert/api.synaglobal.vip/fullchain.pem;
ssl_certificate_key /www/server/panel/vhost/cert/api.synaglobal.vip/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
# Nexus API
location /api/ {
proxy_pass http://127.0.0.1:8600;
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;
proxy_read_timeout 300s;
proxy_send_timeout 300s;
}
# Nexus OpenAPI 文档
location /docs {
proxy_pass http://127.0.0.1:8600;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
# Nexus WebSocket
location /ws/ {
proxy_pass http://127.0.0.1:8600;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header X-Real-IP $remote_addr;
}
# Nexus 新前端(Tailwind CSS v4)
location /app/ {
root /www/wwwroot/api.synaglobal.vip;
try_files $uri $uri/ /app/login.html;
}
# PHP 页面(旧前端,逐步弃用)
location / {
root /www/wwwroot/api.synaglobal.vip;
index index.php;
try_files $uri $uri/ /index.php?$query_string;
location ~ \.php$ {
fastcgi_pass unix:/tmp/php-cgi-82.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
}
sudo ln -s /etc/nginx/sites-available/nexus /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
4. 依赖冲突排查
4.1 常见问题
| 问题 | 原因 | 解决方案 |
|---|---|---|
pip install 报错 libbrotli |
缺少 libbrotli-dev |
sudo apt install -y libbrotli-dev |
pip install 报错 libssl |
缺少 libssl-dev |
sudo apt install -y libssl-dev |
pip install 报错 libcurl |
缺少 libcurl4-openssl-dev |
sudo apt install -y libcurl4-openssl-dev |
PHP mbstring 编译失败 |
缺少 libonig-dev |
sudo apt install -y libonig-dev |
PHP xml/dom 编译失败 |
缺少 libxml2-dev |
sudo apt install -y libxml2-dev |
PHP zip 编译失败 |
缺少 libzip-dev |
sudo apt install -y libzip-dev |
libcurl4-openssl-dev 与 libcurl4-nss-dev 冲突 |
不能同时安装两个 curl dev 包 | sudo apt remove libcurl4-nss-dev && sudo apt install libcurl4-openssl-dev |
MySQL 编译报错缺少 bison/gperf |
缺少 MySQL 编译依赖 | sudo apt install -y bison gperf |
Python decimal 模块报错 |
缺少 libmpdec-dev(Python 3.12+ 新依赖) |
sudo apt install -y libmpdec-dev |
4.2 快速检查缺少的依赖
# 检查某个库是否已安装
dpkg -l | grep libbrotli-dev
apt-cache search libbrotli
# 查看某个 pip 包需要哪些系统依赖
pip show <package-name>
5. 版本兼容性参考
| 组件 | Ubuntu 20.04 | Ubuntu 22.04 | Ubuntu 24.04 | 说明 |
|---|---|---|---|---|
| Python | 3.8 (系统) → 需 deadsnakes PPA 安装 3.12 | 3.10 (系统) → deadsnakes PPA 安装 3.12 | 3.12 (系统) | 推荐 3.12+ |
| MySQL | 8.0 (系统) → 可手动安装 8.4 | 8.0 (系统) → 可手动安装 8.4 | 8.4 可用 | 推荐 8.4 LTS |
| Redis | 6.x (系统) → 需编译 7.x | 6.x→7.x (系统) | 7.x (系统) | 推荐 7.0+ |
| PHP | 7.4 (系统) → 需 ondrej PPA 安装 8.2 | 8.1 (系统) → 需 PPA 安装 8.2/8.3 | 8.3 (系统) | 推荐 8.2+ |
| Nginx | 1.18 (系统) → 可编译最新 | 1.22 (系统) → 可编译最新 | 1.24 (系统) | 推荐 1.24+ |
6. 宝塔面板部署(推荐新手)
如果使用宝塔面板,大部分依赖和软件安装可以一键完成:
- 安装宝塔面板:
wget -O install.sh https://download.bt.cn/install/install-ubuntu_6.0.sh && sudo bash install.sh ed848235 - 宝塔面板 → 软件商店 → 安装: Nginx / MySQL 8.4 / Redis 7 / PHP 8.2
- 创建网站 → 设置根目录为
/opt/Nexus/web - 配置反向代理 → 将
/api/代理到127.0.0.1:8600 - SSL → Let's Encrypt 一键申请
宝塔面板会自动安装大部分系统依赖,但 Python pip 依赖仍需手动处理。如果 pip 安装报错,回到步骤 1 安装缺失的
-dev包。
7. 验证部署
# 检查 Nexus API 是否运行
curl http://127.0.0.1:8600/docs # 应返回 OpenAPI 文档页面
# 检查数据库连接
curl http://127.0.0.1:8600/api/settings/ # 应返回设置列表(初始为空)
# 检查 HTTPS(域名验证)
curl https://api.synaglobal.vip/docs # 应返回 OpenAPI 文档页面
``