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 
    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#

修改密码

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

你可能感兴趣的:(CentOS + Flask +Python +MySql 部署网站运行在阿里云--笔记)