后端项目部署
作者:互联网
1.将dev.py中的文件拷贝到pro.py中
然后将pro.py中的文件配置修改修改
DEBUG = False
ALLOWED_HOSTS = ['*']
2.修改支付宝接口的文件配置
# 修改为post回调的公网地址(后端post回调地址)
app_notify_url='http://8.130.173.47:8000/api/v1/patient/alipay_post/'
# 修改为前端get回调的公网地址(前端get回调地址)
return_url='http://8.130.173.47:80/paysuccess'
# 修改为post回调的公网地址(后端post回调地址)
notify_url='http://8.130.168.192:8000/api/v1/patient/alipay_post/'
3.项目在服务器上运行,关于migrations要不要提交的问题
-如果提交:好处是可以看到开发阶段所有的表变化情况
-如果不提交:服务端自己维护一套迁移变化,不会出冲突
-提交不提交都可以,看需求
4.每个项目,都会有项目的依赖库
-放在项目根路径下:requirements.txt
-pip list # 当前环境安装了哪些模块
-pip freeze > requirements.txt # 把当前虚拟环境中所的依赖,写入到 requirements.txt
4.1.也可以用pipreqs这个模块,它的好处是只导出项目依赖的模块,不会将全部模块都到处到requirements.txt文件中
pip3 install pipreqs # 下载模块
pipreqs ./ # 执行这条命令就会在当前目录下生成requirements.txt
缺点就是可能会报错,因为python2和python3兼容问题等,windows需要指定编码
pipreqs ./ --encoding=utf-8 # 如果说是新项目,那么执行命令之后,requirements.txt这个文件里面就会只有django==2.2.2等
5.将上传好的项目从仓库拉下来,放在/home/project这个路径下
# 在服务器上,把后端项目拉下来
mkdir /home/project
cd /home/project
git clone https://gitee.com/yanglong888/launch-of-interim-architecture.git
6.进入到虚拟环境并将项目需要安装的模块都安装好
# 创建虚拟环境,在虚拟环境中,把所有依赖装好
workon hospital # 切到虚拟环境(先用workon查看虚拟环境叫什么名字)
pip install -r requirements.txt # 生成项目需要的模块,如果报错mysqlclient的问题需要按照下列步骤
# mysqlclient装不上
yum install mysql-devel -y
yum install python-devel -y
pip install mysqlclient
pip install -r requirements.txt
pip install uwsgi # 在正式环境和虚拟环境都要装一下uwsgi
7.云服务器上的mysql中创建一个库,并且给该库配置用户权限
# 配置数据库(创建luffy库,创建luffynew用户)
# 首先需要启动mysql服务端
1)管理员连接数据库
mysql -uroot -pYang123?
2)创建数据库
create database hospitalapi default charset=utf8;
3)设置权限账号密码:账号密码要与项目中配置的一致
grant all privileges on hospitalapi.* to 'hospitalapi'@'%' identified by 'Yang123?';
grant all privileges on hospitalapi.* to 'hospitalapi'@'localhost' identified by 'Yang123?';
flush privileges; # 刷新权限
#查看用户权限
select user,host,authentication_string from mysql.user;
4)退出mysql
quit;
8.将项目里面的models里面的表通过命令在mysql库中生成表
# 执行两条迁移命令
python manage_pro.py makemigrations
python manage_pro.py migrate
9.在启动uwsgi的时候如果报错,可能是因为没有启动redis,mysql等
# 使用uwsgi+django运行项目
---1.先用python manage_pro.py runserver 0.0.0.0:8000 跑一下试试
# 写uwsgi的配置文件,项目根路径
---2.创建一个名字叫hospital.xml的文件(文件名字随便起,但是格式是xml格式)
vim hospital.xml
---3.在该hospital.xml文件中写入如下格式
<uwsgi>
# uwsgi+django跑的端口和ip
<socket>127.0.0.1:8080</socket>
# 项目的路径,也就是manage_pro.py的上一层的路径
# /home/project/launch-of-interim-architecture
<chdir>/home/project/yang</chdir>
#/home/project/launch-of-interim-architecture/hospital这个路径下 有一个wsgi.py文件
<module>hospital.wsgi</module>
# 项目开启的时候起的进程数
<processes>2</processes>
# uwsgi的日志全部写在这个uwsgi.log文件里面
<daemonize>uwsgi.log</daemonize>
</uwsgi>
---4.uwsgi的操作命令(启动,关闭等)
# 启动uwsgi,
uwsgi -x ./hospital.xml # uwsgi -x 指定配置文件
cat uwsgi.log # 查看uwsgi.log的日志文件
ps aux |grep uwsgi # 过滤uwsgi启动的进程数
pkill -9 uwsgi # 关闭uwsgi
# 配置nginx转发给uwsgi
cd /usr/local/nginx/conf
vim nginx.conf
# 将server写进nginx.conf文件中
server {
listen 8000;
server_name 127.0.0.1;
charset utf-8;
location / {
include uwsgi_params;
uwsgi_pass 127.0.0.1:8080; # 端口要和uwsgi里配置的一样
uwsgi_param UWSGI_SCRIPT hospital.wsgi; #wsgi.py所在的目录名+.wsgi
uwsgi_param UWSGI_CHDIR /home/project/launch-of-interim-architecture/; # 项目路径
}
}
10.将nginx停掉,然后重新启动
nginx -s stop
nginx
netstat -nlp|grep 80 # 查看端口被哪个进程监听
11.导入测试数据
从原数据库转储sql
然后在云服务器mysql的库中运行sql文件
12.因为uwsgi不能拿静态资源,需要nginx直接拿静态文件给uwsgi
cd /home/project/yang/hospital/settings
vim pro.py
# 后台管理,动静分离
#修改线上的settings里面的pro.py 配置文件,加入
STATIC_ROOT = '/home/project/yang/hospital/static'
STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static')]
# 创建文件夹
mkdir /home/project/yang/hospital/static
# 完成静态文件迁移(把静态的js,css都收集到,上面那个文件夹下)
# 前后端混合的项目必须这么做
python manage_pro.py collectstatic
# 使用nginx代理
# 新增的配置静态文件
location /static {
alias /home/project/yang/hospital/static;
}
# 重启nginx即可
nginx -s reload
# 项目根路径下
celery -A xx worker -l info
celery -A xx beat -l info
14.上线遇到的问题,以及解决的办法
# 如果需要修改项目的后端文件,需要先在自己项目上修改,然后提交到远程仓库,接着在云服务器的项目路径下直接从远程仓库拉下来即可,然后重启uwsgi就ok了
修改项目文件的东西
git add .
git commit -m '修改'
git push origin master
在云服务器项目路径下
git pull origin master
pkill -9 uwsgi
uwsgi -x ./hospital.xml
# 如果静态文件需要修改只需要切换到该静态文件路径,将该静态文件删除,然后将修改好的文件上传,解压,然后移动到该路径
cd /home/html/ # 切换到该旧静态文件路径
rm -rf dist # 删除该旧静态文件
拖动新静态文件到 /root路径下
unzip dist.zip # 解压
mv ~/dist /home/html # 将解压好的新静态文件移动到原来的路径
pkill -9 uwsgi # 杀死uwsgi进程
uwsgi -x ./hospital.xml # 重启uwsgi
nginx -s stop # 关闭nginx
nginx # 重启nginx
# 如果发现uwsgi的问题
pip3.8 list # 查看是否有uWSGI这个模块
cd /usr/local/python38/lib # 查看是否有uwsgi这个可执行文件
uwsgi -x /指定配置文件路径 # uwsgi运行需要指定配置文件
# 云服务重新启动后,需要执行的命令让项目运行
1.切换到python解释器虚拟环境窗口
workon hospital # 运行虚拟环境窗口
unzip dist.zip # 解压
mv ~/dist /home/html # 将该dist文件夹移动到html文件夹下
2.从git上面克隆下来后端的代码
cd /home/project
git clone https://gitee.com/yanglong888/yang.git
3.启动redis
cd /usr/local/redis # 启动redis
redis-server ./redis.conf & # 使用配置文件启动
4.启动mysql
systemctl start mysqld.service # 启动mysql服务
systemctl status mysqld.service # 查看mysql服务的启动状态
5.启动uwsgi
uwsgi -x ./hospital.xml # uwsgi -x 指定配置文件
cat uwsgi.log # 查看uwsgi.log的日志文件
ps aux |grep uwsgi # 过滤uwsgi启动的进程数
pkill -9 uwsgi # 关闭uwsgi
6.启动nginx
nginx # 启动nginx
nginx -s stop # 停止nginx
ps -aux|grep nginx # 查看nginx监管的哪些端口
fuser -k 80/tcp # 将被占用的80端口杀死
7.启动项目
python manage_pro.py runserver 0.0.0.0:8000
8.启动worker
celery -A celery_task worker -l info
9.启动beat
celery -A celery_task beat -l info
# 如果出现服务器内部错误,有可能是端口占用,某些服务没有启动,也有可能是代码问题
如模块的导入等,redis没有启动,mysql没有启动
# nginx所监听的端口是
80端口
8000端口
# hospital.xml里面配置的端口是django和uwsgi跑的端口
127.0.0.1:8080
# nginx.conf文件中的server带有uwsgi的那个其中listen监听端口uwsgi_pass监听的端口各自的意思
listen监听的8000端口,如果用户访问8000端口,nginx就会将该请求转发到8080端口的uwsgi做处理
# mysql管理员的账号密码,以及医院数据库的账号密码
mysql -uroot -pYang123?
mysql -uhospitalapi -pYanglong123?
# 如果用公网部署简单项目上线的话,只需要将ALLOWED_HOSTS = ['*']即可
然后运行python manage.py runserver 0.0.0.0:8000
# Get from version control
用pycharm从Git上拉取项目
# 拿出真实的ip地址,包括代理
HTTP_X_FORWARDED_FOR # 拿出真实的ip
REMOTE_ADDR # 可能拿到的只是代理i
标签:文件,项目,部署,hospital,py,nginx,home,uwsgi 来源: https://www.cnblogs.com/yanglong180/p/15626674.html