Flask Traditional Deployments: Zero to One <Flask Server>

The following article wil introduce how to set up your first flask server after logging in your server, and some basic linux, git commands.

Author: v1siuol

Last-Modified: 2018.08.14

Background

  • A quite developed web project ( As a matter of fact, you don't have to prepare any codes, but deploying some simple easy sites costs a lot. For Flask case, flask run listens 127.0.0.1:5000 by default. However, flask run --host 0.0.0.0 listens a.b.c.d:5000 under the same wifi. Have fun with it first, then come and playing with VPS! )
  • This series is a supplyment for Tradition Deploments in Chapter 17. Deployment in [Flask Web Development, 2nd Edition][url_flask_web_dev] written by Miguel Grinberg.
  • Project address: https://github.com/v1siuol/v1siuol-site

0. First Impression on Ubuntu

ubuntu_login

Cong! You successfully login your virtual system.

But just after that, following warning is expected to pop up:

WARNING! Your environment specifies an invalid locale.

The unknown environment variables are:

LC_CTYPE=UTF-8 LC_ALL=

This can affect your user experience significantly, including the

ability to manage packages. You may install the locales by running:

sudo apt-get install language-pack-UTF-8

 or

sudo locale-gen UTF-8

To see all available language packs, run:

apt-cache search "^language-pack-[a-z][a-z]$"

To disable this message for all users, run:

sudo touch /var/lib/cloud/instance/locale-check.skip

Solution:

$ export LC_ALL="en_US.UTF-8"
$ export LC_CTYPE="en_US.UTF-8"
$ sudo dpkg-reconfigure locales

Please do it, or you might encounter some weird issues below, like reporting

The virtual environment was not created successfully because ensurepip is not

available. On Debian/Ubuntu systems, you need to install the python3-venv

package using the following command.

even though you might have already install python3-venv.

Now try some commands like:

  • ls : list directory contents

  • pwd : return working directory name

  • man ls : used to see ls manual pages

  • cd : change current directory

  • mkdir : make directories

  • rm : remove directory entries (be very very careful here)

    Tips: we can press Tab to automatically fillup the file name.

1. Pull Your Project Down to Your Server

$ cd ~  # To my main directory 
$ mkdir flask  # to make a folder for my project 
$ cd flask/ 
$ sudo apt-get install python3-venv 

Issue: you might fail to install, reporting:

E: Package 'python3-venv' has no installation candidate

Solution:

$ sudo apt-get update

Then install it again!

$ sudo apt-get install python3-pip 
$ git clone https://github.com/v1siuol/v1siuol-site.git 
$ cd v1siuol-site/ 
$ python3 -m venv venv 
$ pip install --upgrade pip
$ source venv/bin/activate
(venv)$ pip install -r requirements.txt 
(venv)$ mv templates.env .env 
(venv)$ vi .env  # Complete the config 
(venv)$ deactivate  # Exit the venv

Now the flask project is almost ready to go. But one more thing left behind: Setup the database.

2. MySQL on Ubuntu

$ sudo apt-get update
$ sudo apt-get install mysql-server
$ mysql_secure_installation

You need to do some selections in the last step and MySQL should be installed successfully in your server. Check by:

$ systemctl status mysql.service

● mysql.service - MySQL Community Server

Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled)

Active: active (running) since Tue 2018-08-14 07:01:00 UTC; 8min ago

Main PID: 15973 (mysqld)

CGroup: /system.slice/mysql.service

       └─15973 /usr/sbin/mysqld

Aug 14 07:00:59 ip-172-31-16-238 systemd[1]: Starting MySQL Community Server...

Aug 14 07:01:00 ip-172-31-16-238 systemd[1]: Started MySQL Community Server.

Next, we will create the database for my flask project.

$ mysql -u root -p  # Enter the password you set a few minutes ago

Welcome to the MySQL monitor. Commands end with ; or \g.

Your MySQL connection id is 6

Server version: 5.7.23-0ubuntu0.16.04.1 (Ubuntu)

Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its

affiliates. Other names may be trademarks of their respective

owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

> SHOW databases;
> CREATE database IF NOT EXISTS v1siuol_site DEFAULT CHARSET utf8;
> QUIT;

3. Do something Fun

(venv)$ flask run

Traceback (most recent call last):

File "/home/ubuntu/flask/v1siuol-site/venv/bin/flask", line 11, in <module>

sys.exit(main())

File "/home/ubuntu/flask/v1siuol-site/venv/lib/python3.5/site-packages/flask/cli.py", line 894, in main

cli.main(args=args, prog_name=name)

File "/home/ubuntu/flask/v1siuol-site/venv/lib/python3.5/site-packages/flask/cli.py", line 557, in main

return super(FlaskGroup, self).main(*args, **kwargs)

File "/home/ubuntu/flask/v1siuol-site/venv/lib/python3.5/site-packages/click/core.py", line 676, in main

_verify_python3_env()

File "/home/ubuntu/flask/v1siuol-site/venv/lib/python3.5/site-packages/click/_unicodefun.py", line 118, in _verify_python3_env

'for mitigation steps.' + extra)

RuntimeError: Click will abort further execution because Python 3 was configured to use ASCII as encoding for the environment. Consult http://click.pocoo.org/python3/for mitigation steps.

This system supports the C.UTF-8 locale which is recommended.

You might be able to resolve your issue by exporting the

following environment variables:

export LC_ALL=C.UTF-8

export LANG=C.UTF-8

Click discovered that you exported a UTF-8 locale

but the locale system could not pick up from it because

it does not exist. The exported locale is "en_US.UTF-8" but it

is not supported

Sign :( So we add export LC_ALL=C.UTF-8 export LANG=C.UTF-8 to .env .

(venv)$ flask deploy
(venv)$ flask run --host 0.0.0.0
  • Serving Flask app "v1siuol.py"

  • Environment: production

    WARNING: Do not use the development server in a production environment.

    Use a production WSGI server instead.

  • Debug mode: off

  • Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)

NOW turn up your brower, type your <public IP>:5000 as url.

<public IP> can be found here:

aws_public_ip

WOW!!

flask_own_server

Thank you.

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,496评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,407评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,632评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,180评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,198评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,165评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,052评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,910评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,324评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,542评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,711评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,424评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,017评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,668评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,823评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,722评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,611评论 2 353

推荐阅读更多精彩内容