赞
踩
【环境】
【安装方式】
安装步骤:
第1步:更新yum源
cd /etc/yum.repos.d/
sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-*
sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-*
wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repo
yum clean all
yum update
# 安装编译依赖
yum install -y libffi-devel zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel xz-devel
[root@VM-4-2-centos ~]# pwd
/root
[root@VM-4-2-centos ~]# wget https://www.python.org/ftp/python/3.10.4/Python-3.10.4.tgz
[root@VM-4-2-centos ~]# tar -xzvf Python-3.10.4.tgz
[root@VM-4-2-centos ~]# ls
Python-3.10.4 Python-3.10.4.tgz
cd Python-3.10.4
./configure --prefix=/usr/local/bin/python310
make && make install
ln -s /usr/local/bin/python310/bin/python3.10 /usr/bin/python3.10
ln -s /usr/local/bin/python310/bin/pip3.10 /usr/bin/pip3.10
uvicorn main:app --host 127.0.0.1 --port 8080
部署准备:
# main.py
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def index():
return {"message": "Hello World"}
部署流程
第1步:使用xshell连接远程服务器,进入/root(如果是root用户,进去后默认就是/root目录)
第2步:在linux服务器上安装python3.10,安装项目的依赖,比如: fastapi、uvicorn等
第3步:确保项目在本地可以跑起来,uvicorn main:app --host 127.0.0.1 --port 8080
第4步:使用xftp将本地的main.py文件拷贝到远程服务器的 /root目录下
第5步:使用命令启动服务,注意 --host这里不要使用 0.0.0.0,也不要使用公网IP
uvicorn main:app --host 0.0.0.0 --port 8080 # --host 0.0.0.0
# 如果上述命令报错,则需要添加环境变量
export PATH="/usr/local/bin/python310/bin:$PATH"
第6步:在云服务器的管理页面的安全组或者防火墙,放行8080端口
第7步:在本地浏览器,输入云服务器的公网IP:8080,然后回车, 即可访问服务
http://公网IP:8080
直接使用上述部署方式,是一种前台运行方式,一旦退出shell,则服务就挂掉了,因此我们需要使用一种后台运行的方式。
本节课,给大家接收一种常用的后台运行方式,即使用systemd部署服务。
部署流程
cd /etc/systemd/system/ vim simple_app.service # 新建名为 simple_app.service的文件, 将并将下面的内容拷贝进去然后保存退出 [Unit] Description=Simple app Service [Service] Type=oneshot ExecStart=/usr/local/bin/python310/bin/python3.10 /root/main.py StandardOutput=syslog StandardError=inherit [Install] WantedBy=multi-user.target
# /root/main.py
import uvicorn
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def index():
return {"message": "Hello World"}
uvicorn.run(app, host="0.0.0.0", port=8080)
systemctl enable simple_app.service
systemctl start simple_app.service
systemctl stop simple_app.service
systemctl status simple_app.service
使用systemd部署其实已经非常好的管理服务了,但是你会发现它依赖本地环境,比如依赖本地Pyhton解释器等等。
如果想要一个完全独立的运行环境,我们可以使用容器化的方式部署我们的服务。
这节课,我们就来看下如何使用Docker的方式部署服务。
还是针对这个简单的服务
# /root/main.py
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def index():
return {"message": "Hello World"}
部署前提,安装好docker
使用Docker部署流程
- docker_app
|- main.py # fastapi的服务
|- requirements.txt # 项目依赖,比如 fastapi/uvicorn等
pip3.10 freeze > ./requirements.txt
第3步:编写Dockerfile
FROM python:3.10-slim
COPY . /var/www/src
WORKDIR /var/www/src
RUN pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
CMD ["/usr/local/bin/uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8080"]
第4步:构建镜像
docker build -t docker_app:v1.0 .
docker images
docker run -d --rm -p8080:8080 镜像id
【提示:使用容器部署时记得先把上节课的 systemd部署的服务关了,避免都是8080端口冲突了】
使用docker可以方便的部署我们的服务,并且可以做到相对环境隔离。
不过你可能会遇到以下场景:
前提:在服务器上安装好docker-compose
准备项目
docker-compose部署项目流程
version: "3.9" services: mysql: image: percona:5.7 environment: MYSQL_DATABASE: app MYSQL_USER: app MYSQL_PASSWORD: app MYSQL_ROOT_PASSWORD: app command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci web: build: . volumes: - .:/var/www/src depends_on: - mysql command: sh -c "/usr/local/bin/uvicorn main:app --reload --host=0.0.0.0 --port=8080" ports: - "0.0.0.0:8080:8080"
# darabase.py import pymysql from sqlalchemy import create_engine from sqlalchemy.orm import sessionmaker, Session pymysql.install_as_MySQLdb() # 根据docker-compose.yml中mysql的环境变量做如下修改: # 用户名改为 app # 密码改为 app # 数据库IP改为 mysql # 数据库名改为 app DATABASE_URL = "mysql://app:app@mysql:3306/app" engine = create_engine(DATABASE_URL) SessionLocal = sessionmaker(bind=engine) def get_db(): db: Session = SessionLocal() try: yield db finally: db.close()
docker-compose up -d # 启动服务
docker-compose ps # 查看容器运行状态
docker-compose restart # 重启服务
docker-compose stop # 暂停服务
docker-compose down # 彻底删除服务
【完整代码见课程素材】
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。