CentOS + Flask +Python +MySql 部署网站运行在阿里云--笔记

叨唠几句

此笔记仅作为在学习部署阿里云后台项目的时候,踩的坑,和填的坑,也许很多不对和不妥的地方,还请指出....

等一下,还有句话

这个笔记的前提是,已经在本地或者哪里都可以,已经学习完,编写好了 python + flask + mysql 的工程,本地运行是OK的哦

没有写好的项目?教程?

网上有大把鸭,我也是初学萌新,打扰了,下一个.....┭┮﹏┭┮

开工,冲鸭

1、注册购买一个ECS 服务器,选择CentOS,登录,常规操作。

配置只有最重要的一步是,要在管理页面中配置添加好安全组规则添加打开要使用公网访问的端口号(这步不配置,公网无法访问该端口!!!!)

怎么连接服务器?

xshell 了解一下

2、基本环境配置

  • 安装python ,但CentOS 默认安装有

如果没有,自行安装

安装setuptools

这是个啥

setuptools是Python distutils增强版的集合,它可以帮助我们更简单的创建和分发Python包,尤其是拥有依赖关系的。用户在使用setuptools创建的包时,并不需要已安装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相关包

需要安装的清单,根据需要配置 requirements.txt

内容如下

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

这里使用这个的话,还需要配置贼多东西,我配置多次,一直出错,这里先挖坑,后面再填!!!

上传项目文件

直接把写好的项目文件,比如在PyCharm 上写好,并且运行OK的项目放到服务器自定义文件夹

怎么放?

xftp 了解一下

比如目录如下

MySQLProject
    ---app
        ---run.py
        ---....py 其他代码文件
    ---venv
        ---Include
        ---Lib
        ---....其他文件

其中 app运行的host 要配置成 阿里云的购买的服务器的私有IP

这样,使用公网访问才可以访问,类似如下

host 换成自己的

app.run(host='172.17.25.***', port=5005,debug=True)
            

否则会无响应,我也不知道为啥!!!蓝过~

运行

在项目app路径下执行需要执行的py代码文件就可以

python run.py

这里99.99% 会出现执行不了的情况


    Traceback (most recent call last):
    File "run.py", line 2, in <module>
    from app import app
    ModuleNotFoundError: No module named 'app'

主要是环境变量的问题,因为这个工程是在PyCharm IDE 上运行的,IDE默认配置当前目录为工作目录了,已经把工作目录添加到了 sys.path 中了

所以只要添加修改环境变量就可以,网上说在代码中添加我试了没成功,可能我打开方式错了

我使用的办法是,修改 python 环境变量,设置PYTHONPATH

在命令窗口添加路径

export PYTHONPATH=$PYTHONPATH:/root/mypro/MySQLProject

设置成你当前的项目

但是,此方法只在当前命令窗口生效,即如果打开一个新的Terminal 窗口,定位到当前目录, 打印PYTHONPATH 是没有刚才加入的路径的

更好的办法,后面试了再更新。

如果想偷懒,有个笨重的办法,写一个 mybuild.sh

#!/bin/bash

: << !   

======================================================================
         =      修改 python 环境变量,设置PYTHONPATH                          =
         =      export PYTHONPATH=$PYTHONPATH:/root/mypro/MySQLProject        =
         ======================================================================

!


echo "======================================================================"
if [ ! -n "$1" ]
        then
        echo "请输入需要设置的工程路径,例如 sh mybuild.sh MySQLProject"
        else
        # 先clear
        export PYTHONPATH=
        echo "设置为 :"  $1
        export PYTHONPATH=$PYTHONPATH:/root/mypro/$1
fi

echo "现在 PYTHONPATH 环境变量为是 : "
echo $PYTHONPATH

echo "======================================================================"

然后下次需要运行哪个项目,就执行下

sh mybuild.sh MySQLProject/

就接着干其他的吧

其他安装,根据项目需要

因为该项目需要用到 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 服务

sudo service mysqld start
sudo systemctl start mysqld #CentOS 7
sudo systemctl status mysqld

出现下面信息,就说明启动成功了

● 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即可

创建数据库

CREATE DATABASE 数据库名;
    
.......
        

其他操作自行学习MYsql 吧

使用公网访问

如无意外,配置好上面,运行成功,即可使用浏览器打开公网+端口+url 测试

比如

http://公网地址/index

啥的.......

不过这只是debug测试的部署方式,正式使用还是不能这样部署,好像得用

1. Web 服务器采用 uwsgi host Flask
2. 用 Supervisor 引用 uwsgi 作常规启动服务
3. 基于 Nginx 作反向代理

所以得安装,配置

uwsgi

Nginx

Supervisor

这个待更新,在配置研究中......😅

看起来内容不多,配置简单,可是对我一个没接触过的后端和这些什么配置的

emmmmm这里花了我两天半鸭,疯狂百度,Google 不说了,说多都是泪┭┮﹏┭┮

重点是网上的资料有些参差不齐,或者使用的工具和我又不太一样

所以需要自己去踩各种坑,再慢慢填坑.....

这个作为记录,为了下次别再踩同样的坑了,快速简单部署好,然后研究更优化的方式会慢慢更新

这个笔记,慢慢完善达到从0配置,到最好成熟一键启动,迁移啥的吧.....

See U

......

更新

有一个博客的小项目,运行查询用户博文的时候,结果一直给我发生异常,可是本地运行却没事

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服务器上的MySQL数据库

先登录进入mySql

mysql -u root -p

然后授权,root 账号 123456 密码(换成自己的)

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;

然后看到

Query OK, 0 rows affected (0.00 sec)

然后就可以使用 Navicat 去连接了

详细配置如下

先配置好常规配置,主机记住写这个 localhost

Navicat 常规配置

然后配置 ssh,填写好阿里云服务器公网地址即可

Navicat SSH 配置

然后就可以连接了....畅享UI界面操作吧 O(∩_∩)O

填坑

服务器搭好了,apk也写好了,想用apk去通信下,操作所有接口看看

结果,发现 post 的时候,怎么后台都获取不到参数 ???what happen !!

apk 也没错啊,只能是后台接口的问题了

再看看

.......

原来是后台在接收post 参数的时候,错了,我一直接收的是get 类型的参数,管不得获取不到

flask获取参数方式:

request.form.get("key", type=str, default=None) 获取表单数据

request.args.get("key") 获取get请求参数

request.values.get("key") 获取所有参数

修改完,apk 也正常工作

记录下~~ 下班 O(∩_∩)O

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,254评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,875评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,682评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,896评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,015评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,152评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,208评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,962评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,388评论 1 304
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,700评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,867评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,551评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,186评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,901评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,142评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,689评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,757评论 2 351