我们已将大量源代码迁移到 git,并对我们当前的解决方案感到非常满意。我们希望在同一系统上对我们的服务器配置文件进行版本控制,但有一些事情无法按照我们希望的方式工作,我希望有人可以在这里分享他的经验。
这个问题类似于对服务器配置文件使用修订控制?,但我们有一些特殊要求,不适用于有关该问题的建议。
当前设置对配置文件使用 subversion。相应的存储库看起来像这样
/ # 仓库根目录 +--www.domain.com/ # www 的配置 | \ - 等等/ | \--apache2/ +--dev.domain.com/ # dev 的配置 | +--等/ | \ - 选择/ | \--app1/ | \--conf/ # 在 dev 上配置 app1 \--staging.domain.com/ # 暂存配置
使用 subversion 这将工作得很好,因为可以只检出存储库的子目录。此外,您可以使用 svn:externals 来指向几种不同配置设置的一种通用结构。我们只需要处理所有版本化目录中的.svn文件。另一方面, Git没有 svn:externals并且稀疏检出总是要求从根到实际目录的路径相同。
在讨论迁移到 git 时,我尝试写下服务器配置版本控制的主要要求:
有没有一种很好的方法可以将所有配置都放在一个存储库中并且只有一个子路径作为工作副本?目前我正在考虑两种方法,但想先在这里问这个问题
在单台机器上使用 …
在下面的几行中,我可能有一个特定于站点的配置文件,其中包含该站点独有的其他fastcgi_params。如果这个文件存在,我想加载它。
server {
listen 80 default;
server_name _;
root /path/www/$host;
# Pass PHP scripts to php-fastcgi listening on port 9000
location ~ \.php {
include fastcgi_params;
fastcgi_pass 127.0.0.1:9000;
if (-f /path/www/$host/nginx.conf) {
include /path/www/$host/nginx.conf;
}
}
}
Run Code Online (Sandbox Code Playgroud)
但是,这不起作用,我得到的错误是:
nginx: [emerg] "include" 指令在这里是不允许的......
我认为与其单独检查,不如让include 来检查我。
server {
listen 80 default;
server_name _;
root /path/www/$host;
# Pass PHP scripts to php-fastcgi listening on port 9000
location ~ \.php {
include fastcgi_params;
fastcgi_pass 127.0.0.1:9000; …Run Code Online (Sandbox Code Playgroud) 我想让 PostgreSQL(超级)用户使用“peer”或“md5”身份验证方法进行身份验证,最好在两种情况下都使用本地 Unix 域套接字。问题是 pg_hba.conf 中条目的顺序很重要,将应用第一个匹配项。
我拥有的:
# TYPE DATABASE USER ADDRESS METHOD
local all harold peer
local all all md5
Run Code Online (Sandbox Code Playgroud)
我想要什么(无效的语法):
# TYPE DATABASE USER ADDRESS METHOD
local all harold peer-or-md5
local all all md5
Run Code Online (Sandbox Code Playgroud)
以下是有关我们希望在其中使用它的环境的更多详细信息:
在这个特定的服务器上,所有数据库都相对较小(每个数据<10MB)并且是纯只读的。哈罗德超级用户每天晚上都会丢弃并重新创建它们。harold 也是一个系统帐户,因此“peer”适用于无密码的 cronjobs 等。然后有一个 Web 界面访问数据库:这使用 md5 身份验证(系统用户是网络服务器,pg 用户名、密码和数据库名称由访客)。现在我想让 harold 用户也通过 Web 界面登录。由于 harold 的“对等”设置,这失败了。
当前的解决方法是让网络界面通过 TCP 连接,使用
# TYPE DATABASE USER ADDRESS METHOD
host all all 127.0.0.1/32 md5
host all all ::1/128 md5
Run Code Online (Sandbox Code Playgroud)
除了第一个示例中的本地条目。这行得通,但我也更愿意在这里使用本地套接字 - 出于性能考虑,并且因为直觉认为这似乎是正确的做法。
这可能吗?有没有更好的解决方法?
我在配置 nginx 时遇到问题。
我使用 nignx 作为反向代理。我想将所有请求发送到我的第一台服务器。如果第一台服务器关闭,我想向第二台服务器发送请求。
简而言之,如何在没有负载平衡的情况下拥有故障转移解决方案?
我试图了解 Linux 上的网络工具。我现在对应该使用什么来操作静态路由感到困惑:route或ip route?:
route - 显示/操作 IP 路由表
ip - 显示/操作路由、设备、策略路由和隧道
这两个工具有什么区别?
特别是在配置HPKP标头(或其他一般的长标头)时,将 nginx 配置中的一行拆分为多行会很有用。
这是想要的结果:
pin-sha256="X3pGTSOuJeEVw989IJ/cEtXUEmy52zs1TZQrU06KUKg=";
pin-sha256="MHJYVThihUrJcxW6wcqyOISTXIsInsdj3xK8QrZbHec=";
pin-sha256="isi41AizREkLvvft0IRW4u3XMFR2Yg7bvrF7padyCJg=";
pin-sha256="I/bAACUzdYEFNw2ZKRaypOyYvvOtqBzg21g9a5WVClg=";
pin-sha256="Y4/Gxyck5JLLnC/zWHtSHfNljuMbOJi6dRQuRJTgYdo=";
pin-sha256="/oCVQg3nP3DroGpFdAbaiYzenycUftqrH3LAyaIal2g=";
Run Code Online (Sandbox Code Playgroud)
但是对于浏览器,它应该只有一行:
pin-sha256="X3pGTSOuJeEVw989IJ/cEtXUEmy52zs1TZQrU06KUKg="; pin-sha256="MHJYVThihUrJcxW6wcqyOISTXIsInsdj3xK8QrZbHec="; pin-sha256="isi41AizREkLvvft0IRW4u3XMFR2Yg7bvrF7padyCJg="; pin-sha256="I/bAACUzdYEFNw2ZKRaypOyYvvOtqBzg21g9a5WVClg="; pin-sha256="Y4/Gxyck5JLLnC/zWHtSHfNljuMbOJi6dRQuRJTgYdo="; pin-sha256="/oCVQg3nP3DroGpFdAbaiYzenycUftqrH3LAyaIal2g=";
Run Code Online (Sandbox Code Playgroud)
所以我尝试了一些东西,但我对结果不满意......
add_header Public-Key-Pins '
pin-sha256="X3pGTSOuJeEVw989IJ/cEtXUEmy52zs1TZQrU06KUKg=";
pin-sha256="MHJYVThihUrJcxW6wcqyOISTXIsInsdj3xK8QrZbHec=";
pin-sha256="isi41AizREkLvvft0IRW4u3XMFR2Yg7bvrF7padyCJg=";
pin-sha256="I/bAACUzdYEFNw2ZKRaypOyYvvOtqBzg21g9a5WVClg=";
pin-sha256="Y4/Gxyck5JLLnC/zWHtSHfNljuMbOJi6dRQuRJTgYdo=";
pin-sha256="/oCVQg3nP3DroGpFdAbaiYzenycUftqrH3LAyaIal2g=";
'
Run Code Online (Sandbox Code Playgroud)
这有效,但curl我可以看到浏览器收到带有所有换行符的标题......
实际上,在已经链接的文章中,Scott Helme 建议这样做:
add_header Public-Key-Pins ' \
pin-sha256="X3pGTSOuJeEVw989IJ/cEtXUEmy52zs1TZQrU06KUKg="; \
pin-sha256="MHJYVThihUrJcxW6wcqyOISTXIsInsdj3xK8QrZbHec="; \
pin-sha256="isi41AizREkLvvft0IRW4u3XMFR2Yg7bvrF7padyCJg="; \
pin-sha256="I/bAACUzdYEFNw2ZKRaypOyYvvOtqBzg21g9a5WVClg="; \
pin-sha256="Y4/Gxyck5JLLnC/zWHtSHfNljuMbOJi6dRQuRJTgYdo="; \
pin-sha256="/oCVQg3nP3DroGpFdAbaiYzenycUftqrH3LAyaIal2g="; \
'
Run Code Online (Sandbox Code Playgroud)
但是在我的情况下,这只是添加了斜杠并将它们返回给浏览器,所以这不起作用。
那么我该怎么做呢?
当然,每一行的注释都是一个很棒的补充:
pin-sha256="X3pGTSOuJeEVw989IJ/cEtXUEmy52zs1TZQrU06KUKg="; # current ECDSA
pin-sha256="MHJYVThihUrJcxW6wcqyOISTXIsInsdj3xK8QrZbHec="; # current RSA (nginx 1.11.0)
pin-sha256="isi41AizREkLvvft0IRW4u3XMFR2Yg7bvrF7padyCJg="; # backup ECDSA 1
pin-sha256="I/bAACUzdYEFNw2ZKRaypOyYvvOtqBzg21g9a5WVClg="; # backup ECDSA 2
pin-sha256="Y4/Gxyck5JLLnC/zWHtSHfNljuMbOJi6dRQuRJTgYdo="; …Run Code Online (Sandbox Code Playgroud) 我必须安装一个带有 SQL Server 2008 的新服务器,你有什么推荐,一台带有 Raid 10 的服务器或 NAS 中的文件?
我应该使用 iSCSI 吗?
SAN呢?
服务器有 4Gb 的 RAM,该数据库文件大约为 2GB。
为了让我今天清楚服务器没有RAID,我必须实施某种策略,这样如果发生了什么事情我可以让我的文件安全,那么我应该选择本地文件,NAS,SAN吗?哪个选项性能最好,哪个更安全?
network-attached-storage configuration iscsi storage-area-network sql-server-2008
我有两个 snmpd.conf 文件,一个在可以工作的服务器上,一个在不工作的服务器上。如何在删除不相关的注释和换行符的同时区分两个配置文件?
我来自 Unix 背景,其中记录服务配置(例如电子邮件)可能就像获取一些文本配置文件和一两段解释性文本一样简单。
面对记录大量(50 多个)Windows 机器的配置时,我很沮丧地发现查看服务配置是多么困难。我正在从头开始构建这些机器,因此我需要在所有机器上保持配置一致。我将使用 Ghost 或类似方法对所有服务器进行映像,但实际配置服务(如 AD 或 Exchange)是一种手动点击过程,很容易导致不一致。
人们如何建议我着手创建可确保一致性的构建文档?其次,您如何在不诉诸大量屏幕截图等的情况下记录配置?我实际上正在考虑使用 Camtasia 来抓取配置过程的视频,这看起来很荒谬。
谢谢你的帮助!
编辑:下面的一些答案非常有帮助,我认为这会让我达到我想去的地方。特别是,使用应答文件进行脚本化安装将有助于创建一致的安装,并且一些 WMI 工具对于文档(LANsweeper、SYDisproject 等)非常有用。
我真正想要的是有一个工具可以将所有配置输出为人类可读/可编辑的格式,并且还可以再次将其全部吸回。Unix 基本上总是使用自记录配置文件来完成此操作,因此在所谓的现代操作系统中没有相同的功能令人非常失望!
我有几台运行 Windows 2008 和 Red Hat 5 的服务器,它们能够进行硬件 RAID。如何检查是否配置了硬件 RAID?
configuration ×10
linux ×3
nginx ×3
diff ×1
failover ×1
fastcgi ×1
git ×1
ip ×1
iscsi ×1
networking ×1
postgresql ×1
raid ×1
route ×1
svn ×1
windows ×1