supervisor管理UWSGI+NGINX的项目部署

在开发机上的准备工作:
1、用pip freeze > requirements.txt将当前环境的包导出到requirements.txt文件中,方便部署的时候安装。
2、然后进入到项目中,使用以下命令做代码提交:

初始化一个仓库

  • git init

添加远程的仓库地址

  • git remote add origin xxx.git

添加所有的代码到缓存区

  • git add .

将代码提交到本地仓库

  • git commit -m ‘first commit’

从码云仓库上拉数据下来

  • git pull origin master --allow-unrelated-histories

将本地仓库中的代码提交到远程服务器的master分支上

  • git push origin master

在服务器上的准备工作:
1、pip install virtualenvwrapper,安装virtualenvwrapper,配置virtualenvwrapper的环境变量,并创建好项目要用到的虚拟环境:

首先通过which virtualenvwrapper.sh命令查看virtualenvwrapper.sh文件所在的路径。
在当前用户目录下创建.virtualenv文件夹,用来存放所有的虚拟环境目录。
在当前用户目录下编辑.bashrc文件,添加以下代码:

export WORKON_HOME=$HOME/.virtualenvs
source /usr/local/bin/virtualenvwrapper.sh
然后退出bashrc文件,输入命令source ~/.bashrc。

使用–python参数指定使用哪个Python文件。比如我的python3的路径是在/usr/bin/python3。那么示例代码如下:
mkvirtualenv --python=/usr/bin/python3 xxx-env

2、安装git:
sudo apt install git
使用git下载项目代码:

  • git init
  • git remote add origin address
  • git pull origin master

3、进入虚拟环境中,然后进入到项目所在的目录,执行命令:pip install -r requirements.txt,安装项目依赖的包

4、进入mysql数据库中,创建好项目的数据库。执行python manage.py makemigrations/migrate将模型映射到数据库中。

5、执行python manage.py runserver 0.0.0.0:8000,然后在自己电脑上访问这个网站,确保没有BUG。

6、在settings.py中的ALLOWED_HOST添加网站的域名或者ip地址。设置DEBUG=False,避免如果你的网站产生错误,而将错误信息暴漏给用户。
在settings.py中配置STATIC_ROOT,用来存储收集的静态文件。

7、收集静态文件的命令如下:python manage.py collectstatic

8、安装uwsgi:
uwsgi是一个应用服务器,非静态文件的网络请求就必须通过他完成,他也可以充当静态文件服务器,但不是他的强项。uwsgi是使用python编写的,因此通过pip3 install uwsgi就可以了。(uwsgi必须安装在系统级别的Python环境中,不要安装到虚拟环境中)。

9、安装和配置nginx:
通过apt install nginx即可安装。
虽然uwsgi可以正常的部署我们的项目了。但我们还是依然要采用nginx来作为web服务器。使用nginx来作为web服务器有以下好处:
uwsgi对静态文件资源处理并不好,包括响应速度,缓存等。
nginx作为专业的web服务器,暴露在公网上会比uwsgi更加安全一点。
运维起来更加方便。比如要将某些IP写入黑名单,nginx可以非常方便的写进去。而uwsgi可能还要写一大段代码才能实现。
启动:service nginx start
关闭:service nginx stop
重启:service nginx restart
测试配置文件:service nginx configtest

10、使用supervisor管理uwsgi进程:
让supervisor管理uwsgi,可以在uwsgi发生意外的情况下,会自动的重启。
因为supervisor是用python写成的,所以通过pip即可安装。
并且因为supervisor不支持python3,因此需要把supervisor安装在python2的环境中。
pip2 install supervisor。

使用命令supervisord -c supervisor.conf运行就可以了。
以后如果想要启动uwsgi,就可以通过命令supervisorctl -c supervisor.conf进入到管理控制台,然后可以执行相关的命令进行管理:
status # 查看状态
start program_name #启动程序
restart program_name #重新启动程序
stop program_name # 关闭程序
reload # 重新加载配置文件
quit # 退出控制台

写本文章是希望可以帮助到别人,也方便以后自己复习,有什么改进的地方,也希望博客朋友们提出宝贵的意见,也希望跟同行朋友们一起交流技术问题

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是将最简单的 Flask 应用程序部署到 Docker 容器中的步骤: 1. 准备 Flask 应用程序代码 在本地创建一个 Python 虚拟环境,安装 Flask 库,并编写一个最简单的 Flask 应用程序。例如,创建一个名为 `app.py` 的文件,包含以下代码: ```python from flask import Flask app = Flask(__name__) @app.route("/") def hello(): return "Hello, World!" if __name__ == "__main__": app.run(host='0.0.0.0', port=5000, debug=True) ``` 这个应用程序会在本地启动一个 Flask 服务器,监听在本地的 5000 端口上,并返回一个 "Hello, World!" 的响应。 2. 编写 Dockerfile 在本地项目根目录下创建一个名为 `Dockerfile` 的文件,并编写以下代码: ```Dockerfile FROM nvidia/cuda:11.3.1-cudnn8-devel-ubuntu20.04 # 安装系统依赖 RUN apt-get update && apt-get install -y nginx supervisor # 安装 Python 和 pip RUN apt-get install -y python3 python3-pip # 安装 Flask 库 RUN pip3 install Flask uwsgi # 拷贝应用程序代码到容器中 COPY app.py /app/ # 配置 Nginx RUN rm /etc/nginx/sites-enabled/default COPY nginx.conf /etc/nginx/sites-enabled/ # 配置 Supervisor COPY supervisor.conf /etc/supervisor/conf.d/ # 设置工作目录 WORKDIR /app # 启动 NginxSupervisor CMD ["supervisord", "-n"] ``` 这个 Dockerfile 使用了 nvidia/cuda:11.3.1-cudnn8-devel-ubuntu20.04 作为基础镜像,并安装了系统依赖、Python 和 Flask 库。然后,将应用程序代码拷贝到容器中,并配置了 NginxSupervisor。 3. 编写 Nginx 配置文件 在本地项目根目录下创建一个名为 `nginx.conf` 的文件,并编写以下代码: ```nginx server { listen 80; server_name localhost; location / { uwsgi_pass unix:///tmp/uwsgi.sock; include uwsgi_params; } } ``` 这个 Nginx 配置文件会监听容器的 80 端口,并将请求转发给 uWSGI。 4. 编写 Supervisor 配置文件 在本地项目根目录下创建一个名为 `supervisor.conf` 的文件,并编写以下代码: ```ini [supervisord] nodaemon=true [program:nginx] command=/usr/sbin/nginx -g "daemon off;" autostart=true autorestart=true [program:uwsgi] command=uwsgi --socket /tmp/uwsgi.sock --chmod-socket=666 --module app:app --callable app --master --processes 4 --threads 2 autostart=true autorestart=true ``` 这个 Supervisor 配置文件会启动 NginxuWSGI,并自动重启它们。 5. 构建 Docker 镜像 在终端中进入项目根目录,执行以下命令构建 Docker 镜像: ```bash docker build -t myflaskapp . ``` 其中,`myflaskapp` 是你给容器命名的名称。 6. 运行 Docker 容器 执行以下命令启动 Docker 容器: ```bash docker run -d --name myflaskapp -p 80:80 myflaskapp ``` 其中,`myflaskapp` 是容器的名称,`-p 80:80` 表示将容器的 80 端口映射到主机的 80 端口。 7. 测试 Flask 应用程序 在浏览器中访问 `http://localhost`,应该可以看到 "Hello, World!" 的响应。 这样就完成了将最简单的 Flask 应用程序部署到 Docker 容器中的过程。同时,使用了 uWSGI + Nginx + Supervisor 将其部署到生产环境中,实现了更好的性能和可靠性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值