1.首先解決環境依賴的問題html
1.1 打開阿里雲開源鏡像站的官網https://opsx.alibaba.com/mirror前端
1.2 找到centos,點擊幫助,找到對應系統的yum源。vue
yum源的工做目錄,/etc/yum.repos.d目錄下,只要在這個目錄下名字叫作repo的文件,都會被yum取讀取node
centos7:wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
python
1.3 找到epel,點擊幫助,找到對應系統的yum源。mysql
獲取epel的yum源(第三方軟件倉庫,如nginx,redis等等)linux
epel(RHEL 7):wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
ios
1.4 解決編譯過程環境依賴nginx
yum install gcc patch libffi-devel python-devel zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel -yweb
2.下載python環境源碼安裝包
wget https://www.python.org/ftp/python/3.6.7/Python-3.6.7.tar.xz
3.解壓縮源代碼包
解壓xz格式:xz -d
解壓tar:tar -xvf Python-3.6.7.tar -C /xxx :-C能夠指定解壓目錄,不寫默認當前目錄
4.編譯
4.1 切到Python-3.6.7目錄下[執行configure腳本文件,指定安裝路徑] ,釋放makefile編譯文件 ,讓gcc工具去編譯的
[root@wupeiqi Python-3.6.7]#./configure --prefix=/opt/mypy/python36/
4.2 指定make指令,讀取makefile,開始編譯
make
4.3 執行make install ,開始安裝python3,這一步會生成python3解釋器
make install
注:4.2和4.3合併執行make && make install
5.環境變量的配置
5.1 配置path環境變量,讓系統能夠補全python3的命令
[root@wupeiqi bin]#echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
5.2 添加python3的環境變量,注意,要添加到開頭
/opt/mypy/python36/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
5.3 寫入到全局變量配置文件中,每次開機都加載/etc/profile中
vim /etc/profile 到最後一行下面,加入以下配置
PATH="/opt/mypy/python36/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin"
5.4 修改完畢/etc/profile 必須 source讀取一下
source /etc/profile
1.安裝虛擬環境工具
pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple virtualenv 能夠更換源
2.建立虛擬環境
第三方軟件默認裝在/opt下,切換到/opt目錄下
virtualenv --no-site-packages --python=python3 虛擬環境的名字
不安裝多餘的包 指定解釋器的python3
virtualenv --no-site-packages --python=python3 myenv
3.激活虛擬環境
虛擬環境中安裝的東西和系統無關,只能在虛擬環境中使用
source myenv/bin/activate激活虛擬環境
4.退出虛擬環境
deactivate
1.將項目經過zip壓縮後發送到linux系統上
2.在linux系統上解壓
unzip xxx
3.激活虛擬環境source myenv/bin/activate
4.查看項目中是否有requirement.txt文件
有:安裝項目中的模塊pip3 install -i https://pypi.douban.com/simple -r requirements.txt
無:運行程序,逐一安裝
以Django項目爲例:python manager.py runserver 0.0.0.0:9000
把你當前解釋器全部的模塊信息,導出到一個文件中
pip3 freeze > requirement.txt
5.安裝數據庫mariadb
yum install mariadb-server mariadb -y
6.啓動mariad,經過yum安裝的軟件,均可以用systemctl管理
systemctl start mariadb
7.導入數據庫
7.1 通常項目在壓縮發送到linux上都會包含數據信息。若是沒有單獨進行數據的導入
7.2 先將生產環境中的庫導出,而後發送到linux
在終端直接執行:mysqldump -uroot -p123 庫名 > C:\data\db.sql , 用戶名密碼以實際開發爲主,不要用root。
7.3 在將數據導入
方法一,直接在終端執行:mysql -u用戶名 -p密碼 < 要導入的數據庫數據(xx.sql)
方法二,登陸數據庫後執行:
本地建立庫:create database db;
使用已建立的庫:use db;
設置編碼:set names utf8
導入:source /opt/database/db.sql;
8.對項目配置進行修改,如數據庫信息,ALLOW_HOSTS相關的修改
9.解決完畢問題以後,啓動python項目,注意防火牆
解決防火牆:iptables -F
10.python manager.py runserver 0.0.0.0:9000 能夠運行
nginx是個web服務器,經常使用做靜態文件服務器,反向代理服務器,郵件代理服務器,負載均衡服務器
1.安裝淘寶nginx,編代碼編譯安裝,先解決模塊依賴
yum install gcc patch libffi-devel python-devel zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel openssl openssl-devel -y
2.獲取淘寶nginx的源代碼
wget http://tengine.taobao.org/download/tengine-2.3.2.tar.gz
3.解壓源代碼包
tar -zxvf tengine-2.3.2.tar.gz
4.進入源代碼目錄開始編譯
4.1 指定安裝路徑
./configure --prefix=/opt/s21/tngx
4.2 編譯且安裝
make && make install
5.安裝後生成4個目錄,目錄的含義
conf:存放配置文件 , 指定了這個軟件各類功能的一個文件而已
html:存放前端頁面
logs:nginx的運行日誌
sbin:nginx的可執行命令目錄
6.進入sbin目錄,啓動nginx
./nginx :啓動nginx
./nginx -s stop :中止nginx
./nginx -t :檢查nginx.conf的語法是否正確,最好每次更改配置文件後都執行一下,看看有無語法錯誤。
./nginx -s reload :不重啓nginx,從新加載nginx配置,每次更改配置文件後都執行一次。
7.Nginx的配置
7.1 找到nginx.conf,學習語法
vim nginx.conf
http { include 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; .... #nginx支持多虛擬主機,只須要寫入多個server關鍵字便可 #虛擬主機1 server { #基於端口的虛擬主機區分 listen 80; #基於域名的虛擬主機區分 server_name www.hello.com; #charset koi8-r; #access_log logs/host.access.log main; #access_log "pipe:rollback logs/host.access_log interval=1d baknum=7 maxsize=2G" main; #這裏是nginx的url匹配,如同django的url規則同樣 #當我請求 www.hello.com 的時候,就進入以下location匹配 #這個是最低級的匹配,只是訪問進行靜態頁面。全部請求都會走到這裏 location / { #root關鍵字定義虛擬主機的根目錄, 這裏是能夠修改的,要訪問的文件的根目錄,hello下的index.html。 root /opt/hello/; #必須保證首頁文件存在 index index.html; } } #虛擬主機2 server { listen 80; server_name www.world.com; #charset koi8-r; #access_log logs/host.access.log main; #access_log "pipe:rollback logs/host.access_log interval=1d baknum=7 maxsize=2G" main; #這裏是nginx的url匹配,如同django的url規則同樣 #當我請求www.world.com 的時候,就進入以下location匹配 #全部請求都會走到這裏,world下的index.html location / { root /opt/world/; #index參數是定義首頁文件的名字的 index index.html; } } }
8.幾種location
# 第一種 location / { #root關鍵字定義虛擬主機的根目錄,會自動跳轉到 hello下的index.html,訪問的是靜態文件 root /opt/hello/; #index參數是定義首頁文件的名字 index index.html; } # 第二種 location / { #實現反向代理的功能參數 #訪問域名後,自動跳轉到http://192.168.182.131地址 proxy_pass http://192.168.182.131; }
9.nginx的錯誤頁面 404美化
server { listen 80; server_name www.hello.com; #經過這個參數定義便可, # 當訪問www.hello.com出現錯誤時,跳轉到指定error下的error.html,能夠對錯誤頁面進行美化。此代碼寫在哪一個server下,就被哪一個地址使用。 error_page 404 /404.html; location / { root /opt/error; index error.html; } }
10.Nginx負載均衡
10.1 準備好2臺資源服務器,本應該提供同樣的數據,進行負載均衡,實驗目的,看到不一樣的頁面,因此準備不一樣的頁面數據
192.168.182.131 資源服務器1 ,返回hello的頁面
192.168.182.132 資源服務器2 ,返回world的頁面
10.2 準備負載均衡服務器,配置以下
在nginx配置文件中,添加以下配置,定義負載均衡池,寫入後端項目地址
# 默認輪詢方式 upstream myproject { server 192.168.182.131; server 192.168.182.132; } #權重方式 upstream myproject { server 192.168.182.131 weight=4; server 192.168.182.132 weight=1; } #ip哈希方式,根據用戶的來源ip計算出哈希值,永遠只指派給一個服務器去解析 #ip哈希不得與權重共同使用 upstream myproject { server 192.168.182.131 ; server 192.168.182.132 ; ip_hash; } #虛擬主機配置以下 server { listen 80; server_name www.hello.com; #charset koi8-r; #access_log logs/host.access.log main; #access_log "pipe:rollback logs/host.access_log interval=1d baknum=7 maxsize=2G" main; location / { # root /opt/xxx/; # index index.html index.htm; #請求轉發給負載均衡池 proxy_pass http://myproject; } }
1.以往的python manage.py runserver 調用wsgiref去啓動django,性能很低,單進程web,使用uWSGI啓動django,能夠支持併發,多進程,以及日誌設置,多種功能。
2.安裝uWSGI
pip3 install -i https://pypi.douban.com/simple uwsgi
3.nginx的配置,反向代理uWSGI
3.1 修改nginx.conf以下
server { listen 80; server_name www.hello.com; #charset koi8-r; #access_log logs/host.access.log main; #access_log "pipe:rollback logs/host.access_log interval=1d baknum=7 maxsize=2G" main; location / { #轉發請求的方式配置在這裏 include uwsgi_params; uwsgi_pass 0.0.0.0:8888; } }
4.使用uWSGI的命令,參數形式啓動項目
uwsgi --http :8888 --module myproject.wsgi
--http 指定是http協議,去啓動項目
--module 指定django目錄下的wsgi文件
5.uWSGI支持的熱加載命令
uwsgi --http:8888 --module myproject.wsgi --py-autoreload=1
6.uWSGI以配置文件的形式啓動 ,就是把你的啓動參數,寫入到一個文件中,而後,執行這個文件便可
配置文件名字能夠叫作 uwsgi.ini ,內容以下,這個文件是手動生成的
touch uwsgi.ini ,寫入以下內容
[uwsgi] # Django-related settings # the base directory (full path)填入項目的絕對路徑 ,項目的第一層路徑 chdir = /opt/s21/Aida_crm # Django's wsgi file指定第二層項目下的wsgi文件 module = Aida_crm.wsgi # the virtualenv (full path)找到虛擬環境的絕對路徑 home = /opt/s21/s21uwsgi # process-related settings # master master = true # 以cpu核數來填寫,uwsgi的工做進程數 processes = 2 # the socket (use the full path to be safe) 這是以uwsgi_socket協議啓動的項目,沒法再去經過瀏覽器訪問,必須經過nginx以uwsgi協議去反向代理 socket = 0.0.0.0:8888 #也可使用http協議去啓動(僅用做調試使用) #http = 0.0.0.0:9000 # ... with appropriate permissions - may be needed # chmod-socket = 664 # clear environment on exit vacuum = true #後臺運行參數,將uwsgi運行在後臺,而且將django日誌輸出到uwsgi.log中 daemonize = uwsgi.log
7.指定配置文件啓動django
uwsgi --ini uwsgi.ini
8.收集crm的全部靜態文件,讓nginx去解析
對django的settings.py配置修改以下
添加以下參數
STATIC_ROOT='/opt/mystatic'
STATIC_URL = '/static/'
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'static')
]
在項目第一層目錄下執行收集命令,執行命令,收集django的全部靜態文件,系統會自動建立'/opt/mystatic' 這個文件夾
python manage.py collectstatic
9.配置nginx,找到crm的這些靜態資源
location / {
include uwsgi_params;
uwsgi_pass 0.0.0.0:8888;
}
#添加一個location,針對nginx的url進行匹配處理
#當請求時 www.oldchouhuo.com/static/..... 這樣的url的時候,nginx進行別名修改,去/opt/mystatic底下去尋找資源文件
location /static {
alias /opt/mystatic;
}
前言:先後端分離項目流程,經過訪問nginx,會跳轉到vue訪問前端頁面,而後前端向後端發請求,獲取到後端數據。用戶既不接觸vue前端服務器的ip,也接觸不到後端服務器ip。
1.1 將前端項目傳到服務器
經過lrzsz,或者xftp傳輸到linux服務器上,並進行解壓縮
1.2 前端vue
要在服務器上,編譯打包vue項目,必須得有node環境
1.3 下載node.js
到網站https://nodejs.org/download/release/找到對應的項目使用版本進行下載,下載node二進制包就不用進行編譯了。
wget https://nodejs.org/download/release/v8.6.0/node-v8.6.0-linux-x64.tar.gz
解壓縮 tar -zxvf node-v8.6.0-linux-x64.tar.gz
1.4 配置環境
將node命令,添加至linux環境變量,修改/etc/profile,寫入下面代碼
PATH=$PATH:/opt/node-v8.6.0-linux-x64/bin
1.5 讀取文件,生效PATH
source /etc/profile
1.6 測試是否完成
[root@MiWiFi-R4-srv node-v8.6.0-linux-x64]# node -v
v8.6.0
1.7 node環境配置好後,安裝模塊
使用npm,npm 是 Node 的模塊管理器。npm install
命令用來安裝模塊到node_modules
目錄。
進入vue項目源碼目錄 cd myvue$ npm install <packageName>
安裝vue項目模塊,npm install默認去裝package.json的模塊內容,若是出現模塊安裝失敗,手動再裝
注意,本地寫的vue代碼,接口文件請求url,極可能鏈接的服務器地址有問題,注意Axios.POST提交的地址,必定得發送給django應用(若是用了nginx,就發送給nginx的入口端口) 演示時,將vue項目和django項目放在了一臺服務器,經過nginx反向代理功能(8888端口),轉發vue請求給django(9999) 準備編譯打包vue項目,替換配置文件全部地址,改成服務器地址 sed -i 's/127.0.0.1:8000/192.168.31.176:8888/g' /opt/myvue/src/restful/api.js
確保vue的route模式是history
路徑:opt/myvue/src/router/index.js
export default new Router({
linkActiveClass:'is-active',
mode: 'history', //改爲history模式
......
})
1.8 開始編譯vue代碼,生成dist靜態網頁文件夾
npm run build
1.9 檢查dist文件夾
[root@MiWiFi-R4-srv myvue]#ls dist
index.html static
vue代碼到此結束。。。配置nginx,讓nginx找到vue的index.html文件
2.0 nginx配置
server { #用戶訪問域名或者ip,默認是nginx的80端口 listen 80; server_name 192.168.31.176; #url匹配 / 也就是請求地址是192.168.31.176端口80時,進入此location,返回vue的dist下index.html首頁 location / { root /opt/myvue/dist; index index.html; } }
注:到此訪問192.168.31.176就能夠訪問index.html頁面,若是沒法訪問則是防火牆問題,iptables -F解決防火牆。便可訪問
nginx的配置
worker_processes 1; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; server { listen 80; server_name 192.168.31.176; location / { root /opt/myvue/dist; index index.html; #這一條參數確保vue頁面刷新時候,不會出現404頁面 try_files $uri $uri/ /index.html; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } server { listen 8000; server_name 192.168.31.176; location / { include uwsgi_params; uwsgi_pass 0.0.0.0:9999; } } }