Files
SalesPipeline/deploy/1panel-setup.md
2026-01-09 19:14:41 +08:00

230 lines
4.6 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 1Panel 部署指南 - SalesPipeline
## 系統需求
- Python 3.10+
- Node.js 18+ (僅用於建置前端)
- MySQL 5.7+ / 8.0+
---
## 部署步驟
### 1. 上傳專案
將專案上傳至伺服器,例如:`/opt/salespipeline`
```bash
# 建立專案目錄
mkdir -p /opt/salespipeline
cd /opt/salespipeline
# 上傳或 clone 專案
# git clone <your-repo> .
```
### 2. 設定 Python 虛擬環境
```bash
cd /opt/salespipeline/backend
# 建立虛擬環境
python3 -m venv venv
# 啟動虛擬環境
source venv/bin/activate
# 安裝依賴
pip install -r requirements.txt
```
### 3. 設定環境變數
```bash
# 複製範本
cp .env.example .env
# 編輯環境變數
nano .env
```
編輯 `.env` 檔案:
```env
# Database Configuration
DB_HOST=your_mysql_host
DB_PORT=3306
DB_USER=your_user
DB_PASSWORD=your_password
DB_DATABASE=your_database
# JWT Configuration
SECRET_KEY=<更換為強密碼>
ALGORITHM=HS256
ACCESS_TOKEN_EXPIRE_MINUTES=1440
# Application Settings
APP_HOST=0.0.0.0
APP_PORT=8000
WORKERS=2
DEBUG=False
# CORS Settings (開發時使用)
CORS_ORIGINS=http://localhost:3000,http://127.0.0.1:3000
```
### 4. 建置前端
```bash
cd /opt/salespipeline/frontend
# 安裝依賴
npm install
# 建置 (輸出至 backend/static)
npm run build
```
### 5. 初始化資料庫
資料庫表會在應用程式首次啟動時自動建立。
### 6. 設定 Systemd 服務
建立服務檔案 `/etc/systemd/system/salespipeline.service`
```ini
[Unit]
Description=SalesPipeline Application
After=network.target
[Service]
Type=simple
User=www-data
Group=www-data
WorkingDirectory=/opt/salespipeline/backend
Environment="PATH=/opt/salespipeline/backend/venv/bin"
EnvironmentFile=/opt/salespipeline/backend/.env
ExecStart=/opt/salespipeline/backend/venv/bin/python run.py
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target
```
啟動服務:
```bash
# 重新載入 systemd
sudo systemctl daemon-reload
# 啟動服務
sudo systemctl start salespipeline
# 設定開機自啟
sudo systemctl enable salespipeline
# 查看狀態
sudo systemctl status salespipeline
# 查看日誌
sudo journalctl -u salespipeline -f
```
---
## 1Panel 設定
### 方案 A直接使用 Python 網站 (推薦)
1. 進入 1Panel 控制台
2. 網站 → 建立網站 → Python 專案
3. 設定:
- 專案路徑:`/opt/salespipeline/backend`
- Python 版本3.10
- 啟動命令:`/opt/salespipeline/backend/venv/bin/python run.py`
- Port`.env` 中的 `APP_PORT` 設定
### 方案 B使用反向代理
1. 建立 Systemd 服務 (如上述步驟 6)
2. 1Panel → 網站 → 建立網站 → 反向代理
3. 設定:
- 網站域名your-domain.com
- 代理地址:`http://127.0.0.1:<APP_PORT>` (依 .env 設定)
---
## 目錄結構
```
/opt/salespipeline/
├── backend/
│ ├── app/ # 應用程式碼
│ ├── data/ # 資料目錄 (上傳檔案)
│ ├── static/ # 前端建置檔案
│ ├── venv/ # Python 虛擬環境
│ ├── .env # 環境變數
│ ├── requirements.txt
│ └── run.py # 啟動腳本
└── frontend/
├── src/
├── package.json
└── ...
```
---
## 環境變數說明
| 變數名稱 | 說明 | 預設值 |
|---------|------|--------|
| DB_HOST | 資料庫主機 | localhost |
| DB_PORT | 資料庫端口 | 3306 |
| DB_USER | 資料庫使用者 | root |
| DB_PASSWORD | 資料庫密碼 | - |
| DB_DATABASE | 資料庫名稱 | sales_pipeline |
| SECRET_KEY | JWT 密鑰 | - |
| ALGORITHM | JWT 演算法 | HS256 |
| ACCESS_TOKEN_EXPIRE_MINUTES | Token 過期時間(分鐘) | 1440 |
| APP_HOST | 應用監聽地址 | 0.0.0.0 |
| APP_PORT | 應用監聽端口 | 8000 |
| WORKERS | 工作進程數 | 1 |
| DEBUG | 除錯模式 | False |
| TABLE_PREFIX | 資料表前綴 | PJ_SOA_ |
| CORS_ORIGINS | 允許的跨域來源 | - |
---
## 常用指令
```bash
# 啟動服務
sudo systemctl start salespipeline
# 停止服務
sudo systemctl stop salespipeline
# 重啟服務
sudo systemctl restart salespipeline
# 查看日誌
sudo journalctl -u salespipeline -f
# 更新程式碼後重建
cd /opt/salespipeline/frontend && npm run build
sudo systemctl restart salespipeline
```
---
## 故障排除
### 連線資料庫失敗
1. 確認 `.env` 中的資料庫連線資訊正確
2. 確認防火牆允許連接資料庫 Port
### 無法存取網站
1. 確認服務正在運行:`systemctl status salespipeline`
2. 確認 APP_PORT 未被佔用
3. 檢查防火牆設定
### 靜態檔案 404
確認前端已建置:`ls /opt/salespipeline/backend/static/`