template for a standalone install
authorSam Saffron <sam.saffron@gmail.com>
Mon, 4 Nov 2013 04:01:42 +0000 (20:01 -0800)
committerSam Saffron <sam.saffron@gmail.com>
Mon, 4 Nov 2013 04:01:42 +0000 (20:01 -0800)
standalone.template.yml [new file with mode: 0644]

diff --git a/standalone.template.yml b/standalone.template.yml
new file mode 100644 (file)
index 0000000..c5f6606
--- /dev/null
@@ -0,0 +1,208 @@
+# expose:
+  # expose public port 80 to map to private docker port 80 (web)
+  # - "80:80"
+  # expose public port 2222 to map to private docker port 22 (ssh)
+  # - "2222:22"
+
+# ENV is baked in to the image, any changes here require ./launcher bootstrap to run
+env:
+  # Comma delimited list of emails, required if you want admin access for first account
+  DEVELOPER_EMAILS: 'YOUR_EMAIL@EMAIL.COM1'
+  # You can have redis on a different box
+  # REDIS_PROVIDER_URL: 'redis://l.discourse:6379'
+  RAILS_ENV: 'production'
+  RAILS4: 1
+  UNICORN_WORKERS: 3
+
+params:
+  # SSH key is required for remote access into the container
+  ssh_key: YOUR_SSH_KEY_HERE
+  version: HEAD
+
+  home: /var/www/discourse
+
+  # You can connect to any DB you wish to
+  database_yml:
+    production:
+      database: discourse
+      username: discourse
+      socket: /var/run/postgresql
+      password:
+      host:
+      host_names:
+        - YOUR_HOSTNAME_HERE
+
+run:
+  - file:
+     path: /etc/service/unicorn/run
+     chmod: "+x"
+     contents: |
+        #!/bin/bash
+        exec 2>&1
+        $env
+        sv start redis || exit 1
+        sv start postgres || exit 1
+        cd $home
+        exec sudo -E -u discourse bundle exec unicorn -c config/unicorn.conf.rb
+
+  - file:
+     path: /etc/service/sidekiq/run
+     chmod: "+x"
+     contents: |
+        #!/bin/bash
+        exec 2>&1
+        $env
+        sv start redis || exit 1
+        sv start postgres || exit 1
+        cd $home
+        exec sudo -E -u discourse bundle exec sidekiq
+
+  - file:
+     path: /etc/service/sshd/run
+     chmod: "+x"
+     contents: |
+        #!/bin/sh
+        exec 2>&1
+        exec /usr/sbin/sshd -D -e
+
+  - file:
+     path: /etc/service/redis/run
+     chmod: "+x"
+     contents: |
+        #!/bin/sh
+        exec 2>&1
+        exec sudo -u redis /usr/bin/redis-server /etc/redis/redis.conf
+
+  - file:
+     path: /etc/service/nginx/run
+     chmod: "+x"
+     contents: |
+        #!/bin/sh
+        exec 2>&1
+        exec /usr/sbin/nginx
+
+  - file:
+     path: /etc/service/postgres/run
+     chmod: "+x"
+     contents: |
+        #!/bin/sh
+        exec 2>&1
+        exec sudo -u postgres /usr/lib/postgresql/9.2/bin/postmaster -D /etc/postgresql/9.2/main
+
+
+  - exec:
+      cd: $home
+      cmd:
+        - git reset --hard
+        - git clean -f
+        - git pull
+        - git checkout $head
+        - cp config/database.yml.production-sample config/database.yml
+        - cp config/redis.yml.sample config/redis.yml
+        - cp config/environments/production.rb.sample config/environments/production.rb
+        - mkdir -p tmp/pids
+        - mkdir -p tmp/sockets
+        - mkdir -p log
+  - exec:
+      cmd:
+        - mkdir -p /var/run/sshd
+        - mkdir -p /root/.ssh
+        - echo $ssh_key >> /root/.ssh/authorized_keys
+  - exec:
+      cmd:
+        - "cp $home/config/nginx.sample.conf /etc/nginx/conf.d/discourse.conf"
+        - "rm /etc/nginx/sites-enabled/default"
+
+  - replace:
+      filename: /etc/nginx/nginx.conf
+      from: pid /run/nginx.pid;
+      to: daemon off;
+
+  - replace:
+      filename: "/etc/nginx/conf.d/discourse.conf"
+      from: /upstream[^\}]+\}/m
+      to: "upstream discourse {
+        server 127.0.0.1:3000;
+      }"
+
+  - replace:
+      filename: "/etc/nginx/conf.d/discourse.conf"
+      from: /server_name.+$/
+      to: server_name _ ;
+
+  - replace:
+      filename: "/etc/redis/redis.conf"
+      from: "daemonize yes"
+      to: ""
+  - replace:
+      filename: "/etc/redis/redis.conf"
+      from: /^pidfile.*$/
+      to: ""
+
+  - exec:
+      cmd:
+        - mkdir -p /shared/redis_data
+        - chown -R redis /shared/redis_data
+        - chgrp -R redis /shared/redis_data
+
+  - replace:
+      filename: "/etc/redis/redis.conf"
+      from: /^logfile.*$/
+      to: "logfile stdout"
+
+  - replace:
+      filename: "/etc/redis/redis.conf"
+      from: /^dir .*$/
+      to: "dir /shared/redis_data"
+
+  # we can not migrate without redis
+  - exec:
+      background: true
+      cmd: "sudo -u redis /usr/bin/redis-server /etc/redis/redis.conf"
+
+  - merge: $home/config/database.yml $database_yml
+
+  - exec:
+      cmd:
+        - chown -R root /var/lib/postgresql/9.2/main
+        - "[ ! -e /shared/postgres_data ] && cp -r /var/lib/postgresql/9.2/main /shared/postgres_data || exit 0"
+        - chown -R postgres /shared/postgres_data
+        - chgrp -R postgres /shared/postgres_data
+
+  - replace:
+      filename: "/etc/postgresql/9.2/main/postgresql.conf"
+      from: "data_directory = '/var/lib/postgresql/9.2/main'"
+      to: "data_directory = '/shared/postgres_data'"
+
+  - exec:
+      background: true
+      cmd: "sudo -u postgres /usr/lib/postgresql/9.2/bin/postmaster -D /etc/postgresql/9.2/main"
+
+  # give db a few secs to start up
+  - exec: "sleep 5"
+
+  - exec: sudo -u postgres createdb discourse || exit 0
+  - exec:
+      stdin: |
+        create user discourse;
+      cmd: sudo -u postgres psql discourse
+      raise_on_fail: false
+
+  - exec:
+      stdin: |
+        grant all privileges on database discourse to discourse;
+      cmd: sudo -u postgres psql discourse
+      raise_on_fail: false
+
+  - exec: /bin/bash -c 'sudo -u postgres psql discourse <<< "create extension if not exists hstore;"'
+  - exec: /bin/bash -c 'sudo -u postgres psql discourse <<< "create extension if not exists pg_trgm;"'
+
+
+  - exec:
+      cd: $home
+      cmd:
+        - chown -R discourse $home
+        - sudo -E -u discourse bundle install --deployment
+        - sudo -E -u discourse bundle exec rake db:migrate
+        - sudo -E -u discourse bundle exec rake assets:precompile
+