增加env

This commit is contained in:
dekun
2026-05-12 15:38:27 +08:00
parent 895e1bed0f
commit 6280480e48
7 changed files with 170 additions and 2 deletions
+80 -2
View File
@@ -47,6 +47,9 @@
├── models.py # 数据模型(用户、分组、服务)
├── forms.py # 表单定义
├── requirements.txt # Python 依赖列表
├── .env.example # 环境变量模板(复制为 .env 后修改)
├── .env # 本地配置(自建,勿提交 Git)
├── ecosystem.config.cjs # PM2 守护进程配置
├── nav_local.db # SQLite 数据库(首次成功运行后生成,勿手误提交到公开仓库)
├── static/
│ └── style.css # 样式
@@ -62,7 +65,22 @@
---
## 五、环境变量说明
## 五、环境变量与 `.env` 文件
程序启动时会从 **与 `app.py` 同目录**`.env` 文件加载变量(依赖 `python-dotenv`)。**若 `.env` 不存在则跳过,不影响启动。**
**优先级**:操作系统或进程里 **已经设置** 的环境变量 **优先**`.env` 中的键 **不会覆盖** 已有变量(与 `python-dotenv` 默认行为一致)。便于在 systemd 里写死 `NAV_SECRET_KEY`,本地开发仍用 `.env` 填其他项。
**初次使用:**
```bash
cp .env.example .env
# 编辑 .env,至少设置 NAV_SECRET_KEY(长期运行强烈建议)
```
`.env` 含敏感信息,已列入 `.gitignore`,请勿提交到公开仓库;仓库内仅保留 **`.env.example`** 作模板。
### 5.1 变量一览
| 变量名 | 含义 | 默认值 |
|--------|------|--------|
@@ -122,8 +140,16 @@ pip install -r requirements.txt -i https://pypi.org/simple
### 6.3 直接启动(开发 / 小范围内网)
若已用 `.env` 配置 `NAV_SECRET_KEY` 等,可直接:
```bash
export NAV_SECRET_KEY="$(openssl rand -hex 32)" # Linux,建议每次部署写进 systemd 环境文件
python app.py
```
否则可临时用环境变量(与 `.env` 二选一或混用,见上文优先级):
```bash
export NAV_SECRET_KEY="$(openssl rand -hex 32)" # Linux;长期部署也可写进 systemd 的 EnvironmentFile
python app.py
```
@@ -227,6 +253,8 @@ sudo chmod 600 /etc/nav-site/secret_key
后续由 systemd 读取该文件并注入 `NAV_SECRET_KEY`(见下节)。
**替代做法**:也可在项目根目录放置 `.env`(建议 `chmod 600 .env`),`WorkingDirectory` 指向项目根时程序会自动加载。若 systemd 的 `Environment` / `EnvironmentFile` 里已设置同名变量,**以 systemd 为准**`.env` 不会覆盖已有环境变量)。
### 9.4 使用 systemd 常驻运行(推荐)
创建服务文件(仍使用内置 `python app.py` 时示例;若改用 Gunicorn,将 `ExecStart` 改为 gunicorn 命令即可):
@@ -315,6 +343,56 @@ ExecStart=/opt/nav-site/.venv/bin/gunicorn -w 2 -b 0.0.0.0:5000 app:app
说明:`-w 2` 为 worker 数量,可按机器 CPU 调整;`app:app` 表示 `app.py` 中的全局变量 `app`
### 9.7 使用 PM2 守护进程(可选)
适合已安装 [PM2](https://pm2.keymetrics.io/) 的环境(常见于用 Node 的服务器上顺带托管 Python 进程)。项目根目录提供 **`ecosystem.config.cjs`**,用虚拟环境里的 Python 直接运行 **`app.py`**(与手动 `python app.py` 一致),**实例数固定为 1**(Flask 内置开发服务器不宜多进程监听同一端口)。
**1. 安装 PM2(若尚未安装,需本机已有 Node.js / npm**
```bash
sudo npm install -g pm2
```
**2. 准备虚拟环境与依赖(项目根目录)**
```bash
cd /opt/nav-site # 或你的项目路径
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt -i https://pypi.org/simple
cp -n .env.example .env && nano .env # 至少配置 NAV_SECRET_KEY
```
**3. 启动 / 查看 / 维护**
```bash
cd /opt/nav-site
pm2 start ecosystem.config.cjs
pm2 status
pm2 logs nav-site
```
日志文件默认写入项目下 **`logs/`** 目录(PM2 会自动创建;该目录已加入 `.gitignore`)。
**4. 开机自启(在目标机器上执行一次)**
```bash
pm2 save
pm2 startup
# 按终端里打印的 sudo 命令整行复制执行,再执行一次 pm2 save
```
**5. 常用命令**
| 命令 | 作用 |
|------|------|
| `pm2 restart nav-site` | 热重启(改代码或 .env 后) |
| `pm2 stop nav-site` | 停止 |
| `pm2 delete nav-site` | 从 PM2 列表移除 |
| `pm2 monit` | 简易监控 |
**说明**:若 `interpreter` 指向的 `.venv/bin/python` 不存在,PM2 会启动失败;请确认虚拟环境路径与 `ecosystem.config.cjs` 中一致。Windows 下脚本会自动使用 `.venv\Scripts\python.exe`
---
## 十、数据与备份