vscode连接Linux云服务器部署Fastapi项目

FastAPI系列:Ubuntu部署FastAPI项目实战

在这里插入图片描述

1. 项目准备

首先需要创建一个目录来存储代码。执行以下命令:

mkdir /home/fastapi_example
cd /home/fastapi_example

创建了目录,就需要设置虚拟环境。在Ubuntu中,你必须安装Python虚拟环境包:

sudo apt update
sudo apt install python3-venv

下一步是初始化并激活虚拟环境来运行你的代码:

python3 -m venv venv
source venv/bin/activate

现在,安装必要的python依赖包:

pip install fastapi uvicorn gunicorn

安装了必要的包,就需要创建应用程序文件。运行如下命令:

sudo nano main.py

也可以直接鼠标右键新建main.py文件

现在将我的Python代码添加到main.py文件中:

from fastapi import FastAPI, HTTPException
from pydantic import BaseModel
import uvicorn


class ComplexNumber(BaseModel):
    real: float
    imag: float

    def __add__(self, other):
        return ComplexNumber(real=self.real + other.real, imag=self.imag + other.imag)

    def __sub__(self, other):
        return ComplexNumber(real=self.real - other.real, imag=self.imag - other.imag)

    def __mul__(self, other):
        real = self.real * other.real - self.imag * other.imag
        imag = self.real * other.imag + self.imag * other.real
        return ComplexNumber(real=real, imag=imag)

    def __truediv__(self, other):
        if other.real == 0 and other.imag == 0:
            raise HTTPException(status_code=400, detail="Cannot divide by zero")
        real = (self.real * other.real + self.imag * other.imag) / (other.real ** 2 + other.imag ** 2)
        imag = (self.imag * other.real - self.real * other.imag) / (other.real ** 2 + other.imag ** 2)
        return ComplexNumber(real=real, imag=imag)


app = FastAPI()


@app.post("/add", response_model=ComplexNumber)
async def add_complex_numbers(num1: ComplexNumber, num2: ComplexNumber):
    return num1 + num2


@app.post("/subtract", response_model=ComplexNumber)
async def subtract_complex_numbers(num1: ComplexNumber, num2: ComplexNumber):
    return num1 - num2


@app.post("/multiply", response_model=ComplexNumber)
async def multiply_complex_numbers(num1: ComplexNumber, num2: ComplexNumber):
    return num1 * num2


@app.post("/divide", response_model=ComplexNumber)
async def divide_complex_numbers(num1: ComplexNumber, num2: ComplexNumber):
    if num2.real == 0 and num2.imag == 0:
        raise HTTPException(status_code=400, detail="Cannot divide by zero")
    return num1 / num2

2. 运行项目

Gunicorn是Python WSGI HTTP服务器,旨在为你的FastAPI应用程序提供服务。为了验证一切正常,在fastapi_example目录下使用以下命令运行临时API:

gunicorn main:app -k uvicorn.workers.UvicornWorker

接下来,打开另一个终端窗口

在这里插入图片描述

A`AP0X(5CW[_}23XD2%]4-1.png>)
点击新建窗口
在这里插入图片描述

点击这三个点,新建终端,执行如下命令:

curl http://localhost:8000

打开网址http://127.0.0.1:8000/docs,可以加载出界面如下:
在这里插入图片描述

3. 创建系统服务

创建系统服务来管理应用程序。这样做的好处是你可以轻松地启动、重新启动和停止应用程序。此外,当系统重新启动时,您的应用程序将自动启动。

仍然,在fastapi_example目录中,为Gunicorn创建一个配置文件:

sudo nano gunicorn_conf.py

在文件中粘贴下面代码:

# gunicorn_conf.py
from multiprocessing import cpu_count

bind = "127.0.0.1:8000"

# Worker Options
workers = cpu_count() + 1
worker_class = 'uvicorn.workers.UvicornWorker'

# Logging Options
loglevel = 'debug'
accesslog = '/home/fastapi_example/access_log'
errorlog =  '/home/fastapi_example/error_log'

除此之外,你需要新建两个日志文件access_log和error_log,不需要添加内容。

保存并退出该文件。现在我们必须在/etc/systemd/system目录中创建一个systemd单元文件。执行以下命令:

sudo nano /etc/systemd/system/fastapi_example.service

创建服务后,向其添加以下内容:

[Unit]
Description=Gunicorn Daemon for FastAPI example
After=network.target

[Service]
User=ubuntu
Group=www-data
WorkingDirectory=/home/fastapi_example
ExecStart=/home/fastapi_example/venv/bin/gunicorn -c gunicorn_conf.py main:app -k uvicorn.workers.UvicornWorker

[Install]
WantedBy=multi-user.target

保存并关闭文件。

4. 配置自动运行

4.1. 启动并启用fastapi_example服务(以便在服务器重启时自动启动)

在终端输入:

sudo systemctl start fastapi_example
sudo systemctl enable fastapi_example

4.2. 运行这个命令,检查服务是否正常工作

sudo systemctl status fastapi_example

这时候可能会报错,可能因为没有权限无法写入前面的两个日志文件access_log和error_log,报错如下:

在这里插入图片描述
在这里插入图片描述

这两个错误是一样的,终端运行下面的命令:

sudo chmod a+w /home/fastapi_example/access_log
sudo chmod a+w /home/fastapi_example/error_log

现在应该没什么问题了,再次运行步骤4.1和4.2:

在这里插入图片描述

5. 更改main.py的代码

此时,如果想要更改代码,或者换成另一个API项目,直接更改main.py的内容是不行的,还需要重新释放8000端口,或者部署别的端口。因为上一个代码的API还在占用8000端口,而且内容还和之前一样,并没有更改。下面是更改的方法:

首先,在终端运行下面的代码,目的是获取此时占用8000端口进程的PID号:

netstat -tunlp | grep 8000

结果如图:
在这里插入图片描述

此时端口号是15175,终端执行下面的命令释放端口:

sudo kill -9 13112

000端口,而且内容还和之前一样,并没有更改。下面是更改的方法:

首先,在终端运行下面的代码,目的是获取此时占用8000端口进程的PID号:

netstat -tunlp | grep 8000

结果如图:
[外链图片转存中…(img-ZVwJNly4-1747464260254)]
此时端口号是15175,终端执行下面的命令释放端口:

sudo kill -9 13112

再次执行4.1和4.2的命令,更改完成。

<think>我们正在处理用户的问题:“我想在VSCode连接远程服务器部署项目 请问VSCode 如何连接远程服务器部署项目” 根据系统指令,我们需要: 1. 使用中文回答 2. 行内数学表达式用$...$,独立公式用$$...$$ 3. 生成相关问题 4. 回答中引用的段落末尾添加引用标识 5. 回答结构清晰,逐步解决问题 同时,我们有三条引用: [^1]: 使用vscode提交项目到远程服务器_「效率」使用VScode连接远程服务器进行开发。...在VScode中编辑代码直接同步更新到服务器上... [^2]: vscode 连接远程服务器。...vscode 配合ssh 插件就可以实现远程到服务器... [^3]: vscode配置远程服务器开发。...vscode中安装该插件之后进行简单的配置即可成功连接远程服务器... 注意:这些引用是关于VSCode连接远程服务器的,但用户还要求部署项目。因此,我们需要在连接的基础上,说明如何部署项目(例如,通过终端命令进行部署操作)。 步骤: 1. 安装必要的插件(如Remote-SSH) 2. 配置远程服务器连接 3. 连接到远程服务器 4. 在远程服务器上打开项目文件夹(或上传项目) 5. 通过终端执行部署命令(例如,使用npm、docker、git等) 由于引用中没有直接提到部署项目,我们主要参考连接部分,部署部分需要根据常规操作补充。 回答结构: 1. 引言:简述使用VSCode连接远程服务器部署项目的便利性。 2. 步骤: a. 安装Remote-SSH插件 b. 配置SSH连接 c. 连接远程服务器 d. 打开远程文件夹(或上传项目) e. 部署项目(通过终端运行部署命令) 3. 注意事项 4. 生成相关问题 注意:部署项目的方式因项目类型不同而异(如Node.js项目Python项目等),我们给出一般步骤,并举例说明。 由于用户问题中提到了“部署项目”,我们假设用户已经有一个项目需要部署,并且远程服务器已经准备好环境(如Node.js、Python、Docker等)。 开始回答:</think>### VSCode连接远程服务器部署项目指南 #### 一、连接远程服务器 1. **安装必要插件** 在VSCode扩展商店搜索安装 `Remote - SSH` 和 `Remote Development` 插件[^2][^3]。 2. **配置SSH连接** - 按 `F1` 打开命令面板 → 输入 `Remote-SSH: Open Configuration File` - 添加服务器配置(示例): ``` Host MyServer HostName 192.168.1.100 # 服务器IP User ubuntu # 用户名 Port 22 # SSH端口 IdentityFile ~/.ssh/id_rsa # 密钥路径 ``` [^3] 3. **建立连接** 侧边栏点击远程资源管理器 → 选择配置的服务器 → 输入密码/密钥密码完成连接[^1]。连接成功后VSCode左下角显示 `SSH: 服务器名`。 #### 二、部署项目流程 ```mermaid graph LR A[本地开发] --> B[连接服务器] B --> C{项目存在?} C -->|是| D[直接打开项目] C -->|否| E[上传项目] D --> F[终端部署] E --> F F --> G[验证部署] ``` 1. **项目传输** - 已连接状态下:使用VSCode文件管理器直接拖拽文件到服务器目录 - 或使用终端命令: ```bash scp -r ./local_project user@server:/path/to/project ``` 2. **打开远程项目** 在远程服务器中通过 `文件 → 打开文件夹` 选择项目目录,所有操作将直接同步到服务器[^1]。 3. **执行部署** 打开集成终端(`` Ctrl+` ``),运行部署命令: ```bash # Node.js 示例 npm install npm run build pm2 start app.js # Python 示例 pip install -r requirements.txt gunicorn app:app -b 0.0.0.0:8000 ``` #### 三、高级部署技巧 1. **Docker容器部署** 安装 `Docker` 扩展后,可直接管理远程Docker: ```Dockerfile # Dockerfile 示例 FROM python:3.9 COPY . /app WORKDIR /app RUN pip install -r requirements.txt CMD ["gunicorn", "app:app", "-b", "0.0.0.0:8000"] ``` 终端执行:`docker build -t myapp . && docker run -p 8000:8000 myapp` 2. **自动化部署** 在 `.vscode/tasks.json` 中配置部署任务: ```json { "version": "2.0.0", "tasks": [{ "label": "Deploy", "type": "shell", "command": "git pull && npm run deploy", "problemMatcher": [] }] } ``` #### 四、常见问题解决 - **连接超时**:检查防火墙设置,确保SSH端口开放 - **权限拒绝**:运行 `chmod 600 ~/.ssh/id_rsa` 修复密钥权限 - **文件同步失败**:使用 `rsync -avz ./local_dir user@server:remote_dir` 手动同步 > 通过VSCode远程开发,您可以直接在服务器环境编码、调试和部署,文件修改实时同步,避免本地与服务器环境差异问题[^1][^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值