flask项目部署到阿里云 ubuntu16.04

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 管理进程

原文地址:https://www.cnblogs.com/F1renze/p/8519643.html

时间: 2025-01-10 20:14:42

flask项目部署到阿里云 ubuntu16.04的相关文章

javaWeb项目部署到阿里云服务器步骤

记录web项目部署到阿里云服务器步骤 (使用 web项目.阿里云服务器.Xftp.Xshell),敬请参考和指正 1.将要部署的项目打包成WAR文件格式,可以在MyEclipse.Eclipse都可以完成打包,如下图: 2.安装Xshell和Xftp两种软件 简单介绍下这两种软件作用(详情请百度相关文档) Xshell:通过网络连接到远程服务器主机. Xftp:能在Linux.Unix和Windows之间互传文件. 3.通过Xshell连接远程主机,如下图    4.创建会话完成,点击连接,显示

将web项目部署到阿里云服务器上

将web项目部署到阿里云服务器(ubantu14.0.14)上的一般流程: 1.下载putty.在host name栏输入远程服务器ip地址,端口默认为22.阿里云服务器可以通过控制台查看公网ip地址,点击open进行连接 2.输入用户名和密码后进入dos界面,用apt-get update 命令更新,否则很多东西安装不了 3.安装vsftpd服务,通过命令apt-get vsftpd安装,注意 这里的ftp和之后的Tomcat.MySQL数据库端口在阿里云服务器中是默认关闭的,需要进入阿里云控

Java Web项目部署到阿里云服务器(ECS)

本篇随笔只是记录博主第一次将自己的Java项目部署到阿里云服务器的大致过程,具体细节还请参考别的博文. 一.项目介绍 我做的项目是利用maven项目构建工具进行搭建基于SSM框架的代码共享管理系统,主要功能是发布相关博文,对博文进行CRUD操作...所以说也算是个入门的SSM项目. 二.域名以及ECS 由于想要将自己的项目发布到公网上,所以首先想到的是去购买一个域名,于是到了阿里云计算官网上购买了万网的域名,过程比较简单:首先注册阿里云账号并进行相关的实名认证,在控制台中的信息模板进行实名认证,

如何把php项目部署到阿里云服务器window server2012__含公网ip访问时jquery/ajax失效解决办法

记一次蛋疼的折腾. 弄了一晚上最后发觉是360浏览器的问题,换个浏览器就好了.垃圾360用什么IE7文档模式.导致界面和功能失效. 建议大家测试的时候用firefox或者chrome. 项目部署到服务器后360浏览器兼容模式显示错误的解决办法:http://www.cnblogs.com/zj917/p/6697724.html -------------------------------------------------- 正文: 上篇博客说临时起意做了个有意思的聊天版,就想把它部署到阿里

将javaweb项目部署到阿里云服务器

主要步骤:1. 购买阿里云服务器2. 远程连接3. 在云服务器上配javaweb环境:jdk,tomcat,MySQL4. 将项目的war文件放到Tomcat下关于云服务器ECS:如果还想在买服务器之后,再买域名.买的服务器时间就要至少三个月,因为剩余时间 3 个月及以上的实例才能申请备案服务号.一.阿里云服务器1. 我买的学生优惠版服务器,先登录阿里云官网,进行学生身份认证.因为支付宝之前已经学生认证过了,所以可以一键认证,省了很多步骤.2. 下载阿里云app,在学生专区购买云服务器.先选择操

如何让springboot打包的项目部署在阿里云上使用https和http方式访问

前言 问题描述:怎么让springboot部署在服务器上使用https协议方式访问我们的接口或者域名,目的是某些平台请求的是https协议,而不是https 部署环境:阿里云 centos7服务器,springboot项目打包的jar,nginx反向代理 注:部署前需要解决几个问题 1)需要配置springboot项目支持https协议, 2)需要配置阿里云的安全组,放行相关的端口,如本文中开放的8080和8081端口 3)配置nginx的nginx.conf文件做好反向代理 4)申请ssl文件

把web项目部署到阿里云linux服务器上

最近弄了个试用阿里云服务器倒腾了半天终于部署好,分享一下. 1.登入阿里云打开你申请的是云服务器的实例: 点击重置密码---重置密码后重启服务器才能生效(一般需要重置密码.这里设置的密码是使用xhell等工具链接的密码,用户名为root) 2.点击更多--连接帮助(查看连接的IP)  3.记下ip(图中的实例后面的ip)和登入名root  4.我这连接使用xshell,其它的工具大同小异,大家自行下载  5.点击Xhell的new 新建连接  6.在host框填入第3步记下的ip其它不变  7.

阿里云 Ubuntu16.04 apache2 ssl证书下载与安装(必须有域名)

阿里云申请免费SSL证书并下载(包含xxx.key|xxx._root_bundle.crt|xxx._public.crt三个文件) 用https是自己的网站收到保护,不易被攻克,所以保护自己的网站,有必要配置https协议 第一步: 检查是否配置openssl sudo a2enmod ssl 如果是: Considering dependency setenvif for ssl: Module setenvif already enabled Considering dependency

将项目部署到阿里云服务器

首先在阿里云官网注册一个账号,用支付宝注册比较快,之后购买一台阿里云服务器,新人有优惠价,我选择了1M,1G的,100出头,也可以团购,一般比较便宜,购买之后,登录自己的阿里云账号,查看提货券,选择配置,提交,等上一小段时间,阿里云会发送短信通知,您的阿里云服务器的一些信息(实例名称.公网ip.用户名,还会引导你设置实例密码). 那么第一步我想进入我的远程服务器看看,登录阿里云,进入控制台,点击云服务器ECS,进入实例列表,没有实例需要先创建实例,更多里面可以设置远程连接密码和实例密码,可以点击