AWS环境运行Flask

1.AWS申请

    为了把flask写的小web app放到网上,申请了个AWS,申请找单独教程,只要有双币信用卡还是很方便的。参考:http://www.freehao123.com/amazon-aws/,这个是之前的教程,现在变化比较多,参考下,流程还是差不多。有个信用卡,电话验证下,然后下载秘钥,配置下需要用到的端口,记得把SSH端口打开,不然没法连上,这些也就差不多了。但是提醒下,如果想要免费不要乱选哦,虽说是免费1年,但是你有用他别的服务还是一样从你信用卡里扣钱的。

2.AWS 环境配置

        如果是windows用putty来联,但是注意秘钥需要用puttygen重新生成ppk格式的,pem 格式putty不能用。

如果mac,linux的,就简单了,

$ ssh -i /path/key_pair.pem ubuntu@public_dns_name

参考:https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-connect-to-instance-linux.html#using-putty

对于Ubuntu系统来说,用户名为ubuntu。对于Amazon Linux系统,用户名ec2-user。对于RHEL5, 用户名可能是root,也可能是ec2-user

    我用的ubuntu14.04,默认带了python,但是为了之后多个项目不冲突还是装了个virtualenvwrapper,然后配置了下.bashrc,让之后打开terminal就自动加载。新建了envs,devel分别放虚拟环境跟开发文件

sudo apt-get upgrade
sudo apt-get install python-pip
pip install virtualenvwrapper
export WORKON_HOME=~/envs
export PROJECT_HOME=~/devel
export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python2.7
export VIRTUALENVWRAPPER_VIRTUALENV=/usr/local/bin/virtualenv
source /usr/local/bin/virtualenvwrapper.sh
mkvirtualenv flask #建立flask并自动workon flask
pip install flask
这样flask环境就有了。

3.上传程序

    曾想过用vsftpd搭建FTP来上传程序,但是想到安全性,还是选用SFTP吧。SFTP还一个好处就是,用的SSH协议跟端口,已经能SSH了,就不要再多开FTP端口了,增加安全隐患。

跟SSH连接一样,需要用到秘钥

$ sftp -i /path/key_pair.pem ubuntu@public_dns_name
常用命令有:

quit   --退出

ls     --查看远程目录文件

lls    --查看本地目录文件

cd   --改变远程目录路径

lcd   --改变本地目录路径

put  --将本地文件上传到远程目录

get  --下载远程目录文件到本地

pwd  --远程当前目录 lpwd

                  cd 路径                        更改到远程目录的路径
                  lcd 路径                       更改到本地目录的路径
                  chgrp group path               将文件path的组更改为group
                  chmod mode path                将文件path的权限更改为mode
                  chown owner path               将文件path的属主更改为owner
                  exit                           退出 sftp
                  help                           显示这个帮助文本
                  get 远程路径                   下载文件
                  ln existingpath linkpath       符号链接远程文件
                  ls [选项] [路径]               显示远程目录列表
                  lls [选项] [路径]              显示本地目录列表
                  mkdir 路径                     创建远程目录
                  lmkdir 路径                    创建本地目录
                  mv oldpath newpath             移动远程文件
                  open [用户@]主机[:端口]        连接到远程主机
                  put 本地路径                   上传文件
                  pwd                            显示远程工作目录
                  lpwd                           打印本地工作目录
                  quit                           退出 sftp
                  rmdir 路径                     移除远程目录
                  lrmdir 路径                    移除本地目录
                  rm 路径                        删除远程文件
                  lrm 路径                       删除本地文件
                  symlink existingpath linkpath  符号链接远程文件
                  version                        显示协议版本

sftp> get /var/www/fuyatao/index.php  /home/fuyatao/
这条语句将从远程主机的  /var/www/fuyatao/目录下将 index.php 下载到本地  /home/fuyatao/目录下。

sftp> put /home/fuyatao/downloads/Linuxgl.pdf /var/www/fuyatao/
这条语句将把本地 /home/fuyatao/downloads/目录下的 linuxgl.pdf文件上传至远程主机/var/www/fuyatao/ 目录下。

你如果不知道远程主机的目录是什么样, pwd命令可以帮您查询远程主机的当前路径。查询本机当前工作目录 lpwd.

改变路径可以用cd ,改变本机路径可以用 lcd;

ls rm rmdir mkdir 这些命令都可以使用。同理调用本机都是加 l , 即 lls lrm.

要离开sftp,用exit 或quit、 bye 均可。详细情况可以查阅 man  sftp.

上传当前整个目录

put -r .



4.绑定域名

    虽说AWS不重启ip不变,但是因为手里有个www.smartlinkcloud.com,智联网云平台。所以还是想绑定域名。

    首先申请个Elastic IP,但是这IP不会自动绑你的instance,所以手动绑下。并且如果不绑的话,算闲置IP,会说你浪费资源扣费的。

    用的时候发现godaddy的DNS又是解析不稳定,给他挪到DNSPOD上去了。网址:www.dnspod.cn

需要现在dnspod上注册,添加记录,我还是用的A记录,把www跟@指到AWS刚才申请的Elastic IP上,DNS会给你默认添加2个。

    接着需要去狗爹上去把NameServers里把dnspod里给分配的2个DNS给更新下,然后等解析就好了。

    但是有个问题要注意下,我开始都解析好了,发现ping也ping通了,但是怎么都连不上网站。折腾了好久,用SSH去连AWS才发现连不上了才知道原来申请了Elastic IP后,publicDNS也跟着变掉了,所以都连不上了。于是重新修改了下SSH连接字符串,正常连上后运行网站程序,终于可以连上了!


5.远程调试

5.1 Cloud9 IDE

    上面虽然已经实现了上传,可以在本地开发完上传运行调试。但是如果有问题来回折腾也是很麻烦。想到玩BeagleBone Black上的那个云编辑器很酷,试下能不能远程调试。

cloud9 IDE :

https://c9.io/

支持python,nodejs等,正好合我用。界面很酷吧!

AWS环境运行Flask_第1张图片

Requirements:

  • NodeJS>= 0.6.16
  • NPM>= 1.1.16
  • libxml2-dev

Install:

git clone https://github.com/ajaxorg/cloud9.git
cd cloud9
npm install

The above install steps create acloud9directory with abin/cloud9.shscript that can be used to start Cloud9:

bin/cloud9.sh

Optionally, you may specify the directory you'd like to edit:

bin/cloud9.sh -w ~/git/myproject

Cloud9 will be started as a web server on port-p 3131, you can access it by pointing your browser to: http://localhost:3131

By default Cloud9 will only listen to localhost. To listen to a different IP or hostname, use the-l HOSTNAMEflag. If you want to listen to all IP's:

bin/cloud9.sh -l 0.0.0.0

If you are listening to all IPs it is adviced to add authentication to the IDE. You can either do this by adding a reverse proxy in front of Cloud9, or use the built in basic authentication through the--usernameand--passwordflags.

bin/cloud9.sh --username leuser --password c9isawesome

Cloud9 is compatible with all connect authentication layers, to implement your own, please see theplugins-server/cloud9.connect.basic-authplugin on how we added basic authentication.

5.2 pycharm 远程调试

  1. 将pycharm安装目录下的pycharm-debug.egg文件拷贝到远程机器上(如果是python3的话就拷贝pycharm-debug-py3k.egg文件)。
  2. 在远程机器上安装pycharm-debug.egg,安装命令:easy_install pycharm-debug.egg。
  3. 在pycharm中设置断点监听配置。
    AWS环境运行Flask_第2张图片
    AWS环境运行Flask_第3张图片
    AWS环境运行Flask_第4张图片

  4. 启动调试监听程序。

    AWS环境运行Flask_第5张图片

  5. 在远程机器上启动服务并发起http请求。
    AWS环境运行Flask_第6张图片

  6. pycharm监听到请求会进入断点。 AWS环境运行Flask_第7张图片

你可能感兴趣的:(flask,AWS,pycharm,CloudIDE)