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

但是安裝這個插件的時候出了點問題


嘗試

看來不能用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

訪問鏈接,服務器有反應,但是頁面什麼也沒有顯示

後來發現要傳輸比特類型的數據。問題不大。

創建 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

還有設置一下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配置文件,其實就是加句話,但是不加也不影響運行,現在可以正常訪問了

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章