Commit b67ee216317fe8d580c4ecfa4c2ae023271fe22a

Authored by hausdoerfer
1 parent 663586ee

added documentation for deployment

README.md
... ... @@ -9,7 +9,8 @@ BeuthBot is a master project of the Beuth University of Applied Sciences Berlin.
9 9 - [Application properties](#application-properties)
10 10 - [Docker configuration](#docker-configuration)
11 11 - [Local tunnel](#local-tunnel)
12   -- [Debugging](#debugging)
  12 +- [Debug application](#debugging)
  13 +- [Deploy application](#aeploy-application)
13 14 - [Known issues](#known-issues)
14 15 - [Used online sources](#used-online-sources)
15 16  
... ... @@ -49,7 +50,7 @@ The project should be cloned from the repository. For development it is possible
49 50  
50 51 With the following command it is possible to build the whole project. The construction of the project is possible during operation and before starting the server. In the first case the running server is automatically updated during operation.
51 52  
52   -```
  53 +```bash
53 54 ./gradlew war
54 55 ```
55 56  
... ... @@ -57,17 +58,17 @@ With the following command it is possible to build the whole project. The constr
57 58  
58 59 The application can be started with the following command:
59 60  
60   -```
  61 +```bash
61 62 # Unix
62 63 ./gradlew chatbotRun
63 64 ```
64 65  
65   -```
  66 +```bash
66 67 # Windows
67 68 gradlew.bat chatbotRun
68 69 ```
69 70  
70   -```
  71 +```bash
71 72 # MacOS
72 73 cd docker
73 74 docker-compose up --build
... ... @@ -88,17 +89,17 @@ In addition it is also possible to set up your own bot for example, in Telegram
88 89  
89 90 The following command can be used to stop the running application:
90 91  
91   -```
  92 +```bash
92 93 # Unix
93 94 ./gradlew chatbotStop
94 95 ```
95 96  
96   -```
  97 +```bash
97 98 # Windows
98 99 gradlew.bat chatbotStop
99 100 ```
100 101  
101   -```
  102 +```bash
102 103 # MacOS
103 104 cd docker
104 105 docker-compose down
... ... @@ -159,30 +160,35 @@ MacOS:
159 160 MacOS requires XCode and Homebrew in order to install NodeJS.
160 161 XCode can be downloaded and installed for free via the App Store.
161 162  
162   -To install Homebrew, open a terminal window and type`
163   -```
  163 +To install Homebrew, open a terminal window and type
  164 +
  165 +```bash
164 166 ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
165 167 ```
166 168  
167 169 After Homebrew has completed installation, install NodeJS by typing:
168   -```
  170 +
  171 +```bash
169 172 brew install node
170 173 ```
171 174  
172 175 Finally install localtunnel by typing:
173   -```
  176 +
  177 +```bash
174 178 npm install -g localtunnel
175 179 ```
176 180  
177 181 If everything has worked correctly, you are now ready to use localtunnel.
178 182 Using localtunnel is fairly easy, simply type:
179   -```
  183 +
  184 +```bash
180 185 lt --port 8080
181 186 ```
182 187  
183 188 Where the number entered after --port corresponds to the port you want localtunnel to route its HTTPS-Domain to.
184 189 The localtunnel server can be slow and a little unreliable at times, but if everything goes well you should see something like:
185   -```
  190 +
  191 +```bash
186 192 your url is: https://uawfhausjdj.localtunnel.me
187 193 ```
188 194 which is the url you can put in the first line of the `beuthbot.properties` file in the /docker/wildfly/volumes/conf` directory.
... ... @@ -193,7 +199,7 @@ NOTE: Localtunnel tends to crash every now and then, displaying an error message
193 199  
194 200 <!-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -->
195 201  
196   -## Debugging
  202 +## Debug application
197 203  
198 204 At the moment, the JBoss server is always started with open debugging ports. To attach to the process using IntelliJ, a remote debug configuration has to be created. To do so, perform the following steps:
199 205  
... ... @@ -206,6 +212,59 @@ At the moment, the JBoss server is always started with open debugging ports. To
206 212  
207 213 <!-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -->
208 214  
  215 +## Deploy application
  216 +
  217 +The following paragraph describes how the deplyoment is performed from a local Git repository to the production server. All development statuses have to be transferred to the `master` branch before performing the deployment. Just from the `master` branch it is possible to carry out the deployment on the productive server. To be able to perform the deplyment, it is necessary to be able to access the server via SSH. Then Git will transfer the status of the `master` branch to the server. This requires customizations on the server and in the local Git.
  218 +
  219 +### 1. Setup on the server
  220 +
  221 +On the server the following Git command have to be executed in the directory `home/<user>/`. Instead of the placeholder `<projectname>` the actual name of the project has to be used. The command creates a Git directory which includes all necessary files for a Git Hook.
  222 +
  223 +```bash
  224 +git init --bare ~/<projectname>.git
  225 +```
  226 +
  227 +After the Git folder has been successfully created, a new file with the name `post-receive` has to be created in the subfolder `<projectname>.git/hooks`. Afterwards the script has to be inserted into this file and the placeholders get changed by project-specific variables. The script will also start the `deployment.sh` script. This executes the build of the project and starts the appropriate Docker command. In addition, this script ensures that the `beuthbot.properties` file on the server is replaced by the corresponding productive file. In local development the `post-receive` and `deployment.sh` file can be found in the `scripts/` folder.
  228 +
  229 +```bash
  230 +#!/bin/bash
  231 +while read oldrev newrev ref
  232 +do
  233 + # only checking out the master (or whatever branch you would like to deploy)
  234 + if [[ $ref =~ .*/master$ ]];
  235 + then
  236 + echo "Master ref received. Deploying master branch to production..."
  237 + git --work-tree=/home/<user>/<projectname>/ --git-dir=/home/<user>/<projectname>.git/ checkout -f
  238 + cd /home/<user>/<projectname>/
  239 + ./scripts/deployment.sh
  240 + else
  241 + echo "Ref $ref successfully received. Doing nothing: only the master branch may be deployed on this server."
  242 + fi
  243 +done
  244 +```
  245 +
  246 +In addition a folder with the project name `<projectname>` has to be created on the server in the directory `home/<user>/`. This is where the code from the `master` branch is pushed.
  247 +
  248 +```bash
  249 +mkdir ~/<projectname>
  250 +```
  251 +
  252 +### 2. Use in a local development environment
  253 +
  254 +This step sets up a reference to the server on which the application is deployed. For this the following command must be executed. The placeholder `<user>` has to be replaced by the matching SSH user and the project `<projectname>` that has been set up on the server.
  255 +
  256 +```bash
  257 +git remote add production ssh://<user>@<ip>:<port>/home/<user>/<projectname>
  258 +```
  259 +
  260 +After the Git remote settings have been made the current state of the `master` branch can be pushed to the server using the following command.
  261 +
  262 +```bash
  263 +git push production master
  264 +```
  265 +
  266 +<!-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -->
  267 +
209 268 ## Known issues
210 269  
211 270 The following issues are currently known in the application:
... ...
docu/project_documentation.md
... ... @@ -3,28 +3,19 @@ The hole project is build by gradle and divided into a couple of subprojects (cf
3 3 Each module is loosely connected through a Java Message Service. The application is running on a Jboss Wildfly
4 4 inside of a docker container. Another docker container is used for the Rasa backend.
5 5  
6   -## Infrastructure
7   -- see [docker compose file](../docker/docker-compose.yml)
8   -
9   -The productive project is represented by a separate Git repository in absent of a continuous integration server.
10   -Pushing into this repository will automatically trigger a rebuild of the productive environment.
11   -- confer [post-receive](../scripts/post-receive) - Git hook for auto deploying the application
12   -
13   -### Subprojects
14   -
15   -#### MainBot
  6 +## MainBot
16 7 - [Canteen Parser](canteenParser.md) - web crawler for collecting data of the beuth university canteen
17 8 - Common - holding common classes used by all other subprojects
18 9 - [Drools](drools.md) - Business Rules Management System used to generate the right answer
19 10 - Global - global available services
20 11  
21   -#### Natural Language Processing
  12 +## Natural Language Processing
22 13 - [ApiAi](apiai.md) - simple RESTEasy client application calling googles Api.ai API
23 14 - [Rasa](rasa.md) - simple RESTEasy client application calling the rasa backend rest API
24 15  
25   -#### Messenger
  16 +## Messenger
26 17 - [Facebook](facebook.md) - Facebook Messenger connector
27 18 - [Telegram](telegram.md) - Telegram Messenger connector
28 19  
29   -#### Text <-> Speech Processing
  20 +## Text <-> Speech Processing
30 21 - [Bing Speech](binspeechapi.md) - REST client for Microsofts Bing Speech API
31 22 \ No newline at end of file
... ...