# 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