关于Django的运行

使用阿里云学生版 ECS 服务器套餐预装 ubuntu16.04,阿里云服务器使用 telnet 或者 ssh 进行远程访问如下:

1. 进入自己的阿里云账户控制台,点击安全组,配置安全规则,选择入向,地址段填写 0.0.0.0/0 表示默认全网段访问,端口开放对应的端口 (windows telnet 23 端口,linux ssh 开放 22 端口)

2. 找到公网地址,在命令行输入


ssh username@公网ip -p port

   回车后会提示输入密码,输入就行

22 端口被封解决

1. 安全规则开放其他端口

2. 执行一下命令:


cd /etc/ssh/

vi sshd_config

3. 找到类似于 Port 22 的一行(一般在第四行)再其后面添加一行,Port p(p 为你开放的端口)

4. 连接测试

(如果以上仍然未解决,安全规则开放所有端口(当然,只做学习使用),然后连接测试)

ngix 安装

  • 新建目录,下载文件方便查找

mkdir /home/nginx_install

cd /home/nginx_install

  • 下载 nginx

wget http://nginx.org/download/nginx-1.8.1.tar.gz

tar -zxvf nginx-1.8.1.tar.gz

  • 安装 nginx 依赖并编译 nginx

apt-get update

apt-get install libpcre3 libpcre3-dev

apt-get install openssl libssl-dev

cd nginx-1.8.1

make

make install

  • 测试 nginx 服务是否成功

./sbin/nginx

出现 failed ××80 的情况


fuser -k 80/tcp

./sbin/nginx

nginx 测试

浏览器输入 公网 ip 出现 Welcome to nginx即成功
 

服务器 mysql 部署

linux 上的 mysql 本来就被纳入了源,直接使用


apt-get install mysql-server-5.7

由于 mysql 为了安全性,只允许本地访问,所以需要登录到 root 用户,然后设置对远程访问授权:

  • 允许 root 用户在任何 ip 下访问

grant all privileges on *.* to 'root'@'%' identified by 'yourpassword' with grant option;

-- 刷新授权表

flush privileges;

-- 退出数据库

exit()

  • 只允许 root 用户在一个特定 ip 进行远程登录,并赋予数据库的全部操作权限:

grant all privileges on *.* to 'root'@'远程ip' identified by 'yourpassword';

-- 刷新授权表

flush privileges;

-- 退出数据库

exit()

  • 允许用户用指定 ip 远程登录,但只赋予所有库特定的权限:

-- 创建一个用户

create user 'username'@'远程主机ip' idenitified by 'yourpassword';

-- 授予该用户权限

grant select,insert,update,delete on *.* to 'username'@'远程主机ip' identified by 'yourpassword' with grant option;

-- 刷新权限表

flush privileges;

-- 退出

exit()

  • 删除用户授权

revoke all on db_name from username;

-- 删除用户

delete from user where user='username';

-- 重载授权表

flush privileges;

-- 退出

exit()

python 连接远程数据库测试

python 连接数据库可以有多个选择的库,连接 mysql 我喜欢使用 pymysql,连接 sql-server(linux 下 sql-server 的部署不会的可以留言)喜欢用 pymssql,下面介绍 pymysql 的安装 ( 假设已经安装了 anaconda):


pip install pymysql

-- 或者

conda install pymysql

然后可以测试:


import pymysql

if __name__ == '__main__':

conn = pymysql.connect(host = '服务器公网ip',user='用户名',password = '密码',database='数据库名称',charset = 'utf8',port = 3306)

cursor = conn.cursor()

sql = '''select * from info'''

ret = cursor.execute(sql)

rs = cursor.fetchall()

print(rs)

当然,如果 mysql 的配置没有更改运行此代码会报错ERROR 2003 (HY000): Can’t connect to MySQL server on ‘60.205.221.200’ (111), 解决办法如下:

ubuntu16 以上版本:


cd /etc/mysql

vi mysql.conf.d/mysqld.cnf

找到如下两行:

skip-external-locking

bind-address = 127.0.0.1

然后给注释掉,终端输入:


service mysql restart

再次运行上面的测试程序,ok!、

Django 服务器运行

django是python的一个全栈框架,意味这他自带内置服务器,所以并不需要其他的辅助工具来进行运行。

  1. 将django上传到云主机,由于文件较多,建议压缩上传。进入django项目的父目录,执行
    zip -r name.zip name/

    name指你的项目名称。然后执行上传命令

    scp -p port name.zip username@host:/dir

    port是你开放的ssh端口,host是公网ip,dir是你想传到云主机的目录

  2. 进入晕主机/dir下,运行

    ls
    unzip name.zip
    cd name/
    venv/bin/python manage.py makemigrations
    venv/bin/python manage.py migration --database=配置的数据库名
    venv/bin/python manage.py runserver 0.0.0.0:port &

    &表示以守护进程运行,如果要关闭,执行

    lsof -i:port
    #找到pid
    kill -9 pid

    一定要-9,否则杀不掉

  3. 我的配置如下:

    """
    Django settings for androidService project.
    
    Generated by 'django-admin startproject' using Django 2.2.2.
    
    For more information on this file, see
    https://docs.djangoproject.com/en/2.2/topics/settings/
    
    For the full list of settings and their values, see
    https://docs.djangoproject.com/en/2.2/ref/settings/
    """
    
    import os
    import sys
    
    # 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, 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/2.2/howto/deployment/checklist/
    
    # SECURITY WARNING: keep the secret key used in production secret!
    SECRET_KEY = 'ey6&eho9zfu*^$p_$tt8u4wx06e6m_*ent_kogp5)06t2ypkx('
    
    # SECURITY WARNING: don't run with debug turned on in production!
    DEBUG = True
    
    ALLOWED_HOSTS = ['*']
    # AUTH_USER_MODEL = 'login.User'
    
    # Application definition
    
    INSTALLED_APPS = [
        # 'bootstrap_admin',
        'django.contrib.admin',
        'django.contrib.auth',
        'django.contrib.contenttypes',
        'django.contrib.sessions',
        'django.contrib.messages',
        'django.contrib.staticfiles',
        'apps.login',
        'apps.service',
        'extra_apps.xadmin',
        'crispy_forms',
        'reversion',
        'extra_apps.DjangoUeditor',
        'rest_framework'
    
    ]
    
    MIDDLEWARE = [
        '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',
    ]
    
    ROOT_URLCONF = 'androidService.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 = 'androidService.wsgi.application'
    
    # Database
    # https://docs.djangoproject.com/en/2.2/ref/settings/#databases
    
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.mysql',
            'HOST': '39.106.67.218',
            'NAME': 'app',
            "PASSWORD": '',
            'PORT': 3306,
            'USER': '',
            'TEST': {
                'NAME': 'test'
            }
        },
        'local': {
            'ENGINE': 'django.db.backends.mysql',
            'HOST': '127.0.0.1',
            'NAME': 'app',
            'USER': '',
            'PASSWORD': '',
            'PORT': 3306
        },
        'private': {
            'ENGINE': 'django.db.backends.sqlite3',
            'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
        }
    }
    
    # Password validation
    # https://docs.djangoproject.com/en/2.2/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/2.2/topics/i18n/
    
    # LANGUAGE_CODE = 'en-us'
    LANGUAGE_CODE = 'zh-Hans'
    # TIME_ZONE = 'UTC'
    TIME_ZONE = 'Asia/Shanghai'
    USE_I18N = True
    
    USE_L10N = True
    
    USE_TZ = True
    
    # Static files (CSS, JavaScript, Images)
    # https://docs.djangoproject.com/en/2.2/howto/static-files/
    
    STATIC_URL = '/static/'
    
    STATICFILES_DIRS = (
        os.path.join(BASE_DIR, 'static/'),
    )
    
    DATABASE_ROUTERS = ['androidService.AutoRouter.AuthRouter']
    
    # TIMEOUT = 300 #过时时间
    # VERSION = 1 #版本
    # FILE_UPLOAD_MAX_MEMORY_SIZE=2621440#上载在流式传输到文件系统之前的最大大小(以字节为单位
    
    # MEDIA_ROOT = '/home/hui/app/'  # 用户上传文件跟目录
    
    EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
    EMAIL_USE_TLS = False  # 是否使用TLS安全传输协议(用于在两个通信应用程序之间提供保密性和数据完整性。)
    EMAIL_USE_SSL = True  # 是否使用SSL加密,qq企业邮箱要求使用
    EMAIL_HOST = 'smtp.qq.com'  # 发送邮件的邮箱 的 SMTP服务器,这里用了163邮箱
    EMAIL_PORT = 25  # 发件箱的SMTP服务器端口
    EMAIL_HOST_USER = '1593020407@qq.com'  # 发送邮件的邮箱地址
    EMAIL_HOST_PASSWORD = '*********'  # 发送邮件的邮箱密码(这里使用的是授权码)
    
    MEDIA_URL = '/media/'
    MEDIA_ROOT = os.path.join(BASE_DIR, 'media')

     

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值