###### tags : `xirka` `documentation`
# Dokumentasi Deployment Xreader V.02
### 0. Pendahuluan
Xreader V.02 merupakan aplikasi pengelolaan informasi data log Xirka Smart Attendance.
### 1. Prerequisite
| Item | Detail |
| ------ | ------ |
| Sistem Operasi | Ubuntu Server 18.04 |
| Backend | Python 3.6, Django |
| Database | PostgresSQL |
| Frontend | Nodejs 10, ReactJs |
| Webserver | Nginx |
### 2. Instalasi Dependency
```sh
$ cd ~
$ sudo apt-get update
$ sudo apt-get install python3-pip python3-dev libpq-dev postgresql postgresql-contrib nginx
$ sudo apt-get install build-essential libssl-dev libffi-dev python-dev
$ sudo pip3 install virtualenv
$ curl -sL https://deb.nodesource.com/setup_10.x -o nodesource_setup.sh
$ sudo bash nodesource_setup.sh
$ sudo apt install nodejs
```
### 3. Setup Database
Setup Database
```sh
$ sudo -u postgres psql
postgres=# CREATE DATABASE db_name;
```
Setup database user privileges
```sh
postgres=# CREATE USER db_user WITH PASSWORD 'user_password';
postgres=# ALTER ROLE db_user SET client_encoding TO 'utf8';
postgres=# ALTER ROLE db_user SET default_transaction_isolation TO 'read committed';
postgres=# ALTER ROLE db_user SET timezone TO 'UTC';
postgres=# GRANT ALL PRIVILEGES ON DATABASE myproject TO db_user;
postgres=# \q
```
### 4. Setup Django Server
Clone direktori server
```sh
$ cd /var/www/
$ sudo git https://github.com/mraditya89/xreader_v2.git
$ sudo chown -R user:user xreader_v2
```
`Note : Ubah user menjadi ubuntu user`
Buat virtual environment python dan Install requirements pada direktori server
```sh
$ cd /var/www/xreader_v2/backend
$ virtualenv -p python3 env
$ source env/bin/activate
(env) $ pip install -r doc/requirements.txt
```
Ubah konfigurasi database di xreader_v2/settings.py. Nilai parameter db_name, db_user, dan user_password disesuaikan dengan setting database postgre sebelumnya.
```sh
(env) $ sudo nano xreader_v2/settings.py
```
```python
...
DEBUG = False
...
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'db_name',
'USER': 'db_user',
'PASSWORD': 'user_password',
'HOST': 'localhost',
'PORT': '',
}
}
```
Buat user admin & device pada server django
```
(env)$ python manage.py makemigrations
(env)$ python manage.py migrate
(env)$ python manage.py createsuperuser
```
Daftarkan user admin dengan menginput `username, email dan password`.
Jalankan django server
```sh
(envxreader)$ python manage.py runserver {ip_address}:{port}
```
Buka browser dengan alamat `http://{ip_address}:{port}/smartlocksystem/admin`
Pada menu users daftarkan user device dengan `username: xisa-ulti, password: A3!NkkkM7BK3@e6`
### 5. Setup Frontend
```
$ cd /var/www/xreader_v2/frontend
$ npm install
```
Ubah ip_address request pada file : config.js pada direktori /src/components/content/config.js, sesuaikan dengan ip_address dan port django server.
```
const url = "http://{ip_address}:{port}"
```
Jalankan command `npm start`. Perhatikan console akan memunculkan notifikasi error : `Module not found can't resolve xlsx ...`
Solusi : hapus file ods.js pada direktori node_modules/tempa-xlsx
```
$ sudo rm node_modules/tempa-xlsx
$ touch node_modules/tempa-xlsx/ods.js
```
Jalankan kembali command : `npm start`. Pastikan tidak ada pesan error. Kemudian akses frontend pada browser dengan alamat `http://{ip_address}:{port}`. Input username dan password sesuai dengan user admin yang telah didaftarkan.
### 6. Deploy Aplikasi Xreader_v2
```
(env)$ cd /var/www/xreader_v2/backend
(env)$ gunicorn --bind 0.0.0.0:8000 xreader_v2.wsgi
```
Buat file pada service xreader_v2 dengan nama : xreader_v2.service.
```
$ sudo nano /etc/systemd/system/xreader.service
```
Isi file sesuai dengan konfigurasi server
```txt
[Unit]
Description=gunicorn daemon
After=network.target
[Service]
User={ubuntu_user}
Group=www-data
WorkingDirectory=/var/www/xreader_v2/backend/
ExecStart=/var/www/xreader_v2/backend/env/bin/gunicorn --access-logfile - --workers 5 --bind unix:/var/www/xreader_v2/backend/xreader_v2.sock xreader_v2.wsgi:application
[Install]
WantedBy=multi-user.target
```
Jalankan service dengan command berikut:
```sh
$ sudo systemctl start xreader_v2
$ sudo systemctl enable xreader_v2
$ sudo systemctl daemon-reload
```
Untuk mengecek status service, jalankan command :` sudo systemctl status xreader_v2`
#### Buat file konfigurasi server pada direktori nginx
Buat file xreader pada direktori nginx
```
$ sudo nano /etc/nginx/sites-availabe/xreader
```
Isi file tersebut sesuai dengan konfigurasi server meliputi : port, ip(server_name), alias, dan location.
```txt
server {
listen {port_backend};
server_name {ip_address};
location = /favicon.ico { access_log off; log_not_found off; }
location /static/ {
alias /var/www/xreader_v2/backend/static-root/;
}
location / {
include proxy_params;
proxy_pass http://unix:/var/www/xreader_v2/backend/xreader_v2.sock;
}
}
server {
listen {port_frontend};
server_name {ip_addr};
root /var/www/xreader_v2/frontend/build;
index index.html index.htm;
location / {
try_files $uri /index.html;
}
}
```
Aktifkan setingan nginx dengan perintah :
```
sudo ln -s /etc/nginx/sites-available/xreader_v2 /etc/nginx/sites-enabled
sudo systemctl restart nginx
```
Periksa konfigurasi nginx : `sudo nginx -t`. jika tidak ada pesan error, seharusnya akses aplikasi xreader_v2 bisa diakses melalui browser dengan alamat `http://{ip_address}:{port_frontend}`