diff options
-rw-r--r-- | README | 217 | ||||
-rw-r--r-- | config/environments/production.rb | 15 | ||||
-rw-r--r-- | config/gitorious.sample.yml | 3 |
3 files changed, 232 insertions, 3 deletions
@@ -10,3 +10,220 @@ License ------------- Please see the LICENSE file + +=========================================================================== + +Installation to a production environment -- a partial walkthrough. + +=========================================================================== + +=== Make ready + +You may want to make separate directories, away from everything, to hold the +site code and the git repository respectively. In production, you'll be setting +up a special user account too, but don't worry about that yet. + +For this intro we're going to use, as examples, + +* /www/gitorious -- directory for the website code +* /gitorious/repositories -- root directory for the git repositories +* a MySQL database on localhost at port 3306 with a _mysql_ user 'gitorious' +* eventually, a system account named 'gitslave' + +All of these can be adjusted to suit: specifically, dirs within your home +directory are fine, and (though MySQL has the best development coverage), the +website code should be free of mysql-isms/quirks. + +=== Dependencies + +First, install each of these Libraries/applications: + +* Git (http://git-scm.org) +* Oniguruma C library (http://www.geocities.jp/kosako3/oniguruma/) +* Sphinx (http://sphinxsearch.com/) +* MySQL (or whatever) +* ImageMagick (need version >= 6.3.0) +* libyadis-ruby +* aspell (optional) + +Next, get the gitorious code itself: + + # mkdir /www/gitorious + # cd /www/gitorious + # git clone git://gitorious.org/gitorious/repositories/mainline.git gitorious + +Install each of these Ruby libraries/bindings/gems: + +* rails +* mysql +* BlueCloth (http://rubyforge.org/projects/bluecloth/) +* mime-types (http://rubyforge.org/projects/mime-types) +* oniguruma (http://rubyforge.org/projects/oniguruma) +* textpow (http://rubyforge.org/projects/textpow) +* chronic (http://rubyforge.org/projects/chronic) +* rmagick (http://rubyforge.org/projects/rmagick) +* geoip +* ultrasphinx +* rmagick (in ubuntu I had to sudo apt-get install librmagick-ruby librmagick-ruby-doc) +* ruby-openid + + # gem install rails mysql BlueCloth mime-types oniguruma textpow \ + chronic rmagick geoip ultrasphinx ruby-openid + +=== Database + +First we need a database. Use the mysql command line app, or phpMyAdmin, or +whatever to create first a user. Referring to +http://www-css.fnal.gov/dsg/external/freeware/mysqlAdmin.html: + + # mysql -p -u root -h localhost + CREATE USER 'git'@'localhost' IDENTIFIED BY 'awesome_password'; + GRANT ALL PRIVILEGES ON `git\_%` . * TO 'git'@'localhost'; + FLUSH PRIVILEGES; + CREATE DATABASE `git_dev` DEFAULT CHARACTER SET utf8 COLLATE utf8_bin; + CREATE DATABASE `git_test` DEFAULT CHARACTER SET utf8 COLLATE utf8_bin; + CREATE DATABASE `git_prod` DEFAULT CHARACTER SET utf8 COLLATE utf8_bin; + +If you haven't set a password for the root user, now's a good time for that, too. + +--- + +Edit database.yml to reflect your local database connection. This is a standard +Ruby on Rails config file, not specific to gitorious -- if you have questions +here they're answered on the web, or consult the rails IRC channel. (One hint: +NO TABS AT ALL in a .yml file.) Our example: + +development: + adapter: mysql + username: git + password: awesome_password + host: localhost + database: git_dev + +# The 'test' database will be erased and re-generated from your development +# database when you run 'rake'. Must be different than the others!! +test: + adapter: mysql + username: git + password: awesome_password + host: localhost + database: git_test + +production: + adapter: mysql + username: git + password: awesome_password + host: localhost + database: git_prod + +--- + +Use rake to create the databases, migrate each, and run the tests: + +rake db:create:all +for RAILS_ENV in development test production ; do + rake db:migrate +done +rake test + +FTW! + +=== Gitorious config + +* Copy the config/gitorious.sample.yml file to config/gitorious.yml + +* Create a directory to hold project files + + # sudo mkdir /gitorious/repositories + +* Make a long, complicated string. You can run "apg -m 64", or if you lack 'apg' + `dd if=/dev/random count=1 | md5sum` , + and put that on the 'cookie_secret' line (replacing the 'ssssht'). + +* Here's an example gitorious.yml (omitting comments) for local testing: + + cookie_secret: 26ee61bc4d6aa9870ab48d118a55e6ebcd11011dd6b61aa33536c024853c48d4e7c3d672aa57859 + repository_base_path: "/gitorious/repositories" + extra_html_head_data: + system_message: + gitorious_client_port: 3000 + gitorious_client_host: localhost + gitorious_host: localhost # gitorious.org + gitorious_user: gitslave + + +=== Get Sphinx going +for RAILS_ENV in development test production ; do + RAILS_ENV=$RAILS_ENV rake ultrasphinx:configure + RAILS_ENV=$RAILS_ENV rake ultrasphinx:index +done +RAILS_ENV=production rake ultrasphinx:daemon:start & + +=== Tweak environment + +* In environment.rb, uncomment config.action_controller.session -- choose a new + session key string and generate your own secret key using something like + (uptime; date) |sha1sum + +* If you haven't set up your mailer, production mode will fail on login. Set + config.action_mailer.delivery_method = :test + for immediate gratification. + + +=== Run the server + +From the gitorious directory, + +# ./script/server + +# RAILS_ENV=production ./script/server + +It should start up on port 3000, listening only to local connections. Ue "ssh +-L 3000:127.0.0.1:3000 -N you@yourbox.com" for testing. + +You can now visit the site, sign up with your OpenID, put in your ssh key, and +poke around! Once you get bored, make a test repository, wonder why nothing is +there yet, and then.... + +=== Hand-start the task_performer + +Key adoption, repo generation and other tasks are handled by the +'task_performer' script, which must be run periodically or on demand. +Run the script/task_performer and let it create the repository for you. + + # ./script/task_performer + + +4. Get your git on! + +Push something to that repository (cd to a git repository with commits and do +"git push path/to/the/bare/repository/you/just/created master"). The actual +(bare) repos live in repository_base_path/#{project.slug}/#{repository.name}.git +Ex: the fubar project's mainline fork sits in a directory called + + /gitorious/repositories/fubar/mainline/fubar.git + +This will be a 'bare' git repo -- you won't see files in it. + +=== Button up + +* In production, you'll want to have a limited-privileges user to run the git + processes, just as you do for your webserver + +* Make the tree invisible to any other non-root user; make the tree read-only by + that user; but grant write access to the /tmp and /public/cache directories. + +* Consider setting up the standard (lighttpd|nginx|apache) frontend <=> mongrel + backend if you see traffic. + + +=== More Help + +* Consult the mailinglist (http://groups.google.com/group/gitorious) or drop in + by #gitorious on irc.freenode.net if you have questions. + +=== Gotchas + +Gitorious will add a 'forced command' to your ~/.ssh/authorized_keys file for +the target host: if you start finding ssh oddities suspect this first. Don't +log out until you've ensured you can still log in remotely. diff --git a/config/environments/production.rb b/config/environments/production.rb index 239bf63..8468c37 100644 --- a/config/environments/production.rb +++ b/config/environments/production.rb @@ -16,20 +16,29 @@ config.action_controller.consider_all_requests_local = false config.action_controller.perform_caching = true cache_dir = File.expand_path(File.join(RAILS_ROOT, 'public', 'cache')) + +# +# Make sure these are writeable by your webserver daemon user +# config.action_controller.page_cache_directory = cache_dir config.action_controller.fragment_cache_store = :file_store, File.join(cache_dir, "fragments") # Enable serving of images, stylesheets, and javascripts from an asset server # config.action_controller.asset_host = "http://assets.example.com" -# ActionMailer::Base.default_url_options[:protocol] = 'https' + +# +# If you don't have outgoing email set up, uncomment the following two lines: +# config.action_mailer.delivery_method = :test +# config.action_mailer.raise_delivery_errors = false + ActionMailer::Base.default_url_options[:host] = YAML.load_file(File.join(RAILS_ROOT, "config/gitorious.yml"))["gitorious_host"] +# ActionMailer::Base.default_url_options[:protocol] = 'https' # Disable delivery errors, bad email addresses will be ignored -# config.action_mailer.raise_delivery_errors = false ExceptionNotifier.exception_recipients = YAML.load_file(File.join(RAILS_ROOT, "config/gitorious.yml"))["exception_notification_emails"] ExceptionNotifier.class_eval do remove_method :template_root ExceptionNotifier.template_root = "#{RAILS_ROOT}/vendor/plugins/exception_notification/lib/../views" -end
\ No newline at end of file +end diff --git a/config/gitorious.sample.yml b/config/gitorious.sample.yml index ce908a0..5b40ce1 100644 --- a/config/gitorious.sample.yml +++ b/config/gitorious.sample.yml @@ -22,3 +22,6 @@ gitorious_host: gitorious.org # User which is running git daemon gitorious_user: git + +# Email spam on server errors to: +exception_notification_emails: |