Django项目在服务器上的部署教程——CentOS7

it2023-02-23  79

服务器环境:centos7+nginx+uwsgi+python3+django 数据库:MySQL 8.0 项目框架:Django 2.2 + Vue + ElementUI 注明:这是我在校期间做的学校的一个项目,部署到服务器是学校分配的CentOS 7,使用堡垒机登录,纯命令行操作,所以这里没有图形界面操作,做这篇教程是方便自己回忆,不一定适用于所有开发者。搬砖内容如有错误请指正!

1、服务器部署

更新系统软件包 yum update -y 安装软件管理包和可能使用的依赖 yum -y groupinstall "Development tools" yum install openssl-devel bzip2-devel expat-devel gdbm-devel readline-devel sqlite-devel psmisc libffi-devel

1.1、Python安装

python版本:3.7

下载Pyhton3到/usr/local 目录 cd /usr/local wget https://www.python.org/ftp/python/3.7.3/Python-3.7.3.tgz 解压 tar -zxvf Python-3.7.3.tgz 进入Python-3.7.3路径 cd Python-3.7.3 编译安装到指定路径。(/usr/local/python3 路径可以自己指定,自己记着就行,下边要用到。) ./configure --prefix=/usr/local/python3 安装python3 make make install 安装完成之后建立软链接,添加变量,方便在终端中直接使用python3 ln -s /usr/local/python3/bin/python3.7 /usr/bin/python3 Python3安装完成之后pip3也一块安装完成,不需要再单独安装,同样给pip3建立软链接 ln -s /usr/local/python3/bin/pip3.7 /usr/bin/pip3 查看Python3和pip3安装情况

1.2、virtualenv安装和使用

安装virtualenv,方便不同版本项目管理 pip3 install virtualenv 建立软链接 ln -s /usr/local/python3/bin/virtualenv /usr/bin/virtualenv 安装成功在根目录下建立两个文件夹,主要用于存放env和网站文件的。 mkdir -p /data/env mkdir -p /data/wwwroot

切换到/data/env/下,创建指定版本的虚拟环境 虚拟环境名称:pyweb指定python版本python3,不然会默认使用系统自带的python2 virtualenv --python=/usr/bin/python3 pyweb 然后进入/data/env/pyweb/bin,启动虚拟环境 cd /data/env/pyweb/bin source activate 启动成功之后,红线位置会出现虚拟环境名称,代表启动成功。 退出虚拟环境 退出虚拟环境不用进入指定目录,在任意路径下面执行下面命令即可。 deactivate

1.3、django和uwsgi的安装

非虚拟环境下,安装uwsgi pip3 install uwsgi 给uwsgi建立软链接,方便使用,一次就可以,虚拟环境中安装不需要此操作。 ln -s /usr/local/python3/bin/uwsgi /usr/bin/uwsgi 进入虚拟环境pyweb的bin目录下,激活该虚拟环境 为什么要进入虚拟环境呢?因为我们可能不止部署一个项目,每个项目到环境配置不一样,一个虚拟环境相当于一个独立的空间。 cd /data/env/pyweb/bin source activate 安装django和uwsgi django版本:2.2uwsgi要安装两次,先在系统里安装一次,然后进入对应的虚拟环境安装一次。 pip3 install django==2.2 pip3 install uwsgi

1.4、nginx安装

进入home目录,执行下面命令 cd /home/ wget http://nginx.org/download/nginx-1.13.7.tar.gz 下载完成后,执行解压命令 tar -zxvf nginx-1.13.7.tar.gz 进入解压后的nginx-1.13.7文件夹,依次执行以下命令 ./configure make make install

1.5、Mysql8.0安装

安装前,我们可以检测系统是否自带安装 MySQL rpm -qa | grep mysql 如果你系统有安装,那可以选择进行卸载 rpm -e mysql // 普通删除模式 rpm -e --nodeps mysql // 强力删除模式,如果使用上面命令删除时,提示有依赖的其它文件,则用该命令可以对其进行强力删除 接下来我们在 Centos7 系统下使用 yum 命令安装 MySQL,需要注意的是 CentOS 7 版本中 MySQL数据库已从默认的程序列表中移除,所以在安装前我们需要先去官网下载 Yum 资源包,下载地址为:https://dev.mysql.com/downloads/repo/yum/

wget https://repo.mysql.com//mysql80-community-release-el7-3.noarch.rpm rpm -ivh mysql80-community-release-el7-3.noarch.rpm yum update yum install mysql-server 权限设置 chown mysql:mysql -R /var/lib/mysql 初始化 MySQL mysqld --initialize 启动 MySQL systemctl start mysqld 查看 MySQL 运行状态 systemctl status mysqld Mysql安装成功后,默认的root用户密码为空,你可以使用以下命令来创建root用户的密码 [root@host]# mysqladmin -u root password "new_password";

2、代码准备

2.1、Django代码

在项目目录下用下面的命令把当前的环境依赖包导出到requirements.txt文件 pip freeze > requirements.txt django项目集成vue,修改django的setting.py文件 TEMPLATES = [ { 'DIRS': [os.path.join(BASE_DIR, 'vue/dist')], # 第一处修改 }] # 第二处修改 DEBUG = False ALLOWED_HOSTS = ['*'] # 第三处修改——添加静态文件 STATICFILES_DIRS = [ os.path.join(BASE_DIR, 'vue/dist/static'), ] 修改django的url.py文件 from django.views.generic.base import TemplateView urlpatterns = [ path(r'', TemplateView.as_view(template_name='index.html')), # 将路径指向vue中到index页面 ] 文件上传 linux系统可以在本地将代码文件打包成zip格式或者其他格式到压缩包,并上传服务器到/data/wwwroot/目录下windows系统图形界面压缩即可 zip -r zzbceping.zip zzbceping # 压缩命令 解压,使用命令: unzip zzbceping.zip # 解压缩命令 项目文件名称为zzbceping。 进入虚拟环境然后进入项目路径安装requirements.txt里的依赖包 cd /data/env/pyweb/bin/ # 进入虚拟环境,已经进入虚拟环境就不用此步骤 source activate # 激活 cd /data/wwwroot/zzbceping/ # 项目根目录 pip3 install -r requirements.txt # 安装依赖,requirements.txt生成步骤见上

2.2、vue代码

进入vue项目路径下找到并打开存放baseURL到文件,修改baseURL baseURL: 'http://127.0.0.1:8000/', //原来的 baseURL: 'http://域名/', //有域名就填域名,网址输入域名就可以访问 baseURL: 'http://ip/', //没有域名就填写ip,网址输入ip就可以访问 baseURL: 'http://ip:80/', //指定80端口,网址输入ip:80 可以访问 build 项目 进入vue代码根目录,执行命令此命令会生成dist文件,打包dist文件 npm run build zip -r dist.zip dist 在django项目根目录下面创建vue文件夹,将dist.zip上传到此处,并解压,目录结构为:/data/wwwroot/zzbceping/vue/dist

2.3、数据库文件

在本地将数据库文件以sql格式导出,上传到服务器。 mysqldump -uroot -ppassword qiantai>qiantai.sql 打开终端,运行命令: mysql -uroot -pxxx # xxx为密码 use 数据库名; source /path/to/your/qiantai.sql; exit;

3、运行配置

进入对应到虚拟环境中,进入django目录下通过如下命令运行一下项目,如果能正常启动则进行下一步,不能正常运行往上检查。

python3 manage.py runserver

3.1、uwsgi配置文件

在django项目根目录:/data/wwwroot/zzbceping/下创建uwsgi配置文件:uwsgi.ini #添加配置选择 [uwsgi] #配置和nginx连接的socket连接 socket=0.0.0.0:81 #配置项目路径,项目的所在目录 chdir=/data/wwwroot/zzbceping #配置wsgi接口模块文件路径,也就是wsgi.py这个文件所在的目录名 wsgi-file=zzbceping/wsgi.py #配置启动的进程数,根据电脑配置来 processes=9 #配置每个进程的线程数,根据电脑配置来 threads=30 #配置启动管理主进程 master=True #配置存放主进程的进程号文件 pidfile=uwsgi.pid #配置dump日志记录 daemonize=uwsgi.log` 通过下面的命令启动运行uwsgi uwsgi --ini uwsgi.ini # 显示 [uWSGI] getting INI configuration from uwsgi.ini 表明uwsgi运行成功 ps -ef|grep uwsgi # 查看确认是否uwsgi启动 uwsgi --stop uwsgi.pid # 停止运行uwsgi,通过包含主进程编号的文件设置停止项目 uwsgi --reload uwsgi.pid # 重启uwsgi killall -0 uwsgi # 终止所有uwsgi进程

3.2、nginx配置

进入nginx目录 cd /usr/local/nginx/conf/ 备份nginx.conf cp nginx.conf nginx.conf.bak 编辑nginx.conf vi nginx.conf 按Ins键开始编辑 --------------------------------- # 编辑内容如下 events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; include /usr/local/nginx/conf/vhost/*.conf; # 直接将每个项目到配置文件放在vhost中,可以应对同一服务器配置多个项目到情况。 } 保存并退出 按Esc键退出编辑 :wq # 保存并退出 :q # 直接退出 创建文件夹vhost mkdir vhost cd vhost 创建文件zzbceping.conf,并编辑 mkdir zzbceping.conf vi zzbceping.conf 按Ins键开始编辑 ---------------------------------- # 编辑内容 server { listen 80; # 项目运行在80端口 server_name 域名; #改为自己的域名,没域名修改为127.0.0.1:80 charset utf-8; location / { include uwsgi_params; uwsgi_pass 127.0.0.1:81; #端口要和uwsgi里配置的一样 } location /static/ { alias /data/wwwroot/zzbceping/vue/dist/static/; #静态资源路径 } access_log /data/wwwroot/zzbceping/access.log; error_log /data/wwwroot/zzbceping/error.log } 如果同一服务器部署多个项目,只要再创建一个虚拟环境,进行同样的操作,另外再vhost中创建另外一个项目的conf文件即可。进入/usr/local/nginx/sbin/目录 cd /usr/local/nginx/sbin/ 检查配置文件是否有错 ./nginx -t 运行nginx ./nginx

3.3、注意事项

以上大部分操作都在虚拟环境中操作修改相关文件之后都要将nginx和uwsgi重启附上常用操作合集 uwsgi ------------------ # 进入django项目根目录下面执行 uwsgi --ini uwsgi.ini # 启动 uwsgi --stop uwsgi.pid # 停止 uwsgi --reload uwsgi.pid # 重启 killall -9 uwsgi # 终止所有uwsgi ps -ef|grep uwsgi # 查看是否启动 nginx ------------------ cd /usr/local/nginx/sbin/ # 进入目录 ./nginx # 启动 ./nginx -s reload # nginx重启 ./nginx -s quit # 终止

参考

https://www.django.cn/article/show-4.htmlhttps://www.runoob.com/mysql/mysql-install.html
最新回复(0)