From ceb02a6bc3629e4263d5654d746fd63432dce554 Mon Sep 17 00:00:00 2001 From: spwoodcock Date: Thu, 9 Nov 2023 07:30:49 +0000 Subject: [PATCH] docs: update latest docs with install / prod details --- INSTALL.md | 263 +++++++++++++++++++++-------------------- docs/dev/Backend.md | 2 +- docs/dev/Production.md | 14 ++- 3 files changed, 150 insertions(+), 129 deletions(-) diff --git a/INSTALL.md b/INSTALL.md index ff8ce88446..b8c18ebbfd 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -5,41 +5,39 @@ Use the provided bash script: ```bash -curl -fsSL https://get.fmtm.dev | bash +# Download the script +curl -L https://get.fmtm.dev -o install.sh +# OR (alternative URL) +curl -L https://fmtm.hotosm.org/install.sh -# OR - -curl -fsSL https://fmtm.hotosm.org/install.sh | bash +# Run the script +bash install.sh # Then follow the prompts ``` +> Note: it is best to run this script as a user other than root. +> However, if you run as root, a user svcfmtm will be created for you. + ## Manual Way -> NOTE: This is an installation guide to quickly get the fmtm app up and running. -> For a detailed guide on how to install the fmtm app using different -> methods and contributing, checkout the -> [dev docs](https://hotosm.github.io/fmtm/dev/Setup/) +If more details are required, check out the +[dev docs](https://hotosm.github.io/fmtm/dev/Setup/) -# Table of Contents +### Table of Contents 1. [Software Requirements](#software-requirements) -2. [Setting up the Backend](#setting-up-the-backend) +2. [Setting up FMTM](#setting-up-fmtm) - [Fork and Clone the FMTM repository](#fork-and-clone-the-fmtm-repository) - - [Development: Setup Your Local Environment](#development-setup-your-local-environment) + - [Development: Setup Your Local Environment](#setup-your-local-environment) - [Start the API with Docker](#start-the-api-with-docker) - - [Setup ODK Central User](#setup-odk-central-user) - - [Import Test Data](#import-test-data) - - [Check Authentication](#check-authentication) - -3. [Setting up the Frontend](#setting-up-the-frontend) + - [Setup ODK Central User (Optional)](#setup-odk-central-user-optional) + - [Import Test Data (Optional)](#import-test-data-optional) + - [Check Authentication (Optional)](#check-authentication-optional) - - [Fork and Clone the FMTM repository](#fork-and-clone-the-fmtm-repository-1) - - [Start the Frontends with Docker](#start-the-frontends-with-docker) - -# 1. Software Requirements +## Software Requirements Before you can install and use this application, you will need to have the following software @@ -48,181 +46,192 @@ installed and configured on your system: - [Git](https://git-scm.com/) - [Docker](https://docs.docker.com/) -To install Git, please follow the instructions on the official Git website: - - https://git-scm.com/downloads - -To install Docker, please follow the instructions on the official Docker website: +To install Git, please follow the instructions on the +[official Git website](https://git-scm.com/downloads) - https://docs.docker.com/engine/install/ +To install Docker, please follow the instructions on the +[official Docker website](https://docs.docker.com/engine/install/) -# 2. Setting up the Backend +## Setting up FMTM -## Fork and Clone the FMTM repository +### Fork and Clone the FMTM repository -### 1. Fork the repository +#### 1. Fork the repository Forking creates a copy of the repository in your own GitHub account. -Go to the [Field Mapping Tasking Manager repository](https://github.com/hotosm/fmtm) and click the "Fork" button in the top right corner of the page. +Go to the [Field Mapping Tasking Manager repository](https://github.com/hotosm/fmtm) +and click the "Fork" button in the top right corner of the page. -### 2. Clone the forked repository +#### 2. Clone the forked repository Clone the forked repository to your local machine using the following command: -`git clone https://github.com//fmtm.git` +```bash +git clone https://github.com//fmtm.git + +# If you wish to deploy for production, change to the main branch +git checkout main +``` Make sure to replace `` with your GitHub username. -## Development: Setup Your Local Environment +### Setup Your Local Environment These steps are essential to run and test your code! -### 1. Setup OSM OAUTH 2.0 +#### 1. Setup OSM OAUTH 2.0 -The FMTM uses OAUTH2 with OSM to authenticate users. To properly configure your FMTM project, you will need to create keys for OSM. +The FMTM uses OAUTH2 with OSM to authenticate users. -1. [Login to OSM](https://www.openstreetmap.org/login) (_If you do not have an account yet, click the signup button at the top navigation bar to create one_). Click the drop down arrow on the extreme right of the navigation bar and select My Settings. +To properly configure your FMTM project, you will need to create keys for OSM. -2. Register your FMTM instance to OAuth 2 applications. Put your login redirect url as `http://127.0.0.1:7051/osmauth/`, For Production replace the URL as production API Url +1. [Login to OSM](https://www.openstreetmap.org/login) + (_If you do not have an account yet, click the signup + button at the top navigation bar to create one_). + Click the drop down arrow on the top right of the navigation bar + and select My Settings. -> Note: `127.0.0.1` is required instead of `localhost` due to OSM restrictions. +2. Register your FMTM instance to OAuth 2 applications. + Put your login redirect url as `http://127.0.0.1:7051/osmauth/` if running locally, + or for production replace with https://{YOUR_DOMAIN}/osmauth/ -image + > Note: `127.0.0.1` is required for debugging instead of `localhost` + > due to OSM restrictions. -3. Right now _read user preferences permission_ is enough later on fmtm may need permission to modify the map option which should be updated on OSM_SCOPE variable on .env , Keep read_prefs for now. + ![image](https://user-images.githubusercontent.com/36752999/216319298-1444a62f-ba6b-4439-bb4f-2075fdf03291.png) -4. Now Copy your Client ID and Client Secret. Put them in the `OSM_CLIENT_ID` and `OSM_CLIENT_SECRET` of your `.env` file +3. Only the _read user preferences permission_ is required as of now. -### 2. Create an `.env` File +4. Now save your Client ID and Client Secret for the next step. -Environmental variables are used throughout this project. To get started, create `.env` file in the top level dir, a sample is located at `.env.example` +#### 2. Create an `.env` File - cp .env.example .env +Environmental variables are used throughout this project. +To get started, create `.env` file in the top level dir, +a sample is located at `.env.example`. -Your env should look like this: +This can be created interactively by running: -```dotenv -### ODK Central ### -ODK_CENTRAL_URL=https://proxy -ODK_CENTRAL_USER=`` -ODK_CENTRAL_PASSWD=`` +```bash +bash scripts/gen-env.sh +``` -### FMTM ### -# DEBUG=True -# LOG_LEVEL=DEBUG -FMTM_DOMAIN=fmtm.localhost +### Start the API with Docker -### OSM ### -OSM_CLIENT_ID=`` -OSM_CLIENT_SECRET=`` -OSM_URL=https://www.openstreetmap.org -OSM_SCOPE=read_prefs -OSM_LOGIN_REDIRECT_URI=http://127.0.0.1:7051/osmauth/ -OSM_SECRET_KEY= +This is the easiest way to get started with FMTM. -### S3 File Storage ### -S3_ENDPOINT="http://s3:9000" -S3_ACCESS_KEY=`` -S3_SECRET_KEY=`` +Docker runs each service inside **containers**, fully isolated from your +host operating system. -### Database (optional) ### -CENTRAL_DB_HOST=central-db -CENTRAL_DB_USER=odk -CENTRAL_DB_PASSWORD=odk -CENTRAL_DB_NAME=odk +##### Prerequisite -FMTM_DB_HOST=fmtm-db -FMTM_DB_USER=fmtm -FMTM_DB_PASSWORD=fmtm -FMTM_DB_NAME=fmtm -``` +You will need to [Install Docker](https://docs.docker.com/engine/install/) +and ensure that it is running on your local machine. -## Start the API with Docker +Then from the command line, navigate to the top level directory of the FMTM project. -The easiest way to get up and running is by using the FMTM Docker deployment. Docker creates a virtual environment, isolated from your computer's environment, installs all necessary dependencies, and creates a container for the database, the api, and the frontend. These containers talk to each other via the URLs defined in the docker-compose file and your env file. +##### Select the install type -### Starting the Containers +Determine the what type of FMTM install you would like: -1. You will need to [Install Docker](https://docs.docker.com/engine/install/) and ensure that it is running on your local machine. -2. From the command line, navigate to the top level directory of the FMTM project. -3. From the command line run: `docker compose pull`. - This will pull the latest container builds from **main** branch. -4. Once everything is pulled, from the command line run: `docker compose up -d api` -5. If everything goes well you should now be able to **navigate to the project in your browser:** `http://api.fmtm.localhost:7050/docs` +```text +main - the latest production +staging - the latest staging +development - the latest development (warning: may be unstable) +local test - used during development, or to start a test version +``` -> Note: If those link doesn't work, check the logs with `docker logs fmtm_api`. +The corresponding docker-compose files are: -## Setup ODK Central User +```text +main - docker-compose.main.yml +staging - docker-compose.staging.yml +development - docker-compose.development.yml +local test - docker-compose.yml +``` -The FMTM uses ODK Central to store ODK data. +Set your selection to a terminal variable to make the next step easier: -- By default, the docker setup includes a Central server. -- The credentials should have been provided in your `.env` file to automatically create a user. -- To create a user manually: +```bash +export GIT_BRANCH={your_selection} + +# E.g. +export GIT_BRANCH=development +``` + +##### Pull the Images ```bash -docker compose exec central odk-cmd --email YOUREMAIL@ADDRESSHERE.com user-create -docker-compose exec central odk-cmd --email YOUREMAIL@ADDRESSHERE.com user-promote +docker compose -f "docker-compose.${GIT_BRANCH}.yml" pull ``` -> Note: Alternatively, you may use an external Central server and user. +> This will pull the latest containers for the branch you selected. -## Import Test Data +##### Build the Frontend -Some test data is available to get started quickly. +Before we can run, you need to build your version of the frontend. -- Navigate to the `import-test-data` endpoint in the API docs page: - -- Click `Try it out`, then `execute`. +This is because the frontend contains variable specific to your deployment. -## Check Authentication +```bash +docker compose -f "docker-compose.${GIT_BRANCH}.yml" build ui +``` -Once you have deployed, you will need to check that you can properly authenticate. +##### Start the Containers -1. Navigate to `http://api.fmtm.localhost/docs` +```bash +docker compose -f "docker-compose.${GIT_BRANCH}.yml" up -d +``` - Three endpoints are responsible for oauth - image +You should see the containers start up in order. -2. Hit `/auth/osm_login/` : This will give you the Login URL where you can supply your osm username/password +Once complete, you should now be able to **navigate to the project in your browser:** - Response should be like this : +```text +https://{YOUR_DOMAIN} - {"login_url": "https://www.openstreetmap.org/oauth2/authorize/?response_type=code&client_id=xxxx"} +# For the local test setup, this will be +http://fmtm.localhost:7050 +``` - Now Copy your login_url and hit it in new tab, and you will be redirected to OSM for your LOGIN. Give FMTM the necessary permission +> Note: If those link doesn't work, check the logs with `docker logs fmtm-api`. +> Note: Use `docker ps` to view all container names. - After successful login, you will get your `access_token` for FMTM Copy it and now you can use it for rest of the endpoints that need authorizations +### Setup ODK Central User (Optional) -3. Check your access token: Hit `/auth/me/` and pass your `access_token` You should get your osm id, username and profile picture id +The FMTM uses ODK Central to store ODK data. -That's it, you have successfully set up the backend!! +- By default, the docker setup includes a Central server. +- The credentials should have been provided in your `.env` + file to automatically create a user. +- To create a user manually: -# 3. Setting up the Frontend +```bash +docker compose exec central odk-cmd --email YOUREMAIL@ADDRESSHERE.com user-create +docker-compose exec central odk-cmd --email YOUREMAIL@ADDRESSHERE.com user-promote +``` -## Fork and Clone the FMTM repository +> Note: Alternatively, you may use an external Central server and user. -### 1. Fork the repository +### Import Test Data (Optional) -Forking creates a copy of the repository in your own GitHub account. -Go to the [Field Mapping Tasking Manager repository](https://github.com/hotosm/fmtm) and click the "Fork" button in the top right corner of the page. +If running a local test version, test data is available to get started quickly. -### 2. Clone the forked repository +- Navigate to the `import-test-data` endpoint in the API docs page: + +- Click `Try it out`, then `execute`. -Clone the forked repository to your local machine using the following command: +### Check Authentication (Optional) -`git clone https://github.com//fmtm.git` +Once you have deployed, you will need to check that you can properly authenticate. -Make sure to replace `` with your GitHub username. +1. Navigate to your frontend (e.g. `http://fmtm.localhost:7050`) -## Start the Frontend with Docker +2. Click the 'Sign In' button and follow the popup prompts. -1. You will need to [Install Docker](https://docs.docker.com/engine/install/) and ensure that it is running on your local machine. -2. From the command line: navigate to the top level directory of the FMTM project. -3. From the command line run: `docker compose build ui` - This is essential, as the development container for the frontend is different to production. -4. Once everything is built, from the command line run: `docker compose up -d ui` +3. If successful, you should see your username in the header. -5. If everything goes well you should now be able to **navigate to the project in your browser:** +4. If you see an error instead, double check your credentials and + redirect URL in the openstreetmap.org settings. -That's it, you have successfully set up the frontend!! +That's it, you have successfully set up FMTM!! diff --git a/docs/dev/Backend.md b/docs/dev/Backend.md index 1a3f18fff9..48aee8573d 100644 --- a/docs/dev/Backend.md +++ b/docs/dev/Backend.md @@ -20,7 +20,7 @@ The easiest way to get up and running is by using the FMTM Docker deployment. Do 5. Once everything is pulled, from the command line run: `docker compose up -d api` 6. If everything goes well you should now be able to **navigate to the project in your browser:** `http://api.fmtm.localhost:7050/docs` -> Note: If that link doesn't work, check the logs with `docker log fmtm_api`. +> Note: If that link doesn't work, check the logs with `docker log fmtm-api`. > Note: the database host `fmtm-db` is automatically resolved by docker compose to the database container IP. diff --git a/docs/dev/Production.md b/docs/dev/Production.md index 040ebe721b..67cd54c4a7 100644 --- a/docs/dev/Production.md +++ b/docs/dev/Production.md @@ -142,7 +142,19 @@ runs, and you can access the working website from the domain name! - To access the database via GUI tool such as PGAdmin, it is possible using port tunneling. ```bash -ssh username@server.domain -N -f -L 5430:localhost:5432 +ssh username@server.domain -N -f -L {local_port}:localhost:{remote_port} + +# Example +ssh root@fmtm.hotosm.org -N -f -L 5430:localhost:5433 ``` This will map port 5432 on the remote machine to port 5430 on your local machine. + +## Manual Database Backups + +```bash +backup_filename="fmtm-db-backup-$(date +'%Y-%m-%d').sql.gz" +echo $backup_filename + +docker exec -i -e PGPASSWORD=PASSWORD_HERE fmtm_db pg_dump --verbose --format c -U fmtm fmtm | gzip -9 > "$backup_filename" +```