V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
Lucups
V2EX  ›  程序员

贵司发布一次代码需要多长时间?

  •  
  •   Lucups · 2017-06-14 11:13:30 +08:00 via iPhone · 10083 次点击
    这是一个创建于 2748 天前的主题,其中的信息可能已经有所发展或是发生改变。
    搞个小调查。

    标准格式: 公司规模,项目类型,技术栈,发布工具,发布时长,你认为是否可以提升?
    98 条回复    2017-06-23 12:58:07 +08:00
    meeasyhappy
        1
    meeasyhappy  
       2017-06-14 11:39:53 +08:00
    1 分钟内,Rails
    jiangzhuo
        2
    jiangzhuo  
       2017-06-14 11:43:34 +08:00   ❤️ 1

    jenkins node 项目大部分不超过一分钟,基本全是 api,可以提升,但是没必要。
    avrillavigne
        3
    avrillavigne  
       2017-06-14 11:47:00 +08:00
    发布不需要多久,擦屁股擦了几天罢了。
    liuzhedash
        4
    liuzhedash  
       2017-06-14 11:49:36 +08:00   ❤️ 2
    4 个工程师,电商,php,git pull,30 秒左右。
    其实在生产环境不应该用 git pull 这种形式发布。
    JasperYanky
        5
    JasperYanky  
       2017-06-14 11:53:45 +08:00
    话说 web 项目, 比如 Python,发布新版本的时候会有一小段时间 404,这个怎么避免?
    holyghost
        6
    holyghost  
       2017-06-14 11:59:53 +08:00 via iPhone
    @liuzhedash 请问有什么弊端呢
    MarcoQin
        7
    MarcoQin  
       2017-06-14 12:05:42 +08:00
    @JasperYanky #5 可以启动多个 server,发布前先把 nginx 指向其中的几个,更新剩下的,新版本启动并且没问题的话,nginx 指过去再更新剩下的……
    JasperYanky
        8
    JasperYanky  
       2017-06-14 12:16:39 +08:00
    liuzhedash
        9
    liuzhedash  
       2017-06-14 12:20:42 +08:00
    @holyghost #6
    生产环境里面不应该有代码库的信息
    ytmsdy
        10
    ytmsdy  
       2017-06-14 12:23:40 +08:00 via iPhone
    跑完测试,git 获取更新,更新数据库,重启应用,都写在一个脚本里面,30s 搞定!
    binux
        11
    binux  
       2017-06-14 12:30:25 +08:00 via Android   ❤️ 1
    AWS elastic beanstalk docker 部署至少 30 分钟
    imydou
        12
    imydou  
       2017-06-14 12:42:54 +08:00
    @liuzhedash #4 请问生产环境怎么发布?
    ixiaohei
        13
    ixiaohei  
       2017-06-14 12:52:15 +08:00   ❤️ 1
    jenkins 发布,生产机器很多,不出问题 30 分钟发版完,但是发布完之后测试做回归测试几乎要 2 个小时内做完(有时候更久)。
    因为是串行发布,有时候脚本跑好几个小时的情况。
    Sharuru
        14
    Sharuru  
       2017-06-14 12:53:01 +08:00   ❤️ 2
    编译,测试,报告 ==> 1~2 小时
    QA 确认 ==> 30 分钟+(确认后按下 Confrim 按钮)
    部署 ==> 15 分钟
    wohenyingyu02
        15
    wohenyingyu02  
       2017-06-14 12:55:16 +08:00 via iPhone
    2 周吧,编译,上传 app store,苹果审核
    jyf
        16
    jyf  
       2017-06-14 13:04:58 +08:00
    代码都是小事 如果涉及到 数据库的 schema 变动 并且是有冲突的 比如把某个字段变类型 我很好奇这种一般怎么做 有多块
    vjnjc
        17
    vjnjc  
       2017-06-14 13:34:19 +08:00
    @jyf 我遇到的情况是给数据库做 migratino。
    1.给数据库定义 version
    2.写出每个 version 间的变动,比如 1up2 的 migration 是 aaaaaaa, 2down1 的 migration 是 bbbbbbbbb
    3.跨越多个 version 的变动就执行当中所有的,比如 1->5= 1->2,2->3, 3->4, 4->5

    不知道有没有更巧妙的办法。。。
    nikoo
        18
    nikoo  
       2017-06-14 13:40:00 +08:00
    到底生产环境怎么部署新版本程序最优雅?

    感觉 git 是肯定不能用在生产环境的(无论是 clone 还是 pull )
    bluefalconjun
        19
    bluefalconjun  
       2017-06-14 13:40:56 +08:00
    芯片公司 sdk 发布 基于 android.
    >一月一次
    SlipStupig
        20
    SlipStupig  
       2017-06-14 13:41:44 +08:00
    docker compose!
    cevincheung
        21
    cevincheung  
       2017-06-14 14:06:49 +08:00
    git pull 发布机 剩下的 rsync --exclude=/.git
    Ouyangan
        22
    Ouyangan  
       2017-06-14 14:26:03 +08:00   ❤️ 1
    java ,jenkins , 2 分钟的样子.
    lsyAndroid
        23
    lsyAndroid  
       2017-06-14 14:31:45 +08:00 via Android   ❤️ 2
    5 人小团队,电商 o2o,java ssm,jenkins,三周,android iOS 上线,
    nine
        24
    nine  
       2017-06-14 14:38:23 +08:00   ❤️ 1
    Rails + Capstrino 一键发布 ,1 分钟之内吧
    huangzxx
        25
    huangzxx  
       2017-06-14 14:44:16 +08:00   ❤️ 1
    docker + k8s 1 分钟内吧
    RubyJack
        26
    RubyJack  
       2017-06-14 17:18:21 +08:00
    Rails + Mina + Puma, rolling restart 解决发布期间当机的问题。migration 解决数据库修改的问题
    lightening
        27
    lightening  
       2017-06-14 17:22:17 +08:00   ❤️ 1
    Deis, git push staging / git push production 发布,Javascript 预处理比较久,5 分钟吧。
    prasanta
        28
    prasanta  
       2017-06-14 18:09:02 +08:00 via Android   ❤️ 1
    我也想知道为何不能用 git pull 直接更新
    precisi0nux
        29
    precisi0nux  
       2017-06-14 18:15:30 +08:00 via iPhone   ❤️ 2
    用 jenkins 生成 docker image 作为 artifact,推到 docker hub,ecs 再 pull 下来,自己进行蓝绿部署。大概 5 分钟。
    rannnn
        30
    rannnn  
       2017-06-14 20:08:53 +08:00   ❤️ 1
    Java 技术栈,后台大概要 24 小时左右,全球按时区划分,在每个时区凌晨的时候部署重启应用。
    前台很快一般 1 小时以内可以搞定,主要是 CDN 更新需要时间。
    letitbesqzr
        31
    letitbesqzr  
       2017-06-14 20:24:24 +08:00
    五分钟
    devilyaos
        32
    devilyaos  
       2017-06-14 20:53:45 +08:00 via iPhone
    @MarcoQin 我们生产也用的这种策略....再配合 docker...感觉爽爽的
    clino
        33
    clino  
       2017-06-14 20:58:10 +08:00
    @nikoo
    @liuzhedash 为什么生产用 git 不好?
    hwding
        34
    hwding  
       2017-06-14 21:33:55 +08:00
    @MarcoQin 这个就是灰度发布的意思吗?
    swulling
        35
    swulling  
       2017-06-14 21:46:20 +08:00 via iPhone
    xx 万机器 Agent,基本一个月才能升级一轮
    dylanninin
        36
    dylanninin  
       2017-06-14 22:04:36 +08:00   ❤️ 1
    现在已离职一个多月,个人项目一般直接用 ansible, 30s 左右可并行发布到多个环境。

    说说以前的情况,3-5 人开发团队,一开始自动化工具都没有,引入 Jenkins 后有过几次改进:
    - 最初自动化部署 API ( Python )、Web ( React )项目,一般 5min 左右
    - 因代码托管在 Github 上,服务器在国内,build 经常超时,增加一台 HK 服务器做 Jenkins Slave,时间减少到 1min 内
    - 增加 docker 部署后,使用 daocloud 加速,一般耗时也可以维持在 1min 左右

    React 项目得看更新情况,cnpm 不一定好用,网络也不一定好,可改进空间还是挺大的。
    chiu
        37
    chiu  
       2017-06-14 22:07:42 +08:00
    传统通信公司,专网设备开发,全国大概有 8000+人吧,对内发布的大概 2 周一次,对外发布的大概 3 ~ 6 月一次,看升级需求。
    mingyun
        38
    mingyun  
       2017-06-14 23:15:58 +08:00
    @dylanninin ansible 赞
    l00t
        39
    l00t  
       2017-06-15 00:03:19 +08:00
    较为固定的是 2 个月一次,临时加急的临时搞,大约一周吧。升级固定在周五晚。两个月一次的大升级要组织多个部门在升级后的生产环境进行测试。临时搞的要提前在验证环境测完并提交测试报告并把内容全部打包好。如果是上级部门组织的全网测试,事情就更多了,要进行 N 轮,持续个把月,然后才能发布。
    Clarencep
        40
    Clarencep  
       2017-06-15 09:02:29 +08:00
    @liuzhedash 居然还有人在生产环境 git pull 的呀。。。

    秀个我司 PHP+Node.js,N 多微服务:

    Clarencep
        41
    Clarencep  
       2017-06-15 09:07:20 +08:00
    @lightening 你们用的什么框架居然要 5 分钟之久?我们最长的也就 2 分钟左右。


    @jyf
    @vjnjc migration 👍+1 自从用了 migrations 脚本,再也不怕 N 多环境之间数据库的结构同步问题了。。。特别是对于有 N 多从库的情况。
    liuzhedash
        42
    liuzhedash  
       2017-06-15 09:27:49 +08:00
    @Clarencep #40 刚开始转 git 的时候,这是 git@oschina 推荐的的做法,刚刚又看了一下已经不推荐这么做了,想来是终于有人意识到了问题
    oska874
        43
    oska874  
       2017-06-15 09:44:21 +08:00
    3 年
    clino
        44
    clino  
       2017-06-15 09:47:13 +08:00
    @Clarencep
    @liuzhedash git 用在生产环境有什么问题?
    这个贴有 4 个人这么说了,谁能列一下相关的坏处呢?
    liuzhedash
        45
    liuzhedash  
       2017-06-15 09:59:15 +08:00
    @clino #44
    1、生产环境不应该有代码库的信息,比如你每次的 commit 都会在.git 下面,这些存储空间的占用是没有意义的
    2、生产环境可能不能连接到代码库
    haozxuan001
        46
    haozxuan001  
       2017-06-15 10:05:26 +08:00
    @liuzhedash 如果仅仅是以上两点,我认为并没有充分的理由拒绝在正式环境用 git pull 部署,首先第一点,commit 的存储绝对不会过大,而目前廉价的硬盘,足以让你忽略这点占用,第二点,就更不需要担心了,可以通过运维手段解决。
    jyf
        47
    jyf  
       2017-06-15 10:07:19 +08:00
    @vjnjc 你们碰到过原来某字段是 int 现在变成 varchar 这种情况么 按这种 你的 migration 怎么写呢
    kosilence
        48
    kosilence  
       2017-06-15 10:19:55 +08:00
    @liuzhedash 生产环境 build docker 镜像,git pull 完了以后删除 .git 资料库文件,然后再上传镜像,这样应该是 OK 的吧
    vjnjc
        49
    vjnjc  
       2017-06-15 10:21:12 +08:00
    @jyf 只会加字段,不会改类型
    clino
        50
    clino  
       2017-06-15 10:30:40 +08:00   ❤️ 1
    @liuzhedash
    - "生产环境不应该有代码库的信息",我觉得如果是 python 这类直接用源代码运行的应该有,因为万一有时候有问题直接现场就能看出代码是在哪个版本上,生产环境的代码有没有被碰过
    - "些存储空间的占用是没有意义的" 同上,我认为是有意义的,当然前提是用源代码运行的这种,不是那种编译出二进制运行的
    - "生产环境可能不能连接到代码库" 如果能连那么这点是不是就不是理由了?
    liuzhedash
        51
    liuzhedash  
       2017-06-15 10:32:58 +08:00
    @haozxuan001 #46
    是的,其实这些不是决定性的理由,但是确实是存在的问题

    @kosilence #48
    既然都用 docker 部署了,其实和 git 已经没什么关系了
    tomoya92
        52
    tomoya92  
       2017-06-15 10:42:07 +08:00
    git pull

    pm2 restart all
    DingSoung
        53
    DingSoung  
       2017-06-15 10:43:59 +08:00
    原来你们的代码不用编译直接就拿去跑了
    clino
        54
    clino  
       2017-06-15 10:49:25 +08:00   ❤️ 1
    @liuzhedash 即使用 docker 也一样可以用 git,我们有这样的用法,需要版本控制的部分是映射目录到 docker 里面的

    @dingsoung 动态脚本语言哪个不是这样?
    Clarencep
        55
    Clarencep  
       2017-06-15 11:02:03 +08:00   ❤️ 1
    @clino git pull 的方式部署我以前也用过,发现会有一些问题,后来才切换到 jenkins + rsync 的方式:

    1. 生产环境上并不一定是所有文件都是在 git 中,git pull 并不能把所有文件拉上去(比如 node_modules 文件夹、vendor 文件夹,而在生成环境执行 npm install/composer install 又比较好资源影响正常业务运行,还不太稳定)
    2. 有的时候会临时在生产环境上改个东西,要是忘记恢复了的话,git pull 会失败 (/ □ \)
    3. git 是搭在内网,而生产服务器是在云上,网络不好打通(而且把 git 服务器暴露在公网上有安全风险)
    clino
        56
    clino  
       2017-06-15 11:12:48 +08:00
    @Clarencep
    1 这个就要具体看业务是怎样的,所以 git 是不是适合不能一概而论
    2 我怎么觉得这是一个好处呢?
    3 有一个 workaround 方法是先 push 到生产环境下的一个 bare git,然后生产环境的 git 是从这个 bare clone 出来的,这样 push 完这个 bare 以后再 pull 就行了
    yw9381
        57
    yw9381  
       2017-06-15 11:13:49 +08:00
    @holyghost 如果是使用这种方式的话,你访问一下网站目录.git/config,就能看到 git 的欣欣,基于此之上,可以吧 git 相关的元数据全部拉回来,然后 reset 一下得到最新版本的代码。参加之前一个朋友做的小工具 GitHack
    yw9381
        58
    yw9381  
       2017-06-15 11:14:53 +08:00
    yw9381
        59
    yw9381  
       2017-06-15 11:20:16 +08:00
    @holyghost @clino @Clarencep
    这暴露出来的是安全问题,在部署上这没有任何问题,在 webserver 上是可以访问到.git 文件夹的,里面的东西也能访问到,如果了解 git 的工作原理的话,有了.git 这整个文件夹也就意味着有了整个代码库,对于线上版本来说代码库里泄露的东西太多了,诸如数据库连接信息(阿里云 RDS 是可以直接远程连接的,除非你设置了白名单 IP,然而大部分人都不管),代码逻辑等等,如果有心人基于此做代码审计发现漏洞然后加以利用,嗯你懂得。我在安全行业生涯中有过这样的案例,入口点就是一个 git 信息泄露,最终渗透到了服务器层。个人感觉安全意识还是蛮重要的一件事
    ezreal
        60
    ezreal  
       2017-06-15 11:26:44 +08:00
    git co > cp to temp dir > npm i > webpack > gz pack > download > kill nginx > kill node > rm original code > unpack new code > start node > start nginx 大概 3-5 分钟吧
    holyghost
        61
    holyghost  
       2017-06-15 11:44:47 +08:00
    @yw9381 前面有 nginx rewrite,访问就是 500,靴靴。
    clino
        62
    clino  
       2017-06-15 12:00:27 +08:00
    @yw9381 有点道理,不过呢这说明都能直接访问到生产环境了吧?这个不要加上.git 信息事情就已经很大条了...
    Clarencep
        63
    Clarencep  
       2017-06-15 13:03:03 +08:00
    @yw9381 数据库连接的账户信息还有各种 key 当然不能放 git 里面。果断应该用进程的环境变量或者.env 之类的来保存。
    bk201
        64
    bk201  
       2017-06-15 13:29:03 +08:00
    个人感觉 jekins 没 teamcity 好用,不知道为什么用的公司那么多。看到 jekins 那界面就恶心。
    Mithril
        65
    Mithril  
       2017-06-15 14:16:39 +08:00
    @bk201 因为不要钱啊。。。免费的 TeamCity 只能 20 个配置,除非特别小的项目,不然基本不够用。
    akira
        66
    akira  
       2017-06-15 14:37:26 +08:00
    @bk201 teamcity 太大
    S1ahs3r
        67
    S1ahs3r  
       2017-06-15 14:53:48 +08:00
    jvm 应用 基于 kubernetes 带健康检查,3-5 分钟稳定发完
    yw9381
        68
    yw9381  
       2017-06-15 16:26:46 +08:00
    @holyghost 我不是特指的贵司的系统,有些会在发布以后在 webserver 层面做处理,然而大部分的情况是,能用就行,完全不怎么管,我个人感觉你对贵司的系统很自信啊,天下没有攻无不克的矛,也没有战无不胜的盾,安全很多时候都是死在蜜汁自信上(大部分 ZF 里面就是,我们是纯内网,他们怎么可能进来,结果 WannaCry 出来以后是真的哭了)。
    @clino 生产环境本来就是在公网上的,谁都能访问,对于生产环境可以在 webserver 上做目录限制,或者在重写规则里写上限制,如果你不作处理那真的谁都能访问到的。
    @Clarencep 如果能放在.env 里最好不过了,不过有时候一不注意就 git add ./ 或是某个人没这个意识,一直在 add ./ 然后 commit 上去,从此在仓库里留下浓重的一笔,这些信息一般情况下很少会去改吧。进程环境变量在代码里也总要有个初始化的地方,这个地方和传统的 db.config.php(DBHOST,DBUSER,DBPASS,DBNAME)这种没区别,正儿八经的解决是在客户端这里的. gitignore 里设置忽略,在 webserver 上设置权限。安全是个木桶效应问题,所以每一个点都是要顾忌到的
    lightening
        69
    lightening  
       2017-06-15 17:20:31 +08:00
    @Clarencep 后端 Rails,前端一部分 Angular 一部分 React/Redux。Angular 是以前的代码,是用 Rails 的 assets pipeline 打包的,比较慢。React 部分用 Webpack 打包,挺快的。正在全面迁移到 React,让后打算拆掉 Angular。
    lightening
        70
    lightening  
       2017-06-15 17:22:52 +08:00
    @yw9381 这样的话不用 git 不是也能访问到整个当前的代码库啦?
    ioschen
        71
    ioschen  
       2017-06-15 17:22:55 +08:00
    @wohenyingyu02 夸张,📦审核大概两到五天,正常更新的是第二天审核玩,迟点三天,新上架的却审核时间长,估计一审二审的,前几年的却满,现在飞快 [虽然不是秒级]
    ioschen
        72
    ioschen  
       2017-06-15 17:24:02 +08:00
    前几年审核发布那叫一个漫长
    otarim
        73
    otarim  
       2017-06-15 17:59:56 +08:00
    你们测试都不需要回归的啊。。。
    clino
        74
    clino  
       2017-06-15 18:39:33 +08:00
    @yw9381 我就说我们的情况吧,我们一般是用 uwsgi 跑 python 应用,然后反代到 nginx,这种情况下有没有.git 在 web 服务上是没差别的,并没有直接开通相关目录的静态文件
    所以我完全没想到你说的这种情况
    atpking
        75
    atpking  
       2017-06-15 19:00:15 +08:00
    我怎么觉得 rails 的哥们这么多呢
    realpg
        76
    realpg  
       2017-06-15 19:40:30 +08:00
    PHP git webhook 代码文件变动都是从出文本变动也就是个传输时间,一般 10 秒左右……
    phx13ye
        77
    phx13ye  
       2017-06-15 22:18:56 +08:00
    真羡慕你们,真想打一顿我司那群用 war 包的余孽

    make jar not war
    prasanta
        78
    prasanta  
       2017-06-15 22:59:08 +08:00 via Android
    @clino 同样 nginx+uwsgi+django 根本不会出现.git 目录泄露的问题
    zonghua
        79
    zonghua  
       2017-06-16 01:29:54 +08:00 via iPhone
    @yw9381 那你们.env 里面的信息记录在哪
    l32606
        80
    l32606  
       2017-06-16 06:40:50 +08:00 via Android
    @liuzhedash 应该用什么方式发布更合理?
    l32606
        81
    l32606  
       2017-06-16 06:42:53 +08:00 via Android
    @chiu 什么公司,还专网
    chiu
        82
    chiu  
       2017-06-16 07:46:29 +08:00 via Android
    @l32606 可能专网这个概念比较冷门吧。相对于我们平时打电话用的公网,公安,消防,政府或军队等应急通信场景用的网络是专网
    FanError
        83
    FanError  
       2017-06-16 08:23:14 +08:00 via iPhone
    @rannnn 前台是用类 php 之类更新不用重启的语言吗?
    welling
        84
    welling  
       2017-06-16 09:04:35 +08:00 via Android
    56 个 docker 发布 php,耗时 1 个多小时。还不能对某个文件升级,需要重做整个镜像
    Clarencep
        85
    Clarencep  
       2017-06-16 09:33:40 +08:00
    @yw9381 .env 当然要加到.gitignore 中。此外生产环境上的.env 文件要配置下权限,www 帐号只有只读权限,其他帐号都没有权限访问。


    @welling php 发布用 docker 太重了点吧。完全牺牲了 PHP 可以随时热部署的优点。


    @lightening Angular 打包原来这么慢呀。。。还好我们用的是 React/Preact/Vue
    yw9381
        86
    yw9381  
       2017-06-16 11:41:34 +08:00
    @clino django 的 uwsgi 反带过去倒没有这种问题,因为静态目录不能直接访问到 /.git/元信息

    @lightening 访问到当前代码库的前提是在浏览器上能够访问到.git 文件夹,能够访问到 git 的元信息,这在 php 中很常见,py,nodejs 的我不是很清楚,写的不多。

    @zonghua env 本来就记录他原本该记录的东西就好了啊,生产和测试配置不同的信息就行。

    @Clarencep 老铁没毛病~

    其实 git 信息泄露这种情况还是多见于自己裸写开发的东西,如果是上了框架,例如 php 的 TP 或是 laravel,因为有 URL 路由及重写规则来处理,反而很少遇到这种情况。
    hantsy
        87
    hantsy  
       2017-06-16 14:44:43 +08:00
    @Clarencep 敏感信息(数据库密码等)可以考虑用一个单独的 Vault,Java 的话 Spring Cloud 已经支持。
    openbsd
        88
    openbsd  
       2017-06-16 16:02:28 +08:00
    脚本手工操作的路过
    lightening
        89
    lightening  
       2017-06-16 19:53:49 +08:00
    @yw9381 Python, Ruby ,Node 一般都不会这样。我的意思是,如果能从 web 访问源代码目录的话,即使你删了 .git 目录,当前版本的源代码不是还能被发现?
    rannnn
        90
    rannnn  
       2017-06-16 20:03:20 +08:00
    @FanError 前台就是静态的 javascript 嘛
    rannnn
        91
    rannnn  
       2017-06-16 20:05:03 +08:00
    我们用的 Bamboo
    Clarencep
        92
    Clarencep  
       2017-06-17 10:34:34 +08:00
    @hantsy 哦,Vault 是神马呀?没有用过。
    yw9381
        93
    yw9381  
       2017-06-19 08:42:52 +08:00
    @lightening 线上是在对应环境上正在运行的代码,你直接访问的话代码是会正常运行的,php/py/ruby/node 基本上都是,不存在会直接看到源代码的可能,代码总归还是要部署到对应环境才能跑起来的,但是.git 这个目录原本就不属于代码,所以对应代码的解释器不会管这些,在 webserver 这里如果不做处理的话,会把这些当成普通的资源文件返回给客户端,也就造成了 git 信息泄露的问题。
    wantchalk
        94
    wantchalk  
       2017-06-19 12:04:03 +08:00
    @precisi0nux 同, 如果加上跑测试的时间可能 10 分钟才能完成部署. 不同的是我没有做蓝绿,因为要人工参与,后期如果换成负载均衡就不需要手动蓝绿了.
    lightening
        95
    lightening  
       2017-06-19 16:56:58 +08:00
    @yw9381

    Ruby、Python、Node 都不是把源代码放在 HTTP server 根目录访问的,所以没有这个问题。以 Ruby 为例,是启动一个 Ruby 进程,然后接管 HTTP 请求。

    据我所知只有 php 是把源代码放在 HTTP server 根目录下,然后直接用浏览器访问 .php 文件时,Apache/Nginx 会用 php 解释器去执行那个 .php 文件。我想问,如果这个目录下还有个属于源代码一部分的非 .php 文件比如 foo.bar,是不是可以直接通过 /foo.bar 访问到?
    yw9381
        96
    yw9381  
       2017-06-21 10:35:05 +08:00
    @lightening php 毕竟是为了 web 而生的语言,其他的语言基本都是因为有需求所以才支持的 web 开发。php 的解释器要么 apache-mod,要么 php-fpm,不管哪个,如果没有路由没有重写规则,几乎就和 ftp 一样了,对于你说的 foo.bar,是肯定可以访问到的,如果没有对应的处理,就完全当文本文件返回来了,
    lightening
        97
    lightening  
       2017-06-21 16:42:35 +08:00
    @yw9381 对啊,所以如果不自己配置 HTTP server 规则,即使没有 .git 目录也有其他的安全隐患。
    funnuy
        98
    funnuy  
       2017-06-23 12:58:07 +08:00
    暴露.git 肯定是不行的,连.git 都暴露了,.env 还远吗?

    有些 PHP 框架、应用的入口 index.php 还真是在项目的根目录,然后同一级的.git 就很容易暴露了。

    现在在阿里云的容器服务,重新部署大约 1 分钟。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5153 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 35ms · UTC 01:25 · PVG 09:25 · LAX 17:25 · JFK 20:25
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.