1.项目部署步骤
项目部署的步骤一般为先由开发人员或测试人员自己用nohup启动的方式在服务器上试部署;以检查代码是否有异常或者部署环境是否有异常。部署后,确定功能正常后。在由运维人员用nginx服务器和uwsgi库进行正式部署。
2开发环境或测试环境试部署
在部署前先在根目录下新建一个home文件夹,在home文件夹下新建四个文件夹(conf(存自定义的nginx及uwsgi配置文件),env(存虚拟环境),logs(存日志文件),src(存项目及后缀为.sh的nohup启动文件))
在开发环境或测试环境下部署一般用写的nohup脚本进行部署。
在部署前先查看所有正在运行的网络端口,以避免这些端口冲突。
查看所有运行的网络端口
netstat -lntp
部署时一般是将迭代后的代码上传到gitub上,然后在服务器上运行git pull或者git clone将代码下拉到服务器上。也可以用Xftp直接将代码拖到对应文件夹。
2.1创建虚拟环境
进入存放虚拟环境的文件夹env并在当中创建环境
virtualenv --no-site-packages -p /usr/local/python3/bin/python3 ajenv
安装txt文件中写入的库
/home/env/ajenv/bin/pip install -r /hoem/src/aj/requirements.txt
2.2写nohup启动脚本
在写之前先在服务器上开启相应的端口(本次用8080)
进入存放项目的src文件夹,并在其中新建一个aj_start.sh。然后写入内容
vim aj_start.sh
/home/env/ajenv/bin/python3 /home/src/aj/manage.py runserver -p 8080 -h 0.0.0.0
写入内容后,给脚本文件修改权限才能使其启动。
修改脚本文件权限:
chmod -R 777 aj_start.sh
2.3后台启动项目
用nohup脚本启动项目
nohup ./aj_start.sh &
3nohup启动后到正式上线前的准备工作
在用nohup启动文件后,由于要重新使用nginx启动文件,故要将8080端口进程结束。
查看端口网络情况及结束8080端口
netstat -lntp
kill -9 pid
配置etc文件夹下nginx文件夹下nginx.conf文件。
因为要新建一个nginx文件(后缀为conf)来启动项目。所以要将新建的nginx文件添加到nginx.conf文件中。
vim /etc/nginx/nginx.conf
include /home/conf/*.conf;
在nginx.conf文件的第37行添加include /home/conf/*.conf; 意思为将/home/conf/文件夹下的所有文件后缀为.conf的启动配置文件添加到nginx.conf文件中。
4正式上线
正式上线用nginx和uwsgi库联合部署
# 安装uwsgi所需的文件,版本需与py的版本一致
sudo apt-get install libpython3.7-dev
# 安装uwsgi
pip install uwsgi
# 启动nginx
sudo /etc/init.d/nginx start
4.1配置nginx文件
进入home文件下的conf文件夹
cd /home/conf/
注意:一个ip只能启动一个80端口;一个ip下的不同域名可以有多个80端口
创建nginx文件
touch ajnginx.conf
vim ajnginx.conf
配置nginx文件
server {
listen 8080;
server_name 47.106.180.185;这一行写域名或者ip
access_log /home/logs/ajaccess.log;
error_log /home/logs/ajerror.log;
location / {
include uwsgi_params;
uwsgi_pass 127.0.0.1:8099;
uwsgi_param UWSGI_CHDIR /home/src/aj;
uwsgi_param UWSGI_SCRIPT manage:app;
}
}
4.2配置uwsgi文件
创建uwsgi文件
touch ajuwsgi.ini
vim ajuwsgi.ini
配置uwsgi文件
[uwsgi]
master = true
socket = 127.0.0.1:8099
chdir = /home/src/aj
pythonpath = /home/env/ajenv/bin/python3
callable = app
logto = /home/logs/ajuwsgi.log
4.3重启nginx及查看状态
systemctl restart nginx
systemctl status nginx
查看状态可以用于查看项目被访问的状态
4.4安装uwsgi库
/home/env/ajenv/bin/pip install uwsgi
4.5启动uwsgi(启动项目)
/home/env/ajenv/bin/uwsgi --ini /home/conf/ajuwsgi.ini
启动文件bug解决
若运行 /home/env/ajenv/bin/uwsgi --ini /home/conf/ajuwsgi.ini时,报错/web/env/display/bin/uwsgi: error while loading shared libraries: libpcre.so.1: cannot open shared object file: No such file or directory,可用以下方法解决(原文链接:(http://www.voidcn.com/article/p-svshgwjx-qc.html)
# 进入lib文件夹
cd /lib
# 查看当前文件夹下所有带有pcre的
ls *pcre*
# 通过文件名在跟目录下查找文件名带有libpcre.so的文件
find / -type f -name *libpcre.so.*
# 将其中一个带有libpcre.so的文件软链接到lib文件夹下
ln -s /home/glzt/anaconda3/lib/libpcre.so.1.2.11 /lib/libpcre.so.1
# 重新启动
/web/env/display/bin/uwsgi --ini /web/conf/display.ini
4.6动态查看访问日志的最后一行
tail -f ajuwsgi.log
5配置首页访问
在manage.py文件中配置使直接访问网址加端口就能直接跳转到主页
@app.route('/')
def index():
return render_template('index.html')
5.1启动项目前同步数据库
已有数据库结构更新时用结构同步(用得较多)
数据同步:将服务器上数据同步成本地数据(一般不用)
网友评论