一、[傻瓜式一步到位] 阿里云服务器Centos上部署一个Flask项目
哇,这个部署真的弄了好久,网上的教程也是一堆,这个很好的解决了我的问题
原地址:https://www.cnblogs.com/Sugar-Chl/p/9497901.html
我入手的服务器是
阿里云的轻量应用服务器,系统是Centos 7.3.
使用的相关软件是
PuTTY(用于远程连接到服务器),
PSFTP(用于将本地文件上传至服务器),
Navicat for Mysql(数据库可视化工具)。
有一些小细节。
1.如果要用软件远程连接到阿里云的服务器,需要先在阿里云的控制台,为服务器重置一个密码。
2.远程连接服务器,输入密码的时候是不会显示的。
输入完成后直接回车就行了。
3.最好了解一些最基本Linux的命令 例如
cd,pwd,kill,ls, mkdir...
1.1安装Python3.6
首先安装依赖包
yum -y groupinstall "Development tools"
yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel
然后根据自己需求下载不同版本的Python3,我下载的是Python3.6.2
wget https://www.python.org/ftp/python/3.6.2/Python-3.6.2.tar.xz
#其他版本地址:https://www.python.org/ftp/python/
如果速度不够快,可以直接去官网下载,利用WinSCP等软件传到服务器上指定位置,我的存放目录是/usr/local/python3,使用命令:
mkdir /usr/local/python3
建立一个空文件夹
然后解压压缩包,进入该目录,安装Python3
tar -xvJf Python-3.6.2.tar.xz
cd Python-3.6.2
./configure --prefix=/usr/local/python3
make && make install
安装完后会提示安装好了pip等工具.
出现“successfully installed”等字样。
到此为止,Python3.6已经安装好了,
由于centos7 中自带的python的版本是python2.
而现在很多包只支持python3 ,所以我们要安装虚拟环境,在虚拟环境中的python版本是3.6
然后我们要安装virtualenv(python环境隔离工具)。
之后我们的flask的部署以及python包的下载都要在这个虚拟环境中进行!
每次重新远程连接centos的时候都要记得进去虚拟环境后再操作。
1.2 安装virtualenv
pip install virtualenv
建立python3独立环境
virtualenv -p /usr/local/python3/bin/python3.6 /py3env
进去python3独立环境
source /py3env/bin/activate
成功进入独立环境后是这样的。
最后 我们再输入
python -V
来验证一下python的版本
到此为止 python3的安装以及独立环境的安装完成了
参考链接:
1.https://blog.csdn.net/jon_me/article/details/49618619
2.http://www.cnblogs.com/mqxs/p/8692870.html
2.搭建LNMP环境(Mysql,Nginx,Php)
参考:https://blog.csdn.net/wszll_alex/article/details/76285324
我只执行了这个博主的文章中的
2.安装软件
5.启动服务
就行了
有一个注意的地方,这个博主的文章中有一个错误的地方,
在安装Mysql时,
mysql > update user set password=password(‘123456‘) where user=‘root‘;
这个语句是错误的
应该是
mysql > update user set password=password('123456') where user='root';
123456就是mysql的密码 这个密码随便设置,别忘记了就好,(忘记了挺麻烦的)
3.上传flask项目文件至服务器
X.X.X.X处用服务器的公网ip地址代替 例如我的服务器的公网IP地址是XXX.XX.XX.XXX open X.X.X.X
然后输入账号密码,就成功的连接到服务器上了。
假如我的flask项目在本地的地址为 C:\Users\73876\blog
我想将这个项目整个上传至服务器上的 /usr/local/python3/bin/
在FSFTP中输入
cd /usr/local/python3/bin/
("cd" 在服务器上的切换文件夹位置)
lcd C:\Users\73876\blog
(“lcd” 在本地电脑上的切换文件夹位置)
切换好位置后分别将manage.py
requirements.txt
以及app文件夹上传
put manage.py
put requirements.txt
put -r app
然后我们进入服务器的文件夹查看这2个文件和1个文件夹是否上传好
(有点凌乱,没有事先建立一个文件夹来放flask项目)
4.安装Python包
cd /usr/local/python3/bin
yum install mysql-devel gcc gcc-devel python-devel
pip install -r requirements.txt
至于如何生成requirements.txt请百度or谷歌
5.调试Mysql脚本文件
在服务器上重新建数据库,建表,会比较麻烦,而且有时候mysql在本地的电脑上已经存在部分数据。
所以比较快捷的方法就是在本地的数据库上导出sql脚本文件,然后将这个脚本文件上传到服务器,运行就好了。
运行之后,整个数据库就能搬到服务器上了
我是使用Navicat for Mysql来导出sql文件
右键blog 转储sql文件
得到blog.sql文件后将文件上传到服务器,如同上述步骤一样。
假如blog.sql文件的位置是 /usr/local/python3/bin/blog.sql
首先进入mysql
mysql -u root -p
输入密码
在Centos下里面的是首先要新建一个和文件相同名字的数据库。
mysql>create database blog;
然后输入指令:
mysql> use blog;
mysql>source /usr/local/python3/bin/blog.sql;
mysql>exit;
然后就OK了。
参考:
https://www.cnblogs.com/walblog/articles/7890442.html
6.安装 gunicorn
pip install gunicorn
7.运行flask项目
gunicorn -w 3 -b x.x.x.x:8000 manage:app
注意把x.x.x.x替换成内网ip地址(是内网,内网,内网!!!!)
大功告成啦!
外网想要访问你的flask网站
只要通过公网的IP地址就行了
X.X.X.X:8000
如果要停止这个程序的运行
ps -aux | grep gunicorn
查看进程
然后
kill掉这3个进程就好了
如果重新连接服务器,记得要进入独立环境后再操作!
source /py3env/bin/activate
二、安装Linux宝塔面板
原地址:https://blog.csdn.net/qq_46921028/article/details/109007153
宝塔Linux面板是提升运维效率的服务器管理软件,支持一键LAMP/LNMP/集群/监控/网站/FTP/数据库/JAVA等100多项服务器管理功能。
有20个人的专业团队研发及维护,经过200多个版本的迭代,功能全,少出错且足够安全,已获得全球百万用户认可安装。
CentOS安装命令:
yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh
安装成功后会弹出一些内容信息:
外网面板地址: http://183.126.212.168:8888/c135ea5b
内网面板地址: http://11.32.17.120:8888/c135ea5b
username: qvwcdjg2
password: 2d7a163a
上面的东西一定要记得备份!!!
进入宝塔面板:
http://183.126.212.168:8888/c135ea5b
并输入刚才弹出的账号和密码;
大功告成!!
三、nginx启动提示nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx启动报错
今天在centos7部署nginx,安装时一切顺利,但是在启动的时候却报错了,提示如下错误:
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
后经排查,原来是端口占用了。nginx默认启动端口是80,之前刚好在这个服务器启动了个80端口的tomcat。现解决方式如下:
安装iptables服务
需要通过防火墙开放对外端口。如果服务器上没有iptables服务,需要安装。如果有,则跳过。
yum install iptables-services
systemctl mask firewalld.service
systemctl enable iptables.service
systemctl enable ip6tables.service
配置端口
进入iptables配置80端口,因为nginx默认是由80端口访问
vi /etc/sysconfig/iptables
打开后,默认的配置信息如下(加粗部分为新添加的):
INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [6:696]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 21 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
A INPUT -p tcp -m state --state NEW -m tcp --dport 30000:30999 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
后续需要开放其它端口,也是在此文件中添加修改即可!
修改完后,保存退出文件编辑。
重启防火墙
systemctl restart iptables.service
查看80端口被占用的进程
lsof -i:80
通过kill命令干掉该进程
kill -9 进程号
启动nginx
这个时候在启动nginx,一切正常了!
/usr/local/nginx/sbin/nginx