一、常用依赖安装

  • 安装mysql和redis,并启动服务,安装方法详见"MySQL与Redis的安装"一文
  • 安装python开发包:

    • 执行pip3 install python-devel
    • 如果报找不到python-devel,则安装python-dev

      其中包括了一些用C/Java/C#等编写的python扩展在编译的时候依赖的头文件等信息。
  • 安装mysql-devel和mysql-libs:yum install mysql-devel mysql-libs,注意:在centos中这里安装使用的是系统包管理器yum
  • 安装bzip2-devel:yum install bzip2-devel
  • 安装git:yum install git

    二、mysql数据库与权限

  • 创建项目数据库:create database 名字 charset utf8;
  • 创建测试用例数据库:create database test_名字 charset utf8; ,测试用例数据库以test开头
  • 创建超级用户:create user "名字"@"%" identified by "密码";
  • 授权:超级用户拥有项目数据库和测试用例数据库的所有全新啊

    • grant all on 数据库名.* to "用户名"@"%";
    • grant all on test_数据库名.* to "用户名"@"%";
  • 刷新权限:flush privileges;

    三、远程连接pycharm

    项目部署上线是在linux环境中,正常的开发中很多人使用的是mac或者windows系统,为了能够本机开发代码及时上传到远端服务器中,提高开发效率,需要在pycharm中设置远程连接

  • 在pycharm中设置远端服务器并连接。在Tools中找到Development,点击Configration进入配置页面
    第一步
  • 进入配置页面点击+,选择SFTP,设置服务器名字
    第二步
    第二步
  • 点击SSH configration进行连接配置,点击+添加配置页面,配置之后测试连接是否成功
    第三步

    host为远程服务器ip,端口为22,Authentication type不用变
  • 配置生效之后返回STFP配置页面,设置Root path路径,这里设置的是项目的上一级目录,例如:项目的名字为backstage,上一级目录为testProject,那么这里写/testProject,结尾没有斜杠
  • 在Advanced中设置Send keep alive messages each,这里设置为10s
  • 设置Mappings页面Development path设置为项目的名字,以斜杠开头,结尾没有斜杠
    第四步
  • 应用后,设置Python Interpreter
    第五步
  • 新建SSH Interpreter,选择已经创建的远程连接
    第六步
  • Interpreter是远程服务器的中的,不是本地机器的,远程服务器使用pipenv --py获取Python Interpreter;Sync folders中左侧是本地项目目录,右侧是远程服务器中的项目目录,两者之间做了映射。
    第七步
  • 新建完成之后选择并应用
  • 在项目上点击右键,选择Sync with Deployed to....,然后选择对应的远程服务器进入到新的页面,本地目录和远程目录文件比较,拉取远程文件到本地或者跟新本地修改文件到远程服务器
    第八步
  • 设置项目的run/debug Configrations

    • Python Interpreter:选择设定好的远程连接中的Interpreter
    • Working directory:本地的项目路径
    • 在log中勾选后两项,项目开发中可以看到日志的详细信息

    第九步

  • 在Preferences中找到Languages & Frameworks中找到Django进行设置

    • 勾选Enable Django Support
    • Django project root:选择本地项目的目录路径
    • Settings选择到项目config/settings/local.py
  • 应用并启动本地服务
  • 启动之后可能会出现的问题

    • 找不到celery和environ,使用pipenv导入即可
    • 源码中出现类似于raise KeyError, name之类的语法问题,直接修改为raise KeyError(name)即可

    四、删改部分文件完成初始模版

    在服务器端使用pipenv install -r requirements/local.txt导入所有的依赖

    (一)、settings/base.py

  • 设置是否读取.env文件:修改settings/base.py中的default=True,读取该文件,并在项目的根目录下新建.env文件

    READ_DOT_ENV_FILE = env.bool("DJANGO_READ_DOT_ENV_FILE", default=True)~~~~
  • 修改时区和语言
  • DATABASES"default" = True表示的是将HTTP请求中的数据库操作封装成事务
  • 安全设置:CSRF_COOKIE_HTTPONLY = Flase,设置为True则只能允许http来获取csrf token,如果设置为False则可以有其他的方式,例如:js
  • 设置Celery:

    • CELERY_RESULT_BACKEND = env('CELERY_RESULT_BACKEND'),CELERY_RESULT_BACKEND在.env文件中设置
    • CELERY_ACCEPT_CONTENT = ["json", 'msgpack']
    • 序列化与反序列化数据格式:CELERY_TASK_SERIALIZER = "json"设置为"msgpack",因为msgpck格式数据比json格式数据更小更快

    (二)、settings/local.py(本地开发环境配置文件)

  • 主机设置:ALLOWED_HOSTS = ["*"]
  • 删除文件中关于邮件的配置,因为这些配置在base.py文件中已经定义了
  • 查看debug配置

    (三)、settings/production.py(生产环境配置文件)

  • 删除STORAGES配置,这个是亚马逊的缓存配置,用不到

    # STORAGES
    # ------------------------------------------------------------------------------
    # https://django-storages.readthedocs.io/en/latest/#installation
    INSTALLED_APPS += ["storages"]  # noqa F405
    # https://django-storages.readthedocs.io/en/latest/backends/amazon-S3.html#settings
    AWS_ACCESS_KEY_ID = env("DJANGO_AWS_ACCESS_KEY_ID")
    # https://django-storages.readthedocs.io/en/latest/backends/amazon-S3.html#settings
    AWS_SECRET_ACCESS_KEY = env("DJANGO_AWS_SECRET_ACCESS_KEY")
    # https://django-storages.readthedocs.io/en/latest/backends/amazon-S3.html#settings
    AWS_STORAGE_BUCKET_NAME = env("DJANGO_AWS_STORAGE_BUCKET_NAME")
    # https://django-storages.readthedocs.io/en/latest/backends/amazon-S3.html#settings
    AWS_QUERYSTRING_AUTH = False
    # DO NOT change these unless you know what you're doing.
    _AWS_EXPIRY = 60 * 60 * 24 * 7
    # https://django-storages.readthedocs.io/en/latest/backends/amazon-S3.html#settings
    AWS_S3_OBJECT_PARAMETERS = {
      "CacheControl": f"max-age={_AWS_EXPIRY}, s-maxage={_AWS_EXPIRY}, must-revalidate"
    }
    # https://django-storages.readthedocs.io/en/latest/backends/amazon-S3.html#settings
    AWS_S3_REGION_NAME = env("DJANGO_AWS_S3_REGION_NAME", default=None)
    # https://django-storages.readthedocs.io/en/latest/backends/amazon-S3.html#cloudfront
    AWS_S3_CUSTOM_DOMAIN = env("DJANGO_AWS_S3_CUSTOM_DOMAIN", default=None)
    aws_s3_domain = AWS_S3_CUSTOM_DOMAIN or f"{AWS_STORAGE_BUCKET_NAME}.s3.amazonaws.com"
  • 删除邮箱配置

    # EMAIL
    # ------------------------------------------------------------------------------
    # https://docs.djangoproject.com/en/dev/ref/settings/#default-from-email
    DEFAULT_FROM_EMAIL = env(
      "DJANGO_DEFAULT_FROM_EMAIL", default="Backstage <noreply@example.com>"
    )
    # https://docs.djangoproject.com/en/dev/ref/settings/#server-email
    SERVER_EMAIL = env("DJANGO_SERVER_EMAIL", default=DEFAULT_FROM_EMAIL)
    # https://docs.djangoproject.com/en/dev/ref/settings/#email-subject-prefix
    EMAIL_SUBJECT_PREFIX = env(
      "DJANGO_EMAIL_SUBJECT_PREFIX", default="[Backstage]"
    )
  • 删除媒体和静态文件的配置

    # STATIC
    # ------------------------
    STATICFILES_STORAGE = "backstage.utils.storages.StaticRootS3Boto3Storage"
    COLLECTFAST_STRATEGY = "collectfast.strategies.boto3.Boto3Strategy"
    STATIC_URL = f"https://{aws_s3_domain}/static/"
    # MEDIA
    # ------------------------------------------------------------------------------
    DEFAULT_FILE_STORAGE = "backstage.utils.storages.MediaRootS3Boto3Storage"
    MEDIA_URL = f"https://{aws_s3_domain}/media/"

    (四)、.env文件配置

  • MySQL连接配置:mysql://mysql账户:密码@ip地址/连接的数据库名

    因为连接的是远程数据库,数据库在服务器中,所以ip地址写127.0.0.1
    DATABASE_URL=mysql://root:1234566@127.0.0.1/Backstage
  • Redis连接配置:redis:ip地址:端口

    REDIS_URL=redis://127.0.0.1:6379
  • Django的基本配置

    • 开启Django调试模式
    • 允许用户注册,设置为True
    • 自定义一个SECRET_KEY
    DJANGO_DEBUG=True
    DJANGO_ACCOUNT_ALLOW_REGISTRATION=True
    DJANGO_SECRET_KEY=TgdsdsiYdsk2JKDu3kjHe9kjjkw32jeuejbds83hw7skjhr38dkjh32sdkjb345bshrnbdbwoeska3wusUUeCV
  • Django生产环境的配置

    • DJANGO_ALLOWED_HOSTS
    • DJANGO_SECURE_SSL_REDIRECT
    • DJANGO_SECURE_HSTS_INCLUDE_SUBDOMAINS
    • DJANGO_SECURE_HSTS_PRELOAD
    • DJANGO_SECURE_CONTENT_TYPE_NOSNIFF
    • DJANGO_ADMIN_URL
  • 发送邮件的配置

    • DJANGO_EMAIL_BACKEND
    • DJANGO_EMAIL_HOST
    • DJANGO_EMAIL_USE_SSL
    • DJANGO_EMAIL_PORT
    • DJANGO_EMAIL_HOST_USER
    • DJANGO_EMAIL_HOST_PASSWORD
    • DJANGO_DEFAULT_FROM_EMAIL
    DJANGO_EMAIL_BACKEND=django.core.mail.backends.smtp.EmailBackend
    DJANGO_EMAIL_HOST=smtpdm.163.com
    DJANGO_EMAIL_USE_SSL=True
    DJANGO_EMAIL_PORT=25
    DJANGO_EMAIL_HOST_USER='****@163.com'
    DJANGO_EMAIL_HOST_PASSWORD='****' # 开启smtp是的授权码
    DJANGO_DEFAULT_FROM_EMAIL='这里写标题<****@163.com>'
  • 163邮箱开启服务和获取授权码
    邮箱一
    邮箱二
  • Celery的配置

    • 在base.py文件中找到CELERY_RESULT_BACKEND,设置为CELERY_RESULT_BACKEND=env("CELERY_RESULT_BACKEND"),具体的CELERY_RESULT_BACKEND在.env文件中设置
    • 在.env文件中设置Celery

      • CELERY_RESULT_BACKEND:存放缓存结果
      • CELERY_BROKER_URL:缓存中间人、代理人
    CELERY_BROKER_URL=redis://127.0.0.1:6379/1 # 缓存中间人,设置在redis的1库里
    CELERY_RESULT_BACKEND=redis://127.0.0.1:6379/2 # 设置缓存结果存在在redis的2库里
  • 在wsgi.py文件设置,把production改成local

    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "config.settings.local")

    五、安装模块报错问题:

  • xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools), missing xcrun at: /Library/Developer/CommandLineTools/usr/bin/xcrun

    • 原因:macos系统升级没有装xcode command line
    • 解决:

      • xcode-select --install安装
      • 如果上一步没有解决,则使用sudo xcode-select -switch /

苦心僧
18 声望2 粉丝