增加env
This commit is contained in:
+80
-2
@@ -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`。
|
||||
|
||||
---
|
||||
|
||||
## 十、数据与备份
|
||||
|
||||
Reference in New Issue
Block a user