I bootstrap with the following in containers/app.yml:
templates:
- "templates/web.template.yml"
- "templates/redis.template.yml"
env:
LANG: en_US.UTF-8
DISCOURSE_HOSTNAME: 'discourse.mysite.org'
DISCOURSE_DB_USERNAME: discourseuser
DISCOURSE_DB_NAME: discourse
DISCOURSE_DEVELOPER_EMAILS: 'jasmin.hassan@mysite.org'
DISCOURSE_DB_SOCKET: ''
DISCOURSE_DB_HOST: 'x.x.x.rds.amazonaws.com'
DISCOURSE_SMTP_ADDRESS: 'email-smtp.x.amazonaws.com'
DISCOURSE_SMTP_PORT: 587
DISCOURSE_SMTP_USER_NAME: randomuser
DISCOURSE_SMTP_PASSWORD: randompassword
DISCOURSE_DB_PASSWORD: securepassword
Then I push to private docker hub repo, and write a yaml file for kubernetes to pull my newly pushed private image, and apply it. However, without a “command” and/or “args” set in the kubernetes yaml file for the deployment, the container/pod starts up but immediately errors with:
I, [2017-07-15T12:52:21.697829 #13] INFO – : Loading --stdin
/pups/lib/pups/config.rb:23:in initialize': undefined method
[]’ for nil:NilClass (NoMethodError)
from /pups/lib/pups/cli.rb:27:in new' from /pups/lib/pups/cli.rb:27:in
run’
from /pups/bin/pups:8:in `’
After some research and digging in, I realize I have to set a custom command in kubernetes yaml file, so a part of it might look like:
- image: myorg/discourse:latest
name: discourse
command: ["/bin/bash"]
args: ["-c", "cd /var/www/discourse && bin/bundle exec rails server && bin/bundle exec sidekiq -q critical,low,default -d -l log/sidekiq.log && nginx"]
imagePullPolicy: Always
ports:
- containerPort: 80
resources:
requests:
memory: "2Gi"
Then the ENV vars (postgres, redis, smtp, etc.) and volume mounts.
However, puma server (tcp/3000) dies silently after daemonizing according to the logs.
Fix (from containers/app.yml):
sed -i 's#/home/discourse/discourse#/var/www/discourse#' config/puma.rb
Site then loads, but all assets are not loaded (css, js, etc).
Fix:
sed -i 's/GlobalSetting.serve_static_assets/true/' config/environments/production.rb
so basically I ended up with the additional section in containers/app.yml:
run:
- exec:
cd: /var/www/discourse
cmd:
- sed -i 's#/home/discourse/discourse#/var/www/discourse#' config/puma.rb
- sed -i 's/GlobalSetting.serve_static_assets/true/' config/environments/production.rb
- bash -c "touch -a /shared/log/rails/{sidekiq,puma.err,puma}.log"
- bash -c "ln -s /shared/log/rails/{sidekiq,puma.err,puma}.log log/"
additionally, because of SSL termination outside, for actions like trigger/delete/retry/etc at https://discourse/sidekiq one gets 403 forbidden errors and in puma.err.log it complains about HttpOrigin.
So I just fix that by adding:
- sed -i 's/default \$scheme;/default https;/' /etc/nginx/conf.d/discourse.conf
and rebuilding.
latest build as of today
v1.9.0.beta4 +61