Centos下Django部署到Apache

Centos+Django+Apache部署

版本:

python3.6

Centos7.6

Django3.2

Apache2.4

1. 安装python3,默认3.6
yum install python3 python3-devel
2. 若与python2冲突,则删除python2开发人员版
yum erase python-devel
3. 安装Apache
yum install httpd httpd-devel
4. 下载mod_wsgi,地址`https://github.com/GrahamDumpleton/mod_wsgi/releases解压
tar xvfz mode_wsgi-X-Y.tar.gz
5. 进入解压后路径
6. 配置文件,指定python3
./configure --with-python=/usr/bin/python3
7. make
make
8. 安装mod_wsgi
make install
9. 查找mod_wsgi路径
find / -name "mod_wsgi*"

找到

/usr/lib64/httpd/modules/mod_wsgi.so
10. 打开Apache配置文件
vim /etc/httpd/conf/httpd.conf
11. 添加一行
LoadModule wsgi_module modules/mod_wsgi.so
12. 重启Apache服务
systemctl restart httpd
13. 为了直观展示文件夹结构,安装tree
yum install tree
14. 将django项目上传到/var/www/html下
/var/www/html/mysite/mysite/wsgi.py
15. 打开Apache配置文件
vim /etc/httpd/conf/httpd.conf
16. 在步骤11里我们加上的LoadModule wsgi_module modules/mod_wsgi.so后再加入一些代码。加入后,应该像下面这样
LoadModule wsgi_module modules/mod_wsgi.so
WSGIScriptAlias / /var/www/html/mysite/mysite/wsgi.py

WSGIPythonPath /var/www/html/mysite
<Directory /var/www/html/mysite/mysite>
<Files wsgi.py>
Require all granted
</Files>
</Directory>

Django文档里做了说明

WSGIScriptAlias / /path/to/mysite.com/mysite/wsgi.py
WSGIPythonHome /path/to/venv
WSGIPythonPath /path/to/mysite.com
<Directory /path/to/mysite.com/mysite>
<Files wsgi.py>
Require all granted
</Files>
</Directory>

WSGIScriptAlias 行的第一项是你所期望的应用所在的基础 URL 路径( / 根 url),第二项是 “WSGI 文件” 的位置——一般位于项目包之内(本例中是 mysite)。这告诉 Apache 用该文件中定义的 WSGI 应用响应指定 URL 下的请求。
如果你在某个 virtual environment 1 内为应用安装项目的 Python 依赖,将该 virtualenv 的路径添加至 WSGIPythonHome 。参考 mod_wsgi virtualenv guide 指南获取更多细节。
WSGIPythonPath 行确保你的项目包能从 Python path 导入;换句话说, import mysite 能正常工作。
1 片段确保 Apache 能访问文件 wsgi.py 文件。

值得注意的是,假如你没有用虚拟环境,而是系统环境,那么WSGIPythonHome /path/to/venv就不应该存在。通过对比官方文档和我上面给的代码,不难发现这一点。

17. 重启apache
systemctl restart httpd

到这里,Django已经可以说50%部署到Apache上了。剩余的50%是Django静态文件等

18. 安装mysql

wget http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm
yum -y install mysql57-community-release-el7-10.noarch.rpm
yum -y install mysql-community-server

查看默认密码


grep "password" /var/log/mysqld.log

启动数据库


systemctl start mysqld

登录数据库

mysql -uroot -p

修改默认密码,将NewPassWord1.改成自己要设的密码

ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewPassWord1.';

更改数据库编码方式

  1. 通过配置文件更改

    vim /etc/my.cnf
    

    加入以下代码

    [client]
    default-character-set = utf8mb4
    [mysql]
    default-character-set = utf8mb4
    [mysqld]
    character-set-client-handshake = FALSE
    character-set-server = utf8mb4
    collation-server = utf8mb4_unicode_ci
    init_connect='SET NAMES utf8mb4'
    

    重启数据库

    systemctl restart mysqld
    

    登录数据库,查看数据库编码

    SHOW VARIABLES WHERE Variable_name LIKE 'character_set_%' OR Variable_name LIKE 'collation%';
    
  2. 建立table后更改

    ALTER DATABASE database_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
    ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
    
  3. Django编码更改,打开settings.py,找到DATABASE设置

    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.mysql',
            'OPTIONS': {'charset': 'utf8mb4'},
            ...
        }
    }
    
19. 安装mysqlclient
pip3 install mysqlclient

若出现缺少Python.h等文件的错误,安装python3-devel

yum install python3-devel
21. Django配置,打开settings.py
...

DEBUG = False #调试关闭

ALLOWED_HOSTS = ["*"] #允许所有地址访问
...

# Application definition
INSTALLED_APPS = [
    'polls.apps.PollsConfig',#注册app
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]

...

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'database_name',
        'USER': 'user_name',
        'PASSWORD': 'password',
        'HOST': '',
        'PORT': '',
        'OPTIONS': {'charset': 'utf8mb4'},#编码
    }
}

...

LANGUAGE_CODE = 'zh-hans'

TIME_ZONE = 'Asia/Shanghai'

USE_I18N = True

USE_L10N = True

USE_TZ = False #禁止

# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/2.0/howto/static-files/

STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR,'static')

DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'

由于我们用到了名为database_name的数据库,所以需要去MySQL新建一个

CREATE DATEBASE database_name;

返回到manage.py所在文件夹,生成数据库迁移文件

python3 manage.py makemigrations

执行数据库迁移

python3 manage.py migrate

值得注意的是,每当模型改变时,都应该执行上面两句命令。
另外,注意到我们在settings.py里加入了这样一句

STATIC_ROOT = os.path.join(BASE_DIR,'static')

这是为了将Django里各个app的静态文件收集到工程文件下的static文件夹下 ,是Django部署到Apache上的必要步骤。接下来,执行收集

python3 manage.py collectstatic

将会看到/mysite/(最外层mysite)下生成了static/

21. Apache配置

编辑Apache主配置文件

vim /etc/httpd/conf/httpd.conf

经过前面的配置,你应该发现该文件最后部分如下

LoadModule wsgi_module modules/mod_wsgi.so
WSGIScriptAlias / /var/www/html/mysite/mysite/wsgi.py

WSGIPythonPath /var/www/html/mysite
<Directory /var/www/html/mysite/mysite>
<Files wsgi.py>
Require all granted
</Files>
</Directory>

现在,加上些新内容,让它看起来是下面这样

LoadModule wsgi_module modules/mod_wsgi.so

Alias /media/ /var/www/html/mysite/media/
Alias /static/ /var/www/html/mysite/static/

WSGIScriptAlias / /var/www/html/mysite/mysite/wsgi.py
WSGIPythonPath /var/www/html/mysite

<Directory /var/www/html/mysite/mysite>
<Files wsgi.py>
Require all granted
</Files>
</Directory>

新加入的两行和前面Django静态文件部署相对应

Alias /media/ /var/www/html/mysite/media/
Alias /static/ /var/www/html/mysite/static/
22. 最后,清晰的目录结构如下
var/www/html/mysite/
                    .
                    |
                    ├── manage.py
                    ├── mysite
                    │   ├── __init__.py
                    │   ├── __pycache__
                    │   ├── settings.py
                    │   ├── urls.py
                    │   └── wsgi.py
                    ├── polls
                    │   ├── admin.py
                    │   ├── apps.py
                    │   ├── forms.py
                    │   ├── __init__.py
                    │   ├── migrations
                    │   ├── models.py
                    │   ├── __pycache__
                    │   ├── static
                    │   ├── templates
                    │   ├── tests.py
                    │   ├── urls.py
                    │   └── views.py
                    └── static
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值