V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
alvy
V2EX  ›  Python

吐个槽,纯内网环境部署 python web 应用

  •  2
     
  •   alvy · 2016-12-06 14:11:37 +08:00 · 10074 次点击
    这是一个创建于 2939 天前的主题,其中的信息可能已经有所发展或是发生改变。

    本人小公司开发一枚,工作最近有个项目,在客户纯内网环境部署 web 应用,公司小,没有纯运维,就安排我去了

    没有网!!!从零开始部署,臣妾做不到啊,安装 centos 虚拟机,配置网络,大半天过去了,传文件也是个问题,文件先复制到优盘,优盘再复制到 windows 台式机,在用 secureCRT scp 到虚拟服务器,还要安装什么 winsshd 才能互通。也就是说安装各种应用和依赖包都要这么来一遍。

    本来想 docker 部署,据说没有网络 docker 部署也很麻烦, docker 我也不熟,然后就采用传统方式部署 安装 mongodb 倒很快,已有的安装文件复制过去就好了 mysql 就遇到大坑了,安装提示我需要 perl ,安装 perl 又说要 gcc ,安装 gcc 又要 gmp 等等等等,安装过程中各种乱七八糟的错误,无力吐槽 还有一堆 python 的库需要安装,画面太美不敢看

    楼主现在已疯,表示要放弃了、离职找工作去了,求搭救

    66 条回复    2017-01-12 11:56:27 +08:00
    Kilerd
        1
    Kilerd  
       2016-12-06 14:16:49 +08:00 via iPhone
    其实我不太懂为什么要纯内网。
    alvy
        2
    alvy  
    OP
       2016-12-06 14:20:13 +08:00
    @Kilerd 客户有保密要求
    putianxi
        3
    putianxi  
       2016-12-06 14:20:24 +08:00 via iPhone
    你需要的是现在有网的地方把虚机做好 在放到内网 很多金融环境都没网的
    huntzhan
        4
    huntzhan  
       2016-12-06 14:25:28 +08:00
    > 没有网!!!从零开始部署,臣妾做不到啊,安装 centos 虚拟机,配置网络,大半天过去了,传文件也是个问题,文件先复制到优盘,优盘再复制到 windows 台式机,在用 secureCRT scp 到虚拟服务器,还要安装什么 winsshd 才能互通。也就是说安装各种应用和依赖包都要这么来一遍。

    ......跟鹅厂的工作流基本一样。如果机器环境可以保证一样,你可以用 Ansible 之类的配置管理工具批量安装这些东西。不过建议还是离职比较好。
    Kilerd
        5
    Kilerd  
       2016-12-06 14:27:05 +08:00 via iPhone   ❤️ 1
    @alvy 感觉可以弄一个 centos-everything-ios ,基本可以解决系统依赖问题。

    python 包可以用 freeze 全部输出出来。
    alvy
        6
    alvy  
    OP
       2016-12-06 14:29:56 +08:00
    @Kilerd 我就是安装的 centos-everything-ios 啊...
    9hills
        7
    9hills  
       2016-12-06 14:30:12 +08:00   ❤️ 1
    既然能用虚拟机,你找个有网络的环境,把各种东西都做好, dump 出硬盘镜像。

    然后拿到内网,搞定
    alvy
        8
    alvy  
    OP
       2016-12-06 14:30:32 +08:00
    @putianxi 虚拟机移植?没弄过
    alvy
        9
    alvy  
    OP
       2016-12-06 14:31:07 +08:00
    @huntzhan 最后一句话。。。。。。
    derek80
        10
    derek80  
       2016-12-06 14:31:43 +08:00
    virtualenv 安装 copy 过去
    alvy
        11
    alvy  
    OP
       2016-12-06 14:34:00 +08:00
    @derek80 嗯,这又是另外一个大问题, python 包,上午折腾了半天 virtualenv ,大部分正常,某些包死活装不上,比如 mysql - python ,放弃。。。。。。
    alvy
        12
    alvy  
    OP
       2016-12-06 14:44:06 +08:00
    @9hills 求指点。给了链接什么的,谢谢
    wmhx
        13
    wmhx  
       2016-12-06 14:52:19 +08:00
    你先弄个无线网卡联网装好,不也就半天的时间么?
    autulin
        14
    autulin  
       2016-12-06 14:52:26 +08:00
    做成虚拟机镜像拷贝过去……
    rtx3
        15
    rtx3  
       2016-12-06 14:59:51 +08:00
    亲 , 你需要现在自己的笔记本上 rsync 一个 centos 的 repo 镜像, 然后进入内网环境后把自己的机器作为镜像源. 或者自己弄一个 docker repo, 一个道理
    alvy
        16
    alvy  
    OP
       2016-12-06 15:00:02 +08:00
    @wmhx 客户服务器,不让联网。而且还是在 windows 台式机用管理软件操作
    9hills
        17
    9hills  
       2016-12-06 15:07:42 +08:00
    @alvy 很简单
    1. 你先看下你用的什么虚拟化软件,在有网环境用同样的软件创建一个虚拟机,装好各种东西
    2. 然后将硬盘镜像文件拷到内网,在内网用这个镜像文件也创建一个,就好了
    huntzhan
        18
    huntzhan  
       2016-12-06 15:11:59 +08:00
    @alvy 我是直接在内网搭了一个 pyenv 源来装环境,搭了一个 pypi 源来装 package 。你如果愿意折腾也可以这么搞。更多见 https://github.com/huntzhan/pyenv-mirror
    huntzhan
        19
    huntzhan  
       2016-12-06 15:14:28 +08:00
    > 客户服务器,不让联网。而且还是在 windows 台式机用管理软件操作

    离职吧。
    huntzhan
        20
    huntzhan  
       2016-12-06 15:17:53 +08:00
    loading
        21
    loading  
       2016-12-06 15:21:15 +08:00 via Android
    其实并不复杂,复制过去就行。

    应该是楼主没用和服务器一样的系统。
    wuwuyun
        22
    wuwuyun  
       2016-12-06 15:22:36 +08:00
    docker 本地先做好 mysql,nginx,python web 镜像, export 然后再 import 没难度
    关键在于 docker 环境
    也可以本地装个光的 ubuntu
    apt-get install --print-uri docker-engine
    打出来所有需要装的 deb 包的 url
    本地下下来再 scp 传装上去
    也没难度
    centos 类似
    wuwuyun
        23
    wuwuyun  
       2016-12-06 15:26:03 +08:00
    vagrant 也类似
    没什么难度
    本地 virtual box 里面做好全部环境
    做个镜像
    服务器上装 vagrant 和 virtual box 就行了
    就是麻烦点而已
    ericls
        24
    ericls  
       2016-12-06 15:31:14 +08:00
    用个 container 全部装好放过去。。
    ragnaroks
        25
    ragnaroks  
       2016-12-06 15:41:56 +08:00
    给公安做过内网东西,直接在公司电脑虚拟机部署完成并进行隔离测试,通过后直接在客户机器上安装个虚拟机就好了
    pubby
        26
    pubby  
       2016-12-06 15:50:02 +08:00 via Android
    加钱,包硬件。

    直接抱服务器过去。
    robinlovemaggie
        27
    robinlovemaggie  
       2016-12-06 16:10:00 +08:00
    就不能找个内网里联网的机器搭个 squid 代理?或者 ss 或者 vpn ? 这点挫折就怕了?
    revol
        28
    revol  
       2016-12-06 16:14:01 +08:00
    docker 很好学的
    qwer1234asdf
        29
    qwer1234asdf  
       2016-12-06 16:30:30 +08:00
    买个 360 移动 wifi ,。。。接下来,你懂得。。。。。 O(∩_∩)O~
    aec4d
        30
    aec4d  
       2016-12-06 16:32:43 +08:00
    这有啥难度,只要能 ssh 连进去一切都不是问题
    比如你本机开了一个 socks5 代理 端口为 1085
    使用 ssh 反向端口映射 将远程主机的 8888 映射到本机的 1085 ssh -R 8888:127.0.0.1:1085 xxx
    远程主机测试:curl -x socks5://127.0.0.1:8888 z.cn
    然后远程主机就相当于有网络了

    以上示例将 socks5 换成 http 代理就好了 unix 上大多数程序都支持环境变量设置 http 代理
    sowish
        31
    sowish  
       2016-12-06 16:35:12 +08:00
    vmware+虚拟机拷贝
    lesxc
        32
    lesxc  
       2016-12-06 16:46:53 +08:00   ❤️ 1
    这个时候 golang 的优势就显现出来了! 逃~~~~
    alvy
        33
    alvy  
    OP
       2016-12-06 17:19:16 +08:00
    @robinlovemaggie 纯内网,不能连外网。
    alvy
        34
    alvy  
    OP
       2016-12-06 17:20:40 +08:00
    @revol docker 也要编译,巴拉巴拉,不能联网也很啰嗦
    fchypzero
        35
    fchypzero  
       2016-12-06 18:02:10 +08:00
    上面就有解决方法,找到对应的虚拟环境,直接做好虚拟机,导出,然后导入虚拟机,不就完了吗?
    ldrljq
        36
    ldrljq  
       2016-12-06 18:17:28 +08:00
    依赖包的问题可以用 ISO 做 Yum 源解决。。。
    starqoq
        37
    starqoq  
       2016-12-06 19:16:27 +08:00
    内网镜像。
    sylecn
        38
    sylecn  
       2016-12-06 19:24:26 +08:00
    虚拟机可以在有公网的环境做好再导出,文件复制到移动硬盘,再在纯内网导入。
    纯内网就不要 docker 了,不然还得自己搭 docker 依赖的服务。
    9
        39
    9  
       2016-12-06 20:22:47 +08:00
    @alvy docker 不用编译啊,就一个二进制文件, docker 传上去之后,再从外面拉个镜像下来,再传上去,就这么运行了!轻松愉快
    lalalakakaka
        40
    lalalakakaka  
       2016-12-06 20:34:50 +08:00
    我有类似的经历,方案是:

    === 本机 ===
    0. 准备 ESXI 安装盘
    0.1 准备 coreOS 镜像
    0.2 封装 docker 镜像
    0.3 本机测试 docker on coreOS on VMware 运行情况
    0.4 导出 docker
    ===内网机器===
    1.裸机装 ESXI
    2.ESXI 导入 coreOS 镜像
    3.coreOS 导入 docker 镜像
    4.完成

    或者更粗暴的办法:
    ===本机===
    装系统
    装环境
    装程序
    cloneZilla 整个系统镜像

    ===内网===
    恢复 cloneZilla 镜像
    修复启动
    完事
    lalalakakaka
        41
    lalalakakaka  
       2016-12-06 20:40:30 +08:00
    更更更粗暴的办法
    ===本机===
    1.装 virtualbox
    2.virtualbox 里装系统,装程序
    3.导出 vdi 镜像

    ===内网===
    1.装 virtualbox
    2.导入镜像
    3.配好网络
    4.完事

    什么? virtualbox 不稳定?性能不够?
    瞎说,你不试试怎么知道。半年不停机没问题~
    再说内网系统你确定有性能压力?
    lalalakakaka
        42
    lalalakakaka  
       2016-12-06 20:49:30 +08:00
    说最后一个方案:

    我今天刚用顺丰发了个配好的服务器去客户那里。。。
    billwang
        43
    billwang  
       2016-12-06 21:32:13 +08:00
    不错了,你这纯内网的环境还可以用虚拟机。如果虚拟机不让用就给你个 centos 让你安装,……
    sagaxu
        44
    sagaxu  
       2016-12-06 21:48:41 +08:00 via Android
    这种时候 java 和 go 语言的优势就来了,全平台,零依赖
    zsj950618
        45
    zsj950618  
       2016-12-06 21:54:17 +08:00
    pyinstaller 打包 python
    shyling
        46
    shyling  
       2016-12-07 00:10:09 +08:00
    docker 导出后再装上不就好了,什么 docker 怎么装?直接下 rpm 呐
    jarlyyn
        47
    jarlyyn  
       2016-12-07 01:01:49 +08:00 via Android
    Docker 或者虚拟机
    eyp82
        48
    eyp82  
       2016-12-07 02:06:43 +08:00
    @aec4d 他这不一定是技术的问题. 这种全内网的服务器, 不少时候是有审计之类的, 私连外网是严重的安全违规, 被抓了很麻烦.
    weakiwi
        49
    weakiwi  
       2016-12-07 08:10:59 +08:00 via Android
    用 yum cache 不知道行不行?
    wuzhizhan
        50
    wuzhizhan  
       2016-12-07 08:25:27 +08:00
    为啥你们都是怪内网,不怪 python 语言呢, python 部署麻烦又不是不知道!
    听我的,换成 java,根本不需要装这些东西到服务器!
    带个 jdk,tomcat ,打个 war 包过去就能部署了!
    urmyfaith
        51
    urmyfaith  
       2016-12-07 09:09:47 +08:00
    wuwuyun 和 lalalakakaka 的方案是比较好的。
    zhchyu999
        52
    zhchyu999  
       2016-12-07 09:34:06 +08:00
    vagrant 即可
    nevin47
        53
    nevin47  
       2016-12-07 10:32:19 +08:00
    都说了是客户保密需求有人还逼逼离职真有意思……

    我最近也遇到了一个这个需求,客户还是 Windows ,只能直接把所有需要的东西下载 whl 或者自己编出来,然后在虚拟机上测试好然后刻光盘带进去调试
    ppwangs
        54
    ppwangs  
       2016-12-07 10:52:16 +08:00
    在你机器上 docker 部署好, save 镜像,带着镜像和 deb / rpm 包过去安装好,直接 load
    yanzixuan
        55
    yanzixuan  
       2016-12-07 10:58:24 +08:00
    下载最全的镜像,然后刻盘,带着这个盘去机房。然后设置源为镜像。然后开始玩吧。
    AlexaZhou
        56
    AlexaZhou  
       2016-12-07 11:03:05 +08:00
    这种情况直接用 Docker 吧,配置好了保存成镜像,到客户那里三分钟就运行起来。
    chuhades
        57
    chuhades  
       2016-12-07 11:17:00 +08:00
    这时你需要个 4g 手机:)
    bomb77
        58
    bomb77  
       2016-12-07 11:19:08 +08:00
    运维出身的我,一开始也是负责纯内网环境部署软件,依赖装到哭,心疼楼主一下
    如果要批量部署一批机器的话,在内网搭建源站还是很有必要的以后会省很多事情, yum 源 pip 源之类
    est
        59
    est  
       2016-12-07 11:36:14 +08:00
    用 freeze 啊。编译成 rpm 或者 deb 包。
    est
        60
    est  
       2016-12-07 11:36:45 +08:00
    @lesxc golang 这一点的确做得很好。没的说


    最讨厌 npm 。随便一安装就是 2G 依赖。
    revol
        61
    revol  
       2016-12-07 13:35:16 +08:00
    @alvy https://get.daocloud.io/docker-offline/ 这里提供了 docker 的离线安装包,镜像的话你本地 build 好然后 docker save 出来 放到服务器上 docker load 就行,你这都嫌麻烦还写个毛代码
    sleeperqp
        62
    sleeperqp  
       2016-12-07 14:17:36 +08:00
    个人经验 老老实实装依赖, 一个一个装 或者你做个本地 yum 库
    说 docker 这些的别想的这么容易 如果系统版本不对比如 centos6.5 docker 装不上去,遇到依赖也得一个一个装
    iyaozhen
        63
    iyaozhen  
       2016-12-07 14:27:39 +08:00 via Android
    我就没用过能访问外网的机器。线上机器虽然能访问外网但也不能使用 pip 等方式安装。

    慢慢编译呗,缺啥补啥。
    话说你自己电脑不能直接 rz 文件到服务器上吗?
    Miy4mori
        64
    Miy4mori  
       2016-12-07 20:03:43 +08:00 via Android
    @alvy 你既然有 everything iso 就应该去了解一下设置本地源呀,装 gcc perl 完全没有问题
    hheedat
        65
    hheedat  
       2016-12-08 10:24:16 +08:00
    卖他们一台服务器
    alvy
        66
    alvy  
    OP
       2017-01-12 11:56:27 +08:00
    @all 谢谢楼上各位,最后是这么解决的:
    1. 编译器:重装了 centos 系统,所有的附件之类都给装上,这样 gcc 编译器之类的就都有了。
    2. python 库:把公司的服务器下的 /usr/lib/python2.7 和 /usr/lib64/python2.7 打包复制到此内网服务器,这样就不用安装了
    3. 其他 mysql 、 mongodb 、 nginx 之类:参照官方文档,下载安装文件,复制到内网服务器,采用二进制源码的方式安装

    豁然开朗,之前一直是在网络环境下开发,安装一个东西一个命令搞定,到内网环境下就完全懵逼了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2585 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 15:32 · PVG 23:32 · LAX 07:32 · JFK 10:32
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.