Replace outdated install recipes
[gitorious:mainline.git] / doc / setup-dev-env-ubuntu.sh
1 #!/bin/sh
2
3 # This script will install all the necessary packages and get
4 # Gitorious running on your local machine for development. It can be
5 # run as is, or used as a step-by-step guide. It is STRONGLY
6 # RECOMMENDED to read through the script before running it. If you're
7 # already using Ruby, Sphinx (search daemon), MySQL, nginx and others,
8 # it may do things you don't want.
9 #
10 # IMPORTANT: This script/guide is NOT recommended for production
11 # setups. For production setups, please refer to
12 # http://getgitorious.com
13 #
14 # This script has been tested on Ubuntu Server 12.10, but should work
15 # (out of the box, or with minor adjustments) on many systems that use
16 # apt/debs for package management. If you're unsure, read through it
17 # before running it, and/or execute individual sections manually
18 # instead.
19 #
20 # Note that this script installs Ruby from yum. This gives you 1.8.7
21 # on most systems. While supported, this version of Ruby may produce
22 # more warnings and the occasional oddity than normal. If you already
23 # have an existing ruby installation, or prefer tools like rbenv or
24 # rvm, feel free to use them instead. If doing do, modify this script
25 # accordingly.
26
27 GITORIOUS_ROOT=~/projects/gitorious
28 GITORIOUS_USER=`whoami`
29
30 # If you've obtained this script, then this part has probably already
31 # been done.
32 #sudo apt-get install -y git-core
33 #mkdir -p $GITORIOUS_ROOT
34 #git clone git://gitorious.org/gitorious/mainline.git gitorious
35
36 # Gitorious uses submodules for non-ruby dependencies, such as
37 # front-end code.
38 git submodule update --recursive --init
39
40 # Create the required directoryes
41 cd $GITORIOUS_ROOT
42 mkdir repositories
43 mkdir tarball-cache
44 mkdir tarball-work
45 mkdir -p gitorious/tmp/cache
46 cd gitorious
47
48 # Some system packages are required in order to build certain Ruby
49 # dependencies that uses system libraries.
50 sudo apt-get install -y make gcc g++ mysql-client mysql-server libmysqlclient-dev libxml2-dev libxslt1-dev libonig2
51 sudo service mysqld start
52
53 # Install Ruby. Skip if you've already done this.
54 sudo apt-get install -y ruby ruby-dev rubygems
55
56 # RubyGems must be up to date in order for Gitorious to work well
57 sudo gem update --system
58
59 # Download, configure and compile Sphinx, the search engine used by
60 # Gitorious.
61 cd /tmp
62 curl -o sphinx-2.0.6.tar.gz http://sphinxsearch.com/files/sphinx-2.0.6-release.tar.gz
63 tar xvzf sphinx-2.0.6.tar.gz
64 cd sphinx-2.0.6-release
65 ./configure
66 sudo make install
67
68 # Bundler is the tool used to manage Gitorious' Ruby dependencies.
69 # http://gembundler.com/
70 sudo gem install bundler
71 cd $GITORIOUS_ROOT/gitorious
72 sudo bundle install
73
74 # With all the dependencies installed, let's configure Gitorious. Feel
75 # free to change username and password for the database etc.
76 echo "create database gitorious;
77 create database gitorious_test;
78 grant all privileges on gitorious.* to gitorious@localhost identified by 'yourpassword';
79 grant all privileges on gitorious_test.* to gitorious@localhost;" | mysql -u root
80
81 # In a developer setup, it makes sense to use the same database for
82 # the development and production environments. This way you only need
83 # one set of test-data, and can use the two environments exclusively
84 # to test that the application behaves correctly with the different
85 # settings.
86 echo "test:
87   adapter: mysql2
88   database: gitorious_test
89   username: gitorious
90   password: yourpassword
91   host: localhost
92   encoding: utf8
93
94 development:
95   adapter: mysql2
96   database: gitorious
97   username: gitorious
98   password: yourpassword
99   host: localhost
100   encoding: utf8
101
102 production:
103   adapter: mysql2
104   database: gitorious
105   username: gitorious
106   password: yourpassword
107   host: localhost
108   encoding: utf8" > config/database.yml
109
110 # Take note: This uses your user as the Gitorious user. That means
111 # that Gitorious will take ownership (i.e.: destructively write to)
112 # your ~/.ssh/authorized_keys. In many cases, this is not a worry. If
113 # you happen to SSH into your box however, this should be done with
114 # care. When Gitorious has done its thing, you can no longer SSH into
115 # this box with your current user. Two solutions if this worries you:
116 #
117 # 1) Set up a different, dedicated git user. This is a bit of work,
118 #    and requires gentle handling of file permissions and ownership.
119 #    This is the way to go in production, but for development, it is
120 #    a bit of a pain.
121 # 2) Manually move the authorized_keys file in/out whenever you need
122 #    to work on Gitorious.
123 echo "site_name: My Gitorious
124 user: $GITORIOUS_USER
125 scheme: http
126 host: gitorious.local
127 port: 3000
128 frontend_server: nginx
129 client_port: 3000
130 repository_base_path: /home/$GITORIOUS_USER/projects/gitorious/repositories
131 archive_cache_dir: /home/$GITORIOUS_USER/projects/gitorious/tarball-cache
132 archive_work_dir: /home/$GITORIOUS_USER/projects/gitorious/tarball-work
133
134 # Development environment overrides
135 development:
136   host: localhost
137   messaging_adapter: sync
138   enable_record_throttling: false
139   merge_request_diff_timeout: 30
140 " > config/gitorious.yml
141
142 # Finally, create a user for yourself. Be sure to answer yes when
143 # asked if the user should be an admin. If you want to (manually) test
144 # certain features for non-admins, just come back and create more
145 # users later.
146 bin/create-user
147
148 # The gitorious script is used when you push/pull over SSH. It needs
149 # to be on path.
150 sudo ln -s $GITORIOUS_ROOT/gitorious/bin/gitorious /usr/local/bin/gitorious
151
152 echo "Now you should be able to run the application in development mode:"
153 echo "rails server # or just `rails s`"
154
155 # To run in production, you must install Redis for background
156 # processing.
157 curl -o redis-2.6.4.tar.gz http://redis.googlecode.com/files/redis-2.6.4.tar.gz
158 tar xvzf redis-2.6.4.tar.gz
159 cd redis-2.6.4
160 make
161 sudo make install
162
163 echo "Start a Redis instance by running redis-server"
164 echo "To install Redis as a service, refer to"
165 echo "http://www.saltwebsites.com/2012/install-redis-245-service-centos-6"
166
167 cd $GITORIOUS_ROOT/gitorious
168 echo "With the Redis server running, start a Resque worker"
169 echo "QUEUE=* bundle exec rake resque:work"
170
171 echo "With the background processes in order, start the server in production:"
172 echo "rails server -e production"
173
174 # To pull repositories over the git protocol, simply start the git daemon:
175 sudo apt-get install git-daemon-run
176 git daemon --listen=0.0.0.0 --port=9418 --export-all --base-path=$GITORIOUS_ROOT/repositories --verbose --reuseaddr $GITORIOUS_ROOT/repositories
177
178 # To do Git over HTTP, you need a frontend server, as Gitorious uses
179 # Sendfile to avoid locking up a Rails process while serving
180 # (potentially lots of) data to the Git client.
181
182 echo "WARNING! Don't continue if you already have nginx configured to
183 do things for you. Continue by manually reading the instructions and
184 apply as suitable."
185
186 sudo su
187 echo "[nginx]
188 name=nginx repo
189 baseurl=http://nginx.org/packages/centos/6/x86_64/
190 gpgcheck=0
191 enabled=1" > /etc/yum.repos.d/nginx.repo
192
193 apt-get install nginx
194 sed -i "s/user  nginx/user $GITORIOUS_USER/" /etc/nginx/nginx.conf
195
196 echo "upstream rails {
197   server localhost:3000;
198 }
199
200 server {
201   root $GITORIOUS_ROOT/gitorious/public;
202   try_files \$uri/index.html @app;
203
204   location @app {
205     proxy_pass http://rails;
206     proxy_set_header Host \$http_host;
207     proxy_redirect off;
208   }
209
210   listen 80;
211
212   # Handle tarball downloads
213   # Gitorious will send a X-Accel-Redirect header like
214   # X-Accel-Redirect: /tarballs/project-repo-sha.tar.gz
215   # Which should be streamed from $GITORIOUS_ROOT/tarball-cache/project-repo-sha.tar.gz
216   location /tarballs/ {
217     internal;
218     alias $GITORIOUS_ROOT/tarballs/;
219   }
220   # Handle git-over-http requests
221   # Gitorious will send a X-Accel-Redirect header like
222   # X-Accel-Redirect: /git-http/project/repository.git/info/refs
223   # Which should map to $GITORIOUS_ROOT/repositories/project/repository.git/info/refs
224   location /git-http/ {
225     internal;
226     alias $GITORIOUS_ROOT/repositories/;
227   }
228 }" > /etc/nginx/conf.d/000-gitorious
229
230 service nginx restart