centos7 进行Python3.9 Django3项目迁移启动asgi

提示:进行以下操作前应先检查服务器磁盘情况,是否所有磁盘已经挂载,如果没有应先进行磁盘挂载操作,再进行以下数据库操作。磁盘挂载详见:https://qdhhkj.blog.csdn.net/article/details/129680789

前奏:centos7中文乱码解决

如果新服务器ssh登录时可能中文显示乱码,,解决方案:

# 可以使用下面的命名查看系统是否安装了中文安装包。
[root@iz2ze6z /]# locale -a |grep "zh_CN"

zh_CN
zh_CN.gb18030
zh_CN.gb2312
zh_CN.gbk
zh_CN.utf8
# 如果有显示上面信息则代表已经安装,跳过本步骤,如果没有安装,则先安装
[root@iz2ze6z /]#yum groupinstall "fonts" -y
# 先看看当前系统语言环境:
[root@iz2ze6z /]# locale

LANG=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=
# 可以看到虽然安装了中文语言包但本机的语言环境并不是中文,需要修改locale.conf配置文件,建议使用命令修改
[root@iz2ze6z /]# localectl set-locale LANG=zh_CN
# 重启配置文件使其生效,或者reboot
[root@iz2ze6z /]# source /etc/locale.conf  
# 输入date验证一下
[root@iz2ze6z /]# date
2022年 08月 14日 星期日 15:04:20 CST

一、安装python3.9

1.1安装依赖

并非都需要安装依赖,一般centos7已经安装有python2.7和python3.6可能已经安装过依赖,则跳过此步骤。

yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel gcc

1.2 删除附带的2.7或其他版本

骗你的!!!!!!!!千万不要这么粗暴,否则你会发现yum不好用了,yum使用python2.7写的,删除2.7后yum会各种报错!!!

#  强制删除已安装python及其关联
rpm -qa|grep python|xargs rpm -ev --allmatches --nodeps 
#  删除残余文件
whereis python|xargs rm -frv

如果你已经不小心删除了,那么参考下面的博客恢复yum 吧:
链接: https://blog.csdn.net/Tracy_Yuan2014/article/details/110731673

1.3 下载python并安装

wget https://www.python.org/ftp/python/3.9.10/Python-3.9.10.tgz 
tar xzf Python-3.9.10.tgz 
cd Python-3.9.10 
sudo ./configure --enable-optimizations 
sudo make altinstall   # 安装,或者 make && make install
python3.9 -V  

至此python安装完毕

1.4 设置默认启动版本python3

既然是python2.7与python3共存,我们安装好python3后做个默认启动就行,分别创建连接到 /usr/bin/ 目录下。在创建虚拟环境时页可以指定python版本。

1.4.1进入 /usr/lib/目录

进入目录/usr/lib/下可以看到Python3、Python3.6、Python3.6m 和 Python、Python2、Python2.7、Python2.7m的文件夹,
**注意:使用ll命令查看软连接指向文件,发现Python是指向python2.7的,那么我们要做的就是把原连接删除,重新建立python指向python3.6的软连接就可以了
**


[root@iZm5e67d7rp bin]# cd /usr/bin
# 添加python3.9和pip3.9软连接,如果不把软连接添加到 /usr/bin/ 在命令窗口直接输入python不会启动
[root@iZm5e67d7rp bin]# ln -s /usr/local/bin/python3.9 /usr/bin/python
[root@iZm5e67d7rp bin]# ln -s /usr/local/bin/pip3.9 /usr/bin/pip
# 如果系统已经安装了python2.7,那么可能会提示“ 无法创建符号链接 '/usr/bin/python': 文件已存在",那么可以先把原链接改名:
[root@iZm5e67d7rp bin]# mv  /usr/bin/python  '/usr/bin/python2.7  
或者删除:
[root@iZm5e67d7rp bin]# rm -rf /usr/bin/python
[root@iZm5e67d7rp bin]# ln -s /usr/bin/python3  /usr/bin/python
# 测试下,直接输入python,,进入python3.6.8
[root@iZm5e67d7rp bin]# python
Python 3.6.8 (default, Nov 16 2020, 16:55:22) 
[GCC 4.8.5 20150623 (Red Hat 4.8.5-44)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> 

1.4.2小坑:改变了python软连接指向发现yum不好用了,另外因为yum使用的是python2,替换python3之后可能导致无法工作

输入yum 提示语法错误,并告诉了你错误文件的位置(/usr/bin/yum)和行数(30行),那就简单了使用 vim + i +wq 修改

[root@iZm5e67d7rp etc]# yum
  File "/usr/bin/yum", line 30
    except KeyboardInterrupt, e:
                            ^
SyntaxError: invalid syntax


[root@iZm5e67d7rp etc]#vim /usr/bin/yum  
#!/usr/bin/python
import sys
try:
    import yum
except ImportError:
    print >> sys.stderr, """\
There was a problem importing one of the Python modules
required to run yum. The error leading to this problem was:
.......
.......
.......
# 可以看到第一行 是 " #!/usr/bin/python",输入i进入编辑模式,修改为   “ #!/usr/bin/python2  ” esc回车 然后按:进入底行命令,wq退出
#  /bin目录下也有跟/user/bin的一样的文件,/bin下其实已经自动修改了,我们只需要修改/user/bin即可

二、安装虚拟环境

2.1 使用pip安装virtualenv和 virtualenvwrapper

pip install virtualenv
pip install virtualenvwrapper

上面安装如果权限不够就加上sudo

2.2 修改配置文件.bashrc

2.2.1查找virtualenvwrapper.sh所在的路径

注意:必须有.sh否则查到出来的路径不正确,找到安装路径记录下来,下一步写进系统配置文件.bashrc

sudo find / -name virtualenvwrapper.sh   # 查找目录并记录
vim ~/.bashrc  # 配置文件默认在~/下的隐藏文件,按i开始写
   # 注意写对你的目录
export WORKON_HOME=$HOME/.virtualenvs   #  创建一个存放虚拟环境的目录 (是隐藏文件,可以自己定义,默认是home文件夹,如果过是root用户登陆,会在root文件夹下)
export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python  # 指定默认使用的python
export VIRTUALENVWRAPPER_VIRTUALENV=/usr/local/bin/virtualenv
source /usr/local/bin/virtualenvwrapper.sh   # virtualenvwrapper.sh的位置
#  修改完后按Esc键,输入“:wq!”回车退出
source ~/.bashrc  # 修改完成一定要激活更新配置,同时可以激活一下:source /usr/local/bin/virtualenvwrapper.sh

在这里插入图片描述
注意:export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python 这个最好写上,centos自带有python2.7和其他python版本,那么你必须指定虚拟环境使用的python版本,否则可能指向你其他的python版本。

2.3创建和管理虚拟环境

mkvirtualenv -p python 虚拟环境名称   # 创建虚拟环境并指定python,mkvirtualenv 虚拟环境名 -p python
workon  # 查看虚拟环境
workon 虚拟环境名   # 进入虚拟环境
deactivate  # 退出虚拟环境
rmvirtualenv  虚拟环境名   # 删除虚拟环境名

注意,如果遇到创建虚拟环境报错,原因可能是virtualenv依赖包被安装在默认Python目录下,需要做个软连接到/usr/bin/virtualenv
sudo ln -s /usr/local/bin/virtualenvwrapper.sh /usr/bin/virtualenvwrapper

三、迁移项目

3.1导出requirements.txt 方法一

开发电脑虚拟环境下,输入:

pip freeze > requirements.txt

3.2 导出requirements.txt 方法二

使用pipreqs导出requirements.txt,优点是只导出当前环境使用的依赖包,与方法一先进入虚拟环境再导出效果相近,但有指定编码格式的功能。

# 安装
python3 -m pip install pipreqs
# 在当前目录生成
pipreqs . --encoding=utf8 --force

3.3 导入requirements.txt

把生成的requirements.txt复制到服务器,ssh登录服务器,进入刚创建的虚拟环境,输入:

pip install -r requirements.txt

四、同步数据库和项目文件

同步文件推荐一款工具Secure 包括SecureCRT 和SecureFX ,ssh登陆和文件传递都可以实现而且可以关联启动很方便。数据库同步用的是navicat,转储线下数据库结构后连接线上数据库运行SQL就好,程序员必备技能不多解释。
数据库同步如果有堡垒机等条件没有办法使用navicat,可以用命令行迁移数据库:(注意以下命令是在cmd窗口使用,而不是登录mysql使用)

4.1 数据库导出sql文件

mysqldump -u 【数据库用户名root】 -p 【数据库名】> 【导出文件名】.sql; # 导出整个数据库
mysqldump -u 【数据库用户名root】-p -d 【数据库名】> 【导出文件名】.sql; # 导出数据库结构(不包括数据,只有创建数据表语句)
mysqldump -u 【数据库用户名root】-p 【数据库名】【表名】> 【导出文件名】.sql;# 导出数据库中的某张数据表(包括数据表中的数据)
mysqldump -u 【数据库用户名root】-p -d 【数据库名】【表名】> 【导出文件名】.sql; # 导出数据库中数据表的表结构(不包括数据,只有创建数据表语句)
例如:

[root@localhost zwyuser]# mysqldump -u root -p lc_db_0208 > lc_db_02081010.sql
Enter password: 

4.2数据导入sql文件

1、先进入mysql 窗口 mysql -uroot -p;
2、show databases;查看所有数据库
3、 use db_xxxx; 进入接受数据的数据库
4、 source d:/ lc_db_02081010.sql (sql文件路径根据自己的实际情况而定)

五、安装screen虚拟窗口

同步数据库和文件后,其实不是启动项目,而是要先安装screen,很多情况下ssh登陆,关闭ssh那么在窗口上启动的服务也被终止了。使用screen创建窗口,可以实现窗口独立运行,不受ssh登陆窗口关闭的限制。

5.1 安装screen

[root@localhost ~]# yum install -y screen

5.2创建screen窗口

[root@localhost ~]#screen -S 【item_name】

5.3 Screen 常用命令

screen -S 【SCREEN 】  # 创建新screen会话并指定会话名称
screen -s 【SHELL】  # 指定建立新视窗时,所要执行的shell
screen -r 【SCREEN 】 # 恢复离线的screen作业
screen -R  【SCREEN 】# 先试图恢复离线的作业。若找不到离线的作业,即建立新的screen作业
screen -d 【SCREEN 】 # 将指定的screen作业离线
screen -ls  # 显示目前所有的screen作业
screen -wipe  # 检查目前所有的screen作业,并删除已经无法使用的screen作业

Screen 快捷键:

先按 CTRL+a,然后按 ? # 显示所有键绑定信息
先按 CTRL+a,然后按 d # 暂时离开当前 session,将目前的 session (可能含有多个 windows) 丢到后台执行,并会回到还没进 screen 时的状态
先按 CTRL+a,然后按 w # 显示所有窗口列表
先按 CTRL+a,然后按 k # kill window,强行关闭当前的 window
先按 CTRL+a,然后按 * # 查看当前 screen 有多少个终端接入
先按 CTRL+a,然后按 n # Next,切换到下一个 window
先按 CTRL+a,然后按 p # Previous,切换到前一个 window
先按 CTRL+a,然后按 c # 创建一个新的运行 shell 的窗口并切换到该窗口(新窗口只有执行快捷键用户能看到)

关闭screen的暴力操作:(杀死进程)

# 先查看进程编号
[root@iZm5e67d7rp ~]# screen -ls   
There is a screen on:
        32688.tg_item   (Detached)
1 Socket in /var/run/screen/S-root.
[root@iZm5e67d7rp ~]# kill -9 32688  # 杀

六,启动服务

Django2创建项目只生成wsgi.py文件, Django3创建项目会自动生成文件asgi.py和wsgi.py。进入生产环境Django2 需要使用uwsgi启动项目,而Django3 即可以使用uwsgi启动,也可以直接使用asgi启动项目。区别在于:
1、wsgi不支持websocket,而asgi支持websocket。(注:wsgi 经过扩展 Channels 后也可以使用websocket,asgi 默认使用Channels )
2、ASGI对于WSGI原有的模式的支持和WebSocket的扩展,即ASGI是WSGI的扩展
3、性能:与 WSGI 模式相比,在 ASGI 模式下运行时,同时刻的用户数量增加了大约 50%
在这里插入图片描述

6.1 安装 daphne

asgi 推荐使用 daphne 服务启动,pip傻瓜式安装:

pip install daphne

6.2 启动项目

启动项目分三步:
1、进入虚拟环境 workon
2、创建 screen
3、启动项目daphne

[root@iZm5e67d7rp ~]# workon
tg_env
[root@iZm5e67d7rp ~]# workon tg_env
(tg_env) [root@iZm5e67d7rp ~]# screen -S tg_item
(tg_env) [root@iZm5e67d7rp ~]# daphne -b 127.0.0.1 -p 2501 tg_shopping.asgi:application
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值