ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

后端项目部署

2021-11-30 22:32:43  阅读:181  来源: 互联网

标签:文件 项目 部署 hospital py nginx home uwsgi


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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有