后端项目部署

2021/11/30 23:09:28

本文主要是介绍后端项目部署,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

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



这篇关于后端项目部署的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程