# Installazione su Kubernetes

**URL:** <https://meta.discourse.org/t/installing-on-kubernetes/49329>\
**Category:** Self-hosting\
**Tags:** unsupported-install\
**Created:** [27 Agosto 2016, 10:59pm UTC](https://meta.discourse.org/t/installing-on-kubernetes/49329 "2016-08-27T22:59:09Z")\
**Posts on this page:** 1\
**Showing post:** 11

<div class="post-metadata">

**Author:** ![Jasmin\_Hassan](https://avatars.discourse-cdn.com/v4/letter/j/f1d935/32.png) [@Jasmin\_Hassan](https://meta.discourse.org/u/Jasmin_Hassan)\
**Post date:** [15 Luglio 2017, 1:32pm UTC](https://meta.discourse.org/t/installing-on-kubernetes/49329/11 "2017-07-15T13:32:22Z")

</div>

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](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

---

_[View the full topic](https://meta.discourse.org/t/installing-on-kubernetes/49329)._
