叨嘮幾句
此筆記僅作為在學(xué)習(xí)部署阿里云后臺項目的時候土居,踩的坑,和填的坑嬉探,也許很多不對和不妥的地方擦耀,還請指出....
等一下,還有句話
這個筆記的前提是涩堤,已經(jīng)在本地或者哪里都可以眷蜓,已經(jīng)學(xué)習(xí)完,編寫好了 python + flask + mysql 的工程胎围,本地運行是OK的哦
沒有寫好的項目吁系?教程?
網(wǎng)上有大把鴨,我也是初學(xué)萌新白魂,打擾了汽纤,下一個.....┭┮﹏┭┮
開工,沖鴨
1碧聪、注冊購買一個ECS 服務(wù)器冒版,選擇CentOS,登錄液茎,常規(guī)操作逞姿。
配置只有最重要的一步是辞嗡,要在管理頁面中配置添加好安全組規(guī)則添加打開要使用公網(wǎng)訪問的端口號(這步不配置,公網(wǎng)無法訪問該端口V驮臁P摇!Z搜)
怎么連接服務(wù)器挺狰?
xshell 了解一下
2、基本環(huán)境配置
- 安裝python 买窟,但CentOS 默認安裝有
如果沒有丰泊,自行安裝
安裝setuptools
這是個啥
setuptools是Python distutils增強版的集合,它可以幫助我們更簡單的創(chuàng)建和分發(fā)Python包始绍,尤其是擁有依賴關(guān)系的瞳购。用戶在使用setuptools創(chuàng)建的包時,并不需要已安裝setuptools亏推,只要一個啟動模塊即可
安裝吧
#wget https://pypi.python.org/packages/2.7/s/setuptools/setuptools-0.6c11-py2.7.egg --no-check-certificate
#chmod +x setuptools-0.6c11-py2.7.egg
#sh setuptools-0.6c11-py2.7.egg
pip的安裝
# wget https://pypi.python.org/packages/source/p/pip/pip-1.3.1.tar.gz --no-check-certificate
#chmod +x pip-1.3.1.tar.gz
#tar xzvf pip-1.3.1.tar.gz
#cd pip-1.3.1
#python setup.py install
安裝flask相關(guān)包
需要安裝的清單学赛,根據(jù)需要配置 requirements.txt
內(nèi)容如下
Flask==1.0.2
Flask-SQLAlchemy==2.3.2
Jinja2==2.10
MarkupSafe==1.1.0
PyMySQL==0.9.3
SQLAlchemy==1.2.15
一鍵安裝,方便吞杭,不用一個個install 盏浇,很麻煩
pip install -r requirements.txt
安裝 uWSGI
pip install uwsgi
這里使用這個的話,還需要配置賊多東西芽狗,我配置多次绢掰,一直出錯,這里先挖坑童擎,后面再填B隆!柔昼!
上傳項目文件
直接把寫好的項目文件哑芹,比如在PyCharm 上寫好,并且運行OK的項目放到服務(wù)器自定義文件夾
怎么放捕透?
xftp 了解一下
比如目錄如下
MySQLProject
---app
---run.py
---....py 其他代碼文件
---venv
---Include
---Lib
---....其他文件
其中 app運行的host 要配置成 阿里云的購買的服務(wù)器的私有IP
這樣聪姿,使用公網(wǎng)訪問才可以訪問,類似如下
host 換成自己的
app.run(host='172.17.25.***', port=5005,debug=True)
否則會無響應(yīng)乙嘀,我也不知道為啥D┕骸!虎谢!藍過~
運行
在項目app路徑下執(zhí)行需要執(zhí)行的py代碼文件就可以
python run.py
這里99.99% 會出現(xiàn)執(zhí)行不了的情況
Traceback (most recent call last):
File "run.py", line 2, in <module>
from app import app
ModuleNotFoundError: No module named 'app'
主要是環(huán)境變量的問題盟榴,因為這個工程是在PyCharm IDE 上運行的,IDE默認配置當(dāng)前目錄為工作目錄了婴噩,已經(jīng)把工作目錄添加到了 sys.path 中了
所以只要添加修改環(huán)境變量就可以擎场,網(wǎng)上說在代碼中添加我試了沒成功羽德,可能我打開方式錯了
我使用的辦法是,修改 python 環(huán)境變量迅办,設(shè)置PYTHONPATH
在命令窗口添加路徑
export PYTHONPATH=$PYTHONPATH:/root/mypro/MySQLProject
設(shè)置成你當(dāng)前的項目
但是宅静,此方法只在當(dāng)前命令窗口生效,即如果打開一個新的Terminal 窗口站欺,定位到當(dāng)前目錄姨夹, 打印PYTHONPATH 是沒有剛才加入的路徑的
更好的辦法,后面試了再更新矾策。
如果想偷懶磷账,有個笨重的辦法,寫一個 mybuild.sh
#!/bin/bash
: << !
======================================================================
= 修改 python 環(huán)境變量贾虽,設(shè)置PYTHONPATH =
= export PYTHONPATH=$PYTHONPATH:/root/mypro/MySQLProject =
======================================================================
!
echo "======================================================================"
if [ ! -n "$1" ]
then
echo "請輸入需要設(shè)置的工程路徑够颠,例如 sh mybuild.sh MySQLProject"
else
# 先clear
export PYTHONPATH=
echo "設(shè)置為 :" $1
export PYTHONPATH=$PYTHONPATH:/root/mypro/$1
fi
echo "現(xiàn)在 PYTHONPATH 環(huán)境變量為是 : "
echo $PYTHONPATH
echo "======================================================================"
然后下次需要運行哪個項目,就執(zhí)行下
sh mybuild.sh MySQLProject/
就接著干其他的吧
其他安裝榄鉴,根據(jù)項目需要
因為該項目需要用到 MySQL履磨,所以還需要安裝配置 MySQL
1、安裝 Mysql
添加 MySQL YUM 源
wget https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm
sudo rpm -Uvh mysql57-community-release-el7-11.noarch.rpm
yum repolist all | grep mysql
安裝最新版本
sudo yum install mysql-community-server
啟動 MySQL 服務(wù)
sudo service mysqld start
sudo systemctl start mysqld #CentOS 7
sudo systemctl status mysqld
出現(xiàn)下面信息庆尘,就說明啟動成功了
● mysqld.service - MySQL Server
Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled)
Active: active (running) since Fri 2019-01-04 11:56:54 CST; 1 day 3h ago
Docs: man:mysqld(8)
http://dev.mysql.com/doc/refman/en/using-systemd.html
Process: 2869 ExecStart=/usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid $MYSQLD_OPTS (code=exited, status=0/SUCCESS)
Process: 2852 ExecStartPre=/usr/bin/mysqld_pre_systemd (code=exited, status=0/SUCCESS)
Main PID: 2872 (mysqld)
CGroup: /system.slice/mysqld.service
└─2872 /usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid
Jan 04 11:56:54 iZ2zedad0aqoqx2mzuft73Z systemd[1]: Starting MySQL Server...
Jan 04 11:56:54 iZ2zedad0aqoqx2mzuft73Z systemd[1]: Started MySQL Server.
查看原始密碼
grep "temporary password" /var/log/mysqld.log
2019-01-04T02:18:49.750334Z 1 [Note] A temporary password is generated for root@localhost: z#<BkahqU3XK
z#<BkahqU3XK 這個就是原始密碼
修改密碼
mysql -u root -p
輸入上面原始密碼登錄進入MYSQL
然后
update user set password=password('AndJun_123') where user='root';
flush privileges;
退出MySQL
使用新密碼重新登錄剃诅,OK即可
創(chuàng)建數(shù)據(jù)庫
CREATE DATABASE 數(shù)據(jù)庫名;
.......
其他操作自行學(xué)習(xí)MYsql 吧
使用公網(wǎng)訪問
如無意外,配置好上面驶忌,運行成功矛辕,即可使用瀏覽器打開公網(wǎng)+端口+url 測試
比如
http://公網(wǎng)地址/index
啥的.......
不過這只是debug測試的部署方式,正式使用還是不能這樣部署付魔,好像得用
1. Web 服務(wù)器采用 uwsgi host Flask
2. 用 Supervisor 引用 uwsgi 作常規(guī)啟動服務(wù)
3. 基于 Nginx 作反向代理
所以得安裝聊品,配置
uwsgi
Nginx
Supervisor
這個待更新,在配置研究中......??
看起來內(nèi)容不多几苍,配置簡單翻屈,可是對我一個沒接觸過的后端和這些什么配置的
emmmmm這里花了我兩天半鴨,瘋狂百度妻坝,Google 不說了伸眶,說多都是淚┭┮﹏┭┮
重點是網(wǎng)上的資料有些參差不齊,或者使用的工具和我又不太一樣
所以需要自己去踩各種坑刽宪,再慢慢填坑.....
這個作為記錄厘贼,為了下次別再踩同樣的坑了,快速簡單部署好圣拄,然后研究更優(yōu)化的方式會慢慢更新
這個筆記嘴秸,慢慢完善達到從0配置,到最好成熟一鍵啟動,遷移啥的吧.....
See U
......
更新
有一個博客的小項目岳掐,運行查詢用戶博文的時候凭疮,結(jié)果一直給我發(fā)生異常,可是本地運行卻沒事
UnicodeDecodeError('ascii', '\xe5\x85\xa8\xe9\x83\xa8\xe5\x8d\x9a\xe6\x96\x87', 0, 1, 'ordinal not in range(128)'))
雖然知道是編碼的問題岩四,卻迷迷糊糊搞了好久,哎哥攘,記錄下
在出錯的.py 文件頭中剖煌,加入以下代碼
import sys #reload()之前必須要引入模塊
reload(sys)
sys.setdefaultencoding('utf-8')
運行,完美 博文都出來了 O(∩_∩)O
使用Navicat連接阿里云ECS服務(wù)器上的MySQL數(shù)據(jù)庫
先登錄進入mySql
mysql -u root -p
然后授權(quán)逝淹,root 賬號 123456 密碼(換成自己的)
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;
然后看到
Query OK, 0 rows affected (0.00 sec)
然后就可以使用 Navicat 去連接了
詳細配置如下
先配置好常規(guī)配置耕姊,主機記住寫這個 localhost
然后配置 ssh,填寫好阿里云服務(wù)器公網(wǎng)地址即可
然后就可以連接了....暢享UI界面操作吧 O(∩_∩)O
填坑
服務(wù)器搭好了栅葡,apk也寫好了茉兰,想用apk去通信下,操作所有接口看看
結(jié)果欣簇,發(fā)現(xiàn) post 的時候规脸,怎么后臺都獲取不到參數(shù) ?熊咽?莫鸭?what happen !!
apk 也沒錯啊,只能是后臺接口的問題了
再看看
.......
原來是后臺在接收post 參數(shù)的時候横殴,錯了被因,我一直接收的是get 類型的參數(shù),管不得獲取不到
flask獲取參數(shù)方式:
request.form.get("key", type=str, default=None) 獲取表單數(shù)據(jù)
request.args.get("key") 獲取get請求參數(shù)
request.values.get("key") 獲取所有參數(shù)
修改完衫仑,apk 也正常工作
記錄下~~ 下班 O(∩_∩)O