Ubantu server部署django/flask项目

一、 在开发机上的准备工作:
1. 用`pip freeze > requirements.txt`将当前环境的包导出到`requirements.txt`文件中,方便在部署的时候安装。
2. 将项目上传到服务器上的`/srv`目录下。这里以`git`的形式为例。`scp`

1 * git init
2 * git remote add origin xxx.git
3 * git add .
4 * git commit -m 'first commit'
5 * git pull origin master --allow-unrelated-histories
6 * git push origin master

二、 安装虚拟机及ubantu server:

1.安装虚拟机VMware

可在pc.qq.com下载,网上找秘钥安装

1.安装Ubantu server,镜像下载地址:http://mirrors.163.com/ubuntu/,安装过程网上一大堆,参考https://jingyan.baidu.com/article/14bd256ee74dd7fb6d2612b5.html,注意镜像界面填写163地址

2.安装python及pip

Ubantu server18.04版本自带python3,desktop版本可以通过命令下载,Ubantu Desktop18.04自带python2.7,需要指定版本下载,如sudo apt install python3.6

python安装镜像推荐: -i https://pypi.doubanio.com/simple 或 https://pypi.tuna.tsinghua.edu.cn/simple

1 * sudo apt install python3
2 * sudo apt install python3-pip
3 * pip install --upgrade pip  -i https://pypi.doubanio.com/simple

 如果apt install python-pip,貌似会把直接把python2.7下下来,pip也是python2.7的,卸载方法:

sudo apt-get remove --auto-remove python2.7,可将依赖包完全卸掉,包括pip。如单纯sudo apt-get remove python2.7,提示卸载成功,但是实际上没卸载掉

下载后可通过which pip3查找执行文件在哪

 python的pip下载镜像系统修改,root目录中新建.pip文件夹,在pip.conf添加镜像

    1. [global]
    2. index-url = https://pypi.tuna.tsinghua.edu.cn/simple

 

 制定Python3.6为默认版本:先删除默认的Python软链接:sudo rm /usr/bin/python,

然后创建一个新的软链接指向需要的Python版本:sudo ln -s /usr/bin/python3 /usr/bin/python

三、安装Xshell

方便在开发机上连接ubantu服务器,在Windows腾讯软件下载安装Xshell,在ubantu中下载安装ssh客户端及服务器

1 sudo apt install openssh-server openssh-client
2 service ssh restart

在ubantu中ipconfig查看IP地址,系统安装时NET模式,由主机自动分配IP 

 

连接成功!

四、 安装`virtualenv`以及`virutalenvwrapper`创建虚拟环境

可直接安装virtualenvwrapper包,会自动将依赖包virtualenv下载,1步可以省

1 * pip3 install virtualenv
2 * pip3 install virtualenvwrapper

在¥HOME目录新建.virtualenvs目录,用于存放虚拟环境文件。

添加环境变量:

* sudo apt install vim
* vim ~/.bashrc 进入文件中,填入以下两行代码:

export WORKON_HOME=$HOME/.virtualenvs
source /usr/local/bin/virtualenvwrapper.sh

执行source ~/.bashrc,没有提示就是成功。如提示No such direction or file,可能是执行文件不对,which virtualenvwrapper.sh查看安装在哪了,source目录对应修改。

在本角色下mkvirtualenv XXname新建虚拟环境名,如用root权限则报错,命令行前面有(XXname)代创建成功

常用命令:退出命令:deactivate,使用进入命令workon XXname,删除命令:rmvirtualenv XXname,列出虚拟环境表:lsvirtualenv,快速进入激活虚拟环境所在目录:cdvirtualenv

 五、安装mysql数据库

sudo apt install mysql-server mysql-client

安装后需用root用户有权限使用,直接输入mysql进去后更改密码,具体详见https://www.cnblogs.com/iamorz/p/12883266.html

创建开发使用的数据库,create databases falsk_bbs charset utf8;

 六、安装其他所使用工具

项目中使用memcached,sudo apt install memcached

安装成功后,telnet 127.0.0.1 11211链接,set username 0 60 5 hello设置值,get username取值,quit退出

七、上传至码云

开发机上cmd终端cd切到项目所在文件夹,pip freeze > requirements.txt生成依赖文件包,以备pip install -r requirements.txt安装使用

将代码上传至码云:https://gitee.com/profile。登录成功后,新建仓库(以前叫新建项目),可起中文名,对应路径自动给翻译成英文(眼前一亮!)

 

选择私有(暂时不花钱)或公开,在克隆/下载处可复制项目git地址

安装Git软件,在pc.qq.com腾讯软件(很强大)管理中下载一顿下一步安装。

安装成功后,鼠标右键会多出两个选项(Git Gui Here、Git Bash Here),在项目所在文件夹下, 鼠标右键选择Git Bash Here

首次使用设置用户名和密码。git config --global user.name "bryan sun" ,git config --global user.email "hitsjt@gmail.com"

1 git init  //初始化为GIT可管理的包
2 git remote add origin xxx.git  //与码云Git代码地址进行关联
3 git add .
4 git commit -m 'first commit'  //确认添加所有文件
5 git pull origin master --allow-unrelated-histories  //需输入码云账号密码,从码云上拉下代码,第一次拉空项目后,开发机文件夹下多出README.MD文件
6 git push origin master  //将项目推到码云Git地址中

此时登录码云刷新,即可看到项目已上传成功!

 八、Ubantu服务器pull代码下来

安装git,atp install git ,ubantu server貌似自带git

cd进入/srv/目录mkdir一个文件夹,进入后git init初始化为git管理包,git remote add origin <git_url地址>,git pull origin master从码云上拉下项目代码

如果再次从git拉代码,会提示已经存在,是否保留本地修改两种方式:

保留:git stash的时候会把你本地快照,然后git pull 就不会阻止你了,pull完之后这时你的代码并没有保留你的修改。

git stash

git pull origin master

git stash pop

不保留:直接将本地的状态恢复到上一个commit id 。然后用远程的代码直接覆盖本地就好了。

git reset --hard

git pull origin master 

 workon 虚拟环境中,安装所有需要的依赖包:pip install -r requirements.txt -i https://pypi.doubanio.com/simple

安装过程中,如果出现某依赖包版本异常则回滚停止,需要删掉requirements.txt中的依赖包再继续,后续另行安装

出现ERROR: Command errored out with exit status 1: python setup.py egg_info Check the logs for full command output错误,则更新pip及setuptools

 提示Successfully installed balabala则代表安装成。

进入虚拟环境项目所在文件夹下,python xx.py简单测试下程序是否能跑通。

九、安装uwsgi

uwsgi是一个应用服务器,非静态文件的网络请求就必须通过他完成,他也可以充当静态文件服务器,但不是他的强项。uwsgi是使用python编写的,因此通过pip install uwsgi就可以了。(uwsgi必须安装在系统级别的Python环境中,不要安装到虚拟环境中)。
使用命令uwsgi --http :8000 --wsgi-file /opt/zlbbs/zlbbs.py -callable app -H /root/.virtualenvs/zlbbs-env。用uwsgi启动项目,如果能够在浏览器中访问到这个页面,说明uwsgi可以加载项目了

cd到项目目录下,新建uwsgi.ini文件,如不使用nginx,则使用http协议,如何配合nginx使用,则注释掉,采用socket通信,配置以下参数:

 1 [uwsgi]
 2 #http=0.0.0.0:8000
 3 # 指定项目目录
 4 chdir=/srv/Flask_bbs/
 5 # 指定python虚拟环境
 6 home=/root/.virtualenvs/flask_bbs
 7 # 指定加载的WSGI文件
 8 wsgi-file=main.py
 9 # 指定uWSGI加载的模块中哪个变量将被调用
10 callable=app
11 # 主进程
12 master = true
13 # 设置工作进程的数量
14 processes=2
15 # 设置每个工作进程的线程数
16 threads=2
17 # 将主进程pid写到指定的文件
18 pidfile=%(chdir)/uwsgi.pid
19 #设置后台运行,uwsgi.log保存日志信息
20 daemonize=uwsgi.log
21 # 日志文件
22 req-logger=file:/srv/Flask_bbs/log/req.log
23 logger=file:/srv/Flask_bbs/log/err.log
24 # 退出的时候是否清理环境
25 vacuum          = true

然后使用命令uwsgi --ini zlbbs_uwsgi.ini运行

如采用Http协议,运行后,在开发机同一网段内访问ubantu server的ip+端口号,即可访问了。  

设置了主进程,kill -9 27355杀掉主进程,子进程响应关闭。

十、安装nginx

Nginx 是高效的 Web 服务器和反向代理服务器,可以用作负载均衡, 支持高并发,可以支持百万级的 TCP 连接,十万级别的并发连接,部署简单,内存消耗少,成本低。项目主要用他处理静态文件,动态文件交由uwsgi处理。

安装nginx:sudo apt-get install nginx启动nginx服务:sudo service nginx start重载nginx服务:nginx -s reload

在/etc/nginx/conf.d目录下,新建一个文件,叫做flask_bbs.conf,然后将以下代码粘贴进去:

 1 upstream flask_bbs {
 2     server unix:///srv/Flask_bbs/flask_bbs.sock; 
 3 }
 4
 5 # 配置服务器
 6 server {
 7     # 监听的端口号
 8     listen      80;
 9     # 域名
10     server_name 192.168.153.128; 
11     charset     utf-8;
12 
13     # 最大的文件上传尺寸
14     client_max_body_size 75M;  
15 
16     # 静态文件访问的url
17     location /static {
18         # 静态文件地址
19         alias /srv/Flask_bbs/static; 
20     }
21 
22     # 最后,发送所有非静态文件请求到flask服务器
23     location / {
24         uwsgi_pass  flask_bbs;
25         # uwsgi_params文件地址
26         include     /etc/nginx/uwsgi_params; 
27     }
28 }

写完配置文件后,为了测试配置文件是否设置成功,运行命令:service nginx configtest,如果不报错,说明成功。
每次修改完了配置文件,都要记得运行service nginx restart

 在同一网段下,输入ubantu server的ip地址即可,项目已跑通!

原文地址:https://www.cnblogs.com/iamorz/p/12899520.html