forked from kristjan/cjvt-valency
		
	
		
			
				
	
	
		
			231 lines
		
	
	
		
			5.2 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			231 lines
		
	
	
		
			5.2 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| # Izdelava vezljivostnih vzorcev za slovenske glagole #
 | |
| 
 | |
| Študent: Kristjan Voje
 | |
| 
 | |
| Mentor: prof. Marko Robnik Šikonja
 | |
| Somentorica: dr. Apolonija Gantar
 | |
| 
 | |
| ### Requirements:
 | |
| 
 | |
| * Linux (built and tested on Ubuntu 16.04),
 | |
| * python3
 | |
| 
 | |
| ## Quick workspace preparation
 | |
| ```bash
 | |
| # Clone the repo.
 | |
| $ git clone https://voje@bitbucket.org/voje/diploma.git
 | |
| 
 | |
| # Prepare the data.
 | |
| $ cd ./data
 | |
| $ unzip data.zip
 | |
| ```
 | |
| 
 | |
| Virtualenv recommended. `$ sudo pip3 install virtualenv`. 
 | |
| ```bash
 | |
| $ cd ./script
 | |
| $ virtualenv -p /usr/bin/python3 venv
 | |
| 
 | |
| # A folder venv with python libraries will appear.  
 | |
| # To activate the virtual environment:  
 | |
| $ source ./venv/bin/activate
 | |
| 
 | |
| # To deactivate: 
 | |
| $ deactivate
 | |
| ```
 | |
| 
 | |
| Now, to build the python packages: 
 | |
| ```bash
 | |
| # Polyglot dependencies
 | |
| $ sudo apt-get install libicu-dev
 | |
| # NOTE: installing this broke my Arch system.
 | |
| # If on Arch, use the AUR version (it's supposed to be safe).
 | |
| 
 | |
| $ cd ./script
 | |
| $ pip3 install -e .
 | |
| 
 | |
| # Polyglot downloads
 | |
| $ polyglot download morph2.sl
 | |
| ```
 | |
| 
 | |
| To test the installation, fire up a python3 shell (while in virtualenv) and:  
 | |
| ```python
 | |
| import valency
 | |
| ```
 | |
| 
 | |
| ## Nodejs environment
 | |
| There's a compiled front end client in the git repo. 
 | |
| In case you want to change anything, you'll need to set up the development environment: 
 | |
| 
 | |
| * install nodejs (default Ubuntu versions are usually behind),
 | |
| * check `$ npm -v`, if you don't have it, install npm,
 | |
| ```
 | |
| $ npm install vue-cli
 | |
| $ cd ./vue_frontend
 | |
| $ npm install
 | |
| $ npm run dev  # for development
 | |
| $ npm run build  # for production
 | |
| ```
 | |
| You will also need to change some path variables if you'll want to access the backend api from vue development server. 
 | |
| See chapter "Web app deployment".
 | |
| 
 | |
| ## MongoDB
 | |
| ### Set up the database on the system
 | |
| [install MongoDB on Linux](https://docs.mongodb.com/manual/tutorial/install-mongodb-on-ubuntu/)
 | |
| 
 | |
| > The MongoDB instance stores its data files in /var/lib/mongodb and its log files in /var/log/mongodb by default, and runs using the mongodb user account. You can specify alternate log and data file directories in /etc/mongod.conf. See systemLog.path and storage.dbPath for additional information.
 | |
| >
 | |
| > If you change the user that runs the MongoDB process, you must modify the access control rights to the /var/lib/mongodb and /var/log/mongodb directories to give this user access to these directories.
 | |
| 
 | |
| #### Check if it's working.
 | |
| ```bash
 | |
| $ sudo service mongod start / stop / restart
 | |
| $ tail -n 30 /var/log/mongodb/mongod.log
 | |
| 
 | |
| # If you want the mongo shell on local machine:
 | |
| $ mongo --host 127.0.0.1:<27017> # Check net.port in /etc/mongod.conf
 | |
| ```
 | |
| 
 | |
| #### Security
 | |
| Create admin and user. Localhost only.
 | |
| [sedurity man](https://docs.mongodb.com/v3.4/tutorial/enable-authentication/)
 | |
| Basically, create an admin user then user that admin to create a normal user.
 | |
| Something like this:
 | |
| ```
 | |
| use admin
 | |
| 
 | |
| db.createUser(
 | |
|   {
 | |
|     user: "admin_name",
 | |
|     pwd: "admin_pass",
 | |
|     roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
 | |
|   }
 | |
| )
 | |
| 
 | |
| # Restart mongod.
 | |
| 
 | |
| use texts
 | |
| 
 | |
| db.createUser(
 | |
|   {
 | |
|     user: "user_name",
 | |
|     pwd: "user_pass",
 | |
|     roles: [ { role: "readWrite", db: "texts" } ]
 | |
|   }
 | |
| )
 | |
| 
 | |
| # Restart mongod.
 | |
| 
 | |
| # Also useful
 | |
| db.dropUser("username")
 | |
| ```
 | |
| 
 | |
| Then go to `/etc/mongod.conf` and add this:
 | |
| Do not use tabs! mongod won't start.
 | |
| ```bash
 | |
| security:
 | |
|  authorization: enabled
 | |
| ```
 | |
| You need to `use <db>`, `db.auth("username", "pass")` to have access.
 | |
| 
 | |
| #### DB migration
 | |
| I installed mongo on remote with same user accounts as on local.  
 | |
| ```bash
 | |
| # On local.
 | |
| $ mongodump --db texts --host mongodb1.example.net --port 3017 --username user --password "pass" --out ./file.db
 | |
| 
 | |
| # Rsync it over to remote.
 | |
| # On remote.
 | |
| # Need to turn off authorization for the drop part.
 | |
| 
 | |
| $ mongorestore --db texts --drop --port <port> ./<dbfolder>
 | |
| ```
 | |
| 
 | |
| #### DB collections, needed for web app
 | |
| 
 | |
| * v2_senses,
 | |
| * v2_senses_map,
 | |
| * v2_users,
 | |
| * v2_user_tokens
 | |
| * sskj
 | |
| 
 | |
| 
 | |
| ## Web app deployment
 | |
| We need to set flask to serve the vuejs frontend:
 | |
| ```python
 | |
| # in ./script/flask_app/app.py
 | |
| app = Flask(
 | |
|     __name__,
 | |
|     static_folder="./vue/dist/static",
 | |
|     template_folder="./vue/dist"
 | |
| )
 | |
| ```
 | |
| Set the correct CORS options.
 | |
| 
 | |
| Might need to reinstall the package. Make sure you're in python virtualenv.
 | |
| `$ pip3 install -e .`
 | |
| 
 | |
| We also need to tell vuejs client to look for the api on server's address.
 | |
| ```javascript
 | |
| // in script/vue_frontend/src/main.js
 | |
| api_addr: "http://<my_server_addr>:5004",
 | |
| ```
 | |
| Compile frontend client:
 | |
| ```bash
 | |
| $ cd ./script/vue_frontend
 | |
| $ npm run build
 | |
| $ rm ../flask_app/vue -rf
 | |
| $ cp ./dist ../flask_app/vue -r
 | |
| ```
 | |
| 
 | |
| After preparing frontend, backend and database, run the command:
 | |
| ```bash
 | |
| $ cd ./script
 | |
| $ ./autostart.sh
 | |
| ```
 | |
| 
 | |
| ## When fixing things in dev environment:
 | |
| ```bash
 | |
| ## Backend
 | |
| # git clone everything
 | |
| $ cd script
 | |
| 
 | |
| # unzip some zipped files
 | |
| $ ./sherpa --unpack
 | |
| 
 | |
| # virtualenv
 | |
| $ source venv/bin/activate
 | |
| $ pip3 install -e .
 | |
| 
 | |
| # start a mongod instance
 | |
| $ sudo systemctl start mongod
 | |
| 
 | |
| # start the backend server
 | |
| $ ./autostart.sh --debug
 | |
| 
 | |
| # you can watch the logs with
 | |
| $ tail -f log/main.log
 | |
| 
 | |
| 
 | |
| ## Frontend
 | |
| # set the right config file (path to api)
 | |
| $ ./sherpa --frontend_config dev
 | |
| $ cd vue_frontend
 | |
| $ npm run dev
 | |
| 
 | |
| 
 | |
| ## Done making changes
 | |
| # build frontend for production with the right config files
 | |
| $ ./sherpa --build_vue
 | |
| 
 | |
| # if you've made changes to static .pickle files
 | |
| $ ./sherpa --pack
 | |
| ```
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 |