在 Linux 上部署 Python 站点,大家一般是如何处理目录和权限的?

2014-03-07 05:05:34 +08:00
 guoqiao
1. 你一般把代码放在哪个目录?
2. 代码的owner是谁?
3. 文件和目录的权限如何设置?
4. 你在服务器上使用git库还是打包后传过去?
5633 次点击
所在节点    程序员
16 条回复
humiaozuzu
2014-03-07 07:26:00 +08:00
1. /var/www/app-name
2. deploy
3. www-data
4. git pull(Forward Agent)
clino
2014-03-07 08:50:16 +08:00
我一般都是新建一个用户,所有部署的代码和数据都放在这个用户的用户目录下
guoqiao
2014-03-07 08:51:08 +08:00
@humiaozuzu 你的方式很有代表性, 但是有几个问题:
1. /var/www/目录对于apache, lighttpd等是默认的开放目录, 放在这里, 万一哪天犯错设置不当, 会不会泄露源码? 并且, 代码放在/var/www下应该是沿用php的习惯? 因为php需要把文件扔到http server的目录下. 但python并不需要. 所以,放在/opt/之类的目录下,是不是更好?

2. 你的意思应该是: 代码的owner是deploy, 而文件和目录的权限给www-data开放, 是吗? 当然,可能我提问不当. 代码的owner设置成www-data合理, 但是麻烦之处在于, 如果你后来新增了一个文件或目录, git pull 下来, owner是deploy, 你可能会忘记修改chown, 会导致一些问题.
clino
2014-03-07 08:51:50 +08:00
1 我一般都是新建一个用户,所有部署的代码和数据都放在这个用户的用户目录下
2 就是这个用户
3 默认
4 在这个用户目录下新建一个bare的git,然后往这个git库推,然后git clone 一个出来用作实际部署
guoqiao
2014-03-07 08:54:16 +08:00
@clino 恩, 这是我想说的. 尝试各种方式后, 我也发现这是我感觉最方便问题最少的方法.
但我不确定这是否通行. 因为看到很多有经验的程序员都把代码放在/var/www/或者/opt, /srv之类的目录下, 代码的owner则五花八门, root, www-data, deploy, 都有.
humiaozuzu
2014-03-07 09:08:18 +08:00
@guoqiao
1. 这里你说的也有道理
2. 我的 deploy 在 www-data 组里面,不过也觉得有些不对劲

其实这个问题我在很久前有专门折腾过,看各种 fabric/ansible 部署的脚本是怎样规范化这些东西的,得到的结果五花八门,有用有sudo权限的用户部署的,好一点的在home目录下部署,在 /srv/www/ /var/www /opt/company-name 下这样的很少。
不知道你有好的解决方案吗?另外方便加一下 gtalk(maplevalley8#gmail) or qq 方便以后交流?
BOYPT
2014-03-07 09:42:44 +08:00
既然都考虑自动化deploy了,还会有“忘记chown”这种事吗,反正要做的事情都那样,都不知道你要纠结啥。
yueyoum
2014-03-07 10:09:12 +08:00
自己的代码 和 大部分编译的软件都放在 /opt 下

直接用登录用户跑。

如果可以git,直接git pull部署,不能,就scp 上传 tar.gz
guoqiao
2014-03-07 10:23:41 +08:00
@BOYPT 对于小项目或者项目代码尚未完全稳定, 未必每次部署都使用自动化, 而且自动化也未必覆盖到所有的修改需求.我可能经常需要ssh到服务器,手工修改一些东西,或者增加一个文件. 这时文件的权限就很可能忘记修改. "反正要做的事情都那样,都不知道你要纠结啥", 我要做的事,未必每次都一样.
guoqiao
2014-03-07 10:57:24 +08:00
@yueyoum /opt下的代码文件夹, owner是谁? root? www-data? 还是$USER?
1. 如果是root, 那意味着你每次pull代码,或者操作任何文件, 都得用sudo,比较危险.
2. 如果是www-data, 那意味着你每次pull完代码后,如果有新的文件,都需要修改文件owner为www-data. (很多时候不修改也没问题,但是当有一天问题出现,就很难发现.而且对于有强迫症的人,没法容忍新老文件的owner不一致...)
3. 如果是$USER, 与其在/opt下sudo创建一个文件夹然后chown成自己, 还不如直接放在自己的home目录下呢, 都不用cd过去,何必舍近求远呢?
Ever
2014-03-07 12:09:13 +08:00
通用的自编译软件和动态链接库放/opt下, 项目文件放在自己创建的非sudo用户$HOME下, 涉及多个应用, 创建多个用户.

静态文件确保www-data可读, 应用文件本身不和www-data组和用户产生任何关系, 应用和nginx交互通过gunicorn绑定tcp socket进行.

部署通过git hooks.
yueyoum
2014-03-07 12:09:29 +08:00
@guoqiao $USER

放哪真是个人习惯问题。
clino
2014-03-07 12:42:31 +08:00
@guoqiao /opt 我也是有用的
我的用法大概是这样:
-/opt下除了某些目录外基本用于批量部署,即所有服务器的 /opt 目录下都保持一致性(除了部分目录),这样一些需要保持一致的工具,配置等等都分门别类放在 /opt 下
-/opt/下非同步的一些目录,如 /opt/www 用于安装或者放置一些本服务器自己独立配置安装的文件应用等

批量部署和批量配置我用的是ansible
clino
2014-03-07 12:43:45 +08:00
对了 /opt 下全用 root 操作,因为基本上这里放的都是影响整个系统的
只影响某个用户的部分就放在用户目录下
guoqiao
2014-03-07 16:38:50 +08:00
@yueyoum 习惯也分好坏.
何况我觉得不是习惯, 大部分人不过是在沿袭别人的习惯. 而别人的习惯可能是个错误.
yingluck
2014-12-31 16:21:36 +08:00
1. /home/root
2. root
3. root
4. .gitignore git-pull

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/103206

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX