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添加镜像
-
[global]
-
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地址即可,项目已跑通!