因爲當時學習服務器的時候用了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配置文件,其實就是加句話,但是不加也不影響運行,現在可以正常訪問了