1
humiaozuzu 2014-03-07 07:26:00 +08:00
1. /var/www/app-name
2. deploy 3. www-data 4. git pull(Forward Agent) |
2
clino 2014-03-07 08:50:16 +08:00
我一般都是新建一个用户,所有部署的代码和数据都放在这个用户的用户目录下
|
3
guoqiao OP @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, 会导致一些问题. |
4
clino 2014-03-07 08:51:50 +08:00 1
1 我一般都是新建一个用户,所有部署的代码和数据都放在这个用户的用户目录下
2 就是这个用户 3 默认 4 在这个用户目录下新建一个bare的git,然后往这个git库推,然后git clone 一个出来用作实际部署 |
5
guoqiao OP @clino 恩, 这是我想说的. 尝试各种方式后, 我也发现这是我感觉最方便问题最少的方法.
但我不确定这是否通行. 因为看到很多有经验的程序员都把代码放在/var/www/或者/opt, /srv之类的目录下, 代码的owner则五花八门, root, www-data, deploy, 都有. |
6
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 方便以后交流? |
7
BOYPT 2014-03-07 09:42:44 +08:00
既然都考虑自动化deploy了,还会有“忘记chown”这种事吗,反正要做的事情都那样,都不知道你要纠结啥。
|
8
yueyoum 2014-03-07 10:09:12 +08:00
自己的代码 和 大部分编译的软件都放在 /opt 下
直接用登录用户跑。 如果可以git,直接git pull部署,不能,就scp 上传 tar.gz |
9
guoqiao OP @BOYPT 对于小项目或者项目代码尚未完全稳定, 未必每次部署都使用自动化, 而且自动化也未必覆盖到所有的修改需求.我可能经常需要ssh到服务器,手工修改一些东西,或者增加一个文件. 这时文件的权限就很可能忘记修改. "反正要做的事情都那样,都不知道你要纠结啥", 我要做的事,未必每次都一样.
|
10
guoqiao OP @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过去,何必舍近求远呢? |
11
Ever 2014-03-07 12:09:13 +08:00
通用的自编译软件和动态链接库放/opt下, 项目文件放在自己创建的非sudo用户$HOME下, 涉及多个应用, 创建多个用户.
静态文件确保www-data可读, 应用文件本身不和www-data组和用户产生任何关系, 应用和nginx交互通过gunicorn绑定tcp socket进行. 部署通过git hooks. |
13
clino 2014-03-07 12:42:31 +08:00
@guoqiao /opt 我也是有用的
我的用法大概是这样: -/opt下除了某些目录外基本用于批量部署,即所有服务器的 /opt 目录下都保持一致性(除了部分目录),这样一些需要保持一致的工具,配置等等都分门别类放在 /opt 下 -/opt/下非同步的一些目录,如 /opt/www 用于安装或者放置一些本服务器自己独立配置安装的文件应用等 批量部署和批量配置我用的是ansible |
14
clino 2014-03-07 12:43:45 +08:00
对了 /opt 下全用 root 操作,因为基本上这里放的都是影响整个系统的
只影响某个用户的部分就放在用户目录下 |
16
yingluck 2014-12-31 16:21:36 +08:00
1. /home/root
2. root 3. root 4. .gitignore git-pull |