--- layout: default navsection: installguide title: Install the API server navorder: 1 --- {% include alert-stub.html %} # API server setup ## Prerequisites 1. A GNU/linux (virtual) machine 2. A domain name for your api server ## Download the source tree Please follow the instructions on the [Download page](https://arvados.org/projects/arvados/wiki/Download) in the wiki. ## Configure the API server First configure the database: cp config/database.yml.sample config/database.yml Edit database.yml to your liking and make sure the database and db user exist. Then set up the database: RAILS_ENV=production rake db:setup Then set up omniauth: cp config/initializers/omniauth.rb.example config/initializers/omniauth.rb Edit config/initializers/omniauth.rb. Choose an *APP_SECRET* and *APP_ID*. Also set *CUSTOM_PROVIDER_URL*. Make sure your Omniauth provider knows about your *APP_ID* and *APP_SECRET* combination. You also need to update config/initializers/secret_token.rb. Generate a new secret with rake secret and put it in config/initializers/secret_token.rb: Server::Application.config.secret_token = 'your-new-secret-here' Finally, edit your environments/production.rb file. First, you want to make sure that config.uuid_prefix is set to a unique 5-digit hex string. You can replace the 'cfi-aws-0' string with a string of your choice to make that happen. The *config.uuid_prefix* string is a unique identifier for your API server. It also serves as the first part of the hostname for your API server, for instance {{ site.arvados_api_host }} You should use your own domain instead of arvadosapi.com Second, unless you are running on AWS, you will want to change the definition of config.compute_node_nameservers If you know your nameservers and they are fixed, you can hardcode them, and make sure to remove the code that tries to look them up from the AWS metadata: config.compute_node_nameservers = ['1.2.3.4','2.3.4.5','3.4.5.6'] #require 'net/http' #config.compute_node_nameservers = ['local', 'public'].collect do |iface| # Net::HTTP.get(URI("http://169.254.169.254/latest/meta-data/#{iface}-ipv4")).match(/^[\d\.]+$/)[0] #end << '172.16.0.23' ## Apache/Passenger Set up Apache and Passenger. Point them to the services/api directory in the source tree. To enable streaming so users can monitor crunch jobs in real time, add to your Apache configuration: PassengerBufferResponse off ## Add an admin user Point browser to the API endpoint. Log in with a google account. In the rails console: Thread.current[:user] = User.find(1) Thread.current[:user].is_admin = true User.find(1).update_attributes is_admin: true, is_active: true User.find(1).is_admin This should be => true ## Create a token In rails console a = ApiClient.new(owner:1); a.save! x = ApiClientAuthorization.new(api_client_id:a.id, user_id:1); x.save; x.api_token