我在理解如何在 Docker 中利用我现有的基础架构代码时遇到了一些困难。
我有一个 Ruby on Rails 应用程序,它使用 capistrano 推出部署。我想使用这个 capistrano 脚本来创建一个新的 docker 镜像。我可以推出一个部署,然后使用部署到目录部署在现有映像之上,例如精确(因为它与我的目标操作系统匹配)。
这是正确的方法还是我错过了什么?
我有以下内容/etc/apache2/httpd.conf:
Include /private/etc/apache2/passenger_pane_vhosts/*.conf
Run Code Online (Sandbox Code Playgroud)
我有以下内容/etc/apache2/passenger_pane_vhosts/my_site.conf:
LoadModule auth_cas_module /usr/libexec/apache2/mod_auth_cas.so
CASCookiePath /tmp/mod_auth_cas/
CASVersion 2
CASDebug on
CASValidateServer off
CASAllowWildcardCert on
CASTimeout 86400
CASIdleTimeout 7200
CASLoginURL https://cas.mycompany.com/cas/login
CASValidateURL https://cas.mycompany.com/cas/serviceValidate
CASCookieDomain hattip-dev.mitre.org
LogLevel debug
<VirtualHost *:80>
LogLevel debug
ServerName hattip.local
DocumentRoot "/path/to/rails_app/public"
RailsEnv development
<Location />
AuthType CAS
AuthName "MyCompany CAS"
CASAuthNHeader MOD_AUTH_CAS_USER
require valid-user
</Location>
<directory "/path/to/rails_app/public">
Order allow,deny
Allow from all
</directory>
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)
Apache 将正常启动,但对我的 Rails 应用程序的每个请求都会返回 403,而不会重定向到我的 CAS 服务器。有一个在日志中没有CAS相关信息,即使CASDebug是on和LogLevel是debug无处不在,我能想到来设置。
PS:我已经尝试了上述配置的一些变体,包括将 …
我在 Apache2 中使用 proxy_balancer 将 Rails 应用程序的请求代理到应用程序运行所在端口上的 Rails 服务器。这是它的设置方式...
在端口 8000 上运行的Rails Server Mongrel,当直接访问 url 到http://rails_server:8000 时,站点加载正常
该站点的Apache 服务器Conf 文件:
<VirtualHost *:80>
ServerAdmin webmaster@localhost
ServerName myserver.com
ServerAlias application.myserver.com
<Proxy balancer://application_cluster>
Allow from localhost
BalancerMember http://ip.to.server:8000 retry=10
</Proxy>
ProxyPass / balancer://application_cluster
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)
我遇到的问题是去http://rails_server:8000工作正常,但去http://application.myserver.com加载正确的内容,但将所有 HTML 显示为文本,而不是将其呈现为 html
我们正在尝试在机器上部署 mongrel 实例。服务器的最佳杂种实例数是多少?由于实例可以处理并发连接,我认为每个内核启动超过 1 个没有任何好处。除此之外,线程只会争夺 CPU。我们的前辈已经为4核分配了10个实例,但我认为这只会导致CPU争用。任何明确的答案/意见?
我见过这个问题:有多少个杂种实例?
但确实不够具体。
我在 Rails 应用程序中使用 Nginx 和 Passenger。我想使用代理缓存来缓存我的页面。但是,每个请求都会直接发送到我的 Rails 应用程序。我不知道我的配置有什么问题。下面是我的配置:
user www-data;
worker_processes 1;
events {
worker_connections 1024;
}
http {
passenger_root /usr/lib/ruby/gems/1.8/gems/passenger-2.2.15;
passenger_ruby /usr/bin/ruby1.8;
passenger_max_pool_size 6;
passenger_max_instances_per_app 1;
passenger_pool_idle_time 0;
rails_spawn_method conservative;
include mime.types;
default_type application/octet-stream;
server_names_hash_bucket_size 512;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
tcp_nodelay on;
gzip on;
gzip_http_version 1.0;
gzip_vary on;
gzip_comp_level 6;
gzip_proxied any;
gzip_types text/plain text/css text/javascript application/javascript application/json application/x-javascript text/xml application/xml application/xml+rss;
proxy_cache_path /var/www/cache/webapp levels=1:2 keys_zone=webapp:8m max_size=1000m inactive=600m;
include vhosts/*.conf;
include /opt/nginx/conf/sites-enabled/*;
root /var/www;
}
server { …Run Code Online (Sandbox Code Playgroud) 我有一个被证明有问题的 Nginx 和乘客设置。
在相对较低的负载下,服务器似乎得到了备份并开始将这样的结果搅拌到 error.log 中:
connect() to unix:/passenger_helper_server failed
(11: Resource temporarily unavailable) while connecting to upstream
Run Code Online (Sandbox Code Playgroud)
我的乘客设置是:
passenger_min_instances 2;
passenger_pool_idle_time 1200;
passenger_max_pool_size 20;
Run Code Online (Sandbox Code Playgroud)
我已经做了一些挖掘,看起来 CPU 被钉住了。内存使用情况似乎很好,passenger_memory_stats 显示最多使用了大约 700MB,但 CPU 接近 100%。
这足以导致此类错误吗?
我应该减少游泳池的大小吗?我应该查看其他配置设置吗?
任何帮助表示赞赏
其他相关信息:
应如何使用亚马逊 Web 服务及其弹性 beanstalk 将秘密文件推送到 EC2 Ruby on Rails 应用程序?
我将文件添加到 git 存储库,然后推送到 github,但我想将秘密文件保留在 git 存储库之外。我正在使用以下方式部署到 aws:
git aws.push
Run Code Online (Sandbox Code Playgroud)
以下文件位于 .gitignore 中:
/config/database.yml
/config/initializers/omniauth.rb
/config/initializers/secret_token.rb
Run Code Online (Sandbox Code Playgroud)
通过此链接,我尝试将 S3 文件添加到我的部署中: http://docs.amazonwebservices.com/elasticbeanstalk/latest/dg/customize-containers.html
引用该链接:
示例片段
以下示例从 Amazon S3 存储桶下载 zip 文件并将其解压到 /etc/myapp 中:
Run Code Online (Sandbox Code Playgroud)sources: /etc/myapp: http://s3.amazonaws.com/mybucket/myobject
按照这些指示,我将文件上传到 S3 存储桶,并将以下内容添加到.elasticbeanstalk .ebextensions 目录中的 private.config 文件中:
sources:
/var/app/current/: https://s3.amazonaws.com/mybucket/config.tar.gz
Run Code Online (Sandbox Code Playgroud)
该 config.tar.gz 文件将提取到:
/config/database.yml
/config/initializers/omniauth.rb
/config/initializers/secret_token.rb
Run Code Online (Sandbox Code Playgroud)
但是,部署应用程序时,永远不会复制或提取 S3 主机上的 config.tar.gz 文件。我仍然收到无法找到 database.yml 的错误,并且 EC2 日志没有配置文件的记录,这是错误消息:
Error message:
No such file or directory - /var/app/current/config/database.yml
Exception class:
Errno::ENOENT …Run Code Online (Sandbox Code Playgroud) 我需要增加在乘客上运行的 Rails 应用程序的passenger_max_pool_size。我已经使用 Elastic beanstalk 进行部署。任何想法,如何解决这个问题?是否有选项设置或容器命令来执行此操作
我目前正在构建一个相当复杂的服务器堆栈(一个 ruby on rails 应用程序),我希望开发人员能够在不必自己安装所有东西的情况下工作。因此我使用 Vagrant 来允许他们这样做。
这个想法是,当您第一次安装映像时,它将拉取最新的源并安装依赖项,源通过同步文件夹公开(vagrant 内置功能),以便开发人员可以提交源并在他们自己的环境中编辑它们。Vagrant-box 仅用于服务器。
Vagrantfile 中的同步文件夹条目:
config.vm.synced_folder "gameeso/", "/var/gameeso", :create => "true"
Run Code Online (Sandbox Code Playgroud)
该图像是一个带有 upstart 脚本的 Ubuntu 服务器(脚本在启动时执行,并且仅在 Internet 连接启动时执行):
从 Github 拉取最新的开发分支(如果文件夹不存在)
安装依赖项(这是由脚本完成的)
所有这些都发生在一个同步文件夹中。我对这种方法有一些问题,主要是 Vagrant 清除了我的来宾系统上的同步文件夹。 我通过在 upstart 脚本中添加 'sleep 10' 解决了这个问题,所以它可以等到 Vagrant 设置同步文件夹。
当然,这不是一种安全的方法(如果启动时间超过 10 秒,虽然现在不太可能,我宁愿不知道;))
我的问题是:有没有更好的方法让来宾主机(流浪者图像)填充同步文件夹?
当然,非常感谢提前!
我似乎无缘无故地从独角兽工人那里得到间歇性超时,我需要一些帮助来调试实际问题。更糟糕的是,它可以处理大约 10 - 20 个请求,然后 1 个将超时,然后再有 10 - 20 个请求,同样的事情将再次发生。
我创建了一个开发环境来说明这个特定问题,所以除了我的之外没有任何流量。
堆栈是 Ubuntu 14.04、Rails 3.2.21、PostgreSQL 9.3.4、Unicorn 4.8.3、Nginx 1.6.2。
问题
我将详细描述它不起作用的时间。
我通过浏览器请求一个 url。
Started GET "/offers.xml?q%5bupdated_at_greater_than_or_equal_to%5d=2014-12-28T18:01:16Z&q%5bupdated_at_less_than_or_equal_to%5d=2014-12-28T19:30:21Z" for 127.0.0.1 at 2014-12-30 15:58:59 +0000
Completed 200 OK in 10.3ms (Views: 0.0ms | ActiveRecord: 2.1ms)
Run Code Online (Sandbox Code Playgroud)
如您所见,请求在 10.3 毫秒内成功完成,响应状态为 200。
然而,浏览器挂了大约 30 秒,Unicorn 杀死了工人:
E, [2014-12-30T15:59:30.267605 #13678] ERROR -- : worker=0 PID:14594 timeout (31s > 30s), killing
E, [2014-12-30T15:59:30.279000 #13678] ERROR -- : reaped #<Process::Status: pid 14594 SIGKILL (signal 9)> worker=0
I, [2014-12-30T15:59:30.355085 #23533] …Run Code Online (Sandbox Code Playgroud) ruby-on-rails ×10
nginx ×3
ubuntu ×3
apache-2.2 ×2
amazon-ec2 ×1
amazon-s3 ×1
capistrano ×1
cas ×1
deployment ×1
docker ×1
mongrel ×1
proxy ×1
ruby ×1
thin ×1
tuning ×1
ubuntu-14.04 ×1
unicorn ×1
upstart ×1
vagrant ×1