CentOS6.3部署Django+Python3+Apache+Mod_wsgi

2023-11-05 15:20

本文主要是介绍CentOS6.3部署Django+Python3+Apache+Mod_wsgi,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

  1. 系统环境安装python3.6.5【安装位置根据个人习惯安装,我安装在root下】

wget https://www.python.org/ftp/python/3.6.5/Python-3.6.5.tgz

  1. 解压

tar -zxvf Python-3.6.5.tgz

3、进入解压目录:

cd Python-3.6.5

4、编译安装【--enable-shared很总要,开启共享包依赖】

./configure --prefix=/usr/local --enable-shared

Make

Make install

5、创建python3软连接

ln -s /usr/local/bin/python3.6 /usr/bin/python3

6、还提示有包没有安装

cd Python-3.6.5

cp 没有的包 /usr/local/lib64/

cp 没有的包 /usr/lib/

cp 没有的包 /usr/lib64/

 

7系统环境没有pip,安装pip【千万不要给pip升级到18.1,会报错】

sudo yum -y install epel-release

sudo yum -y install python-pip

8、安装完检查

Python出来是系统默认的2.6

Python3是装好的3.6

创建Python虚拟环境,安装项目所需的依赖包

Python3 -m venv /home/myvenv

Cd /home/myvenv/bin

Source activate【进入虚拟环境,接下来一切操作都在虚拟环境里】

  1. 可给pip进行更新操作

Pip install upgrade pip

  1. 安装Django、gcc、mysql

Pip install Django==1.11.12

pip install gcc

yum install mysql-server

yum install mysql-devel

yum install MySQL-Python

  1. 配置mysql开机自启动

chkconfig mysqld on

4、给当前登录用户设置密码、

SET PASSWORD = PASSWORD("newpassword");

5、创建用户及设置权限

CREATE USER 'dog'@'localhost' IDENTIFIED BY '123456';

GRANT ALL ON *.* TO 'pig'@'%';

6、用新用户登录创建数据库

Mysql -u pig -p

Create database databasename;

安装apache和mod-wsgi

1.安装httpd(apache2.4)

yum install httpd
yum install httpd-devel
运行测试,需保证端口不被占用
/sbin/service httpd start
  1. 配置apache自启动

chkconfig httpd on

  1. 安装mod-wsgi

Wget https://github.com/GrahamDumpleton/mod_wsgi/archive/4.6.4.tar.gz

tar xvfz 4.6.4.tar.gz
cd mod_wsgi-4.6.4/
./configure --with-python=/usr/bin/python3
make
make install
  1. 将模块加载到apache
vim /etc/httpd/conf/httpd.conf
在LoadModule部分追加一行
LoadModule wsgi_module /usr/lib64/httpd/modules/mod_wsgi.so
  1. 重启apache服务
/sbin/service httpd restart
6、浏览器查看IP:端口会出来apache的首页

开放80端口,服务器设置安全组的入规则

关闭防火墙

克隆项目及恢复数据库

先下载git

1、wget https://www.kernel.org/pub/software/scm/git/git-1.8.2.3.tar.gz

2、yum -y install libcurl-devel expat-devel curl-devel  gettext-devel openssl-devel zlib-devel

3、yum -y install  gcc perl-ExtUtils-MakeMaker

4、tar zxf git-1.8.2.3.tar.gz cd git-1.8.2.3

5、make prefix=/usr/local/git all

make prefix=/usr/local/git install

6、#添加git到环境变量

echo "export PATH=$PATH:/usr/local/git/bin" >> /etc/bashrc

source /etc/bashrc

7、Git clone 链接·

8、恢复数据库

mysql -D database -u -p < backup.sql

9、下载requiremen.txt里面的包

pip install -i https://pypi.douban.com/simple -r requirements.txt

10、配置文件及静态文件夹:

项目位置:/home/egu_website_project/ egu_website_project

将media文件夹放在/home/egu_website_project/下面

将settings.py放在/home/egu_website_project/ egu_website_project/下面

将egu_website.conf放在/etc/httpd/conf.d/下面

将wsgi.py放在/home/egu_website_project/ egu_website_project/下面

配置如下:

"""

WSGI config for egu_website_project project.

 

It exposes the WSGI callable as a module-level variable named ``application``.

 

For more information on this file, see

https://docs.djangoproject.com/en/1.11/howto/deployment/wsgi/

"""

 

import os

 

import sys

 

from django.core.wsgi import get_wsgi_application

 

# sys.path.append('/root/.pyenv/versions/env_egu_website')

 

PROJECT_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

if PROJECT_DIR not in sys.path:

    sys.path.insert(0, PROJECT_DIR)

 

os.environ["DJANGO_SETTINGS_MODULE"] = "egu_website_project.settings"

 

# os.environ.setdefault("DJANGO_SETTINGS_MODULE", "egu_website_project.settings")

 

application = get_wsgi_application()

 

修改settings.py文件里面DEBUG=True

代码如下:

"""

Django settings for egu_website_project project.

 

Generated by 'django-admin startproject' using Django 1.11.12.

 

For more information on this file, see

https://docs.djangoproject.com/en/1.11/topics/settings/

 

For the full list of settings and their values, see

https://docs.djangoproject.com/en/1.11/ref/settings/

"""

 

import os

import sys

import datetime

 

# Build paths inside the project like this: os.path.join(BASE_DIR, ...)

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

sys.path.insert(0, BASE_DIR)

sys.path.insert(0, os.path.join(BASE_DIR, 'apps'))

sys.path.insert(0, os.path.join(BASE_DIR, 'extra_apps'))

 

# Quick-start development settings - unsuitable for production

# See https://docs.djangoproject.com/en/1.11/howto/deployment/checklist/

 

# SECURITY WARNING: keep the secret key used in production secret!

SECRET_KEY = 'c)##c@il6lru@xz%_iu$h__!s@0c(i)ww3$96oj80df^+ag%8y'

 

# SECURITY WARNING: don't run with debug turned on in production!

# DEBUG = True

DEBUG = True

 

ALLOWED_HOSTS = ['*']

 

AUTH_USER_MODEL = 'users.UserProfile'

# Application definition

 

INSTALLED_APPS = [

    'django.contrib.auth',

    'django.contrib.contenttypes',

    'django.contrib.sessions',

    'django.contrib.messages',

    'django.contrib.staticfiles',

 

    'users.apps.UsersConfig',

    'DjangoUeditor',

    'crispy_forms',

    'django_filters',

    'xadmin',

    'reversion',

    'rest_framework',

    'rest_framework.authtoken',

    'corsheaders',

 

    'common.apps.CommonConfig',

    'home.apps.HomeConfig',

    'activity.apps.ActivityConfig',

    'investment.apps.InvestmentConfig',

    'partner.apps.PartnerConfig',

    'space.apps.SpaceConfig',

    'think_tank.apps.ThinkTankConfig',

    'wechat.apps.WechatConfig',

    'recruitment.apps.RecruitmentConfig',

 

    'mod_wsgi.server',

]

 

MIDDLEWARE = [

    'corsheaders.middleware.CorsMiddleware',

    'django.middleware.security.SecurityMiddleware',

    'django.contrib.sessions.middleware.SessionMiddleware',

    'django.middleware.common.CommonMiddleware',

    'django.middleware.csrf.CsrfViewMiddleware',

    'django.contrib.auth.middleware.AuthenticationMiddleware',

    'django.contrib.messages.middleware.MessageMiddleware',

    'django.middleware.clickjacking.XFrameOptionsMiddleware',

    'django.middleware.gzip.GZipMiddleware',

]

 

CORS_ORIGIN_ALLOW_ALL = True

 

ROOT_URLCONF = 'egu_website_project.urls'

 

TEMPLATES = [

    {

        'BACKEND': 'django.template.backends.django.DjangoTemplates',

        'DIRS': [os.path.join(BASE_DIR, 'templates')]

        ,

        'APP_DIRS': True,

        'OPTIONS': {

            'context_processors': [

                'django.template.context_processors.debug',

                'django.template.context_processors.request',

                'django.contrib.auth.context_processors.auth',

                'django.contrib.messages.context_processors.messages',

            ],

        },

    },

]

 

WSGI_APPLICATION = 'egu_website_project.wsgi.application'

 

# Database

# https://docs.djangoproject.com/en/1.11/ref/settings/#databases

 

DATABASES = {

    'default': {

        'ENGINE': 'django.db.backends.mysql',

        'NAME': "egu_website_database",

        'USER': 'egu',

        'PASSWORD': "egu05231931.",

        'HOST': "127.0.0.1",

        'OPTIONS': {'init_command': 'SET storage_engine=INNODB;SET foreign_key_checks = 0;'}

    }

}

 

# DATABASES = {

#     'default': {

#         'ENGINE': 'django.db.backends.sqlite3',

#         'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),

#     }

# }

 

 

# Password validation

# https://docs.djangoproject.com/en/1.11/ref/settings/#auth-password-validators

 

AUTH_PASSWORD_VALIDATORS = [

    {

        'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',

    },

    {

        'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',

    },

    {

        'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',

    },

    {

        'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',

    },

]

 

# Internationalization

# https://docs.djangoproject.com/en/1.11/topics/i18n/

 

# 设置时区

# LANGUAGE_CODE = 'en-us'

LANGUAGE_CODE = 'zh-hans'  # 中文支持,django1.8以后支持;1.8以前是zh-cn

 

# TIME_ZONE = 'UTC'

TIME_ZONE = 'Asia/Shanghai'

 

USE_I18N = True

 

USE_L10N = True

 

# USE_TZ = True

USE_TZ = False  # 默认是Ture,时间是utc时间,由于我们要用本地时间,所用手动修改为false!!!!

 

# Static files (CSS, JavaScript, Images)

# https://docs.djangoproject.com/en/1.11/howto/static-files/

 

STATIC_URL = '/static/'

 

STATICFILES_DIRS = (

    os.path.join(BASE_DIR, "templates/static"),

)

 

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

 

MEDIA_URL = "/media/"

 

MEDIA_ROOT = os.path.join(BASE_DIR, "media")

 

REST_FRAMEWORK = {

    #'DEFAULT_PERMISSION_CLASSES': (

#     'rest_framework.permissions.IsAuthenticated',

#    ),

    'DEFAULT_AUTHENTICATION_CLASSES': (

       'rest_framework_jwt.authentication.JSONWebTokenAuthentication',

        'rest_framework.authentication.BasicAuthentication',

        'rest_framework.authentication.SessionAuthentication',

    ),

    'DEFAULT_PARSER_CLASSES': (

        'rest_framework.parsers.JSONParser',

        'rest_framework.parsers.FormParser',

        'rest_framework.parsers.MultiPartParser',

        # 'rest_framework.parsers.FileUploadParser'

    ),

 

    # 'DEFAULT_THROTTLE_CLASSES': (

    #     'rest_framework.throttling.AnonRateThrottle',

    #     'rest_framework.throttling.UserRateThrottle'

    # ),

    # 'DEFAULT_THROTTLE_RATES': {

    #     'anon': '2/minute',

    #     'user': '3/minute'

    # }

}

 

UEDITOR_SETTINGS = {

    'config': {

        "toolbars": [['source', '|', 'undo', 'redo', '|',

                      'bold', 'italic', 'underline', 'formatmatch', 'autotypeset', '|',

                      'forecolor', 'backcolor', '|',

                      'link', 'unlink']]

    },

    'upload': {

        # 'imageManagerListPath': '',

        # 'imageUrlPrefix': 'http://0.0.0.0:8000'

        # 'imageUrlPrefix': 'http://192.168.0.25:8000'

        'imageUrlPrefix': 'http://118.190.177.7'

    }

}

 

# 亿美软通短信平台设置

YIMEI_SETTINGS = {

    'cdkey': '8SDK-EMY-6699-RIVTL',

    'password': '101010',  # 正确

    # 'password': '101011',

    # 'regex_error': r'<error>(.+?)</error>',

    'debug': {

        # 'state': True,

        'state': False,

        'response': True

    }

}

 

# 正则表达式

REGEX = {

    'phone': '^1([358][0-9]|4[579]|66|7[0135678]|9[89])[0-9]{8}$',

    'all_phone': '^((0\d{2,3}-\d{7,8})|(1[34578]\d{9}))$',

    'password': '^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{8,}$',

    'username': '^[\u4e00-\u9fff\w\-]{2,20}$',

    'first_name': '^[\u4e00-\u9fffA-Za-z]{0,10}$',

}

# 验证错误信息

VALIDATE_ERRORS = {

    'username': {

        'null': '用户名不能为空@.@',

        'regex': '用户名格式不对,长度必须在2到20且仅包含中文字母数字-_'

    },

    'phone': {

        'null': '手机号码不能为空@.@',

        'regex': '手机号码格式不对,请输入正确的手机号码@.@'

    },

    'password': {

        'null': '密码不能为空@.@',

        'regex': '密码长度必须不少于8位,且必须包含数字和字母@.@'

    },

    'first_name': {

        'regex': '真实姓名格式不对,必须不大于10位且只包含中文字母@.@'

    }

}

 

JWT_AUTH = {

    'JWT_EXPIRATION_DELTA': datetime.timedelta(days=7),

    'JWT_AUTH_HEADER_PREFIX': 'JWT',

}

 

AUTHENTICATION_BACKENDS = (

    'users.views.CustomBackend',

)

 

此时运行python manage.py runserver o.o.o.o:8000可以出来项目前端页面

 

Apache配置文件

两个位置:

/etc/httpd/conf/httpd.conf

/etc/httpd/conf.d/egu_website.conf

httpd.conf文件没有需要特别修改的

egu_website.conf配置如下:

 

# WSGIPythonHome "/root/.pyenv/versions/egu-website-py3.6.4"

#WSGIPythonHome "/root/.pyenv/versions/3.6.4/envs/egu-website-py3.6.4"

# WSGIPythonPath /:/var/www/html/ENV/lib/python2.7/site-packages:/var/www/html/wsgi

# WSGIPythonPath /home/egu_website_project:/root/.pyenv/versions/3.6.4/envs/env-egu-website/lib/python3.6/site-packages

 

SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1

 

#LoadModule wsgi_module "/home/env3-egu-website/lib/python3.6/site-packages/mod_wsgi/server/mod_wsgi-py36.cpython-36m-x86_64-linux-gnu.so"

WSGIPythonHome "/home/myvenv"

 

 

# listen 8000

<VirtualHost *:80>

    ServerName webtest.egu360.com

    ServerAlias webtest.egu360.com

    # ServerAdmin yangdy@egu360.com

 

    Alias /media/ /home/egu_website_project/media/

    Alias /static/ /home/egu_website_project/static/

 

    <Directory /home/egu_website_project/media>

         # Require all granted

       Order deny,allow

       Allow from all

    </Directory>

 

    <Directory /home/egu_website_project/templates/static>

        # Require all granted

       Order deny,allow

       Allow from all

    </Directory>

 

    WSGIScriptAlias / /home/egu_website_project/egu_website_project/wsgi.py

    # WSGIPythonPath /home/egu_website_project:/root/.pyenv/versions/env-egu-website

    # WSGIDaemonProcess egu360.com python-path=/home/egu_website_project:/root/.pyenv/versions/egu-website-py3.6.4/lib/python3.6/site-packages

    #  WSGIDaemonProcess egu360.com python-path=/root/.pyenv/versions/3.6.4/envs/egu-website-py3.6.4/lib/python3.6/site-packages

    # WSGIProcessGroup egu360.com

 

    <Directory /home/egu_website_project/egu_website_project>

    <Files wsgi.py>

        # Require all granted

       Order deny,allow

       Allow from all

    </Files>

    </Directory>

</VirtualHost>

 

修改项目属主和权限

chmod -R 755 /home/egu_website_project/ egu_website_project

# chown -R apache:apache /home/egu_website_project/ egu_website_project

访问域名可以看到项目已经运行起来

问题记录

  1. mysql表的字符集错误,在数据类型为varchar的字段添加中文,发现数据库里面存的是问号。

原因:mysql安装完,、etc/my.cnf配置文件没有设置默认字符集,所以表在django初始建表时是lantin1,不是utf8,需要修改下表的字符集设置。

查看表的字符集

Show  create table 表名

1.1修改表的默认字符集设置

alter table 表名 default character set utf8;

alter table activity_vote modify rule longtext  character set utf8;

1.2修改配置文件,这样以后在创建时就是utf8了。

如下配置:

1.3进入mysql,查看字符集

Show variable like ‘%char%’;

  1. 华为云服务器ssh远程连接,不操作10分钟左右就自己断了。

原因:这是系统处于安全的配置,先要修改,步骤如下:

2.1远程连接服务器,修改/etc/profile

Vim /etc/profile

修改链接时间

export TMOUT=32400

代表允许链接9个小时

  1. 上传图片文件夹没有权限的问题

原因:没有给media文件夹赋权

打开/etc/httpd/conf/httpd.conf

查看user、group组拥有者,我的是apache

给/home/egu*/egu*/media文件赋权:

Chgrp -R apache media/

Chgrp -R g+w media/

重启apache服务

Service httpd restart

这篇关于CentOS6.3部署Django+Python3+Apache+Mod_wsgi的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/350736

相关文章

Apache 高级配置实战之从连接保持到日志分析的完整指南

《Apache高级配置实战之从连接保持到日志分析的完整指南》本文带你从连接保持优化开始,一路走到访问控制和日志管理,最后用AWStats来分析网站数据,对Apache配置日志分析相关知识感兴趣的朋友... 目录Apache 高级配置实战:从连接保持到日志分析的完整指南前言 一、Apache 连接保持 - 性

apache的commons-pool2原理与使用实践记录

《apache的commons-pool2原理与使用实践记录》ApacheCommonsPool2是一个高效的对象池化框架,通过复用昂贵资源(如数据库连接、线程、网络连接)优化系统性能,这篇文章主... 目录一、核心原理与组件二、使用步骤详解(以数据库连接池为例)三、高级配置与优化四、典型应用场景五、注意事

python3 pip终端出现错误解决的方法详解

《python3pip终端出现错误解决的方法详解》这篇文章主要为大家详细介绍了python3pip如果在终端出现错误该如何解决,文中的示例方法讲解详细,感兴趣的小伙伴可以跟随小编一起了解一下... 目录前言一、查看是否已安装pip二、查看是否添加至环境变量1.查看环境变量是http://www.cppcns

Web技术与Nginx网站环境部署教程

《Web技术与Nginx网站环境部署教程》:本文主要介绍Web技术与Nginx网站环境部署教程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、Web基础1.域名系统DNS2.Hosts文件3.DNS4.域名注册二.网页与html1.网页概述2.HTML概述3.

Nginx使用Keepalived部署web集群(高可用高性能负载均衡)实战案例

《Nginx使用Keepalived部署web集群(高可用高性能负载均衡)实战案例》本文介绍Nginx+Keepalived实现Web集群高可用负载均衡的部署与测试,涵盖架构设计、环境配置、健康检查、... 目录前言一、架构设计二、环境准备三、案例部署配置 前端 Keepalived配置 前端 Nginx

对Django中时区的解读

《对Django中时区的解读》:本文主要介绍对Django中时区的解读方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录背景前端数据库中存储接口返回AI的解释问题:这样设置的作用答案获取当前时间(自动带时区)转换为北京时间显示总结背景设置时区为北京时间 TIM

ubuntu如何部署Dify以及安装Docker? Dify安装部署指南

《ubuntu如何部署Dify以及安装Docker?Dify安装部署指南》Dify是一个开源的大模型应用开发平台,允许用户快速构建和部署基于大语言模型的应用,ubuntu如何部署Dify呢?详细请... Dify是个不错的开源LLM应用开发平台,提供从 Agent 构建到 AI workflow 编排、RA

ubuntu16.04如何部署dify? 在Linux上安装部署Dify的技巧

《ubuntu16.04如何部署dify?在Linux上安装部署Dify的技巧》随着云计算和容器技术的快速发展,Docker已经成为现代软件开发和部署的重要工具之一,Dify作为一款优秀的云原生应用... Dify 是一个基于 docker 的工作流管理工具,旨在简化机器学习和数据科学领域的多步骤工作流。它

Nginx部署React项目时重定向循环问题的解决方案

《Nginx部署React项目时重定向循环问题的解决方案》Nginx在处理React项目请求时出现重定向循环,通常是由于`try_files`配置错误或`root`路径配置不当导致的,本文给大家详细介... 目录问题原因1. try_files 配置错误2. root 路径错误解决方法1. 检查 try_f

Django之定时任务django-crontab的实现

《Django之定时任务django-crontab的实现》Django可以使用第三方库如django-crontab来实现定时任务的调度,本文主要介绍了Django之定时任务django-cront... 目录crontab安装django-crontab注册应用定时时间格式定时时间示例设置定时任务@符号