2017年4月

嘿嘿,明明你有很厉害的东西想要分享给自己的同伴,可是他们并不能理解那意味着什么,然后拿一些简单的不能再简单的事情来问你。是不是感觉好尴尬呢。看来有些事儿,分享也要看人的吧,否则表错情真的是大写的失落。


译者简介:

GHLandy —— 生活中所有欢乐与苦闷都应藏在心中,有些事儿注定无人知晓,自己也无从说起。


via: http://turnoff.us/geek/the-depressed-developer-13/

作者:Daniel Stori 译者:GHLandy 校对:wxy 合成:GHLandy 点评:GHLandy

本文由 LCTT 原创编译,Linux中国 荣誉推出

营销人员觉得工程师在工作中都太严谨了;而工程师则认为营销人员毫无用处。但是他们都错了。

 title=

在 B2B 行业从事多年的销售实践过程中,我经常听到工程师对营销人员的各种误解。下面这些是比较常见的:

  • “搞市场营销真是浪费钱,还不如把更多的资金投入到实际的产品开发中来。”
  • “那些营销人员只是一个劲儿往墙上贴各种广告,还祈祷着它们不要掉下来。这么做有啥科学依据啊?”
  • “谁愿意去看哪些广告啊?”
  • “对待一个营销人员最好的办法就是不听,不看,也不理睬。”

这是我最感兴趣的一点:

“市场营销无足轻重。”

最后一点说的不对,而且不仅如此,它实际上是阻碍一个公司创新的巨大绊脚石。

我来跟大家解释一下原因吧。

看到自己的身影

这些工程师的的评论让我十分的苦恼,因为我从中看到了自己当年的身影。

你们知道吗?我曾经也跟你们一样是一位自豪的技术极客。我在 Rensselaer Polytechnic 学院的电气工程专业本科毕业后便在美国空军担任军官开始了我的职业生涯,而且美国空军在那段时间还发动了沙漠风暴行动。在那里我主要负责开发并部属一套智能的实时战况分析系统,用于综合几个的数据源来构建出战场态势。

在我离开空军之后,我本打算去麻省理工学院攻读博士学位。但是上校强烈建议我去报读这个学校的商学院。“你真的想一辈子待实验室里吗?”他问我。“你想就这么去大学里当个教书匠吗?Jackie ,你在组织管理那些复杂的工作中比较有天赋。我觉得你非常有必要去了解下 MIT 的斯隆商学院。”

我觉得自己也可以同时参加一些 MIT 技术方面的课程,因此我采纳了他的建议。然而,如果要参加市场营销管理方面的课程,我还有很长的路要走,这完全是在浪费时间。因此,在日常工作学习中,我始终是用自己所擅长的分析能力去解决一切问题。

不久后,我在波士顿咨询集团公司做咨询顾问工作。在那六年的时间里,我经常听到大家对我的评论: “Jackie ,你太没远见了。考虑问题也不够周全。你总是通过自己的分析去找答案。”

确实如此啊,我很赞同他们的想法——因为这个世界的工作方式本该如此,任何问题都要基于数据进行分析,不对吗?直到现在我才意识到(我多么希望自己早一些发现自己的问题)自己以前惯用的分析问题的方法遗漏了很多重要的东西:开放的心态、艺术修养、情感——人和创造性思维相关的因素。

我在 2001 年 9 月 11 日加入达美航空公司不久后,被调去管理消费者市场部门,之前我意识到的所有问题变得更加明显。市场方面本来不是我的强项,但是在公司需要的情况下,我也愿意出手相肋。

但是突然之间,我一直惯用的方法获取到的分析结果却与实际情况完全相反。这个问题导致上千人(包括航线内外的人)受到影响。我忽略了一个很重要的人本身的情感因素。我所面临的问题需要各种各样的解决方案才能处理,而不是简单的从那些死板的数据中就能得到答案。

那段时间,我快速地学到了很多东西,因为如果我们想把达美航空公司恢复到正常状态,还需要做很多的工作——市场营销更像是一个以解决问题为导向、以用户为中心的充满挑战性的大工程,只是销售人员和工程师这两大阵营都没有迅速地意识到这个问题。

两大文化差异

工程管理和市场营销之间的这个“巨大鸿沟”确实是根深蒂固的,这跟(著名的科学家、小说家) C.P. Snow 提出的“两大文化差异”问题很相似。具有科学素质的工程师和具有艺术细胞的营销人员操着不同的语言,不同的文化观念导致他们不同的价值取向。

但是,事实上他们比想象中有更多的相似之处。一个由微软、谷歌和美国国家科学基金会共同赞助的华盛顿大学的最新研究发现了“一个伟大软件工程师必须具备哪些优秀的素质”,毫无疑问,一个伟大的销售人员同样也应该具备这些素质。例如,专家们给出的一些优秀品质如下:

  • 充满激情
  • 性格开朗
  • 强烈的好奇心
  • 技艺精湛
  • 解决复杂难题的能力

这些只是其中很小的一部分!当然,并不是所有的素质都适用于市场营销人员,但是如果用文氏图来表示这“两大文化”的交集,就很容易看出营销人员和工程师之间的关系要远比我们想象中密切得多。他们都是竭力去解决与用户或客户相关的难题,只是他们所采取的方式和角度不一致罢了。

看到上面的那几点后,我深深的陷入思考:要是这两类员工彼此之间再多了解对方一些会怎样呢?这会给公司带来很强大的动力吧?

确实如此。我在红帽公司就亲眼看到过样的情形,我身边都是一些早些年肯定被我当成“想法疯狂”而无视的人。而且我猜销售人员看到工程师后(同时或某一次),心想,“这些数据呆瓜,真是只见树木不见森林。”

现在我才明白了公司里有这两种人才的重要性。在现实工作当中,工程师和营销人员都是围绕着客户、创新及数据分析来完成工作。如果他们能够懂得相互尊重、彼此理解、相辅相成,那么我们将会看到公司里所产生的那种积极强大的动力,这种超乎寻常的革新力量要远比两个独立的团队强大得多。

听一听疯子(和呆瓜)的想法

成功案例:《开放式组织》

在红帽任职期间,我的主要工作就是想办法提升公司的品牌影响力——但是就是给我一百万年我也不会想到让公司的 CEO 去写一本书。我把公司多个部门的“想法疯狂”的同事召集在一起,希望他们帮我设计出一个新颖的解决方案来提升公司的影响力,结果他们提出让公司的 CEO 写书这样一个想法。

当我听到这个想法的时候,我很快意识到这正是典型的红帽方式:它将对整个开源社区的从业者带来很重要的参考价值,同时也有助于宣扬开源精神。通过优先考虑这两方面的作用,我们提升了红帽在整个开源软件世界中的品牌价值——红帽是一个可靠的随时准备着为客户在数字化颠覆年代指明方向的公司。

这一点才是主要的:确切的说是指导红帽工程师解决代码问题的共同精神力量。 Red Hatters 小组敦促我出版《开放式组织》,这显示出来自内部和外部社区的程序员共同推动整个开源社区发展的强大动力之一:那就是强烈的共享欲望。

最后,要把《开放式组织》这本书完成,还需要大家的共同能力,包括工程师们强大的数据分析能力和营销人员美好的艺术素养。这个项目让我更加坚定自己的想法,工程师和营销人员有更多的相似之处。

但是,有些东西我还得强调下:开放模式的实现,要求公司上下没有任何偏见,不能偏袒工程师和市场营销人员任何一方文化。一个更加理想的开放式环境能够促使员工之间和平共处,并在这个组织规定的范围内点燃大家的热情。

这对我来说如春风拂面。

(图片来源:opensource.com)


作者简介:

Jackie Yeaney —— Ellucian 公司市场总监


via: https://opensource.com/open-organization/17/1/engineers-marketers-can-learn

作者:Jackie Yeaney 译者:rusking 校对:Bestony, wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

这篇文章将指导你如何在 Samba AD DC 服务器上创建共享目录,然后通过 GPO 把共享目录挂载到域中的其它 Windows 成员机,并且从 Windows 域控的角度来管理共享权限。

这篇文章也包括在加入域的 Linux 机器上如何使用 Samba4 域帐号来访问及挂载共享文件。

需求:

1、在 Ubuntu 系统上使用 Samba4 来创建活动目录架构

2、在 Linux 命令行下管理 Samba4 AD 架构

3、使用 Windows 10 的 RSAT 工具来管理 Samba4 活动目录架构

4、在 Windows 下管理 Samba4 AD 域管制器 DNS 和组策略

5、将另一台 Ubuntu DC 服务器加入到 Samba4 AD DC 实现双域控主机模式

6、使用 Rsync 命令同步两个 Samba4 AD DC 之间的 SysVol 目录

第一步:创建 Samba 文件共享

1、在 Samba AD DC 服务器上创建共享非常简单。首先创建一个你想通过 SMB 协议来分享文件的目录,然后添加下面的文件系统权限,这是为了让 Windows AD DC 管理员给 Windows 客户端分配相应的共享权限。

假设在 AD DC 服务器上有一个新的共享目录 '/nas' ,执行下面的命令来授予必要的权限。

# mkdir /nas
# chmod -R 775 /nas
# chown -R root:"domain users" /nas
# ls -alh | grep nas

Create Samba Shared Directory

创建 Samba 共享目录

2、当你在 Samba4 AD DC 服务器上创建完成共享目录之后,你还得修改 samba 配置文件,添加下面的参数以允许通过 SMB 协议来共享文件。

# nano /etc/samba/smb.conf

在配置文件末尾添加以下内容:

[nas]
path = /nas
read only = no

Configure Samba Shared Directory

配置 Samba 共享目录

3、最后,你需要通过下面的命令重启 Samba AD DC 服务,以让修改的配置生效:

# systemctl restart samba-ad-dc.service

第二步:管理 Samba 共享权限

4、我们准备使用在 Samba AD DC 服务器上创建的域帐号(包括用户和组)来访问这个共享目录(禁止 Linux 系统用户访问共享目录)。

可以直接通过 Windows 资源管理器来完成 Samba 共享权限的管理,就跟你在 Windows 资源管理器中设置其它文件夹权限的方法一样。

首先,使用具有管理员权限的 Samba4 AD 域帐号登录到 Windows 机器。然而在 Windows 机器上的资源管理器中输入双斜杠和 Samba AD DC 服务器的 IP 地址或主机名或者是 FQDN 来访问共享文件和设置权限。

\\adc1
或
\\192.168.1.254
或
\\adc1.tecmint.lan

Access Samba Share Directory from Windows

从 Windows 机器访问 Samba 共享目录

5、右键单击共享文件,选择属性来设置权限。打开安全选项卡,依次修改域账号和组权限。使用高级选项来调整权限。

Configure Samba Share Directory Permissions

配置 Samba 共享目录权限

可参考下面的截图来为指定 Samba AD DC 认证用户设置权限。

Manage Samba Share Directory User Permissions

设置 Samba 共享目录用户权限

6、你也可以使用其它方法来设置共享权限,打开计算机管理-->连接到另外一台计算机。

找到共享目录,右键单击你想修改权限的目录,选择属性,打开安全选项卡。你可以在这里修改任何权限,就跟上图的修改共享文件夹权限的方法一样。

Connect to Samba Share Directory Machine

连接到 Samba 共享目录服务器

Manage Samba Share Directory Properties

管理 Samba 共享目录属性

Assign Samba Share Directory Permissions to Users

为域用户授予共享目录权限

第三步:通过 GPO 来映射 Samba 文件共享

7、要想通过域组策略来挂载 Samba 共享的目录,你得先到一台已安装了 RSAT 工具 的服务器上,打开 AD DC 工具,右键单击域名,选择新建-->共享文件夹。

Map Samba Share Folder

映射 Samba 共享文件夹

8、为共享文件夹添加一个名字,然后输入共享文件夹的网络路径,如下图所示。完成后单击 OK 按钮,你就可以在右侧看到文件夹了。

Set Samba Shared Folder Name Location

设置 Samba 共享文件夹名称及路径

9、下一步,打开组策略管理控制台,找到当前域的默认域策略脚本,然后打开并编辑该文件。

在 GPM 编辑器界面,打开 GPM 编辑器,找到用户配置 --> 首选项 --> Windows 设置,然而右键单击驱动器映射,选择新建 --> 映射驱动。

Map Samba Share Folder in Windows

在 Windows 机器上映射 Samba 共享文件夹

10、通过单击右边的三个小点,在新窗口中查询并添加共享目录的网络位置,勾选重新连接复选框,为该目录添加一个标签,选择驱动盘符,然后单击 OK 按钮来保存和应用配置。

Configure Network Location for Samba Share Directory

配置 Samba 共享目录的网络位置

11、最后,为了在本地机器上强制应用 GPO 更改而不重启系统,打开命令行提示符,然而执行下面的命令。

gpupdate /force

Apply GPO Changes

应用 GPO 更改

12、当你在本地机器上成功应用策略后,打开 Windows 资源管理器,你就可以看到并访问共享的网络文件夹了,能否正常访问共享目录取决于你在前一步的授权操作。

如果没有在命令行下强制应用组策略,你网络中的其它客户机需要重启或重新登录系统才可以看到共享目录。

Samba Shared Network Volume on Windows

Windows 机器上挂载的 Samba 网络磁盘

第四步:从 Linux 客户端访问 Samba 共享目录

13、已加入 Samba AD DC 中的 Linux 成员机上的系统用户也可以可以使用 Samba 帐号访问或在本地挂载共享目录。

首先,你得通过下面的命令来确保 Samba 客户端和工具已经安装完成。

$ sudo apt-get install smbclient cifs-utils

14、为了列出域环境中的共享目录,你可以通过下面的命令加入指定的域控服务器主机名来查询:

$ smbclient –L your_domain_controller –U%
或
$ smbclient –L \\adc1 –U%

List Samba Share Directory in Linux

在 Linux 机器上列出 Samba 共享目录

15、在命令行下使用域帐号以交互试方式连接到 Samba 共享目录:

$ sudo smbclient //adc/share_name -U domain_user

在命令行下,你可以列出共享目录内容,下载或上传文件到共享目录,或者执行其它操作。使用 ? 来查询所有可用的 smbclient 命令。

Connect Samba Share Directory in Linux

在 Linux 机器上连接 Samba 共享目录

16、在 Linux 机器上使用下面的命令来挂载 samba 共享目录。

$ sudo mount //adc/share_name /mnt -o username=domain_user

Mount Samba Share Directory in Linux

在 Linux 机器上挂载 samba 共享目录

根据实际情况,依次替换主机名、共享目录名、挂载点和域帐号。使用 mount 命令加上管道符和 grep 命令来过滤出 cifs 类型的文件系统。

通过上面的测试,我们可以看出,在 Samba4 AD DC 服务器上配置共享目录仅使用 Windows 访问控制列表( ACL ),而不是 POSIX ACL 。

通过文件共享把 Samba 配置为域成员以使用其它网络共享功能。同时,在另一个域控制器上配置 Windbindd 服务 ——在你开始发起网络共享文件之前。


作者简介:

我是一个电脑迷,开源 Linux 系统和软件爱好者,有 4 年多的 Linux 桌面、服务器系统使用和 Base 编程经验。

译者简介:

春城初春/春水初生/春林初盛/春風十裏不如妳 rusking


via: http://www.tecmint.com/create-shared-directory-on-samba-ad-dc-and-map-to-windows-linux/

作者:Matei Cezar 译者:rusking 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

Bluemix 是由 IBM 实现的基于开放标准的云平台。它具有开放的架构,其允许组织能够在云上创建、开发和管理其应用程序。它基于 Cloud Foundry ,因此可以被视为平台即服务(PaaS)。使用 Bluemix,开发人员不必关心云端配置,可以专注于他们的应用程序。 云端配置将由 Bluemix 自动完成。

Bluemix 还提供了一个仪表板,通过它,开发人员可以创建,管理和查看服务和应用程序,同时还可以监控资源使用情况。

它支持以下编程语言:

  • Java
  • Python
  • Ruby on Rails
  • PHP
  • Node.js

它还支持 OpenWhisk(FaaS),这也是一个 IBM 的产品,其允许开发人员调用任一功能而不需要任何资源管理。

图1 IBM Bluemix概述

图1 IBM Bluemix 概述

图2 IBM Bluemix体系结构

图2 IBM Bluemix 体系结构

图3 在IBM Bluemix 中创建组织

图3 在 IBM Bluemix 中创建组织

IBM Bluemix 如何工作

Bluemix 构建在 IBM 的 SoftLayer IaaS(基础架构即服务)之上。它使用 Cloud Foundry 作为开源 PaaS 平台。一切起于通过 Cloud Foundry 来推送代码,它扮演着将代码和编写应用所使用的编程语言运行时环境整合起来的角色。IBM 服务、第三方服务或社区构建的服务可用于不同的功能。安全连接器可用于将本地系统连接到云。

图4 在IBM Bluemix中设置空间

图4 在 IBM Bluemix 中设置空间

图5 应用程序模板

图5 应用程序模板

图6 IBM Bluemix支持的编程语言

图6 IBM Bluemix 支持的编程语言

在 Bluemix 中创建应用程序

在本文中,我们将使用 Liberty for Java 的入门包在 IBM Bluemix 中创建一个示例“Hello World”应用程序,只需几个简单的步骤。

1、 打开 https://console.ng.bluemix.net/registration/

2、 注册 Bluemix 帐户

3、 点击邮件中的确认链接完成注册过程

4、 输入您的电子邮件 ID,然后点击 Continue 进行登录

5、 输入密码并点击 Log in

6、 进入 Set up -> Environment 设置特定区域中的资源共享

7、 创建空间方便管理访问控制和在 Bluemix 中回滚操作。 我们可以将空间映射到多个开发阶段,如 dev, test,uat,pre-prod 和 prod

图7 命名应用程序

图7 命名应用程序

图8 了解应用程序何时准备就绪

图8 了解应用程序何时准备就绪

图9 IBM Bluemix Java应用程序

图9 IBM Bluemix Java 应用程序

8、 完成初始配置后,单击 I'm ready -> Good to Go !

9、 成功登录后,此时检查 IBM Bluemix 仪表板,特别是 Cloud Foundry Apps(其中 2GB 可用)和 Virtual Server(其中 0 个实例可用)的部分

10、 点击 Create app,选择应用创建模板。在我们的例子中,我们将使用一个 Web 应用程序

11、 如何开始?单击 Liberty for Java ,然后查看其描述

12、 单击 Continue

13、 为新应用命名。对于本文,让我们使用 osfy-bluemix-tutorial 命名然后单击 Finish

14、 在 Bluemix 上创建资源和托管应用程序需要等待一些时间

15、 几分钟后,应用程式就会开始运作。注意应用程序的URL

16、 访问应用程序的URL http://osfy-bluemix-tutorial.au-syd.mybluemix.net/, 不错,我们的第一个在 IBM Bluemix 上的 Java 应用程序成功运行

17、 为了检查源代码,请单击 Files 并在门户中导航到不同文件和文件夹

18、 Logs 部分提供包括从应用程序的创建时起的所有活动日志。

19、 Environment Variables 部分提供关于 VCAP\_Services 的所有环境变量以及用户定义的环境变量的详细信息

20、 要检查应用程序的资源消耗,需要到 Liberty for Java 那一部分。

21、 默认情况下,每个应用程序的 Overview 部分包含资源,应用程序的运行状况和活动日志的详细信息

22、 打开 Eclipse,转到帮助菜单,然后单击 Eclipse Marketplace

23、 查找 IBM Eclipse tools for Bluemix 并单击 Install

24、 确认所选的功能并将其安装在 Eclipse 中

25、 下载应用程序启动器代码。点击 File Menu,将它导入到 Eclipse 中,选择 Import Existing Projects -> Workspace, 然后开始修改代码

图10 Java应用程序源文件

图10 Java 应用程序源文件

图11 Java应用程序日志

图11 Java 应用程序日志

图12 Java应用程序 - Liberty for Java

图12 Java 应用程序 - Liberty for Java

为什么选择 IBM Bluemix?

以下是使用 IBM Bluemix 的一些令人信服的理由:

  • 支持多种语言和平台
  • 免费试用

    1. 简化的注册过程
    2. 不需要信用卡
    3. 30 天试用期 - 配额 2GB 的运行时,支持 20 个服务,500 个 route
    4. 无限制地访问标准支持
    5. 没有生产使用限制
  • 仅为每个使用的运行时和服务付费
  • 快速设置 - 从而加快上架时间
  • 持续交付新功能
  • 与本地资源的安全集成
  • 用例

    1. Web 应用程序和移动后端
    2. API 和内部集成
  • DevOps 服务可部署在云上的 SaaS ,并支持持续交付:

    1. Web IDE
    2. SCM
    3. 敏捷规划
    4. 交货管道服务

via: http://opensourceforu.com/2016/11/build-deploy-manage-custom-apps-ibm-bluemix/

作者:MITESH\_SONI 译者:Vic020 校对:Bestony

本文由 LCTT 组织编译,Linux中国 荣誉推出

桌面共享是指通过图形终端仿真器在计算机桌面上实现远程访问和远程协作的技术。桌面共享允许两个或多个连接到网络的计算机用户在不同位置对同一个文件进行操作。

在这篇文章中,我将向你展示如何在 Ubuntu 和 Linux Mint 中启用桌面共享,并展示一些重要的安全特性。

在 Ubuntu 和 Linux Mint 上启用桌面共享

1、在 Ubuntu Dash 或 Linux Mint 菜单中,像下面的截图这样搜索 desktop sharing,搜索到以后,打开它。

Search for Desktop Sharing in Ubuntu

在 Ubuntu 中搜索 Desktop sharing

2、打开 Desktop sharing 以后,有三个关于桌面共享设置的选项:共享、安全以及通知设置。

在共享选项下面,选中选项“允许其他用户查看桌面”来启用桌面共享。另外,你还可以选中选项“允许其他用户控制你的桌面”,从而允许其他用户远程控制你的桌面。

Desktop Sharing Preferences

桌面共享偏好

3、接下来,在“安全”部分,你可以通过勾选选项“你必须确认任何对该计算机的访问”来手动确认每个远程连接。

另外,另一个有用的安全特性是通过选项“需要用户输入密码”创建一个确定的共享密码。这样当用户每次想要访问你的桌面时需要知道并输入密码。

4、对于通知,你可以勾选“仅当有人连接上时”来监视远程连接,这样每次当有人远程连接到你的桌面时,可以在通知区域查看。

Configure Desktop Sharing Set

配置桌面共享设置

当所有的桌面共享选项都设置好以后,点击“关闭”。现在,你已经在你的 Ubuntu 或 Linux Mint 上成功启用了桌面共享。

测试 Ubuntu 的远程桌面共享

你可以通过使用一个远程连接应用来进行测试,从而确保桌面共享可用。在这个例子中,我将展示上面设置的一些选项是如何工作的。

5、我将使用 VNC(虚拟网络计算)协议通过 remmina 远程连接应用连接到我的 Ubuntu PC。

Remmina Desktop Sharing Tool

Remmina 桌面共享工具

6、在点击 Ubuntu PC 以后,将会出现下面这个配置连接设置的界面,

Remmina Desktop Sharing Preferences

Remmina 桌面共享偏好

7、当执行好所有设置以后,点击连接。然后,给用户名提供 SSH 密码并点击 OK 。

Enter SSH User Password

输入 SSH 用户密码

点击确定以后,出现下面这个黑屏,这是因为在远程机器上,连接还没有确认。

Black Screen Before Confirmation

连接确认前的黑屏

8、现在,在远程机器上,我需要如下一个屏幕截图显示的那样点击 Allow 来接受远程访问请求。

Allow Remote Desktop Sharing

允许远程桌面共享

9、在接受请求以后,我就成功地连接到了远程 Ubuntu 机器的桌面。

Remote Ubuntu Desktop

远程 Ubuntu 桌面

这就是全部内容了,在这篇文章中,我们讲解了如何在 Ubuntu 和 Linux Mint 中启用桌面共享。你使用评论部分给我们写反馈。


作者简介:

Aaron Kili 是 Linux 和 F.O.S.S 爱好者,将来的 Linux 系统管理员和网络开发人员,目前是 TecMint 的内容创作者,他喜欢用电脑工作,并坚信分享知识。


via: http://www.tecmint.com/enable-desktop-sharing-in-ubuntu-linux-mint/

作者:Aaron Kili 译者:ucasFL 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

介绍

托管 Django Web 应用程序相当简单,虽然它比标准的 PHP 应用程序更复杂一些。 让 Web 服务器对接 Django 的方法有很多。 Gunicorn 就是其中最简单的一个。

Gunicorn(Green Unicorn 的缩写)在你的 Web 服务器 Django 之间作为中间服务器使用,在这里,Web 服务器就是 Nginx。 Gunicorn 服务于应用程序,而 Nginx 处理静态内容。

Gunicorn

安装

使用 Pip 安装 Gunicorn 是超级简单的。 如果你已经使用 virtualenv 搭建好了你的 Django 项目,那么你就有了 Pip,并且应该熟悉 Pip 的工作方式。 所以,在你的 virtualenv 中安装 Gunicorn。

$ pip install gunicorn

配置

Gunicorn 最有吸引力的一个地方就是它的配置非常简单。处理配置最好的方法就是在 Django 项目的根目录下创建一个名叫 Gunicorn 的文件夹。然后在该文件夹内,创建一个配置文件。

在本篇教程中,配置文件名称是 gunicorn-conf.py。在该文件中,创建类似于下面的配置:

import multiprocessing

bind = 'unix:///tmp/gunicorn1.sock'
workers = multiprocessing.cpu_count() * 2 + 1
reload = True
daemon = True

在上述配置的情况下,Gunicorn 会在 /tmp/ 目录下创建一个名为 gunicorn1.sock 的 Unix 套接字。 还会启动一些工作进程,进程数量相当于 CPU 内核数量的 2 倍。 它还会自动重新加载并作为守护进程运行。

运行

Gunicorn 的运行命令有点长,指定了一些附加的配置项。 最重要的部分是将 Gunicorn 指向你项目的 .wsgi 文件。

gunicorn -c gunicorn/gunicorn-conf.py -D --error-logfile gunicorn/error.log yourproject.wsgi

上面的命令应该从项目的根目录运行。 -c 选项告诉 Gunicorn 使用你创建的配置文件。 -D 再次指定 gunicorn 为守护进程。 最后一部分指定 Gunicorn 的错误日志文件在你创建 Gunicorn 文件夹中的位置。 命令结束部分就是为 Gunicorn 指定 .wsgi 文件的位置。

Nginx

现在 Gunicorn 配置好了并且已经开始运行了,你可以设置 Nginx 连接它,为你的静态文件提供服务。 本指南假定你已经配置好了 Nginx,而且你通过它托管的站点使用了单独的 server 块。 它还将包括一些 SSL 信息。

如果你想知道如何让你的网站获得免费的 SSL 证书,请查看我们的 Let'sEncrypt 指南

# 连接到 Gunicorn
upstream yourproject-gunicorn {
    server unix:/tmp/gunicorn1.sock fail_timeout=0;
}

# 将未加密的流量重定向到加密的网站
server {
    listen       80;
    server_name  yourwebsite.com;
    return       301 https://yourwebsite.com$request_uri;
}

# 主服务块
server {
    # 设置监听的端口,指定监听的域名
    listen 443 default ssl;
    client_max_body_size 4G;
    server_name yourwebsite.com;

    # 指定日志位置
    access_log /var/log/nginx/yourwebsite.access_log main;
    error_log /var/log/nginx/yourwebsite.error_log info;

    # 告诉 nginx 你的 ssl 证书
    ssl on;
    ssl_certificate /etc/letsencrypt/live/yourwebsite.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/yourwebsite.com/privkey.pem;

    # 设置根目录
    root /var/www/yourvirtualenv/yourproject;

    # 为 Nginx 指定静态文件路径
    location /static/ {
        # Autoindex the files to make them browsable if you want
        autoindex on;
        # The location of your files
        alias /var/www/yourvirtualenv/yourproject/static/;
        # Set up caching for your static files
        expires 1M;
        access_log off;
        add_header Cache-Control "public";
        proxy_ignore_headers "Set-Cookie";
    }

    # 为 Nginx 指定你上传文件的路径
    location /media/ {
        Autoindex if you want
        autoindex on;
        # The location of your uploaded files
        alias /var/www/yourvirtualenv/yourproject/media/;
        # Set up aching for your uploaded files
        expires 1M;
        access_log off;
        add_header Cache-Control "public";
        proxy_ignore_headers "Set-Cookie";
    }

    location / {
        # Try your static files first, then redirect to Gunicorn
        try_files $uri @proxy_to_app;
    }

    # 将请求传递给 Gunicorn
    location @proxy_to_app {
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_redirect off;
        proxy_pass   http://njc-gunicorn;
    }

    # 缓存 HTML、XML 和 JSON
    location ~* \.(html?|xml|json)$ {
        expires 1h;
    }

    # 缓存所有其他的静态资源
    location ~* \.(jpg|jpeg|png|gif|ico|css|js|ttf|woff2)$ {
        expires 1M;
        access_log off;
        add_header Cache-Control "public";
        proxy_ignore_headers "Set-Cookie";
    }
}

配置文件有点长,但是还可以更长一些。其中重点是指向 Gunicorn 的 upstream 块以及将流量传递给 Gunicorn 的 location 块。大多数其他的配置项都是可选,但是你应该按照一定的形式来配置。配置中的注释应该可以帮助你了解具体细节。

保存文件之后,你可以重启 Nginx,让修改的配置生效。

# systemctl restart nginx

一旦 Nginx 在线生效,你的站点就可以通过域名访问了。

结语

如果你想深入研究,Nginx 可以做很多事情。但是,上面提供的配置是一个很好的开始,并且你可以用于实践中。 如果你见惯了 Apache 和臃肿的 PHP 应用程序,像这样的服务器配置的速度应该是一个惊喜。


via: https://linuxconfig.org/hosting-django-with-nginx-and-gunicorn-on-linux

作者:Nick Congleton 译者:Flowsnow 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出