title: flask项目部署到阿里云 ubuntu16.04
date: 2018.3.6
项目地址: 我的博客
部署思路参考: Flask Web开发》的个人部署版本,包含学习笔记。
开始之前
购买阿里云ecs一周版, 参考
购买万网域名(也是阿里家的)
过程:
# apt update
# apt upgrade
# apt install python-virtualenv
# apt install nginx git
下载源码:
# git clone 我的博客源码地址 && cd 目录
创建虚拟环境(出现问题, 重新ssh后解决?):
# virtualenv venv
...
return _setlocale(category, locale)
locale.Error: unsupported locale setting
----------------------------------------
...Installing setuptools, pkg_resources, pip, wheel...done.
...
OSError: Command /root/myFlasky/venv/bin/python2 - setuptools pkg_resources pip wheel failed with error code 1
# 解决locale.Error:
locale-gen en_US en_US.UTF-8
dpkg-reconfigure locales
# 之后勾选 all 和 en_US.UTF-8
尝试:
apt-get purge python-virtualenv python3-virtualenv virtualenv
pip install --upgrade pip
pip install virtualenv
# 再次创建venv环境出现:
setuptools pkg_resources pip wheel failed with error code 2
# 原因, ssh超时后重新连接未发现出错:
`HTTPError: 404 Client Error: Not Found for url: `
File "/root/myFlasky/venv/share/python-wheels/requests-2.9.1-py2.py3-none-any.whl/requests/models.py", line 840, in raise_for_status
raise HTTPError(http_error_msg, response=self)
HTTPError: 404 Client Error: Not Found for url: http://mirrors.aliyun.com/pypi/simple/pkg-resources/
激活环境,安装mysql并设置编码为utf8
:
# source venv/bin/activate
(venv) # apt install mysql-server mysql-client python-mysqldb libmysqlclient-dev
(venv) # mysql -uroot -p
mysql> show variables like "%character%";
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.01 sec)
mysql> quit
Bye
(venv) # vim /etc/mysql/mysql.conf.d/mysqld.cnf
# 来源:https://www.douban.com/note/602158227/
# 在 [mysqld] 域下加上:character-set-server=utf8
# 重新启动MySQL服务
(venv) # systemctl restart mysql
(venv) # mysql -uroot -p
mysql> show variables like "%character%";
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)
mysql>
使用(venv) # pip install -r requirements.txt
安装运行环境
EnvironmentError: mysql_config not found
----------------------------------------
Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-build-Z_FMKV/MySQL-python/
# 安装mysql见上
build/temp.linux-x86_64-2.7/_openssl.c:501:25: fatal error: openssl/aes.h: No such file or directory
compilation terminated.
error: command 'x86_64-linux-gnu-gcc' failed with exit status 1
# To fix this problem, you have to install OpenSSL development package
命令: # apt install libssl-dev
sql.h: No such file or directory
compilation terminated.
error: command 'x86_64-linux-gnu-gcc' failed with exit status 1
# apt install unixodbc unixodbc-dev
sqlite3.h: No such file or directory
compilation terminated.
error: command 'x86_64-linux-gnu-gcc' failed with exit status 1
# apt install libsqlite3-dev
创建数据库, CHARACTER SET 'utf8'
和COLLATE 'utf8_general_ci'
是为了防止中文乱码:
# mysql -uroot -p
mysql> CREATE DATABASE blogdata
-> CHARACTER SET 'utf8'
-> COLLATE 'utf8_general_ci';
Query OK, 1 row affected (0.00 sec)
mysql> quit
配置环境变量:
(venv) # vim ~/os_environ.sh
#! /bin/bash
echo 'start!'
unset MAIL_SERVER MAIL_USERNAME MAIL_PASSWORD BLOG_ADMIN BLOG_MAIL_SENDER
echo 'clean!'
export MAIL_SERVER=* MAIL_USERNAME=* MAIL_PASSWORD=* BLOG_ADMIN=* BLOG_MAIL_SENDER=* DATABASE='blogdata' DB_USERNAME='root' DB_PASSWORD=* FLASK_CONFIG=production
echo $MAIL_SERVER $MAIL_USERNAME $MAIL_PASSWORD $BLOG_ADMIN $BLOG_MAIL_SENDER $DATABASE $DB_USERNAME $DB_PASSWORD $FLASK_CONFIG
echo 'successful!'
配置nginx:
(venv) # /etc/init.d/nginx start
[ ok ] Starting nginx (via systemctl): nginx.service.
# 备份
(venv) # mv /etc/nginx/sites-enabled/default /etc/nginx/sites-enabled/.backup-default
(venv) # touch /etc/nginx/sites-available/flask-blog
(venv) # ln -s /etc/nginx/sites-available/flask-blog /etc/nginx/sites-enabled/flask-blog
(venv) # pwd
{{ url }} # 查看当前路径
(venv) # vim /etc/nginx/sites-enabled/flask-blog
添加下面内容并保存:
server {
location / {
proxy_pass http://localhost:8000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
location /static {
alias {{ url }}/app/static/;
}
}
由于nginx默认以自己的用户(www-data)运行, 所以访问网站时会出现静态文件无法访问的情况(403
), 故需要修改nginx配置文件:
# 测试nginx配置文件, 由此查看配置文件路径
(venv) # nginx -t
(venv) # vim */nginx.conf
# 将用户改为当前用户:
user *;
# 重启nginx
(venv) # /etc/init.d/nginx restart
创建数据库表, 并写入角色和管理员
(venv) # source ~/os_environ.sh
(venv) # python manage.py shell
>>> db.create_all()
>>> Role.insert_roles()
>>> db.session.commit()
>>>
(venv) # python manage.py shell
>>> l = Role.query.all()
>>> l
[<Role u'Moderator'>, <Role u'Administrator'>, <Role u'User'>]
>>> admin = l[1]
>>> admin
<Role u'Administrator'>
>>> u = User(email='*', username='*', password='*', confirmed=True, role=admin)
>>> db.session.add(u)
>>> db.session.commit()
>>>
安装独角兽并尝试启动博客:
(venv) # pip install gunicorn
# manage:app 会直接运行manage.py.__main__ 并绑定到8000端口, 而nginx中已经配置proxy_pass代理转发
(venv) $ gunicorn manage:app -b localhost:8000
通过supervisor启动gunicorn
(venv) # pip install supervisor
(venv) # echo_supervisord_conf > supervisor.conf
(venv) # vim supervisor.conf
(venv) # supervisord -c supervisor.conf
在最后添加:
[program:flask-blog]
command = gunicorn manage:app -b localhost:8000
directory = *
autorestart = true
user = *
启动:
(venv) # supervisord -c supervisor.conf
最后
网站放在阿里云是真的舒服, 之前放在vultr上ssh有时候连不上, 网站部署上去后阿里云的速度也比vultr(迈阿密)快很多, 毕竟才10+延迟, 唯一的缺点就是, 这个价格对穷学生来说有点小贵, 本来还想解析域名的, 结果发现需要备案, 先用一周看看吧
更多:
centos部署flask项目
nginx 配置之 proxy_pass 神器
nginx代理proxy_pass绝对路径和相对路径实验
使用 supervisor 管理进程
flask项目部署到阿里云 ubuntu16.04的更多相关文章
-
Python3.6+nginx+uwsgi部署Django程序到阿里云Ubuntu16.04系统
Python3.6+nginx+uwsgi部署Django程序到阿里云Ubuntu16.04系统 这个是写好的Django程序在本地机运行的情况,一个查询接口. 准备工作 1.首先购买一台阿里云的EC ...
-
阿里云ubuntu16.04安装ruby
0x0 准备 环境:阿里云轻量服务器ubuntu16.04 目的:安装beef需要的ruby环境 更新软件 sudo apt-get update sudo apt-get upgrade sudo ...
-
javaWeb项目部署到阿里云服务器步骤
记录web项目部署到阿里云服务器步骤 (使用 web项目.阿里云服务器.Xftp.Xshell),敬请参考和指正 1.将要部署的项目打包成WAR文件格式,可以在MyEclipse.Eclipse都可以 ...
-
javaWeb项目部署到阿里云服务器步骤 完整版
记录web项目部署到阿里云服务器步骤 (使用 web项目.阿里云服务器.Xftp.Xshell),敬请参考和指正 1.将要部署的项目打包成WAR文件格式,可以在MyEclipse.Eclipse都可以 ...
-
Java Web项目部署到阿里云服务器(ECS)
本篇随笔只是记录博主第一次将自己的Java项目部署到阿里云服务器的大致过程,具体细节还请参考别的博文. 一.项目介绍 我做的项目是利用maven项目构建工具进行搭建基于SSM框架的代码共享管理系统,主 ...
-
如何把php项目部署到阿里云服务器window server2012__含公网ip访问时jquery/ajax失效解决办法
记一次蛋疼的折腾. 弄了一晚上最后发觉是360浏览器的问题,换个浏览器就好了.垃圾360用什么IE7文档模式.导致界面和功能失效. 建议大家测试的时候用firefox或者chrome. 项目部署到服务 ...
-
2018.11.7 关于将Web项目部署到阿里云服务器-5个步骤搞定
将Eclipse导出的War包部署到阿里云服务器上,提供给移动端实时的访问 1. 先登录阿里云网站注册账号,选择服务器类型(我用的是 云服务器ECS), 如果你还是在读大学生可享受优惠价,最低好像是9 ...
-
Django项目部署到阿里云服务器无法发送邮件,发送邮件超时问题解决
前言 今天, 博主将写了好久的一个Django小项目尝试在阿里云部署上线,由于项目中需要发送邮件,博主调用了163邮箱接口,在本地测试邮件功能正常,可是上线后,邮件功能一直超时崩溃.在百度一番查资料后 ...
-
将web项目部署到阿里云服务器上
一.用eclipse将写好的项目打成war包 1.右键点击项目,选择Export 选择打包之后的路径,点击Finsh. 2.购买阿里云服务器 按下图选择 3.设置云服务器防火墙 4.远程连接云服务器 ...
随机推荐
-
DBA常用SQL之数据库基础信息
第一部分: 1. 查看oracle最大连接数 sql>show parameter processes #最大连接数 2. 修改最大连接数 sql>alter system set pro ...
-
JS原型与原型链终极详解(转)
JavaScript原型及原型链详解 一. 普通对象与函数对象 JavaScript 中,万物皆对象!但对象也是有区别的.分为普通对象和函数对象,Object,Function 是JS自带的函数对象. ...
-
java-程序执行原理
java应用可以打包成jar 格式,jar格式其实只是一种很普通的压缩格式,与zip格式一样,只不过是它会在压缩文件的目录结构中增加一个META-INF/ MANIFEST.MF 的元文件. 我们知道 ...
-
Hadoop启动方式
启动方式 1.逐一启动 hdfs hadoop-daemon.sh start|stop namenode|datanode|secondrynamenode yarn yarn-daemon.sh ...
-
Linux文件编辑时光标操作
一.移动光标类命令 h :光标左移一个字符 l :光标右移一个字符 space:光标右移一个字符 Backspace:光标左移一个字符 k或Ctrl+p:光标上移一行 j或Ctrl+n :光标下移一行 ...
-
C++STL priority_queue
priority_queue优先级队列 最大值优先级队列(队头是最大值) 最小值优先级队列(队头是最小值) priority_queue<int> q1;//默认定义为最大值优先级队列 ...
-
PAC Manager的重生: Asbru
PAC Manager在2016年停更后, 在Ubuntu18.04上的各种bug就无人修复了. 我在Windows下对XShell是重度依赖, 而在Linux下没有其他更好的替代品. 在上一次安装1 ...
-
打包dll发布到nuget服务器
几个月前上传过一次nuget包,结果好久不用,今天想更新下,完全忘记了怎么用了,又是一顿查,所以决定记录下来,当然这可能不是一个傻瓜式的教程,但聪明的你们应该能够看明白的,因为整体操作还是很简单的 好 ...
-
【windows socket+HTTPserverclient】
Windows Socket+HTTPserverclient Winsock是 Windows下套接字标准. 1.HTTP协议: HTTP ...
-
搭建 FTP 文件服务vsftpd
安装并启动 FTP 服务 安装 VSFTPD 使用 yum 安装 vsftpd: yum install vsftpd -y vsftpd 是在 Linux 上被广泛使用的 FTP 服务器,根据其[官 ...