• Linxu + uWSGI + Nginx部署Django


    服务器参数

    服务器:阿里云 ECS (未作任何配置)
    Linux版本:CentOS 7.6 64位
    

    温馨提示:如果服务器重装系统或格式化磁盘,将会导致处浏览器外,本地不可远程登录和上传公钥文件。请看-> 解决方案



    一、配置Linux

    1.1、用户组管理

    • 创建用户在
    groupadd admin
    

    1.2、用户管理

    • 创建用户, 并添加到创建的admin用户组中
    useradd langkye -g admin
    
    • 设置[修改]密码
    passwd langkye
    
    • 修改用户权限(新建用户的权限较低)
    sudo vim /etc/sudoers
    

    进入sudoers中,在 root ALL=(ALL) ALL下面添加:

    langkye ALL=(ALL) ALL
    
    • 删除用户
    userdel -rf langkye
    

    -rf表示删除用户名和用户关联的邮箱等文件,否则若新建相同的用户将会提示用户已存在

    1.3、远程登录

    • 禁止root远程登录
    sudo vim /etc/ssh/sshd_config
    

    #PermitRootLogin yes修改为PermitRootLogin no

    • 重启sshd服务
    sudo systemctl restart sshd.service
    

    成功之后,只能用其它用户远程登录服务器。而不能用root用户进行远程登录。

    1.4、免密(证书)登录远程服务器

    1.4.1、在[本地]创建.ssh隐藏目录,用于保存本地生成的公钥和私钥(一般建在用户目录下)

    • 命令行创建(Mac或安装了Git-bash的Windows)
    mkdir ~/.ssh
    

    说明~表示用户主目录,即Windows的c:/Users/自己的用户名; Mac, /home/当前登录的用户名

    • 图形界面创建(略)

    1.4.2、创建密钥对

    cd ~/.ssh
    ssh-keygen -t rsa -C AliCloud -f AliCloud
    

    说明:-t, 选中加密方式;-C, 描述;-f, 生成的密钥对文件名
    输入命令后一路回车...
    成功后,在.ssh目录下会出现[AliCloud] 和 [AliCloud.pub]两个文件。其中,AliCloud.pub为公钥;AliCloud为私钥。

    1.4.3、将公钥上传到服务器
    利用ssh提供的远程拷贝命令[scp]来上传公钥文件。

    cd ~/.ssh
    scp AliCloud.pub langkye@服务器公网IP:.
    

    1.4.4、在服务器中配置

    cd ~
    mkdir ~/.ssh
    touch authorized_keys
    cat AliCloud.pub >> ~/.ssh/authorized_keys
    
    • 修改.ssh和authorized_keys的权限为当前登录用户所有
    chmod 700 ~/.ssh
    chmod 600 ~/.ssh/authorized_keys
    

    1.5、在本地配置登录

    cd ~/.ssh
    vim config
    

    添加:

    Host langkye # 本地登录的名字,可随意
        HostName 服务器A公网IP
        Port 22 # SSH端口
        User 用户名
        IdentityFile ~/.ssh/AliyunCS # 密钥路径
    
    Host Tencent
        HostName 服务器B公网IP
        Port 22
        User langkye
        IdentityFile ~/.ssh/TencentCS
    

    1.6、免密登录

    ssh langkye
    

    1.7、配置防火墙

    1.7.1 更新yum

    sudo yum -y update
    

    1.7.2 配置yum自动更新

    • 安装插件
    sudo yum install -y cronie yum-cron
    
    • 修改配置文件
    sudo vim /etc/yum/yum-cron.conf
    

    更改:

    # 启用自动更新 
    # apply_updates = no
    apply_updates = yes
    
    • 启动服务
    sudo systemctl start crond
    sudo systemctl start yum-cron
    

    1.7.3 安装防火墙

    sudo yum install -y firewalld
    

    1.7.4 启动防火墙

    sudo systemctl start firewalld.service
    
    • 查看防火墙状态
    sudo firewall-cmd --list-all
    

    1.8、修改ssh端口

    1.8.1 修改ssh服务配置文件

    sudo vim /etc/ssh/ssd_config
    

    修改Port 22

    1.8.2 将防火墙中关于ssh的配置拷贝到防护墙工作路径中

    sudo cp /usr/lib/firewalld/services/ssh.xml /etc/firewalld/services/
    

    修改<port protocol="tcp" port="22" />:

    <port protocol="tcp" port="必须与上一步修改的端口一致" />
    

    1.8.3 在服务器控制台中开放相应的端口(略)

    1.8.4 通过控制台远程登录服务器重启ssh服务和防火墙

    sudo systemctl restart sshd.service
    
    sudo systemctl restart firewalld.service
    

    1.8.5 修改本地ssh的端口

    vim ~/.ssh/config
    
    • 将Port端口设置一致即可


    二、安装并配置数据库

    以mariadb为例,它与MySQL几乎相同

    2.1、安装数据库

    • 安装mariadb数据库和mariadb数据库服务
    sudo yum -y install mariadb mariadb-server
    
    • 启动数据库
    sudo systemctl start mariadb
    
    • 设置开机自启
    sudo systemctl enable mariadb.service
    
    • 设置root密码
    mysql_secure_installation
    

    步骤:跳过第一次的输入密码,设置密码、确认密码,一路回车...

    2.2、创建项目的数据库。如:

    create database mysite
    


    三、配置Python3

    3.0、安装python所需依赖

    • Centos
    sudo yum -y install openssl-devel bzip2-devel expat-devel gdbm-devel readline-devel splite-devel zlib-devel libffi-devel MySQL-python mysql-deve
    

    3.1、准备python3安装包(--version 3.7.3)

    • 创建用于保存python3安装包的文件夹, 并将python3下载到改文件夹内
    mkdir ~/py3
    cd ~/py3
    wget https://www.python.org/ftp/python/3.8.2/Python-3.8.2.tgz
    

    3.2、解压 Python-3.7.tgz

    tar -zxvf Python-3.7.tgz
    

    3.3、安装python3

    3.3.1 指定python的安装路径

    • 创建安装文件夹
    sudo mkdir /usr/local/python3
    
    • 利用Python-3.7.3文件夹的configure文件来指定安装的目录
    sudo ~/py3/Python-3.7.3/configure --prefix=/usr/local/python3/
    
    • 编译
    cd ~/py3/Python-3.7.3/
    make
    
    • 安装
    cd ~py3/Python-3.7.3/
    sudo make install
    

    3.4、创建软连接(快捷命令)

    3.4.1 创建python3软连接

    cd ~py3/Python-3.7.3/
    sudo ln -s /usr/local/python3/bin/python3 /usr/bin/python3
    
    • 查看快捷方式是否创建成功
    python3 --version
    

    输出对应的Python版本,则表示成功。如:

    Python 3.7.3
    

    3.4.2 创建pip3软连接

    sudo ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3
    
    • 查看版本
    pip3 --version
    

    3.5、安装mysqlclient

    sudo pip3 install mysqlclient
    


    四、Django的安装与配置

    4.1、安装Django

    sudo pip3 install django==2.2
    

    4.2、创建dango-admin软连接

    sudo ln -s /usr/local/python3/bin/django-admin /usr/bin
    

    4.3、创建Django项目

    • 创建项目文件夹
    mkdir ~/../www
    
    • 创建项目
    cd ~/../www/
    sudo django-admin startproject mysite
    
    • 添加views.py
    sudo vim ~/../www/mysite/mysite/views.py
    

    添加:

    from django.http import HttpResponse
    
    def index(request):
        return HttpResponse("Hello Word~")
    
    • 编辑urls.py
    sudo vim ~/../www/mysite/mysite/urls.py
    

    修改:

    from django.contrib import admin
    from django.urls import path
    from . import views
    
    urlpatterns = [
        path('admin/', admin.site.urls),
        path('', views.index),
        path('index', views.index),
    ]
    
    • 修改settings.py
    sudo vim ~/../www/mysite/mysite/settings.py
    
    ALLOWED_HOSTS = ['localhost','服务器公网IP']
    
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.mysql',
            'NAME': 'mysite',
            'USER': 'root',
            'PASSWORD': '你的数据库密码',
            'HOST': 'localhost',
            'PORT': '3306',
        }
    }
    
    • 数据库迁移
    sudo python3 manage.py migrate
    
    • 安装tree
    sudo yum install -y tree
    

    4.4、测试

    • 启动Django
    sudo python3 manage.py runserver 0.0.0.0:80
    

    正常则可以同IP访问~

    五、本地同步代码到服务器(VsCode)

    5.1、配置Vscode

    5.1.1 常规操纵

    • 在本地创建用于保存代码的文件夹
    mkdir ~/mysite
    
    • 用VSCode打开创建的mysite文件夹

    • 安装sftp

    5.1.2 配置sftp
    注意:Json不支持注释。

    • Ctrl + Shit + P,输入并选择sftp:Config。做如下配置:
    {
      "name": "mysite",
      "host": "公网IP",
      "protocol": "sftp",
      "port": 默认22,如果之前改过ssh端口,则应一致,
      "username": "服务器登录用户",
      "remotePath": "/home/www/mysite",
      "uploadOnSave": true,
      "ignore": [
        ".vscode",
        ".git",
        ".DS_Store",
        "__pycache__",
        ".idea"
      ],
      "syncOption": {
        "delete": true
      },
      "watcher": {
        "files": "**/*",
        "autoUpload": true,
        "autoDelete": true
      }
    }
    

    然后就能看到服务器创建的项目目录结构文件...

    5.2、将服务器项目下载到本地

    5.3、修改服务器项目的所有者

    由于远程服务器创建的项目的所有者时langkye用户,本地以langkye用户连接的,没有权限修改文件
    ls -alll命令来查看修改所有者前后的差异。

    • 将项目所有者改为langkye
    sudo chown -R langkye mysite
    


    六、安装uWSGI

    6.1、安装

    sudo pip3 install uwsgi
    

    6.2、创建uwsgi软连接

    sudo ln -s /usr/local/python3/bin/uwsgi /usr/bin/uwsgi3
    

    七、安装Nginx

    6.1、安装

    sudo yum -y install nginx
    
    
    

    八、配置uwsgi和Nginx

    8.1、创建文件夹

    • 项目外:collected_statci
    • 项目根目录:templates、static、uwsgi

    8.2、修改settings.py

    • 修改内容如下:
    DEBUG = False
    
    TEMPLATES = [
        {
            'BACKEND': 'django.template.backends.django.DjangoTemplates',
            'DIRS': [
                os.paty.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',
                ],
            },
        },
    ]
    
    STATIC_ROOT = os.path.join(BASE_DIR, '../collected_statci')
    STATICFILES_DIR = (
        os.path.join(BASE_DIR, 'static'),
    )
    

    8.3、收集打包静态文件

    cd /home/www/mysite
    sudo python3 manage.py collectstatic
    

    8.4、uwsgi配置

    • 在项目根目录创建 uwsgi.ini
      内容如下:
    [uwsgi]
    socket = 127.0.0.1:8000
    chdir = /home/www/mysite
    module = mysite.wsgi
    master = true
    processes = 1
    threads = 2
    max-requests = 2000
    chmod-socket = 664
    vacuum = true
    
    stats = %(chdir)/uwsgi/uwsgi.status
    pidfile = %(chdir)/uwsgi/uwsgi.pid
    daemonize = %(chdir)/uwsgi/uwsgi.log
    

    8.5、配置Nginx

    sudo vim /etc/nginx/nginx.conf
    

    将以下部分内容:

        # for more information.
        include /etc/nginx/conf.d/*.conf;
    
        server {
            listen       80 default_server;
            listen       [::]:80 default_server;
            server_name  _;
            root         /usr/share/nginx/html;
    
            # Load configuration files for the default server block.
            include /etc/nginx/default.d/*.conf;
    
            location / {
            }
    
            error_page 404 /404.html;
                location = /40x.html {
            }
    
            error_page 500 502 503 504 /50x.html;
                location = /50x.html {
            }
        }
    

    修改为:

        # for more information.
    
        server {
            listen 80;
            server_name  localhost;
            charset utf-8;
    
            location / {
                uwsgi_pass 127.0.0.1:8000;
                include /etc/nginx/uwsgi_params;
            }
            location /static {
                alias /home/www/collected_static/;
            }
    
            error_page 404 /404.html;
                location = /40x.html {
            }
    
            error_page 500 502 503 504 /50x.html;
                location = /50x.html {
            }
        }
    

    8.6、启动uwsgi

    sudo uwsgi3 --ini uwsgi.ini
    

    8.7、启动nginx

    sudo systemctl start nginx
    

    8.9、测试

    两个服务都启动成功,则可以在浏览器通过IP来访问了~

    十、其它

    、本地修改内容和,重启uwsgi

    cd /home/www/mysite/uwsgi/
    sudo uwsgi3 --reload uwsgi.pid
    
  • 相关阅读:
    查询、行hbase Shell之简单命令说明by小雨
    安全模式、磁盘空间Hadoop 常见问题总结by小雨
    [wc2013]糖果公园(70分)by小雨
    方法、脚本Pig Grunt之简单命令及实例说明by小雨
    数据、进程云计算学习笔记Hadoop简介,hadoop实现原理,NoSQL介绍...与传统关系型数据库对应关系,云计算面临的挑战by小雨
    安装、进程云计算学习笔记hadoop的简介,以及安装,用命令实现对hdfs系统进行文件的上传下载by小雨
    配置文件、虚拟机如何使用vagrant在虚拟机安装hadoop集群by小雨
    请求、信息Cloud Foundry中基于Master/Slave机制的Service Gateway——解决Service Gateway单点故障问题by小雨
    格式化、问题ubuntu 12.10下搭建 hadoop 1.0.4 单机和伪分布模式by小雨
    输出、状态hadoop源码TaskAttemptID TaskTrackerAction JobTracker,FileOutputCommitter相关by小雨
  • 原文地址:https://www.cnblogs.com/langkye/p/12630123.html
Copyright © 2020-2023  润新知