叨唠几句
此笔记仅作为在学习部署阿里云后台项目的时候,踩的坑,和填的坑,也许很多不对和不妥的地方,还请指出…
等一下,还有句话
这个笔记的前提是,已经在本地或者哪里都可以,已经学习完,编写好了 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
这样,使用公网访问才可以访问,类似如下
app.run(host='172.17.25.135', 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://39.106.138.65:5005/friends?friend_owner=admin
啥的…
不过这只是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
本文记录了在阿里云ECS服务器上,使用CentOS系统部署Python Flask应用和Mysql数据库的详细步骤,包括环境配置、项目上传、端口开放以及遇到的问题和解决方案。适合初学者参考。

2930

被折叠的 条评论
为什么被折叠?



