diff --git a/docs/INSTALL-ubuntu.md b/docs/INSTALL-ubuntu.md new file mode 100644 index 00000000000..7d3d2a2c42e --- /dev/null +++ b/docs/INSTALL-ubuntu.md @@ -0,0 +1,222 @@ +# Discourse Install Guide on Ubuntu + +## Install Ubuntu 12.04 with the package groups: + +* Basic ubuntu server +* OpenSSH server +* Mail server +* PostgreSQL database (9.1+) + +### Configure the mail server: + +In our example setup, we're going to configure as a 'Satellite system', forwarding all mail to our egress servers for delivery. You'll probably want to do that unless you're handling mail on the same machine as the Discourse software. + +Install necessary packages: + + # Run these commands as your normal login (e.g. "michael") + sudo apt-get -y install build-essential libssl-dev libyaml-dev git libtool libxslt-dev libxml2-dev redis-server libpq-dev gawk curl pngcrush + +## Install nginx + +At Discourse, we recommend the latest version of nginx. To install on Ubuntu: + + # Run these commands as your normal login (e.g. "michael") + # Remove any existing versions of nginx + sudo apt-get remove '^nginx.*$' + + # Add nginx repo to sources.list + cat <<'EOF' | sudo tee -a /etc/apt/sources.list + + deb http://nginx.org/packages/ubuntu/ precise nginx + deb-src http://nginx.org/packages/ubuntu/ precise nginx + EOF + + # Add nginx key + curl http://nginx.org/keys/nginx_signing.key | sudo apt-key add - + + # install nginx + sudo apt-get update && sudo apt-get -y install nginx + +## Install rvm and ruby environment + +### Systemwide installation + +Taken from http://rvm.io/, the commands below installs RVM and users in the 'rvm' group have access to modify state: + + # Run these commands as your normal login (e.g. "michael") + \curl -s -S -L https://get.rvm.io | sudo bash -s stable + sudo adduser $USER rvm + newgrp rvm + . /etc/profile.d/rvm.sh + rvm requirements + + # Build and install ruby + rvm install 2.0.0 + gem install bundler + + +## Discourse setup + +Create discourse user: + + # Run these commands as your normal login (e.g. "michael") + sudo adduser --shell /bin/bash discourse + sudo adduser discourse rvm + +Give postgres DB rights to the `discourse` user: + + # Run these commands as your normal login (e.g. "michael") + sudo -u postgres createuser -s discourse + sudo -u postgres psql -c "alter user discourse password 'todayisagooddaytovi';" + +Change to the 'discourse' user: + + # Run this command as your normal login (e.g. "michael"), further commands should be run as 'discourse' + sudo su - discourse + + # Pull down the latest release + git clone git://github.com/discourse/discourse.git + git checkout latest-release + + # Install necessary gems + cd discourse + bundle install --deployment + +_If you have errors building the native extensions, ensure you have sufficient free system memory. 1GB with no swap won't cut it._ + +Configure discourse: + + # Run these commands as the discourse user + cd ~/discourse/config + for i in {database,redis}.yml discourse.pill; do cp $i.sample $i; done + cp environments/production.sample.rb environments/production.rb + +Edit discourse/config/database.yml + +- remove profile and development +- leave in production and perhaps test +- change production db name to: `discourse_prod` +- Change `host_names` to the name you'll use to access the discourse site + +Edit discourse/config/redis.yml + +- no changes if this is the only application using redis, but have a look + +Edit discourse/config/discourse.pill + +- change application name from 'your_app' to however you want to distinguish this ('discourse') +- Add option to Bluepill.application: `":base_dir => ENV["HOME"] + '/.bluepill'"` +- Should end up looking something like: `Bluepill.application("discourse", :base_dir => ENV["HOME"] + '/.bluepill') do |app|` +- comment out debug instance (from `app.process("thin-debug")` through to nearest `end`) +- search for "host to run on" and change to current hostname +- note: clockwork should run on only one host + +Edit discourse/config/initializers/secret_token.rb +- uncomment secret_token line +- replace SET_SECRET_HERE with secret output from 'rake secret' command in discourse directory +- delete the lines below as per instructions in the file + +Edit discourse/config/environments/production.rb +- check settings, modify smtp settings if necessary +- See http://meta.discourse.org/t/all-of-my-internal-users-show-as-coming-from-127-0-0-1/6607 if this will serve "internal" users + +Initialize the database: + + # Run these commands as the discourse user + # The database name here should match the production one in database.yml + createdb discourse_prod + RUBY_GC_MALLOC_LIMIT=900000000 RAILS_ENV=production bundle exec rake db:migrate + RUBY_GC_MALLOC_LIMIT=900000000 RAILS_ENV=production bundle exec rake assets:precompile + + # TEMPORARY BUG WORKAROUND: + mkdir -p ~/discourse/tmp/sockets + +## nginx setup + + # Run these commands as your normal login (e.g. "michael") + sudo cp ~discourse/discourse/config/nginx.sample.conf /etc/nginx/conf.d/discourse.conf + +Edit /etc/nginx/conf.d/discourse.conf + +- change socket paths to: "unix:/home/discourse/discourse/tmp/sockets/thin.0.sock;" +- edit `server_name`. Example: "server_name cain.discourse.org test.cain.discourse.org;" +- modify root location to match installed location: "root /home/discourse/discourse/public;" + +## Bluepill setup + +Configure bluepill: + + # Run these commands as the discourse user + gem install bluepill + echo 'alias bluepill="bluepill --no-privileged -c ~/.bluepill"' >> ~/.bash_aliases + rvm wrapper $(rvm current) bootup bluepill + rvm wrapper $(rvm current) bootup bundle + +Start Discourse: + + # Run these commands as the discourse user + RUBY_GC_MALLOC_LIMIT=900000000 RAILS_ROOT=~/discourse RAILS_ENV=production NUM_WEBS=4 bluepill --no-privileged -c ~/.bluepill load ~/discourse/config/discourse.pill + +Add the bluepill startup to crontab. + + # Run these commands as the discourse user + crontab -e + +Add the following line: + + @reboot RUBY_GC_MALLOC_LIMIT=900000000 RAILS_ROOT=~/discourse RAILS_ENV=production NUM_WEBS=4 bluepill --no-privileged -c ~/.bluepill load ~/discourse/config/discourse.pill + +Congratulations! You've got Discourse installed and running! + +