注意:本文编写时用到的相关包都放到了这里,你可以从这里拿包来快速按照本文介绍来进行部署。也可以按照本文各个章节介绍的方式去各个地方下载最新的包,但随着开源社区的更新、部署步骤不保证与本文的一模一样
源项目仓库地址:https://github.com/liangliangyy/DjangoBlog
阅读Readme文档参照步骤进行安装
强调说明:
| 按照之前所述分层的思想,mysql数据库应该部署到单独的服务器上 |
| 没错,确实应该如此 |
| 但如果只是试验阶段,你把mysql数据库也部署到web层服务器上也未尝不可, |
| 待你熟悉整体流程之后,再把mysql抽离到他本应该在的数据库层,也只是 |
| 换个远程账号,去登录远程mysql的ip地址而已 |
注意,我们的代码包里依赖的是mysql,而不是marriadb,虽然二者大部分相同,但在依赖库方面可能存在差异
如果你用mariadb而没有安装mysql,你后续pip3.10 install mysqlclient会报错
从这里找到安装yum源的rpm包:https://dev.mysql.com/downloads/repo/yum/
| |
| rpm -ivh mysql80-community-release-el7-11.noarch.rpm |
| |
| |
| yum install mysql-devel mysql-server -y |
| |
| |
| [mysqld] |
| 。。。 |
| default-time-zone=timezone |
| 修改为 |
| default-time-zone = '+8:00' |
| |
| |
| date |
| timedatectl set-timezone 'Asia/Shanghai' |
| |
| |
| rm -rf /var/lib/mysql |
| |
6、初始密码在日志里:cat /var/log/mysqld.log
7、用初始密码进入后必须设置密码
| |
| ALTER USER 'root'@'localhost' IDENTIFIED BY 'egon@123Abc'; |
8、创建好库,一会应用会注入数据
| CREATE DATABASE `djangoblog` ; |
1、系统自带openssl为1.0版,python3.10依赖更高版本1.1版,必须先编译安装好1.1版的openssl,才能继续下一步,不能并行编译安装
| wget https://www.openssl.org/source/openssl-1.1.1n.tar.gz --no-check-certificate |
| tar xf openssl-1.1.1n.tar.gz |
| cd openssl-1.1.1n |
| ./config --prefix=/usr/local/openssl |
| make && make install |
2、安装python3.10解释器 # 下载的慢,就先用你浏览器下载(前提你本机的网络有特异功能,你懂的),然后拖到服务器里
| wget https://www.python.org/ftp/python/3.10.12/Python-3.10.12.tgz |
| tar xf Python-3.10.12.tgz |
| yum install libffi* libffi-devel* -y |
| ./configure |
| make && make install |
| |
| vim /etc/profile 添加两行 |
| PATH=/usr/local/python3.10.12/bin/:$PATH |
| export PATH |
| |
| source /etc/profile |
下载包
| mkdir /blog && cd /blog |
| 上传包DjangoBlog-master.zip |
| unzip DjangoBlog-master.zip |
| cd DjangoBlog-master |
| |
| |
| mkdir ~/.pip |
| cat > ~/.pip/pip.conf << EOF |
| [global] |
| index-url = https://mirrors.aliyun.com/pypi/simple/ |
| EOF |
| |
| Windows系统:更改 %HOME%\pip\pip.ini 文件,文件内容如上 |
| |
| |
| cd DjangoBlog-master |
| pip3.10 install -Ur requirements.txt |
| |
| |
| pip3.10 --no-cache-dir install mysqlclient==1.4.4 |
修改djangoblog/setting.py 修改数据库配置,如下所示:
DATABASES = {
‘default’: {
‘ENGINE’: ‘django.db.backends.mysql’,
‘NAME’: ‘djangoblog’,
‘USER’: ‘root’,
‘PASSWORD’: ‘egon@123Abc’,
‘HOST’: ‘host’,
‘PORT’: 3306,
}
}
修改时区
| 1 |
| 2 |
| 3 LANGUAGE_CODE = ‘en-us’ |
| 4 |
| 5 TIME_ZONE = ‘UTC’ |
| 6 |
| 7 USE_I18N =True |
| 8 |
| 9 USE_L10N =True |
| 10 |
| 11 USE_TZ = True |
| 12 |
| 13 |
| 14 |
| 15 |
| 16 LANGUAGE_CODE =‘zh-hans’ |
| 17 |
| 18 TIME_ZONE =‘Asia/Shanghai’ |
| 19 |
| 20 USE_I18N =True |
| 21 |
| 22 USE_L10N =True |
| 23 |
| 24 USE_TZ =False |
| cd DjangoBlog-master |
| python3.10 manage.py makemigrations |
| python3.10 manage.py migrate |
| |
| python3.10 manage.py createsuperuser |
| |
| |
| python3.10 manage.py create_testdata |
可以收集静态文件
| 检索各个app下的static目录下的静态文件拷贝到一起 |
| python3.10 manage.py collectstatic --noinput |
| python3.10 manage.py compress --force |
| |
| 了解知识: |
| 在Django web框架中,静态文件主要指那些没有被Django视图处理的文件,主要包括CSS文件、JavaScript文件以及图片等。在开发过程中,这些文件通常分散在各个应用的static目录中,这样相对分散,不利于部署和服务。 |
| 在Django中,有一个叫做 collectstatic 的命令,它的作用主要是将各个应用下的静态文件收集到一起,以便于在部署时使用。 |
| 你可以使用以下命令来收集静态文件: |
| plaintext |
| python manage.py collectstatic |
| 当你运行这个命令时,Django会在所有的INSTALLED_APPS列表中找到各个应用内部的static目录,然后将找到的所有静态文件复制到一个共同的目录下。这个共同的目录就是你在settings.py中设置的STATIC_ROOT。 |
| 在部署时,你只需要将这个STATIC_ROOT目录放到web服务器(如Nginx、Apache)可以找到的地方,配置好相应的URL,就可以通过网络访问这些静态文件了。 |
| 在HTML模板中,你可以使用如下语句来引用静态文件: |
| plaintext |
| {% load static %} |
| <img src="{% static "my_app/image.jpg" %}" alt="My image" /> |
| 上面的语句中,{% load static %}被用来加载静态文件,{% static "my_app/image.jpg" %}被用来获取静态文件的URL。其中my_app/image.jpg是从STATIC_ROOT目录开始的相对路径,而不是从应用的static目录开始。 |
可以用内置的web服务先启动有验证一下,验证完了关掉,我们用uwsgi服务来启
| python3.10 manage.py runserver 0.0.0.0:8999 |
安装报错:
| uWSGI compiling server core |
| [gcc -pthread] core/utils.o |
| gcc: error: unrecognized command line option ‘-Wformat-signedness’ |
| |
| ===问题与解决方法 |
| gcc版本过低,。'-Wformat-signedness' 是 GCC 5.0 之后引入的一个编译选项,如果你的 GCC 版本低于 5.0,那么编译器就不认识这个选项,从而导致错误。 |
| 查看当前系统中 |
| |
| gcc version 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC) |
| |
| |
| |
| yum -y install centos-release-scl |
| yum -y install devtoolset-7 |
| |
| |
| scl enable devtoolset-7 bash |
| |
| |
| gcc |
还可以编译安装
| wget http://projects.unbit.it/downloads/uwsgi-latest.tar.gz |
| tar zxvf uwsgi-latest.tar.gz |
| cd uwsgi-latest |
| make && make install |
https://docs.djangoproject.com/zh-hans/5.0/howto/deployment/wsgi/uwsgi/
尽量不要在配置后夹注释,可能会导致配置失败
| cat > /aaa/uwsgi.ini << EOF |
| [uwsgi] |
| |
| socket = :8080 |
| |
| |
| |
| chdir = /blog/DjangoBlog-master/ |
| |
| module = djangoblog.wsgi:application |
| |
| |
| processes = 4 |
| |
| threads = 2 |
| master=True |
| pidfile=/tmp/project-master.pid |
| vacuum=True |
| max-requests=5000 |
| daemonize=/var/log/uwsgi.log |
| |
| EOF |
| cd /aaa |
| uwsgi |
| cat /var/log/uwsgi.log |
| netstat -an |grep 8080 |
配置
vi /etc/nginx/conf.d/default.conf
| server { |
| listen 8111; |
| server_name localhost; |
| |
| location / { |
| |
| include uwsgi_params; |
| |
| uwsgi_pass 127.0.0.1:8080; |
| } |
| } |
启动
| systemctl restart nginx |
| netstat -an |grep 8111 |
如果你在nginx里用uwsgi_pass指令,那么uwsgi.init就要开启uwsgi的端口
如果你在nginx用proxy_pass指令,那么uwsgi.ini里就应该开启http的端口
上面的步骤我们部署完了一台web服务器,web服务器通过nginx对外暴漏的是http协议端口
所以负载均衡层如果用的是nginx的话,需要使用指令proxy_pass
django+uwsgi+daphne+supervisor生产环境部署
https://egonlin.com/?p=9204