宝塔部署Python Django(单用户项目)同项目分不同域名,不同数据库等


前言:应用场景

Python Django(单用户)项目:同项目不同用户使用、不同域名访问、不同数库等。

(当然你的项目本身就支持多用户方式就不考虑)

优点:代码更新方便,只更新一个项目主目录即可。

缺点:数据库结构发生变化需同步结构


一、宝塔--网站-Python项目:

        按正常创建一个新的python项目一样,创建首个项目,

运行方式:gunicorn

网络协议:wsgi。

项目根目录下会自动生成gunicorn_conf.py文件

(项目录可以做为临时主体,操作数据库等使用,或着是你自己多个用户的其中一个,看个人情况定吧)

01.jpg


二、创建成功确保项目可正常运行

1,配置好数据库等等,在Python项目中,点击终端运行:

python3 manage.py makemigrations
python3 manage.py migrate

以上其它就不详细说了,只要项目正常运行没问题就OK。

2,项目正常运行,宝塔会自动生成虚拟环境路径,

/www/server/pyporject_evn/你的项目名称_venv/bin 

路径后面会用到


三、配置好自己的settings.py 可以接收 变量

我的部分配置如下:

# 密钥配置
SECRET_KEY = os.environ.get('DJANGO_SECRET_KEY') or '$j^6xsfsefsffn6)j2%fsfsdfhyfefe^9fefsffmaa2kv!*pfesfse^fsefsfu'
# DEBUG开关
DEBUG = env_to_bool('DJANGO_DEBUG', False)

ALLOWED_HOSTS = [os.environ.get("ALLOWED_HOSTS", "*")]

# 数据库配置
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': os.environ.get('DJANGO_MYSQL_DATABASE', 'root'),
        'PORT': int(os.environ.get('DJANGO_MYSQL_PORT', '3306')),
        'HOST': os.environ.get('DJANGO_MYSQL_HOST', '127.0.0.1'),
        'USER': os.environ.get('DJANGO_MYSQL_USER', 'root'),
        'PASSWORD': os.environ.get('DJANGO_MYSQL_PASSWORD', 'root'),
        'OPTIONS': {
            'init_command': 'SET sql_mode="STRICT_TRANS_TABLES"',
            'charset': 'utf8mb4'
            }
    }
}

# Email:
EMAIL_SWITCH = 'True'
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_USE_TLS = env_to_bool('DJANGO_EMAIL_TLS', False)
EMAIL_USE_SSL = env_to_bool('DJANGO_EMAIL_SSL', True)
EMAIL_HOST = os.environ.get('DJANGO_EMAIL_HOST') or 'smtp.qq.com'
EMAIL_PORT = int(os.environ.get('DJANGO_EMAIL_PORT') or 465)
EMAIL_HOST_USER = os.environ.get('DJANGO_EMAIL_USER', '52581054@qq.com')
EMAIL_HOST_PASSWORD = os.environ.get('DJANGO_EMAIL_PASSWORD', 'xxxxxxxxxxxxxxxx')
DEFAULT_FROM_EMAIL =EMAIL_HOST_USER
SERVER_EMAIL = EMAIL_HOST_USER


如:EMAIL_HOST_USER = os.environ.get('DJANGO_EMAIL_USER', '52581054@qq.com')

若无'DJANGO_EMAIL_USER变量默认为52581054@qq.com


四、自定义 gunicorn_conf_yy.py

我建在项目根目录外,也可以建在项目根目录内,看自己情况定,

名称自定义。

注意名称区分,不要 与自动生成的gunicorn_conf.py冲突

我的内容如下:

import os
MYNAME = "yy"
MYPATH = "/www/wwwroot/" + MYNAME
os.environ["DJANGO_DEBUG"] = "False"
os.environ["SECRET_KEY"] = "KgffasefFDSAfeasasdfasGrGESFASEFaefasdfasdf8K"
# ALLOWED_HOSTS = []
os.environ["ALLOWED_HOSTS"] = "127.0.0.1"
# redis设置
# os.environ["DJANGO_REDIS_URL"] = "127.0.0.1:6379"
# os.environ["DJANGO_REDIS_PASSWORD"] = ""
# 数据库设置
os.environ['DJANGO_MYSQL_DATABASE'] = MYNAME
os.environ['DJANGO_MYSQL_USER'] = MYNAME
os.environ['DJANGO_MYSQL_PASSWORD'] = "roottoor"
os.environ['DJANGO_MYSQL_HOST'] = "127.0.0.1"
os.environ['DJANGO_MYSQL_PORT'] = "3306"
# Email:
os.environ['DJANGO_EMAIL_TLS'] = "False"
os.environ['DJANGO_EMAIL_SSL'] = "True"
os.environ['DJANGO_EMAIL_HOST'] = "smtp.qq.com"
os.environ['DJANGO_EMAIL_PORT'] = "465"
os.environ['DJANGO_EMAIL_USER'] = "52581054@qq.com"
os.environ['DJANGO_EMAIL_PASSWORD'] = "qq55qq55qq55qq55"


# 项目目录
chdir = "/www/wwwroot/项目根目录"
# 指定进程数
workers = 2
# 指定每个进程开启的线程数
threads = 2
#启动用户
user = 'root'
# 启动模式
worker_class = 'sync'
# 绑定的ip与端口
bind = '0.0.0.0:8080' 
# 设置进程文件目录(用于停止服务和重启服务,请勿删除)
pidfile = MYPATH + '/' + MYNAME + '.pid'
# 设置访问日志和错误信息日志路径
accesslog = MYPATH + '/' + MYNAME + '_acess.log'
errorlog = MYPATH + '/' + MYNAME + '_error.log'
# 日志级别,这个日志级别指的是错误日志的级别,而访问日志的级别无法设置
# debug:调试级别,记录的信息最多;
# info:普通级别;
# warning:警告消息;
# error:错误消息;
# critical:严重错误消息;
loglevel = 'info' 
# 自定义设置项请写到该处
# 最好以上面相同的格式 <注释 + 换行 + key = value> 进行书写, 
# PS: gunicorn 的配置文件是python扩展形式,即".py"文件,需要注意遵从python语法,
# 如:loglevel的等级是字符串作为配置的,需要用引号包裹起来


五、新建另一个用户项目

1,宝塔-网站-其他项目

02.png

项目执行文件,先选一下项目中的wsgi.py

项目不要冲突

执行命令如下:

/www/server/pyporject_evn/你的项目名称_venv/bin/gunicorn 项目名称.wsgi:application -c gunicorn_conf_yy.py

注:这是点击确定后项目不会正常运行

2,点开新建的其它项目,点击配置:

修改 /root/wwwroot/xxxx 路径

修改为您的 如 gunicorn_conf_yy.py这个文件存放的目录,

点击保存

03.png

3,接着点击 项目信息,项目执行文件一样手动修改为你gunicorn_conf_yy.py这个存放的目录,

04.jpg

点击 保存配置


最后如果一切正常,那么你的其它项目新建的,即可以正常运行了,显示正常的运行端口,即成功

06.png


六,其它项目数据库,等问题

1,新建的其它项目因用的是同虚拟环境,数据库无法 makemigrations与migrate;

2,用Navicat用主数据库,数据结构同步;

05.png

3,主要数据如初始的超级管理员等信息,用其它的数据库等方法导入或生成。