openstreetmap-website/CONFIGURE.md
Harry Wood ff671888f9 Update CONFIGURE instructions for oauth
Update the instructions in CONFIGURE.md on how to set-up the built-in apps. Need to clarify that iD is on OAuth1, which is a little different from the 'web site' (Notes) set-up on OAuth2. Also iD requires more permissions these days.
2022-03-08 13:57:18 +00:00

6.9 KiB

Configuration

After installing this software, you may need to carry out some of these configuration steps, depending on your tasks.

Application configuration

Many settings are available in config/settings.yml. You can customize your installation of The Rails Port by overriding these values using config/settings.local.yml

Populating the database

Your installation comes with no geographic data loaded. You can either create new data using one of the editors (iD, JOSM etc) or by loading an OSM extract.

After installing but before creating any users or data, import an extract with Osmosis and the --write-apidb task.

osmosis --read-pbf greater-london-latest.osm.pbf \
  --write-apidb host="localhost" database="openstreetmap" \
  user="openstreetmap" password="" validateSchemaVersion="no"

Loading an apidb database with Osmosis is about twenty times slower than loading the equivalent data with osm2pgsql into a rendering database. --log-progress may be desirable for status updates.

To be able to edit the data you have loaded, you will need to use this yet-to-be-written script.

Managing Users

If you create a user by signing up to your local website, you need to confirm the user before you can log in, which normally happens by clicking a link sent via email. If don't want to set up your development box to send emails to public email addresses then you can create the user as normal and then confirm it manually through the Rails console:

$ bundle exec rails console
>> user = User.find_by(:display_name => "My New User Name")
=> #[ ... ]
>> user.activate!
=> true
>> quit

Giving Administrator/Moderator Permissions

To give administrator or moderator permissions:

$ bundle exec rails console
>> user = User.find_by(:display_name => "My New User Name")
=> #[ ... ]
>> user.roles.create(:role => "administrator", :granter_id => user.id)
=> #[ ... ]
>> user.roles.create(:role => "moderator", :granter_id => user.id)
=> #[ ... ]
>> user.save!
=> true
>> quit

OAuth Consumer Keys

There are two built-in applications which communicate via the API, and therefore need OAuth consumer keys configured. These are:

  • iD
  • The website itself (for the Notes functionality)

To use the iD editor you need to register it as an OAuth 1 application.

Do the following:

  • Log into your Rails Port instance - e.g. http://localhost:3000
  • Click on your user name to go to your user page
  • Click on "my settings" on the user page
  • Click on "OAuth 1 settings" on the My settings page
  • Click on 'Register your application'.
  • Unless you have set up alternatives, use Name: "Local iD" and Main Application URL: "http://localhost:3000"
  • Check boxes for the following Permissions
    • 'read their user preferences'
    • 'modify the map'
    • 'read their private GPS traces'
    • 'modify notes'
  • Everything else can be left with the default blank values.
  • Click the "Register" button
  • On the next page, copy the "consumer key"
  • Edit config/settings.local.yml in your rails tree
  • Add the "id_key" configuration key and the consumer key as the value
  • Restart your rails server

An example excerpt from settings.local.yml:

# Default editor
default_editor: "id"
# OAuth 1 consumer key for iD
id_key: "8lFmZPsagHV4l3rkAHq0hWY5vV3Ctl3oEFY1aXth"

To allow Notes and changeset discussions to work, follow a similar process, this time registering an OAuth 2 application for the web site:

  • Go to "OAuth 2 applications" on the My settings page.
  • Click on "Register new application".
  • Use Name: "OpenStreetMap Web Site" and Redirect URIs: "http://localhost:3000"
  • Check boxes for the following Permissions
    • 'Modify the map'
    • 'Modify notes'
  • On the next page, copy the "Client Secret" and "Client ID"
  • Edit config/settings.local.yml in your rails tree
  • Add the "oauth_application" configuration with the "Client ID" as the value
  • Add the "oauth_key" configuration with the "Client Secret" as the value
  • Restart your rails server

An example excerpt from settings.local.yml:

# OAuth 2 Client ID for the web site
oauth_application: "SGm8QJ6tmoPXEaUPIZzLUmm1iujltYZVWCp9hvGsqXg"
# OAuth 2 Client Secret for the web site
oauth_key: "eRHPm4GtEnw9ovB1Iw7EcCLGtUb66bXbAAspv3aJxlI"

Troubleshooting

Rails has its own log. To inspect the log, do this:

tail -f log/development.log

If you have more problems, please ask on the rails-dev@openstreetmap.org mailing list or on the #osm-dev IRC Channel

Maintaining your installation

If your installation stops working for some reason:

  • Sometimes gem dependencies change. To update go to your rails_port directory and run ''bundle install'' as root.

  • The OSM database schema is changed periodically and you need to keep up with these improvements. Go to your rails_port directory and run:

bundle exec rake db:migrate

Testing on the osm dev server

For example, after developing a patch for the rails_port, you might want to demonstrate it to others or ask for comments and testing. To do this one can set up an instance of the rails_port on the dev server in ones user directory.

Contributing

For information on contributing changes to the codes, see CONTRIBUTING.md

Production Deployment

If you want to deploy The Rails Port for production use, you'll need to make a few changes.

  • It's not recommended to use rails server in production. Our recommended approach is to use Phusion Passenger. Instructions are available for setting it up with most web servers.
  • Passenger will, by design, use the Production environment and therefore the production database - make sure it contains the appropriate data and user accounts.
  • Your production database will also need the extensions and functions installed - see INSTALL.md
  • The included version of the map call is quite slow and eats a lot of memory. You should consider using CGIMap instead.
  • Make sure you generate the i18n files and precompile the production assets: RAILS_ENV=production rake i18n:js:export assets:precompile
  • Make sure the web server user as well as the rails user can read, write and create directories in tmp/.
  • If you expect to serve a lot of /changes API calls, then you might also want to install the shared library versions of the SQL functions.