部署Python到远程服务器

部署Python到远程服务器

tags: python flask aws 安全组 bae


一. 部署flask应用到bae

1. Git 介绍

git命令:

从bae远程仓库克隆出本地仓库

git clone https://git.duapp.com/your_bae_appid my_flask

本地文件复制修改完后:

git add -A
git commit -m "initial"
git push

git 记住用户名密码:

$ git config --global user.name [name]
$ git config --global user.emial [email]
$ git config --global credential.helper store

2. bae 使用

要使用bae部署flask应用:

  • 先要用pip导出依赖文件requirement.txt,
  • 修改index.py 文件指向app
  • 修改app.conf 文件使hadlers变成如下所示:
handlers:
  - url : /.*
    script: index.py

二. 部署flask应用到aws ec2实例

aws ec2相当于一个虚拟主机, 新用户免费12个月, 因此可以用它做很多事情

1. 准备工作, aws虚拟机

简单来说:

  • 注册AWS账户, 绑定信用卡, 通过手机验证, 获得12个月免费使用权
  • 创建AWS EC2实例(选用ubuntu作为服务器镜像)
  • 创建一个弹性IP地址, 关联上一步创建的实例, 以绑定自定义域名(A Name)
  • 查看实例关联的安全组, 修改入站规则(默认只开放SSH端口, 我们要把80端口打开)

2. 准备工作, 使用SSH命令链接虚拟机

在创建CZ2实例过程中会生成一个密钥对, 存放在本地文件系统内, 远程连接CZ2需要使用.

连接cz2上的ubuntu的命令如下:

$ ssh -i "your_keypairs.pem" ubuntu@your_ec2_IP

连接成功后, 会出现ubuntu的欢迎界面, 后续软件包的安装工作都可以直接用ubuntu的命令进行了

3. 准备工作, 安装virtualenv, apache2, mod_wsgi

ubuntu 16.04默认有python3.5, 我需要python2.7, 因此:

$ sudo apt-get install python2.7

安装这三个的命令如下:

$ sudo apt-get install python-pip
$ pip install virtualenv
$ sudo apt-get install apache2
$ sudo apt-get isntall libapache2-mod-wsgi

如果pip安装不成功, 可以尝试更新:

$ sudo apt-get update

4. 准备工作, 代码完善

创建virtualenv虚拟环境, 从下文中requirements.txt文件中安装依赖包:

$ sudo pip install virtualenv
$ virtualenv myflask
$ source myflask/bin/activate
$ pip install -r "requirements.txt"

从bae上clone代码库到虚拟主机上:
把bae当做了中转

$ git clone https://git.duapp.com/appidnuoqcm2bk8 flask_app

/home/ununtu下会生成代码库flask_app, 该文件下, 应包含requirements.txtindex.wsgi
连个文件:

requirements.txt: 由pip freeze > requirements.txt命令生成, 主要是方便在新的环境里安装依赖包, 并不是必须的, 也可以手动去一一安装
index.wsgi: 可以看做是web程序的入口, 配置apache2时候用到(名字不是必要的), 内容如下:

# 设置virtualenv运行
activate_this = '/home/ubuntu/myflask/bin/activate_this.py'
execfile(activate_this, dict(__file__=activate_this))

# 导入web的app作为application, 与pythonanywhere上是完全一样的
import sys

path = '/home/ubuntu/flask_app'
if path not in sys.path:
    sys.path.append(path)

from my_app import app as application

5. 配置apache2

由于安装的是最新版的apache2, 配置与2.2版本之前的不太一样, 修改配置文件/etc/apache2/site-enabled/000-default.conf:

<VirtualHost *80>
    ServerName example.com
    # 指向上面提到的index.wsgi文件
    WSGIScriptAlias / /home/ubuntu/flask_app/index.wsgi
    <Directory /home/ubuntu/flask_app>
        # 这是旧的配置方法
        # Order deny,allow
        # Allow from all
        # 新的配置方法
        Require all granted
    </Directory>
</VirtualHost>

配置完成后, 重新加载配置文件, 重启apache2:

$ sudo /etc/init.d/apache2 reload
$ sudo /etc/init.d/apache2 restart

所有的配置其实完全可以参考官方文档
1: 官方参考文档

关于用sublime text3的sftp插件管理远程主机的问题:
1. 在安装sublime text3中安装sftp插件
2. 配置sftp插件

{
    // The tab key will cycle through the settings when first created
    // Visit http://wbond.net/sublime_packages/sftp/settings for help

    // sftp, ftp or ftps
    "type": "sftp",

    "save_before_upload": true,
    // 这里设置upload_on_save为true, 会使文件保存后自动上传
    "upload_on_save": true,
    "sync_down_on_open": false,
    "sync_skip_deletes": false,
    "sync_same_age": true,
    "confirm_downloads": false,
    "confirm_sync": true,
    "confirm_overwrite_newer": false,

    // 设置主机, 用户名等
    "host": "35.160.27.247",
    "user": "ubuntu",
    //"password": "password",
    //"port": "22",

    "remote_path": "/home/ubuntu/",
    "ignore_regexes": [
        "\\.sublime-(project|workspace)", "sftp-config(-alt\\d?)?\\.json",
        "sftp-settings\\.json", "/venv/", "\\.svn/", "\\.hg/", "\\.git/",
        "\\.bzr", "_darcs", "CVS", "\\.DS_Store", "Thumbs\\.db", "desktop\\.ini"
    ],
    "file_permissions": "664",
    "dir_permissions": "775",

    //"extra_list_connections": 0,

    "connect_timeout": 30,
    //"keepalive": 120,
    //"ftp_passive_mode": true,
    //"ftp_obey_passive_host": false,
    // 使用密钥文件进行连接远程主机
    "ssh_key_file": "d:/Code/test.ppk",
    //"sftp_flags": ["-F", "/path/to/ssh_config"],

    //"preserve_modification_times": false,
    "remote_time_offset_in_hours": 0,
    //"remote_encoding": "utf-8",
    //"remote_locale": "C",
    "allow_config_upload": false,
}

注意: 密钥文件若是Linux下的.pem格式的, 应该通过puttygen转换成win下可以使用的.ppk密钥文件

sftp的使用非常简单, 可以浏览远程目录, 下载远程文件/目录, 映射远程目录, 但是对于上传功能, 只对/home/username目录下有权限, 因此, 感觉这个插件在实际使用中有点鸡肋.(并且这还是一个收费插件)

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值