操做系統php
Ubuntu Server 16.04.1 LTS 64位
獲取root權限css
ubuntu@VM-0-9-ubuntu:~$ sudo passwd root Enter new UNIX password: root Retype new UNIX password: passwd: password updated successfully ubuntu@VM-0-9-ubuntu:~$ ubuntu@VM-0-9-ubuntu:~$ su - Password: root@VM-0-9-ubuntu:~#
apt-get install mysql-server
設置MySQL密碼 ,輸入兩次密碼,回車便可html
查看MySQL版本命令前端
root@VM-0-9-ubuntu:~# mysql --version mysql Ver 14.14 Distrib 5.7.23, for Linux (x86_64) using EditLine wrapper
運行數據庫Mysql安全配置嚮導: 輸入root密碼,4個回車 okpython
mysql_secure_installation
啓動mysql服務mysql
root@VM-0-9-ubuntu:~# service mysql start
配置字符集,linux
root@VM-0-9-ubuntu:~# vim /etc/mysql/my.cnf # 添加以下代碼,保存退出
[client] port = 3306 socket = /var/lib/mysql/mysql.sock default-character-set=utf8 [mysqld] port = 3306 socket = /var/lib/mysql/mysql.sock character-set-server=utf8 [mysql] no-auto-rehash default-character-set=utf8
重啓mysql服務nginx
root@VM-0-9-ubuntu:~# service mysql restart
建立項目的數據庫 # 個人數據庫 cnblogweb
root@VM-0-9-ubuntu:~# mysql -uroot -proot mysql> CREATE DATABASE `cnblog` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; Query OK, 1 row affected (0.00 sec) mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | cnblog | | mysql | | performance_schema | | sys | +--------------------+ 5 rows in set (0.00 sec)
root@VM-0-9-ubuntu:~# python3 Python 3.5.2 (default, Nov 17 2016, 17:05:23) [GCC 5.4.0 20160609] on linux Type "help", "copyright", "credits" or "license" for more information. >>> >>>
root@VM-0-9-ubuntu:~# apt-get install python3-pip
測試pip3sql
root@VM-0-9-ubuntu:~# pip3
root@VM-0-9-ubuntu:~# pip3 install django==2.0
測試
root@VM-0-9-ubuntu:~# python3 Python 3.5.2 (default, Nov 23 2017, 16:37:01) [GCC 5.4.0 20160609] on linux Type "help", "copyright", "credits" or "license" for more information. >>> >>> import django >>>
uWSGI是一個Web服務器,它實現了WSGI協議、uwsgi、http等協議。Nginx中HttpUwsgiModule的做用是與uWSGI服務器進行交換。
要注意 WSGI / uwsgi / uWSGI 這三個概念的區分。
uWSGI的主要特色以下
總而言之uwgi是個部署用的好東東,正如uWSGI做者所吹噓的:
If you are searching for a simple wsgi-only server, uWSGI is not for you, but if you are building a real (production-ready) app that need to be rock-solid, fast and easy to distribute/optimize for various load-average, you will pathetically and morbidly fall in love (we hope) with uWSGI.
root@VM-0-9-ubuntu:~# pip3 install uwsgi Collecting uwsgi
測試:新建test.py 輸入如下內容
root@VM-0-9-ubuntu:~# vim test.py
def application(env, start_response): start_response('200 OK', [('Content-Type','text/html')]) return [b"Hello World"]
uwsgi啓動8000端口,瀏覽器訪問你的ip:8000
root@VM-0-9-ubuntu:~# uwsgi --http :8000 --wsgi-file test.py
home下的ubuntu目錄下
root@VM-0-9-ubuntu:/home/ubuntu# pwd /home/ubuntu
安裝tree命令,查看目錄結構
root@VM-0-9-ubuntu:/home/ubuntu# apt install tree
root@VM-0-9-ubuntu:/home/ubuntu# tree
└── cnblog ├── blog │?? ├── migrations │?? │?? └── __pycache__ │?? ├── templatetags │?? │?? └── __pycache__ │?? └── utils │?? └── __pycache__ ├── cnblog ├── logger ├── media │?? ├── add_article_img │?? └── avatars ├── static │?? ├── blog │?? │?? └── bs │?? │?? ├── css │?? │?? ├── fonts │?? │?? └── js │?? ├── bootstrap3 │?? │?? ├── css │?? │?? ├── fonts │?? │?? └── js │?? ├── css │?? ├── font │?? ├── img │?? ├── js │?? └── kindeditor │?? ├── asp │?? ├── asp.net │?? │?? └── bin │?? ├── jsp │?? │?? └── lib │?? ├── lang │?? ├── php │?? ├── plugins │?? │?? ├── anchor │?? │?? ├── autoheight │?? │?? ├── baidumap │?? │?? ├── clearhtml │?? │?? ├── code │?? │?? ├── emoticons │?? │?? │?? └── images │?? │?? ├── filemanager │?? │?? │?? └── images │?? │?? ├── fixtoolbar │?? │?? ├── flash │?? │?? ├── image │?? │?? │?? └── images │?? │?? ├── insertfile │?? │?? ├── lineheight │?? │?? ├── link │?? │?? ├── map │?? │?? ├── media │?? │?? ├── multiimage │?? │?? │?? └── images │?? │?? ├── pagebreak │?? │?? ├── plainpaste │?? │?? ├── preview │?? │?? ├── quickformat │?? │?? ├── table │?? │?? ├── template │?? │?? │?? └── html │?? │?? └── wordpaste │?? └── themes │?? ├── common │?? ├── default │?? ├── qq │?? └── simple └── templates ├── backend └── blog
安裝依賴包
# 鏈接mysql的模塊 root@VM-0-9-ubuntu:/home/ubuntu# pip3 install PyMySQL==0.8.1 ----下面兩個是我項目須要的模塊,你們能夠不須要安裝---- # pil生成驗證碼 root@VM-0-9-ubuntu:/home/ubuntu# pip3 install Pillow==5.2.0 # 防止xss攻擊的 root@VM-0-9-ubuntu:/home/ubuntu# pip3 install bs4==0.0.1
到django項目下,與manage.py同目錄
數據表遷移
root@VM-0-9-ubuntu:/home/ubuntu/cnblog# python3 manage.py makemigrations root@VM-0-9-ubuntu:/home/ubuntu/cnblog# python3 manage.py migrate
到django項目下,與manage.py同目錄,啓動項目
root@VM-0-9-ubuntu:/home/ubuntu/cnblog# python3 manage.py runserver 0.0.0.0:8000
不太對?這是由於設置了ALLOWED_HOSTS的緣由
咱們在setting.py裏設置一下
ubuntu@VM-0-9-ubuntu:~$ cd cnblog/ ubuntu@VM-0-9-ubuntu:~/cnblog$ cd cnblog/ ubuntu@VM-0-9-ubuntu:~/cnblog/cnblog$ ls __init__.py __pycache__ settings.py urls.py wsgi.py
ubuntu@VM-0-9-ubuntu:~/cnblog/cnblog$ vim settings.py
DEBUG = False ALLOWED_HOSTS = ['*']
root@VM-0-9-ubuntu:/home/ubuntu/cnblog# python3 manage.py runserver 0.0.0.0:8001
ubuntu@VM-0-9-ubuntu:~/cnblog$ pwd /home/ubuntu/cnblog
root@VM-0-9-ubuntu:/home/ubuntu/cnblog# uwsgi --http 0.0.0.0:8000 --file cnblog/wsgi.py --static-map=/static=static
咱們能夠暫定如下內容
Nginx (engine x) 是一款輕量級的 Web 服務器 、反向代理服務器及電子郵件(IMAP/POP3)代理服務器。
http://www.cnblogs.com/venicid/p/8440576.html
反向代理(Reverse Proxy)方式是指以代理服務器來接受 internet 上的鏈接請求,而後將請求轉發給內部網絡上的服務器,
並將從服務器上獲得的結果返回給 internet 上請求鏈接的客戶端,此時代理服務器對外就表現爲一個反向代理服務器。
(1)跨平臺:Nginx 能夠在大多數 Unix like OS編譯運行,並且也有Windows的移植版本。(2)配置異常簡單,很是容易上手。配置風格跟程序開發同樣,神通常的配置
(3)非阻塞、高併發鏈接:數據複製時,磁盤I/O的第一階段是非阻塞的。官方測試可以支撐5萬併發鏈接,在實際生產環境中跑到2~3萬併發鏈接數.(這得益於Nginx使用了最新的epoll模型)
(4)事件驅動:通訊機制採用epoll模型,支持更大的併發鏈接。
(5)master/worker結構:一個master進程,生成一個或多個worker進程
(6)內存消耗小:處理大併發的請求內存消耗很是小。在3萬併發鏈接下,開啓的10個Nginx 進程才消耗150M內存(15M*10=150M)
(7)成本低廉:Nginx爲開源軟件,能夠無償使用。而購買F5 BIG-IP、NetScaler等硬件負載均衡交換機則須要十多萬至幾十萬人民幣
(8)內置的健康檢查功能:若是 Nginx Proxy 後端的某臺 Web 服務器宕機了,不會影響前端訪問。
(9)節省帶寬:支持 GZIP 壓縮,能夠添加瀏覽器本地緩存的 Header 頭。
(10)穩定性高:用於反向代理,宕機的機率微乎其微
apt-get install nginx
url中輸入你的IP地址
http://www.javashuo.com/article/p-usyhmvsx-cr.html
經過 uWSGI 啓動 django 的web服務,nginx 將請求中轉給 uWSGI 而後返回。
通常能夠直接使用nginx路徑下的uwsgi_params,路徑通常在 /etc/nginx/uwsgi_params
root@VM-0-9-ubuntu:~# ls -l /etc/nginx/uwsgi_params -rw-r--r-- 1 root root 664 Aug 9 15:29 /etc/nginx/uwsgi_params
uwsgi_param QUERY_STRING $query_string; uwsgi_param REQUEST_METHOD $request_method; uwsgi_param CONTENT_TYPE $content_type; uwsgi_param CONTENT_LENGTH $content_length; uwsgi_param REQUEST_URI $request_uri; uwsgi_param PATH_INFO $document_uri; uwsgi_param DOCUMENT_ROOT $document_root; uwsgi_param SERVER_PROTOCOL $server_protocol; uwsgi_param REQUEST_SCHEME $scheme; uwsgi_param HTTPS $https if_not_empty; uwsgi_param REMOTE_ADDR $remote_addr; uwsgi_param REMOTE_PORT $remote_port; uwsgi_param SERVER_PORT $server_port; uwsgi_param SERVER_NAME $server_name;
[uwsgi] # uwsgi監聽的socket,一下子配置Nginx會用到 socket = 127.0.0.1:8001 # 在app加載前切換到該目錄,設置爲Django項目根目錄 chdir = /home/ubuntu/cnblog # 加載指定的python WSGI模塊,設置爲Django項目的wsgi文件 module = cnblog.wsgi # 啓動一個master進程來管理其餘進程 master = true # 工做的進程數 processes = 4 # 每一個進程下的線程數量 threads = 2 # 當服務器退出的時候自動刪除unix socket文件和pid文件 vacuum = true # 使進程在後臺運行,並將日誌打到指定的日誌文件或者udp服務器 daemonize = /home/ubuntu/cnblog/uwsgi.log
建立個uwsgi.log文件
root@VM-0-9-ubuntu:/home/ubuntu/cnblog# touch uwsgi.log
打開配置文件,在Http內建立server子項以下:
vim /etc/nginx/nginx.conf
server { listen 80; # 設置監聽端口號 用於http協議 server_name 193.112.59.93; # 設置對外訪問入口,能夠是域名能夠是IP地址,我設置的是IP charset UTF-8; # 設置訪問的語言編碼 access_log /var/log/nginx/cnblog_access.log; # 訪問日誌記錄 error_log /var/log/nginx/cnblog_error.log; # 錯誤日誌記錄 location / { # 設置虛擬主機的基本信息 include uwsgi_params; uwsgi_pass 127.0.0.1:8001; # 剛纔uwsgi設置的socket uwsgi_read_timeout 2; } location /static { # 靜態文件設置,nginx本身處理 expires 7d; # 過時時間 alias /home/ubuntu/cnblog/static/; # 項目靜態文件地址 } }
其中uwsgi使用自定義位置配置文件cnblog.ini
切換到/home/Ubuntu/cnblog/目錄下運行: >> uwsgi --ini cnblog.ini >> /etc/init.d/nginx restart
# 查看tcp鏈接 root@VM-0-9-ubuntu:/home/ubuntu/cnblog# netstat -tln # 查看8001端口,已經佔用的進程 root@VM-0-9-ubuntu:/home/ubuntu/cnblog# lsof -i:8001 # kill該進程 root@VM-0-9-ubuntu:/home/ubuntu/cnblog# kill -9 19793
建立超級用戶
root@VM-0-9-ubuntu:/home/ubuntu/cnblog# python3 manage.py createsuperuser Username: alex Email address: alex@qq.com Password: 1234qwer Password (again): Superuser created successfully.
這是因爲 找不到 css 的緣故。須要在 location 裏面加上
root@VM-0-9-ubuntu:~# vim /etc/nginx/nginx.conf
location /static/admin { #admin的css路徑 root /usr/local/lib/python3.5/dist-packages/django/contrib/admin; }
項目有更新的時候,須要先關閉uwsgi而後重啓便可,關閉wsgi依然能夠用一招解決輸入:
>> killall -9 uwsgi
重啓
>> uwsgi --ini cnblog.ini >> /etc/init.d/nginx restart
Nginx服務器從新加載,以使Nginx的配置生效。
nginx -s reload