用Azure VM + Azure Database for MySQL搭建Web服务
仍然是一篇動手實驗,實驗演示如何在Azure的虛擬機內部署一個Web服務器,并且使用Azure Mysql PaaS作為本應用的數據庫。此實驗的目的一方面是為了演示Azure IaaS層和PaaS服務配合使用的常規操作,另一方面是為之后的文章打基礎,后續會以此應用程序和架構為基礎,介紹更多Azure的相關服務(如Azure Web 應用,Application Insights,等)。話不多說,直接進入正題吧。
實驗開始之前,先介紹下開發環境:
開發語言:Python(3.6); 項目框架:Django(2.0);Web服務器:Nginx;wsgi服務器:uwsgi.
一、本地配置連接Azure Database for MySQL。
為了方便后期服務器的配置,我們先在本地調試好程序,Azure Database for MySQL的對接比較簡單,遵循了Django的常規要求,首先我們在azure portal上創建一個mysql服務:(詳細創建過程可以參考官方文檔 https://docs.azure.cn/zh-cn/mysql/quickstart-create-mysql-server-database-using-azure-portal )
創建完成后查看服務器信息,記下服務器名稱和管理員登錄名。
然后回到Django項目里的settings.py文件,找到Database部分修改:
簡單介紹下參數:ENGINE表示Django調用數據庫的引擎,這里填 ‘django.db.backends.mysql’;NAME表示你要寫入和調用的數據庫的名稱,Portal上創建完Mysql后默認創建information_schema、mysql、performance_schema 和 sys這四個數據庫,所以你需要在上一步創建服務完成后用工具連接到服務器自己為這個項目創建一個數據庫,這里我命名為‘djangopro’;USER和PASSWORD就是你登錄數據庫的用戶名和密碼,最后HOST指的是這臺server的地址,把上面圖里的數據庫名稱復制在這里就好。到這里還需要在Azure Portal配置下服務器級防火墻規則,去服務器的概述頁面,點擊左側的【連接安全性】,點擊【添加客戶端IP】,保存,這樣本機就可以訪問數據庫了(更多信息可以參考:https://docs.azure.cn/zh-cn/mysql/howto-manage-firewall-using-portal)。
最后因為我們修改了數據庫配置,需要重新cd 到你的文件目錄下運行:
>>python3 manage.py makemigrations
>>python3 manage.py migrate
>>python manage.py createsuperuser (修改完數據庫配置需要重新創建一個超級用戶才能登陸后臺admin頁面)
最后運行 python3 manage.py runserver 0.0.0.0:8000在本地瀏覽器查看程序,用剛剛創建的superuser登陸后臺寫入兩條數據,再去Azure數據庫查看對應的表有沒有寫進去,沒有問題的話這里本地調試就完成了。
二、創建VM,安裝Python3+Django+Nginx+uwsgi
首先去Azure Portal創建一臺VM(這里我用的是Ubuntu 18.10),然后遠程登錄到VM上安裝環境,
Python3:
sudo apt-get install python3-dev sudo apt-get install libpcre3 libpcre3-dev sudo apt install python3-pip
uwsgi:
sudo pip3 install uwsgi
安裝完uwsgi后需要測試一下,可以在當前目錄下創建一個test.py文件,編輯如下:
def application(env, start_response):start_response('200 OK', [('Content-Type','text/html')])return [b"Hello World"] # python3
然后執行
uwsgi --http-socket :8001 --wsgi-file test.py
這里用到了8001端口,因此我們還需要在Azure VM 概述這里把這個端口打開(順便也可以把80端口打開,后面有用),到portal上添加【入站端口規則】:
?
?然后就可以在瀏覽器中輸入 這臺機器的IP地址:8001? 進行測試了。如果顯示Hello World說明uwsgi正常運行。
代碼環境:
#安裝Django sudo apt install python3-django#驗證Djangodjango-admin startproject blog #創建blog項目 cd blog #進入項目 python3 manage.py makemigrations/migrate/runserver 0.0.0.0:8001 #運行django項目#修改settings.py ALLOWED_HOSTS = ['VM的IP地址', 'localhost', '127.0.0.1']#安裝python plugin sudo apt-get install -y uwsgi-plugin-python3 sudo apt-get install uwsgi-plugins-all#驗證uwsgi uwsgi --http :8001 --chdir /home/ruchan/blog --wsgi-file blog/wsgi.py --master --processes 4 --threads 2 --stats 127.0.0.1:9192 #瀏覽器輸入 VM IP地址:8001 出現Django的歡迎界面表示Django項目和uwsgi連接成功
Nginx:
sudo apt-get install nginx
三、本地項目部署到VM上
驗證程序:
首先先本地的程序文件包上傳到VM的某個位置,然后運行,運行過程中可能會報一些錯,得自己調試下環境,首先要保證VM的Python版本和Django版本與本地相同,其次可能會缺少一些依賴項,這個就需要看報的什么錯進行調試了,以下是我用到的命令:
pip3 install pymysql pip3 install django==2.0.2 #更新下Django版本,否則可能會有cannot import '' from django 的錯誤 sudo apt-get install libmysqld-dev sudo pip3 install mysqlclient
?
這里還需要修改一下數據庫的配置,因為現在是VM訪問mysql,所以還需在azure portal上開啟一下允許Azure服務的訪問(當然這種一開所有Auzre服務都能訪問這個庫了,細顆粒的還是可以通過IP去做)
?
配置Nginx,uwsgi:
首先要去代碼的settings改下:
ALLOWED_HOSTS = ['VM IP地址', 'localhost', '127.0.0.1']DEBUG = False #讓Nginx來處理靜態文件 STATIC_ROOT = os.path.join(BASE_DIR, '../collectedstatic')#指定下Django收集的靜態文件的目錄
然后修改下uwsgi的配置文件:
# hello_uwsgi.ini file [uwsgi]# Django-related settingssocket = :8001# the base directory (full path) chdir = /home/ruchan/root0/firstsite #項目地址# Django s wsgi file module = firstsite.wsgi# process-related settings # master master = true# maximum number of worker processes processes = 4# ... with appropriate permissions - may be needed # chmod-socket = 664 # clear environment on exit vacuum = true # pidfile for record run pid pidfile =pid.uwsgi # 設置日志目錄 daemonize = UWSGI.log
?
最后修改下Nginx配置文件:
server {listen 80;server_name VM IP;charset utf-8;location /static {autoindex on;alias /home/ruchan/root0/collectedstatic;#項目里Django收集的靜態文件的目錄地址}location / {include uwsgi_params;uwsgi_pass 127.0.0.1:8001;#端口與uwsgi.ini配的一致}}
然后運行:
sudo /etc/init.d/nginx restart uwsgi --ini uwsgi.ini
最后瀏覽器輸入IP地址看一下效果吧:
總結:
這個架構還是比較簡單粗暴型的,首先沒有域名,其次VM高可用暫時沒考慮(這點是一個錯誤示范),不過沒關系,后續我們會慢慢完善這些方面的應用和相關內容的添加的。總的來說這是一類應用比較多的場景,自己做了一遍先碼在這里,希望能對大家有幫助~
?
轉載于:https://www.cnblogs.com/changruijun/p/10716760.html
總結
以上是生活随笔為你收集整理的用Azure VM + Azure Database for MySQL搭建Web服务的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 圣冕麒麟值得练吗
- 下一篇: 输卵管无创手术是什么