Centos7部署django项目详细步骤(智障级uwsgi+nginx+mysql)


本人所用为腾讯云服务器

外部工具使用XFTP上传文件

下列步骤为本人亲测,适合新手

1. 更新系统软件包

yum update -y

2. 安装软件管理包和可能使用的依赖

yum -y groupinstall "Development tools"
yum install openssl-devel bzip2-devel expat-devel gdbm-devel readline-devel sqlite-devel psmisc libffi-devel

3. 下载Pyhton3到/usr/local 目录

注意:所有环境尽量使用跟项目一致版本进行安装,我这边使用得3.9.4

  1. https://www.python.org/ftp/python/3.9.4/下载所需要的版本
  2. 通过Ftp上传到目录-> 解压tar -zxvf Python-3.9.4.tgz ->进入Python包的路径cd Python-3.9.4/
  3. 编译安装到自己指定路径 ./configure --prefix=/usr/local/python3
  4. 安装python3 依次执行命令:make-> 命令:make install
  5. 安装完成之后,建立软链接,添加变量,这样的好处是方便我们在终端中能够直接使用python3
    命令:ln -s /usr/local/python3/bin/python3.9 /usr/bin/python3
  6. Python3安装完成之后pip3也一块安装完成,不用再单独安装 这里给pip3也建立软链接
    命令:ln -s /usr/local/python3/bin/pip3.9 /usr/bin/pip3
  7. 查看是否成功安装Python3和pip3 依次执行命令:python3 -V -> pip3 -V

4. 安装virtualenv虚拟环境

  1. pip3 install virtualenv
  2. 建立软连接ln -s /usr/local/python3/bin/virtualenv /usr/bin/virtualenv
  3. 安装成功在根目录下建立文件夹,主要用于存放env 命令:mkdir -p /data/env
  4. 切换到/data/env/下,创建虚拟环境。命令:virtualenv --python=/usr/bin/python3 djangoPJenv
    注意:这里的djangoenv名称可以自己定义但是后面步骤一定要跟你所定义的名称相同,然后进入/data/env/djangoenv/bin
  5. 启动虚拟环境:source activate (这里virtualenv的命令自行百度很简单)

5. 虚拟环境里用pip3安django和uwsgi,以及项目依赖包

  1. pip3 install django==3.2.5 (需要指定安装和你项目相同的版本)
  2. pip3 install uwsgi
    注意:uwsgi要安装两次,一次在虚拟环境中,另一次退出虚拟环境进行安装
  3. 给uwsgi建立软链接 命令:ln -s /usr/local/python3/bin/uwsgi /usr/bin/uwsgi
  4. 安装项目依赖包
    4.1 导出当前本地项目依赖包pip freeze > requirements.txt
    注意:requirements.txt文件部分模块显示了 @ file:///...,而不是具体的版本号,可以暂时考虑使用如下命令生成 requirements.txt 文件,pip list --format=freeze > requirements.txt,使用上述命令导出的文件中,会包含如下几个包:distribute,pip,setuptools,wheel,建议手动删除!
  5. 可以用XFTP把requirements.txt文件丢到一个目录下,进入/data/env/djangoenv/bin, 启动虚拟环境:source activate,然后找到requirements.txt目录,执行命令:pip install -r requirements.txt

6. MYSQL安装

  1. 首先进入网址:https://dev.mysql.com/downloads/repo/yum/
  2. 根据centos版本选择,执行命令:cd /home/ ->wget https://repo.mysql.com//mysql80-community-release-el7-5.noarch.rpm
    注意:https://repo.mysql.com//后面这一串是根据在网页上自行选择的版本复制过来的
  3. 下载完成后,进行安装rpm -ivh mysql80-community-release-el7-5.noarch.rpm
    注意:这里安装会让你选择MYSQL版本,根据自己环境需要,我这里选的8.0,让你选PHP的话无所谓啥版本都行
  4. 前期工作全部做好了,我们正式的去安装MySQL 命令:sudo yum install mysql-community-server
    注意:执行上面的命令进行安装,这个步骤可能需要点时间,最后如果出现completed,那就搞定了
  5. 设置MySQL,设置开机启动:systemctl enable mysqld.service,检查是否设置成功:systemctl list-unit-files | grep mysqld
    注意:大家都是干代码的,这个怎么看成功我就不说了,免得拉低大家智商
  6. 开启MySQL服务:systemctl start mysqld.service
  7. 修改MySQL密码,查看默认密码:grep 'temporary password' /var/log/mysqld.log
  8. 登录MySQL:mysql -u root -p (用获取的初始密码)
  9. mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'xxxxxx';
    注意:MySQL8.0修改密码需要有大小写字母、数字、特殊字符组合,xxxxxx就是你要输入的密码
  10. 执行命令生效:mysql>flush privileges;
  11. 这里其实就安装完成了,如果你想外网比如说navicat访问连接,那就继续看下去
    mysql> use mysql;
    mysql> update user set host='%' where user='root';
    授权用户名的权限,赋予任何主机访问数据的权限
    mysql> GRANT ALL PRIVILEGES ON . TO 'root'@'%' WITH GRANT OPTION;
    mysql> FLUSH PRIVILEGES;
    注意: 如果上面授权报错用,可以使用下面的
    use mysql;
    update user set host='%' where user='root';
    Grant all privileges on test.* to 'root'@'%';
    通过navicat测试远程连接数据库
  12. 导入本地的数据库数据到服务器
    进入服务器数据库
    mysql -u root -p
    创建与项目中相应的名称的数据库
    create database 数据库名;
    use 数据库名
    source /你导入sql文件的目录地址(关于这里你需要导入的sql文件怎么导出,自行百度太过简单)

7. 将本地项目文件压缩打包,上传到服务器目录解压

  1. 我这里是在home下mkdir Chris,用的XFTP将压缩文件上传
    注意: 这里看你电脑用的RAR压缩还是zip或者其他的,我这里用的RAR,其他的百度下
  2. 在服务器中解压,可以先安装支持RAR的工具(根据自己需要)
    32位:
    命令:wget https://www.rarlab.com/rar/rarlinux-5.7.1.tar.gz
    64位
    命令:wget https://www.rarlab.com/rar/rarlinux-x64-5.7.1.tar.gz
  3. 解压
    tar -zxvf rarlinux-5.7.1.tar.gz # 对应32位下载的
    tar -zxvf rarlinux-x64-5.7.1.tar.gz # 对应64位下载的
    命令:cd rar 进入解压后的rar文件夹
    命令:make 没有任何参数,直接make就OK
    如果出现下面的信息,就是安装成功了:
    mkdir -p /usr/local/bin
    mkdir -p /usr/local/lib
    cp rar unrar /usr/local/bin
    cp rarfiles.lst /etc
    cp default.sfx /usr/local/lib
    执行解压操作:
    rar x test.rar ->解压 test.rar 到当前目录
    这里压缩命令了解即可rar test.rar ./test/ # 将 test目录打包为 test.rar

8. 通过python3 manage.py runserver 运行一下项目

注意: 如果能正常启动则进行下一步,不能正常运行往上检查。这里需要注意使用python3来执行manage.py,否则会出现报错情况!

9. 配置uwsgi文件(请睁大小眼睛)

我的网站项目路径是/home/Chris/Manage_pj,在项目根目录下创建 项目名称.xml (例如我的就是 Manage_pj.xml) 编辑该文件:

<uwsgi>
   <socket>127.0.0.1:8000</socket><!-- 内部端口,自定义 -->
   <chdir>/home/Chris/Manage_pj</chdir><!-- 项目路径 -->
   <module>Manage_pj.wsgi</module><!-- mysite为wsgi.py所在目录名-->
   <processes>4</processes><!-- 进程数 -->
   <daemonize>uwsgi.log</daemonize><!-- 日志文件 -->
</uwsgi>

10. 安装nginx和配置nginx.conf文件

  1. cd /home/ 执行命令:wget http://nginx.org/download/nginx-1.18.0.tar.gz 这里安装的是nginx-1.18.0.tar.gz 版本
  2. 下载完成后,执行解压命令:tar -zxvf nginx-1.13.7.tar.gz
  3. 进入解压后的nginx-1.13.7文件夹,依次执行以下命令:
    ./configure
    make
    make install
    nginx一般默认安装好的路径为/usr/local/nginx,推荐在/usr/local/nginx/conf/中先备份一下nginx.conf文件,防止我们出错。命令:cp nginx.conf nginx.conf.bak
  4. 然后打开nginx.conf,把原来的内容删除,直接加入以下内容:
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    server {
        listen 80; # 这里nginx监听得是80端口,浏览器输入域名不需要加端口了就
        server_name  127.0.0.1:80; #改为自己的域名,没域名修改为127.0.0.1:80
        charset utf-8;
        location / {
           include uwsgi_params;
           uwsgi_pass 127.0.0.1:8000;  #端口要和uwsgi里配置的一样
           uwsgi_param UWSGI_SCRIPT Manage_Pj.wsgi;  #wsgi.py所在的目录名+.wsgi
           uwsgi_param UWSGI_CHDIR /home/Chris/Manage_Pj; #项目路径
        }
        location /static/ {
        alias /home/Chris/Manage_Pj/app01/static/; #静态资源路径
        }
    }
}
  1. 进入/usr/local/nginx/sbin/目录 执行 ./nginx -t 命令先检查配置文件是否有错,没有错就执行以下命令:./nginx,终端没有任何提示就证明nginx启动成功。

到此安装结束:你可以尝试浏览器输入服务器域名(不要端口,nginx.conf中配置了listen 80,是http默认端口,如果不能成功或者静态资源无法加载,请看下面重点注意事项)

重点注意事项(必看):

  1. 如果你的项目中的应用含有静态文件,你需要在setting.py中进行STATIC_ROOT的设置STATIC_ROOT = os.path.join(BASE_DIR, 'static')#指定样式收集目录
  2. Setting中ALLOWED_HOSTS = ['*'],DEBUG=False设置
  3. 如果修改了Django文件或者一些其他的配置,一定要重启uwsgi和Nginx,否则不会生效!
    查看Uwsgi进程
    ps -ef|grep uwsgi
    用kill方法把uwsgi进程杀死,然后启动uwsgi
    killall -9 uwsgi
    启动方法
    uwsgi -x mysite.xml
    Nginx平滑重启方法
    /usr/local/nginx/sbin/nginx -s reload
    上面是重启uswgi和Nginx的步骤,大家每次修改之后,调用上面的方法即可。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM