在Centos8上部署Django环境(Nginx+mysql+uwsgi)
前言:筆者通過阿里云的學生"在家實踐計劃"獲得了一臺2核4G的云ECS實例,并安裝了Centos8鏡像。于是嘗試部署一套Django的生產環境。筆者選擇了 Nginx + uwsgi + mysql +Python3的方式。主機自帶了python3和pip3。筆者自行安裝了剩下的部分。其中,mysql的安裝借鑒了這篇參考博文。如有疑問歡迎大家在評區留言。
附言:以下操作,筆者都是以root身份進行的,讀者以其他用戶進行時,請酌情在命令前加上sudo。
本文目錄
- 1.Nginx
- 1.1阿里云放通80端口
- 1.2安裝nginx
- 1.3nginx管理
- 1.4nginx使用
- 2.Mysql
- 2.1安裝mysql8.0
- 2.2啟動mysql
- 2.3安全設置
- 3.Django
- 3.1安裝django
- 3.2關聯mysql
- 3.3Django項目
- 4.uWSGI
- 4.1安裝uwsgi
- 4.2寫項目配置文件
- 4.3寫nginx配置文件
- 4.4運行
- 4.5管理
- 4.5.1安裝uwsgitop
- 4.5.2管理相關命令
1.Nginx
1.1阿里云放通80端口
在阿里云的控制臺中,對實例主機配置安全組,在入方向新增80端口的安全規則。配置如有疑問請參考官方說明。
1.2安裝nginx
由于筆者對nginx的版本沒有過多要求,此處采用dnf包管理方式安裝,此處筆者dnf安裝的是14.1版本。
dnf install -y nginx安裝完成后,可以查看一下版本,以驗證是否正確安裝。
nginx -v1.3nginx管理
基于dnf安裝的nginx已經做好了相關設置,可以使用nginx -s、systemctl對nginx進行便捷管理。
systemctl管理常用:
相比之下,筆者還是更喜歡直接使用原生的nginx自帶命令
通過nginx -h 讀者可以查看到nginx常用命令及說明,筆者摘錄了一部分
1.4nginx使用
systemctl start nginx #或者直接使用nginx 啟動nginx服務 systemctl status nginx #若看到Active變為active(running)則啟動正常 lsof -i:80 #可以看到80端口已經被nginx監聽了上面一系列檢查確認nginx正常啟動后,可以到瀏覽器輸入公網地址或域名,看到nginx歡迎頁。
nginx默認配置中監聽80端口的配置項所在根位置,對應nginx程序安裝目錄下的html目錄。我們通過nginx -V可以看到,dnf安裝后,nginx安裝位置在/usr/share/nginx,配置文件在/etc/nginx/nginx.conf。(歡迎頁就是/usr/share/nginx/html/index.html)。
筆者還是更習慣將網站目錄設置在/var/www下,我們可以這樣來修改:
大功告成,網站目錄修改成功。(準確說是80端口web內容映射的根目錄位置)
2.Mysql
2.1安裝mysql8.0
Centos8的dnf對懶人那是相當友好。mysql8.0的完全可以一條命令解決:
dnf install -y @mysql #@mysql模塊將安裝MySQL8.0及其所有依賴項2.2啟動mysql
systemctl enable mysqld #配置mysql開機自啟動 systemctl start mysqld #啟動mysqld systemctl status mysqld #查看mysql是否啟動成功(active running)2.3安全設置
運行如下腳本,可以設置mysql的root密碼,并引導你完成一些必要的安全設置。
mysql_secure_installation首先,腳本會讓你選擇是否配置VALIDATE PASSWORD PLUGIN(密碼驗證插件),該插件用來檢查mysql用戶所設置的密碼強度,只有達到一定強度的密碼才允許被設置。如果你希望設置請輸入y或者Y回車,不想請直接回車。若選擇了配置,緊接著你將選擇所采用密碼驗證策略的級別:
低:密碼長度不少于8位
中:密碼長度不少于8位,必須是數字、大小寫字母、特殊字母混合。
強:密碼長度不少于8位,必須是數字、大小寫字母、特殊字母混合,需配合字典文件。
通常,我們選擇中級別即可。
其次,將要求用戶輸入兩次為root設置的新密碼,上一步驟設置的密碼驗證策略將發揮作用,并對用戶設置的密碼強度進行打分。設置好密碼以后,會提示用戶是否繼續采用密碼保護,選擇y回車。
緊接著,將詢問用戶是否刪除匿名用戶,選擇y回車。
默認情況下,MySQL有一個匿名用戶,允許任何人登錄MySQL,而不必創建用戶帳戶。這僅用于測試,或者安裝時更便利。但在部署生產環境之前,應該先刪除匿名用戶。
然后,將詢問用戶是否禁止以root身份遠程登陸mysql,選擇y回車。
通常,mysql中的root用戶應只允許通過本地登陸,而不能遠程登陸。這樣可以降低root用戶密碼被爆破的風險。
此后,將詢問用戶是否刪除測試數據庫,選擇y回車。
默認情況下,MySQL總有一個名為’test’的數據庫,允許任何用戶訪問。這僅用于安裝時的測試,但在部署生產環境之前,應該先刪除該數據庫。
最后,腳本詢問用戶是否現在重載 privilege tables,以使當前所有修改立刻生效。選擇y回車。
當我們在終端中鍵入:
mysql -uroot -p #回車輸入密碼并確認即可登陸mysql。
3.Django
Django作為python得力的重量級web框架,一直備受青睞。
3.1安裝django
pip3 install django3.2關聯mysql
dnf install mysql-devel pip3 install mysqlclient3.3Django項目
django-admin startproject myproject #創建一個名為myproject的項目 cd myproject python3 manage.py startapp dg_mypr #創建一個應用dg_mypr用來映射數據庫上述創建的應用,通過在models.py中利用Django的ORM映射數據庫的表和字段,一般為了統一我們會使該應用與數據庫同名。
打開項目下的配置文件settings.py
DATABASES = {'default': {'ENGINE': 'django.db.backends.sqlite3','NAME': os.path.join(BASE_DIR, 'db.sqlite3'),} }#上述內容修改為mysql引擎,填入要連接的數據庫信息 #要注意的是 這里的數據庫必須是提前創建好的!!!!! DATABASES = {'default': {'ENGINE': 'django.db.backends.mysql','NAME': '數據庫名','USER': 'root','PASSWORD': '密碼','HOST': 'localhost',} } #在這里插入新創建的app INSTALLED_APPS = ['django.contrib.admin','django.contrib.auth','django.contrib.contenttypes','django.contrib.sessions','django.contrib.messages','django.contrib.staticfiles','dg_mypr', #加入dg_mypr ] DEBUG = True #測試中打開Debug 生產環境請關閉 ALLOWED_HOSTS = [u'*'] #修改白名單為全通修改完成后,保存退出。
(在dg_mypr中的models.py中定義ORM映射模型的步驟略)
改好配置文件并創建模型后,我們可以使用
此后若需要應用新的ORM建模,可以在清庫后,刪除dg_mypr/migrations目錄下的__pycache__和0001_initial.py,重復上述兩步操作即可。
最后,我們可以在開著debug的情況下應用runserver跑一個端口測試一下:
(確保阿里云安全策略組已開放該端口)
當瀏覽器訪問http://公網地址:端口 后,若載入了Django歡迎頁,則進入下一步驟。
4.uWSGI
4.1安裝uwsgi
python3 -m pip install uwsgi #安裝完成后測試一下 uwsgi --version4.2寫項目配置文件
在項目的目錄 /var/www/mysite/myproject 下創建一個ini配置文件
并創建一個目錄uwsgi用來存放運行相關文件
在myproject.ini中寫入:
# myproject.ini [uwsgi] #內部轉發端口 只要不被占用可隨意找 需和nginx.conf里的轉發口匹配 socket = :8888 #django 項目目錄 chdir = /var/www/mysite/myproject #Django 項目下 wsgi.py 文件 module = myproject.wsgi master = true #進程數 processes = 4 vacuum = true #status文件,可以查看uwsgi的運行狀態 stats =%(chdir)/uwsgi/uwsgi.status #pid文件,通過該文件可以控制uwsgi的重啟和停止 pidfile =%(chdir)/uwsgi/uwsgi.pid #日志文件,通過該文件查看uwsgi的日志 daemonize =%(chdir)/uwsgi/uwsgi.log4.3寫nginx配置文件
在nginx配置文件nginx.conf中加入
server {listen 8080; #暴露給外部訪問的端口 根據實際指定 確認阿里云策略組已放行server_name localhost;charset utf-8;location / {include uwsgi_params;uwsgi_pass 127.0.0.1:8888; #外部訪問端口就轉發到內部端口 要與項目配置文件里的一致}location /static/ {alias /var/www/mysite/myproject/static/; #項目靜態路徑設置} }寫完后運行 nginx -t檢測一下是否有語法錯誤
然后運行nginx -s reload重新載入配置文件
4.4運行
回到項目目錄 運行 uwsgi --ini myproject.ini即可
可運行cat uwsgi/uwsgi.log查看一下是否正常啟動了uwsgi
當看到如下內容 說明正常啟動了
此時,運行ps aux | grep uwsgi可查看到正在運行的uwsgi實例
4.5管理
倘若不撰寫管理腳本 需要重啟uwsgi時總是需要
$ ps -ax | grep uwsgi $ kill -9 [pid] $ uwsgi --ini myproject.ini但是如果你按照第二步創建了uwsgi目錄及相關文件,你就可以優雅地管理uwsgi進程。
4.5.1安裝uwsgitop
uwsgitop是一款界面類似top的工具,用以查看指定uwsgi的全部工作進程情況。
pip3 install uwsgitop4.5.2管理相關命令
#重啟uwsgi(常常出錯 還是執行stop以后start效率高) uwsgi --reload uwsgi/uwsgi.pid #終止uwsgi(原理是啟動uwsgi進程時會把pid寫入該文件) uwsgi --stop uwsgi/uwsgi.pid #查看uwsgi各進程工作狀況 uwsgitop uwsgi/uwsgi.status #追蹤uwsgi日志及動態刷新當前訪問記錄 tail -f uwsgi/uwsgi.log #啟動uwsgi uwsgi --ini myproject.ini如果不便記憶,可將上述命令寫入sh腳本文件 快捷執行。
cd uwsgi echo "uwsgi --ini ../myproject.ini" >start.sh echo "uwsgi --stop uwsgi.pid" >stop.sh echo "uwsgitop uwsgi.status" >status.sh echo "tail -f uwsgi.log">log.sh chmod +x *.sh可在瀏覽器訪問項目地址,測試效果。
綜上,筆者整理了自己部署環境的全過程,希望能夠對讀者有所幫助。后續如有其他內容,將繼續補丁修正。歡迎評論指正!
總結
以上是生活随笔為你收集整理的在Centos8上部署Django环境(Nginx+mysql+uwsgi)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 使用WSL吧
- 下一篇: @Prometheus监控数据库(MyS