阿里云ubuntu下部署python3 的 Uwsgi+Nginx+mysql+Supervisor+Virtualenv

直接上代码

一:把本地代码提交到github上(具体看上一篇)

1. cd xxx    #到你项目路径下
2. git init 	   #git 初始化
3. git add * #提交所有修改后的文件
4. git remote add origin http:xxx.git #你的远程仓库地址
5. git commit -w  # '提交 注释'
6. git push -u origin master  #push 提交

二:保证你的服务器安装了pip

1. sudo apt-get install python3-pip
#如果不行就先卸载 再安装
2. sudo apt-get remove python3-pip
2. sudo apt-get install python3-pip

三:服务器安装Mysql

#  一定记住 root 密码,还要在配置文件中设置字符为UTF8
1. apt-get update 或 sudo apt-get update #更新apt
2. sudo apt-get install mysql-server #安装mysql服务
3. 安装完mysql-server 会提示可以运行mysql_secure_installation。#[安全配置向导](https://blog.csdn.net/qq_32786873/article/details/78846008)
4. That is allowed by default on MySQL # 允许远程链接数据库
5. GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'password' WITH GRANT OPTION;
   FLUSH PRIVILEGES;
   /etc/mysql/my.cnf 
   #bind-address = 127.0.0.1
6. CREATE DATABASE xxx CHARACTER SET utf8 COLLATE utf8_general_ci; #创建一个数据库(注意名字)

四:安装虚拟环境 Vitualenv

1. pip install virtualenvwrapper #直接安装virtualenv
2. vim ~/.bashrc   #注意需要先修改环境变量。否则命名无法使用
3. export WORKON_HOME=$HOME/.virtualenvs
4. source /usr/local/bin/virtualenvwrapper.sh
5. source ~/.bashrc # 别忘记重新加载
6. mkvirtualenv xxx -p python3   #用虚拟环境创建一个环境并指定版本为python3
7. workon xxx #切换到你的虚拟环境

五:服务器安装git下载代码

1. sudo apt install git
2. git init
3. git remote add origin http:xxx.git
4. git config credential.helper store #保存git密码
5. git pull origin master #拿到全部源码
6. git reset --hard HEAD   #如果不小心改错了东西.就删掉本地的,再拉取一次
7. git pull oschina master  #重新取得

六:正式部署源码

1.	pip install -r requirements.txt 	#导入你项目的falsk依赖
	#遇到报错: Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-build-bh2MXn/unroll/
	#那么试试
	#sudo python -m pip install --upgrade --force pip 
	#sudo pip install setuptools==33.1.1
2. pip manager.py db migrate #初始化数据库 如果初始化失败 清空migration文件夹
   #清空migration你会丢掉你的测试数据,当然有不丢的办法,那就是直接去数据库里面改一个表
3. pip manager.py db upgrade #导入数据库,代码迁移完成

七:安装Nginx

apt install nginx #安装nginx  贴下配置文件位于: /etc/nginx/conf.d/xxx.conf
# 配置nginx与uwsgi的通信方式和名称,xxx就是名称,让各个服务之间能通信
upstream xxx {
    # nginx使用socket的方式与uwsgi进行通信
    # 这里指向你项目的目录下的socket文件,
    # 这个socket文件不需要单独创建,在运行的时候会自动创建。
    server unix:///srv/xxx/xxx.sock;
}
# 配置服务器
server {
    # 监听的端口号
    listen 80;
    # 域名或者本机的ip地址
    server_name dev.wudizu.com 47.104.22.138;
    charset     utf-8;
    # 最大的上传大小
    client_max_body_size 75M;  
    # adjust to taste

    # 访问根目录下的任何url的配置
    location / {
        # 指定访问哪个upstream
        uwsgi_pass wudi;
        # 包括uwsgi参数的文件
        include     /etc/nginx/uwsgi_params;
    }
    location /static {
        alias /srv/xxx/static;
   }
}
运行 service nginx configtest 测试

安装Uwsgi

1. pip install uwsgi 	#安装uwsgi
贴下配置文件:

[uwsgi]
chdir           = /srv/xxx

# 模块
module          = firstweb   #注意这里一定要你写的flask 首页文件名
# python的虚拟环境
home            = /root/.virtualenvs/flask-py2

# 是否启用mater模式
master          = true

# 进程数
processes       = 10

# socket文件地址

socket          = /srv/xxx/xxx.sock

# wsgi文件

wsgi-file       = /srv/xxx/xxx.ini

# wsgi文件中的app变量

callable        = app

# socket文件的权限

chmod-socket    = 666

安装Supervisor

sudo pip install supervisor
# supervisor的程序名字
[program:mysite]
# supervisor执行的命令
command=uwsgi --ini mysite_uwsgi.ini
# 项目的目录
directory = /srv/xxx 
# 开始的时候等待多少秒
startsecs=0
# 停止的时候等待多少秒
stopwaitsecs=0# 自动开始
autostart=true
# 程序挂了后自动重启
autorestart=true
# 输出的log文件
stdout_logfile=/srv/xxx/log/supervisord.log
# 输出的错误文件
stderr_logfile=/srv/xxx/log/supervisord.err

[supervisord]
# log的级别
loglevel=info

# 使用supervisorctl的配置
[supervisorctl]
# 使用supervisorctl登录的地址和端口号
serverurl = http://127.0.0.1:9001

# 登录supervisorctl的用户名和密码
username = admin
password = 123

[inet_http_server]
# supervisor的服务器
port = :9001
# 用户名和密码
username = admin
password = 123

[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface


然后使用supervisor运行uwsgi:
supervisord -c supervisor.conf

使用supervisorctl管理supervisord:supervisor是一个C/S模型,跟redis一样,有一个服务器,也有一个客户端命令用来管理服务的,使用以下命令进入到命令界面:
supervisorctl -c supervisor.conf

指定的文件必须和supervisord服务端保持一致。 一些常用的命令有:
supervisorctl -c supervisor.conf
> status    # 查看状态
> start program_name # 启动程序
> restart program_name # 重新启动程序
> stop program_name # 停止程序
> reload # 重新加载配置文件
> quit # 退出当前的客户端

猜你喜欢

转载自blog.csdn.net/IF_Albert/article/details/86498746