centos7环境配置全过程,uwsgi+nginx+django+https详解

因为当时学习服务器的时候用了ubuntu,后来做了很多小项目都是用ubuntu做的,但是项目逐渐涉及复杂内容后,发现网上大部分教程都是基于centos,也发现很多环境基于centos会友好一些,趁着现在还能回头,项目还不太大,长痛不如短痛,今天就搞了它。

下面记录一下我重装的过程。

 

首先是创建用户并授权

 

# adduser demo

# passwd  demo

设置密码

 

授权



sudo命令的授权管理是在sudoers文件里的。可以看看sudoers: 
# whereis sudoers 
sudoers: /etc/sudoers.d /etc/sudoers /usr/libexec/sudoers.so /usr/share/man/man5/sudoers.5.gz 
找到这个文件位置之后再查看权限: 
# ls -l /etc/sudoers 
 先添加更改权限
# chmod -v u+w /etc/sudoers    

用vim更改
# vim /etc/sudoers

加入demo ALL=(ALL)  ALL

修改完:wq退出,然后权限收回
chmod -v u-w /etc/sudoers

 

安装mysql

 

进root,下载

# wget http://dev.mysql.com/get/mysql57-community-release-el7-8.noarch.rpm 

# yum install  -y  mysql-community-server

service mysqld start

但是我没看到初始化密码,只好修改MySQL的登录设置:
# vim /etc/my.cnf 
在[mysqld]的段中加上一句:skip-grant-tables 

保存并且退出vim。

重新启动mysqld 

# service mysqld restart 

进入mysql

#mysql -uroot -p

mysql>use mysql

mysql>update mysql.user set authentication_string=password('root') where user='root' ;

mysql>FLUSH PRIVILEGES;

 

然后是授权

 

mysql>GRANT ALL PRIVILEGES ON *.* TO ‘root’@’%’ IDENTIFIED BY ‘youpassword’ WITH GRANT OPTION;

又遇到一个问题,着实心疼

ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.

重置密码

mysql> alter user 'root'@'localhost' identified by 'youpassword';  

然后用Navicat Premium将原有的数据库与账户信息顺利的移植过来

 

安装python3

 

# mkdir /usr/local/python3

# cd /usr/local/python3

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

# tar -xvf Python-3.7.0.tgz

这时候已经出3.8了,还不熟悉新特性,就还是用3.7了,但是追求稳定的话应该还是用版本低一些的吧。

# cd Python-3.7.0

修改配置,让python文件装在一起

# ./configure --prefix=/usr/local/python3Dir

编译一下python文件

# make

# make install

然后发现缺少了一些依赖包

zipimport.ZipImportError: can't decompress data; zlib not available

于是乎根据套路

# yum -y install zlib* 

但是发现没用,这个问题先放着,貌似没什么影响

 

然后回到/usr/bin目录

# cd /usr/bin

# ln -s /usr/local/python3Dir/bin/python3 /usr/bin/python3

更改一下配置

# vi /usr/bin/yum

按i输入

按  :wq ,保存退出

将/usr/bin/python改为/usr/bin/python2.7。

# vim /usr/libexec/urlgrabber-ext-down

安装前置库

# yum install -y gcc pcre pcre-devel openssl openssl-devel gd gd-devel

测试了一下,python可以用了,现在开始安装模块

#  export PATH=$PATH:/usr/local/python3Dir/bin

现在python和python3共存

 

安装项目依赖模块

 

首先先更改一下国内源,没有这个文件就创建一下

$ ~/.pip/pip.conf

内容:

[global] 
index-url = https://pypi.tuna.tsinghua.edu.cn/simple 

然后安装一下依赖包

$ sudo yum -y install zlib*

$ sudo yum install openssl-devel

更新一下pip

$ sudo  sudo pip3 install --upgrade pip

安装python时候用的是root,现在切换到了demo,都要用sudo

$ sudo pip3 install pymysql

$ sudo pip3 install json

$ sudo pip3 install django 

$ sudo pip3 install django-simple-captcha

这个时候理论上已经可以运行django项目文件了,测试了一下也确实可以了,但是还有很多环境需要配置一下

$ sudo pip3 install supervisor

但是安装这个插件的时候出了点问题

centos7环境配置全过程,uwsgi+nginx+django+https详解_第1张图片
尝试

看来不能用python3,就先用2吧

$ sudo pip install supervisor

 

 

 

安装git

 

依赖库安装

$ sudo yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel

$ sudo yum install gcc perl-ExtUtils-MakeMaker

$ wget https://www.kernel.org/pub/software/scm/git/git-2.19.2.tar.gz

$ tar zxf git-2.19.2.tar.gz git-2.19.2

$ cd git-2.19.2

$ make prefix=/usr/local/git all

$ make prefix=/usr/local/git install

添加到环境变量,这一步权限不够的话就转为root

$ source /etc/bashrc

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

然后设置账号信息

$ git config --global user.name "Your Name"

$ git config user.email "[email protected]"

试了试git,没毛病,开始下一个

 

部署uwsgi

 

$ sudo pip3 install uwsgi

$ ln -s /usr/local/python3/bin/uwsgi /usr/bin/uwsgi

测试一下

test.py

def application(env, start_response):

    start_response(‘200 OK’, [(‘Content-Type’,’text/html’)])

    return "Hello World".encode()

#  uwsgi --http 0.0.0.0:8000 --wsgi-file test.py

访问链接,服务器有反应,但是页面什么也没有显示

centos7环境配置全过程,uwsgi+nginx+django+https详解_第2张图片

后来发现要传输比特类型的数据。问题不大。

创建 uWSGI运行的配置文件 uwsgi.conf

# mkdir  -p /etc/uwsgi

# vi /et c/uwsgi/uwsgi.conf

[uwsgi]

chdir = /opt/hn_dataweb

socket = /opt/hn_dataweb/hn_dataweb.sock

wsgi-file = /opt/hn_dataweb/hn_dataweb/wsgi.py

master = true

uid = root

processes = 2

threads = 4

chmod-socket = 666

chown-socket = root:nginx

vacuum = true
 

部署nginx

 

下载

$ wget -c https://nginx.org/download/nginx-1.15.8.tar.gz

$ tar -zxvf nginx-1.15.8.tar.gz

$ cd nginx-1.15.8

$ ./configure

$ make

$ sudo make install

whereis测试下装好没

$ whereis nginx

$ cd /usr/local/nginx/sbin/

开启测试一下

$ ./nginx

访问ok

centos7环境配置全过程,uwsgi+nginx+django+https详解_第3张图片

还有设置一下ssl,具体流程就不说了,网上大把的教程

 

安装tmux

 

作为一个我觉得很牛逼很好用的软件,我现在已经离不开它了

$ sudo yum -y install tmux

然后贴一下常用指令

C-b ? 显示快捷键帮助
C-b C-o 调换窗口位置,类似与vim 里的C-w
C-b 空格键 采用下一个内置布局
C-b ! 把当前窗口变为新窗口
C-b “ 横向分隔窗口
C-b % 纵向分隔窗口
C-b q 显示分隔窗口的编号
C-b o 跳到下一个分隔窗口
C-b 上下键 上一个及下一个分隔窗口
C-b C-方向键 调整分隔窗口大小
C-b c 创建新窗口
C-b 0~9 选择几号窗口
C-b c 创建新窗口
C-b n 选择下一个窗口
C-b l 切换到最后使用的窗口
C-b p 选择前一个窗口
C-b w 以菜单方式显示及选择窗口
C-b t 显示时钟
C-b ; 切换到最后一个使用的面板
C-b x 关闭面板
C-b & 关闭窗口
C-b s 以菜单方式显示和选择会话
C-b d 退出tumx,并保存当前会话,这时,tmux仍在后台运行,可以通过tmux attach进入 到指定的会话
再贴一下配置

# 鼠标滚动
set -g mode-mouse on

#设置前缀为Ctrl + a
set -g prefix C-x


#解除Ctrl+b 与前缀的对应关系
unbind C-b


#up
bind-key k select-pane -U
#down
bind-key j select-pane -D
#left
bind-key h select-pane -L
#right
bind-key l select-pane -R

# split window
unbind '"'
# vertical split (prefix -)
bind - splitw -v
unbind %
bind | splitw -h 
# horizontal split (prefix |)


set-option -g mouse-select-pane on

 

djang+uwsgi配置

先在项目同级目录下创建文件夹

$ mkdir script

$ touch script/uwsgi.ini

$ vim script/uwsgi.ini

接下来是配置

[uwsgi]
chdir = /home/demo/django_pro
# 项目目录
# 指定项目的application
module=django_pro.wsgi:login
# 指定sock的文件路径       
socket=/home/demo/script/uwsgi.sock
# 进程个数       
workers=5
pidfile=/home/demo/script/uwsgi.pid
# 指定IP端口       
http=XXX:8080
# 指定静态文件
static-map=/static=/home/demo/django_pro/static
# 启动uwsgi的用户名和用户组
uid=root
gid=root
# 启用主进程
master=true
# 自动移除unix Socket和pid文件当服务停止的时候
vacuum=true
# 序列化接受的内容,如果可能的话
thunder-lock=true
# 启用线程
enable-threads=true
# 设置自中断时间
harakiri=30
# 设置缓冲
post-buffering=4096
# 设置日志目录
py-autoreload=1
# 修改自动重启
daemonize=/home/demo/script/uwsgi.log

运行项目试试

项目目录下创建wsgi.py,写入python3的代码

import os

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "django_pro.settings")

from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()

$ uwsgi --ini script/uwsgi.ini

查询log发现一句

!!! no /etc/mime.types file found !!!

mime是多用途互联网邮件扩展类型。 是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开。

$ yum provides /etc/mime.types

但是发现基本上都是nginx才会出现这种问题,那就先用以后再解决

然后公网访问,没有问题。

 

django+nginx+uwsgi+https配置

 

nginx配置之前,先申请了个阿里的免费ssl证书,具体教程阿里都已经解释的很清楚了,不在赘述。

$ sudo vim /usr/local/nginx/conf/nginx.conf

nginx.conf配置


user root;
#user  nobody;
worker_processes  1;

error_log  logs/error.log;
error_log  logs/error.log  notice;
error_log  logs/error.log  info;

#pid        logs/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       /usr/local/nginx/conf/mime.types;
    default_type  application/octet-stream;

    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';

    #access_log  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;

    server {
        listen       80; #监听80端口
        server_name  XXX.com www.XXX.com; 
	   return 301 https://www.XXX.com$request_uri; #301重定向为https
    }

    server {
        #listen       8080;  #监听项目端口
        listen       8080 ssl;  #监听项目端口
        server_name  XXX.com www.XXX.com;
        if ($http_host != 'www.XXX.com:8080' ) {
            return 301 https://www.XXX.com:8080$request_uri;
        }
        #return 301 https://www.XXX.com$request_uri; #301重定向为https
        ssl_certificate     ../cert/XXX.pem;
        ssl_certificate_key  ../cert/XXX.key;

        ssl_session_cache    shared:SSL:1m;
        ssl_session_timeout  5m;

        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        
        access_log /home/demo/project/django_pro/access.log; # Nginx日志配置
        error_log /home/demo/project/django_pro/error_log;

        #error_page 400  https://www.XXX.com:8080$request_uri;
        location / {            
            include  uwsgi_params;  #加入uwsgi
            uwsgi_pass unix:///home/demo/project/script/uwsgi.sock;#与uwsgi通信
            
        }
        location /static/ {
			alias /home/demo/project/django_pro/static/;
			#index index.html index.htm;
		}
    }
     server {
        listen       443 ssl;
        server_name  www.XXX.com;
        #配置阿里ssl免费证书,具体见阿里教程
        ssl_certificate     ../cert/XXX.pem;
        ssl_certificate_key  ../cert/XXX.key;

        ssl_session_cache    shared:SSL:1m;
        ssl_session_timeout  5m;

        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        
        location / {
            root   html;
            index  index.html index.htm;
        }
        
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        } 
     }


}

uwsgi配置

[uwsgi]
chdir = /home/demo/project/django_pro

module=django_pro.wsgi
# 指定sock的文件路径       
socket=/home/demo/project/script/uwsgi.sock
# 进程个数       
workers=5
pidfile=/home/demo/project/script/uwsgi.pid
# 指定IP端口       
http=127.0.0.1:8000
# 指定静态文件
static-map=/static=/home/demo/project/django_pro/static
# 启动uwsgi的用户名和用户组
uid=root
gid=root
# 启用主进程
master=true
# 自动移除unix Socket和pid文件当服务停止的时候
vacuum=true
# 序列化接受的内容,如果可能的话
thunder-lock=true
# 启用线程
enable-threads=true
# 设置自中断时间
harakiri=30
# 设置缓冲
post-buffering=4096
# 设置日志目录
py-autoreload=1
# 修改自动重启
daemonize=/home/demo/project/script/uwsgi.log

然后nginx启动

$ sudo /usr/local/nginx/sbin/nginx

$ uwsgi --ini uwsgi.ini

然后还要简单更改一下django配置文件,其实就是加句话,但是不加也不影响运行,现在可以正常访问了

 

你可能感兴趣的:(后端开发)