Vasyworksのインストール

ここでは、Ubuntu20.04にインストールする手順をご紹介します。

1.初期インストール

0)準備
# sudo su -       rootユーザに変更
# apt update
# apt upgrade → メッセージが出た場合はデフォルトでOKする。
# apt install language-pack-ja
# apt install fonts-ipa*
# exit    (インストールを中断する場合)

1)Nginxのインストール
# sudo su -      rootユーザに変更(インストールを再開する場合)
# apt install nginx
# systemctl enable nginx.service    ←自動起動
# exit    (インストールを中断する場合)

2)Python3のインストール
# sudo su -      rootユーザに変更(インストールを再開する場合)
# apt install python3
# apt install python3-pip python3-dev python3-venv
# apt install gettext
# apt install libpq-dev
# exit    (インストールを中断する場合)

3) FTPサーバのインストール
# sudo su -      rootユーザに変更(インストールを再開する場合)
# adduser web     ←ファイルアップロード用、パスワードは任意
# chmod 755 /home/web      ←ホームディレクトリのパーミッションの変更
# apt install vsftpd
# systemctl enable vsftpd.service   ←自動起動

# vi /etc/vsftpd.conf
-----
listen=YES        (変更)
#listen_ipv6=YES        (コメントアウトする)
write_enable=YES     (コメントを外す)
local_umask=022        (コメントを外す)
ascii_upload_enable=YES        (コメントを外す)
ascii_download_enable=YES        (コメントを外す)
chroot_local_user=YES        (コメントを外す)
ls_recurse_enable=YES        (コメントを外す)
seccomp_sandbox=NO        (追加)
allow_writeable_chroot=YES        (追加)
pasv_enable=YES        (追加)
pasv_min_port=任意のポート番号1        (追加)
pasv_max_port=任意のポート番号2        (追加)
-----

# service vsftpd restart
# exit    (インストールを中断する場合)

※ pasvモードで使用するポートについてファイアウォールの許可設定も確認する。
※ web ユーザでFTP接続を確認する。

4) PostgraSQLのインストールとデータベース作成
# sudo su -      rootユーザに変更(インストールを再開する場合)
# apt install postgresql-12
# passwd postgres    ←PostgreSQL用ユーザのパスワード設定、パスワードは任意
# exit
# su postgres     postgresユーザに変更
# createdb rent_db --encoding=UTF-8 --locale=ja_JP.UTF-8 --template=template0
# psql rent_db
-----
rent_db=# alter role postgres with password '任意のパスワード';
rent_db=# create role yworks with login;
rent_db=# alter role yworks superuser;
rent_db=# alter role yworks with password '任意のパスワード';
rent_db=# alter database rent_db owner to yworks;
rent_db=# set time zone 'Asia/Tokyo';

rent_db=# \q
-----
# exit
# sudo su -      rootユーザに変更
# vi /etc/postgresql/12/main/postgresql.conf
-----
listen_addresses = '*'         (変更)
autovacuum = on        (コメントを外す)
  ※ 以下、autovacuum関連の設定のコメントを外す。
timezone = 'Asia/Tokyo'         (変更)
-----

# vi /etc/postgresql/12/main/pg_hba.conf
-----
# IPv4 local connections:
host    all    all  127.0.0.1/32    password        (変更)
-----

# service postgresql restart
# exit

2.Vasyworks用のWEBサーバ設定

1)プロジェクト設定準備
# sudo su -      rootユーザに変更

# vi /etc/nginx/nginx.conf
------
client_max_body_size 50M;        (Basic Settingsに追加)
------
# service nginx restart
#exit

# sudo su web     webユーザに変更
# cd ~
# mkdir html
# cd html
# mkdir vacancy_model
# mkdir vacancy_model/static
# mkdir vacancy_mgr
# mkdir vacancy_mgr/static
# mkdir vacancy
# mkdir vacancy/static
# mkdir vacancy_api
# mkdir vacancy_api/static
# mkdir vacancy_search
# mkdir vacancy_search/static

2)vacancy_modelのバックエンドサーバ設定
# cd ~/html/vacancy_model
# python3 -m venv venv
# source venv/bin/activate        ←venv環境に移行

(venv) pip3 install django==3.2.4
(venv) pip3 install djangorestframework==3.12.4
(venv) pip3 install django-bootstrap4==3.0.1
(venv) pip3 install django-filter==2.4.0
(venv) pip3 install pillow==8.2.0
(venv) pip3 install wheel==0.37.0
(venv) pip3 install psycopg2==2.8.6
(venv) pip3 install psycopg2-binary==2.8.6
(venv) pip3 install python-dateutil==2.8.1
(venv) pip3 install gunicorn==20.1.0
(venv) pip3 install pycryptodome==3.10.1
(venv) pip3 install qrcode==6.1

(venv) cd ~/html
(venv) django-admin startproject vacancy_model ./vacancy_model
(venv) cd vacancy_model

(venv) vi vacancy_model/settings.py
-----
ALLOWED_HOSTS = ['*']        (変更)
-----

(venv) which gunicorn     (gunicornのパスを確認)

(venv) python manage.py runserver 0.0.0.0:8080
↑ブラウザで表示確認、Ctrl+Cでプロセス停止

(venv) gunicorn vacancy_model.wsgi --bind=0.0.0.0:8080
↑ブラウザで表示確認、Ctrl+Cでプロセス停止

(venv) deactivate        ←venv環境終了

3)vacancy_mgrのバックエンドサーバ設定
# cd ~/html/vacancy_mgr
# python3 -m venv venv
# source venv/bin/activate        ←venv環境に移行

※ 以下のライブラリは、以降の各プロジェクト共通
-----
(venv) pip3 install django==3.2.4
(venv) pip3 install djangorestframework==3.12.4
(venv) pip3 install django-bootstrap5==21.3
(venv) pip3 install django-filter==2.4.0
(venv) pip3 install pillow==8.2.0
(venv) pip3 install wheel==0.37.0
(venv) pip3 install psycopg2==2.8.6
(venv) pip3 install psycopg2-binary==2.8.6
(venv) pip3 install python-dateutil==2.8.1
(venv) pip3 install gunicorn==20.1.0
(venv) pip3 install pycryptodome==3.10.1
(venv) pip3 install qrcode==6.1
-----

(venv) cd ~/html
(venv) django-admin startproject vacancy_mgr ./vacancy_mgr
(venv) cd vacancy_mgr

(venv) vi vacancy_mgr/settings.py
-----
ALLOWED_HOSTS = ['*']        (変更)
-----

(venv) which gunicorn     (gunicornのパスを確認)

(venv) python manage.py runserver 0.0.0.0:8080
↑ブラウザで表示確認、Ctrl+Cでプロセス停止

(venv) gunicorn vacancy_mgr.wsgi --bind=0.0.0.0:8080
↑ブラウザで表示確認、Ctrl+Cでプロセス停止

(venv) deactivate        ←venv環境終了

4)vacancyのバックエンドサーバ設定
# cd ~/html/vacancy
# python3 -m venv venv
# source venv/bin/activate        ←venv環境に移行

※ vacancy_mgrと同じライブラリを組み込み
-----
(venv) pip3 install django==
・・・
-----

(venv) cd ~/html
(venv) django-admin startproject vacancy ./vacancy
(venv) cd vacancy

(venv) vi vacancy/settings.py
-----
ALLOWED_HOSTS = ['*']        (変更)
-----

(venv) which gunicorn     (gunicornのパスを確認)

(venv) python manage.py runserver 0.0.0.0:8080
↑ブラウザで表示確認、Ctrl+Cでプロセス停止

(venv) gunicorn vacancy.wsgi --bind=0.0.0.0:8080
↑ブラウザで表示確認、Ctrl+Cでプロセス停止

(venv) deactivate        ←venv環境終了

5)vacancy_apiのバックエンドサーバ設定
# cd ~/html/vacancy_api
# python3 -m venv venv
# source venv/bin/activate        ←venv環境に移行

※ vacancy_mgrと同じライブラリを組み込み
-----
(venv) pip3 install django==
・・・
-----

(venv) cd ~/html
(venv) django-admin startproject vacancy_api ./vacancy_api
(venv) cd vacancy_api

(venv) vi vacancy_api/settings.py
-----
ALLOWED_HOSTS = ['*']        (変更)
-----

(venv) which gunicorn     (gunicornのパスを確認)

(venv) python manage.py runserver 0.0.0.0:8080
↑ブラウザで表示確認、Ctrl+Cでプロセス停止

(venv) gunicorn vacancy_api.wsgi --bind=0.0.0.0:8080
↑ブラウザで表示確認、Ctrl+Cでプロセス停止

(venv) deactivate        ←venv環境終了

6)vacancy_searchのバックエンドサーバ設定
# cd ~/html/vacancy_search
# python3 -m venv venv
# source venv/bin/activate        ←venv環境に移行

※ vacancy_mgrと同じライブラリを組み込み
-----
(venv) pip3 install django==
・・・
-----

(venv) cd ~/html
(venv) django-admin startproject vacancy_search ./vacancy_search
(venv) cd vacancy_search

(venv) vi vacancy_search/settings.py
-----
ALLOWED_HOSTS = ['*']        (変更)
-----

(venv) which gunicorn     (gunicornのパスを確認)

(venv) python manage.py runserver 0.0.0.0:8080
↑ブラウザで表示確認、Ctrl+Cでプロセス停止

(venv) gunicorn vacancy_search.wsgi --bind=0.0.0.0:8080
↑ブラウザで表示確認、Ctrl+Cでプロセス停止

(venv) deactivate        ←venv環境終了

7) Nginx の設定
# exit
# sudo su -      rootユーザに変更

# cd /etc/systemd/system/
# vi gunicorn_vacancy_model.socket
-----
[Unit]
Description=gunicorn socket vacancy model

[Socket]
ListenStream=/run/gunicorn_vacancy_model/socket

[Install]
WantedBy=sockets.target
-----

# cp gunicorn_vacancy_model.socket gunicorn_vacancy_mgr.socket        ←コピーして修正
# cp gunicorn_vacancy_model.socket gunicorn_vacancy.socket       ←コピーして修正
# cp gunicorn_vacancy_model.socket gunicorn_vacancy_api.socket       ←コピーして修正
# cp gunicorn_vacancy_model.socket gunicorn_vacancy_search.socket       ←コピーして修正

# vi gunicorn_vacancy_mgr.socket        ←異なる箇所だけ修正
-----
[Unit]
Description=gunicorn socket vacancy manager        (変更)

[Socket]
ListenStream=/run/gunicorn_vacancy_mgr/socket       (変更)

[Install]
WantedBy=sockets.target
-----

# vi gunicorn_vacancy.socket       ←異なる箇所だけ修正
-----
[Unit]
Description=gunicorn socket vacancy       (変更)

[Socket]
ListenStream=/run/gunicorn_vacancy/socket       (変更)

[Install]
WantedBy=sockets.target
-----

# vi gunicorn_vacancy_api.socket       ←異なる箇所だけ修正
-----
[Unit]
Description=gunicorn socket vacancy api      (変更)

[Socket]
ListenStream=/run/gunicorn_vacancy_api/socket       (変更)

[Install]
WantedBy=sockets.target
-----

# vi gunicorn_vacancy_search.socket        ←異なる箇所だけ修正
-----
[Unit]
Description=gunicorn socket vacancy search        (変更)

[Socket]
ListenStream=/run/gunicorn_vacancy_search/socket       (変更)

[Install]
WantedBy=sockets.target
-----

#vi gunicorn_vacancy_model.service
-----
[Unit]
Description=gunicorn daemon vacancy model
Requires=gunicorn_vacancy_model.socket
After=network.target

[Service]
PIDFile=/run/gunicorn_vacancy_model/pid
User=web
Group=web
RuntimeDirectory=gunicorn_vacancy_model
WorkingDirectory=/home/web/html/vacancy_model
ExecStart=/home/web/html/vacancy_model/venv/bin/gunicorn -w 3 -b 0.0.0.0:8000 vacancy_model.wsgi
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s TERM $MAINPID
PrivateTmp=true

[Install]
WantedBy=multi-user.target
-----

# cp gunicorn_vacancy_model.service gunicorn_vacancy_mgr.service        ←コピーして修正
# cp gunicorn_vacancy_model.service gunicorn_vacancy.service       ←コピーして修正
# cp gunicorn_vacancy_model.service gunicorn_vacancy_api.service       ←コピーして修正
# cp gunicorn_vacancy_model.service gunicorn_vacancy_search.service       ←コピーして修正

# vi gunicorn_vacancy_mgr.service        ←異なる箇所だけ修正
-----
[Unit]
Description=gunicorn daemon vacancy manager       (変更)
Requires=gunicorn_vacancy_mgr.socket       (変更)
After=network.target

[Service]
PIDFile=/run/gunicorn_vacancy_mgr/pid       (変更)
User=web
Group=web
RuntimeDirectory=gunicorn_vacancy_mgr       (変更)
WorkingDirectory=/home/web/html/vacancy_mgr      (変更)
ExecStart=/home/web/html/vacancy_mgr/venv/bin/gunicorn -w 3 -b 0.0.0.0:8001 vacancy_mgr.wsgi       (変更)
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s TERM $MAINPID
PrivateTmp=true

[Install]
WantedBy=multi-user.target
-----

# vi gunicorn_vacancy.service        ←異なる箇所だけ修正
-----
[Unit]
Description=gunicorn daemon vacancy       (変更)
Requires=gunicorn_vacancy.socket       (変更)
After=network.target

[Service]
PIDFile=/run/gunicorn_vacancy/pid      (変更)
User=web
Group=web
RuntimeDirectory=gunicorn_vacancy       (変更)
WorkingDirectory=/home/web/html/vacancy      (変更)
ExecStart=/home/web/html/vacancy/venv/bin/gunicorn -w 3 -b 0.0.0.0:8002 vacancy.wsgi       (変更)
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s TERM $MAINPID
PrivateTmp=true

[Install]
WantedBy=multi-user.target
-----

# vi gunicorn_vacancy_api.service        ←異なる箇所だけ修正
-----
[Unit]
Description=gunicorn daemon vacancy api       (変更)
Requires=gunicorn_vacancy_api.socket       (変更)
After=network.target

[Service]
PIDFile=/run/gunicorn_vacancy_api/pid       (変更)
User=web
Group=web
RuntimeDirectory=gunicorn_vacancy_api       (変更)
WorkingDirectory=/home/web/html/vacancy_api      (変更)
ExecStart=/home/web/html/vacancy_api/venv/bin/gunicorn -w 3 -b 0.0.0.0:8003 vacancy_api.wsgi       (変更)
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s TERM $MAINPID
PrivateTmp=true

[Install]
WantedBy=multi-user.target
-----

# vi gunicorn_vacancy_search.service        ←異なる箇所だけ修正
-----
[Unit]
Description=gunicorn daemon vacancy search       (変更)
Requires=gunicorn_vacancy_search.socket       (変更)
After=network.target

[Service]
PIDFile=/run/gunicorn_vacancy_search/pid       (変更)
User=web
Group=web
RuntimeDirectory=gunicorn_vacancy_search       (変更)
WorkingDirectory=/home/web/html/vacancy_search      (変更)
ExecStart=/home/web/html/vacancy_search/venv/bin/gunicorn -w 3 -b 0.0.0.0:8004 vacancy_search.wsgi       (変更)
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s TERM $MAINPID
PrivateTmp=true

[Install]
WantedBy=multi-user.target
-----

# cd /etc/nginx/conf.d
# vi vacancy_model.conf
-----
server {
    listen  80; 
    server_name     vasyworks-db.yworks.net;        ←空室情報用のURLまたはIPアドレス(例:vacancy.yworks.net)
    
    location /static {
        alias /home/web/html/vacancy_model/static;
    }
    
    location /static/admin {
        alias /home/web/html/vacancy_model/venv/lib/python3.8/site-packages/django/contrib/admin/static/admin;
    }
    
    location /robots.txt {
        alias /home/web/html/vacancy_model/robots.txt;
    }
    
    location / {
        proxy_pass http://unix:/run/gunicorn_vacancy_model/socket;
        proxy_set_header Host $http_host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}
-----

# cp vacancy_model.conf vacancy_mgr.conf        ←コピーして修正
# cp vacancy_model.conf vacancy.conf        ←コピーして修正
# cp vacancy_model.conf vacancy_api.conf        ←コピーして修正
# cp vacancy_model.conf vacancy_search.conf        ←コピーして修正

# vi vacancy_mgr.conf
-----
server {
    listen  80; 
    server_name     vasyworks-mgr.yworks.net;        ←空室情報用のURLまたはIPアドレス
    
    location /static {
        alias /home/web/html/vacancy_mgr/static;         (変更)
    }
    
    location /static/admin{・・・}         (削除)
    
    location /robots.txt {
        alias /home/web/html/vacancy_mgr/robots.txt;         (変更)
    }
    
    location / {
        proxy_pass http://unix:/run/gunicorn_vacancy_mgr/socket;         (変更)
        proxy_set_header Host $http_host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}
-----

# vi vacancy.conf
-----
server {
    listen  80; 
    server_name     vasyworks-list.yworks.net;        ←空室情報用のURLまたはIPアドレス
    
    location /static {
        alias /home/web/html/vacancy/static;         (変更)
    }
    
    location /static/admin{・・・}         (削除)
    
    location /robots.txt {
        alias /home/web/html/vacancy/robots.txt;         (変更)
    }
    
    location / {
        proxy_pass http://unix:/run/gunicorn_vacancy/socket;         (変更)
        proxy_set_header Host $http_host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}
-----

# vi vacancy_api.conf
-----
server {
    listen  80;
    server_name     vasyworks-api.yworks.net;        ←空室情報用のURLまたはIPアドレス
    
    location /static {
        alias /home/web/html/vacancy_api/static;         (変更)
    }
    
    location /static/rest_framework {         (変更)
        alias /home/web/html/vacancy_api/venv/lib/python3.8/site-packages/rest_framework/static/rest_framework;         (変更)
    }
    
    location /robots.txt {
        alias /home/web/html/vacancy_api/robots.txt;         (変更)
    }
    
    location / {
        proxy_pass http://unix:/run/gunicorn_vacancy_api/socket;         (変更)
        proxy_set_header Host $http_host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

# vi vacancy_search.conf
-----
server {
    listen  80;
    server_name     vasyworks-search.yworks.net;        ←空室情報用のURLまたはIPアドレス
    
    location /static {
        alias /home/web/html/vacancy_search/static;         (変更)
    }
    
    location /static/admin{・・・}         (削除)
    
    location /robots.txt {
        alias /home/web/html/vacancy_search/robots.txt;         (変更)
    }
    
    location / {
        proxy_pass http://unix:/run/gunicorn_vacancy_search/socket;         (変更)
        proxy_set_header Host $http_host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}
-----
# systemctl daemon-reload
# systemctl enable gunicorn_vacancy_model.service
# systemctl enable gunicorn_vacancy_mgr.service
# systemctl enable gunicorn_vacancy.service
# systemctl enable gunicorn_vacancy_api.service
# systemctl enable gunicorn_vacancy_search.service

# nginx -t        Nginx設定のテスト

# service gunicorn_vacancy_model stop
# service gunicorn_vacancy_model start
# service gunicorn_vacancy_mgr stop
# service gunicorn_vacancy_mgr start
# service gunicorn_vacancy stop
# service gunicorn_vacancy start
# service gunicorn_vacancy_api stop
# service gunicorn_vacancy_api start
# service gunicorn_vacancy_search stop
# service gunicorn_vacancy_search start
# service nginx restart

※ gunicorn系のserviceコマンドはrestartでうまく動かない場合があります。

→ブラウザで表示を確認


********** 参考 **********
gunicorn
        -w 3   ←ワーカープロセス(2〜4で設定)
        -b 0.0.0.0:8000    ←ポート番号8000でバインド、各プロジェクトでポートを分ける。


********** 参考 **********
Nginxがうまく動かない時の調査用コマンド    
        cat /var/log/nginx/error.log
        systemctl status gunicorn
        file /run/gunicorn/socket

3.VasyworksDB(データベース構築プロジェクト)のデプロイ

1) web ユーザでサーバにFTP接続する。
2) web ユーザのホームディレクトリの/html/vacacancy_model/ を開く
3) db.sqllite3 ファイルがあれば削除する。
4) vacancy_model プロジェクトの下記をコピーする。
  ※ vacancy_model ディレクトリのsettings.pyのSECRET_KEYはファイルコピーの前に保管しておく。
  ・vacancy_model ディレクトリのsettings.pyとurls.py
  ・rent_db ディレクトリの全て
5) vacancy_model プロジェクトのvacancy_model ディレクトリのsettings.pyを修正する。
  ・SECRET_KEY='保管しておいたSECRET_KEY'
  ・DEBUG=False
  ・データベースの設定
        HOSTは127.0.0.1
        PASSWORDは設定済みのyworksのパスワード
6) web ユーザのホームディレクトリにinitial-dataディレクトリを全てコピーする。
7) サーバにSSH接続する。
8) rent_dbを構築する。
    # sudo su web → ユーザをwebに変更
    # cd ~/html/vacancy_model
    # source venv/bin/activate
    (venv) python manage.py migrate
    (venv) python manage.py createsuperuser
       ユーザ名: root
       メールアドレス: 任意のメールアドレス
       Password: 任意のパスワード
    (venv) deactivate
    # psql -h 127.0.0.1 -U yworks -d rent_db
    rent_db=# \cd /home/web/initial-data/sql/import
    rent_db=# \i import_enum_data.sql
    rent_db=# \i import_sample_data.sql
    ※ 京都市商圏用の場合は、import_kyoto_data.sql も実行する。
    rent_db=# \q
    # exit
9) プロジェクトを再起動する。
   # sudo su -
   # service gunicorn_vacancy_model stop
       ※警告が出た場合は systemctl stop gunicorn_vacancy_model.socket
   # service gunicorn_vacancy_model start
   # service nginx restart
10) SSH接続をexitする。
11) ブラウザで管理サイトを表示する。
     例: http://vasyworks-db.yworks.net/admin
       ※エラーが出る場合はサーバを再起動
12) rootユーザでログインし、ユーザーのテーブルに会社の管理者ユーザを登録する。
     例:
     ユーザ名: Administrator
     パスワード: 任意のパスワード
     → 保存して編集を続ける。
      姓: 任意の会社名
      名: システム管理者
      メールアドレス: 任意のメールアドレス
      パーミッション: 有効・is_company・is_company_admin にチェック
      → 保存
13) その他、管理サイト用のユーザ等が必要な場合は登録する。
14) 管理サイトを利用して、各種マスタのレコードを登録する。

4.VasyworksMGR(空室情報データ管理プロジェクト)のデプロイ

1) web ユーザでサーバにFTP接続する。
2) web ユーザのホームディレクトリの/html/vacacancy_mgr/ を開く
3) db.sqllite3 ファイルがあれば削除する。
4) vacancy_mgr プロジェクトの下記をコピーする。
  ※ vacancy_mgr ディレクトリのsettings.pyのSECRET_KEYはファイルコピーの前に保管しておく。
  ※ 本稼働用のサーバの場合、各ディレクトリにtestsディレクトリがあれば削除する。
  ・vacancy_mgrディレクトリのsettings.pyとurls.py
  ・api ディレクトリの全て
  ・common ディレクトリの全て
  ・company ディレクトリの全て
  ・documents ディレクトリの全て
  ・enums ディレクトリの全て
  ・infoディレクトリの全て
  ・libディレクトリの全て
  ・masters ディレクトリの全て
  ・menu ディレクトリの全て
  ・owner ディレクトリの全て
  ・property ディレクトリの全て
  ・search ディレクトリの全て
  ・trader ディレクトリの全て
  ・users ディレクトリの全て
  ・vacancy_item ディレクトリの全て
  ・viewer ディレクトリの全て
  ・static ディレクトリの全て
  ・templates ディレクトリの全て
5) vacancy_mgr プロジェクトのvacancy_mgr ディレクトリのsettings.pyを修正する。
  ・SECRET_KEY='保管しておいたSECRET_KEY'
  ・DEBUG=False
  ・データベースの設定
        HOSTは127.0.0.1
        PASSWORDは設定済みのyworksのパスワード
6) 画像データ等の保存用ディレクトリ(media)を作成する。
  ・FTP接続で web ユーザのホームディレクトリにvacancy_data ディレクトリを作成する。
  ・vacancy_data ディレクトリの下に media ディレクトリを作成する。
7) media ディレクトリのシンボリックリンクを作成する。
   # sudo su web
   # cd ~/html/vacancy_mgr
   # ln -s /home/web/vacancy_data/media media
   # exit
8) プロジェクトを再起動する。
   # sudo su -
   # service gunicorn_vacancy_mgr stop
       ※警告が出た場合は systemctl stop gunicorn_vacancy_mgr.socket
   # service gunicorn_vacancy_mgr start
   # service nginx restart
9) SSH接続をexitする。
10) ブラウザで管理サイトを表示する。
     例: http://vasyworks-mgr.yworks.net/
       ※エラーが出る場合はサーバを再起動
11) 会社の管理者ユーザ(Administrator)でログインし、会社情報の登録を行う。
12) 「システム管理」の「システムユーザ」を実行し、管理部署の実務者ユーザを作成する。
13) 「システム管理」の「空室情報ユーザ」を実行し、空室情報の閲覧ユーザを作成する。
14) その他、マスタ登録等を必要に応じて行う。

5.VasyworksLIST(空室情報一覧プロジェクト)のデプロイ

1) web ユーザでサーバにFTP接続する。
2) web ユーザのホームディレクトリの/html/vacancy/ を開く
3) db.sqllite3 ファイルがあれば削除する。
4) vacancy プロジェクトの下記をコピーする。
  ※ vacancy ディレクトリのsettings.pyのSECRET_KEYはファイルコピーの前に保管しておく。
  ※ 本稼働用のサーバの場合、各ディレクトリにtestsディレクトリがあれば削除する。
  ・vacancy ディレクトリのsettings.pyとurls.py
  ・api ディレクトリの全て
  ・building ディレクトリの全て
  ・documents ディレクトリの全て
  ・garage ディレクトリの全て
  ・libディレクトリの全て
  ・menu ディレクトリの全て
  ・movie ディレクトリの全て
  ・panorama ディレクトリの全て
  ・rent_db ディレクトリの全て
  ・room ディレクトリの全て
  ・users ディレクトリの全て
  ・viewer ディレクトリの全て
  ・static ディレクトリの全て
  ・templates ディレクトリの全て
5) vacancy プロジェクトのvacancy ディレクトリのsettings.pyを修正する。
  ・SECRET_KEY='保管しておいたSECRET_KEY'
  ・DEBUG=False
  ・データベースの設定
        HOSTは127.0.0.1
        PASSWORDは設定済みのyworksのパスワード
6) media ディレクトリのシンボリックリンクを作成する。
   # sudo su web
   # cd ~/html/vacancy
   # ln -s /home/web/vacancy_data/media media
   # exit
7) プロジェクトを再起動する。
   # sudo su -
   # service gunicorn_vacancy stop
       ※警告が出た場合は systemctl stop gunicorn_vacancy.socket
   # service gunicorn_vacancy start
   # service nginx restart
8) SSH接続をexitする。
9) ブラウザで管理サイトを表示する。
     例: http://vasyworks-list.yworks.net/
       ※エラーが出る場合はサーバを再起動
10) 空室情報の閲覧ユーザでログインし、表示を確認する。

6.VasyworksAPI(空室情報APIプロジェクト)のデプロイ

1) web ユーザでサーバにFTP接続する。
2) web ユーザのホームディレクトリの/html/vacacancy_api/ を開く
3) db.sqllite3 ファイルがあれば削除する。
4) vacancy_api プロジェクトの下記をコピーする。
  ※ vacancy_api ディレクトリのsettings.pyのSECRET_KEYはファイルコピーの前に保管しておく。
  ※ 本稼働用のサーバの場合、各ディレクトリにtestsディレクトリがあれば削除する。
  ・vacancy_api ディレクトリのsettings.pyとurls.py
  ・building ディレクトリの全て
  ・common ディレクトリの全て
  ・company ディレクトリの全て
  ・documents ディレクトリの全て
  ・libディレクトリの全て
  ・master ディレクトリの全て
  ・rent_db ディレクトリの全て
  ・room ディレクトリの全て
  ・search ディレクトリの全て
  ・users ディレクトリの全て
  ・templates ディレクトリの全て
5) vacancy_api プロジェクトのvacancy_api ディレクトリのsettings.pyを修正する。
  ・SECRET_KEY='保管しておいたSECRET_KEY'
  ・DEBUG=False
  ・データベースの設定
        HOSTは127.0.0.1
        PASSWORDは設定済みのyworksのパスワード
6) media ディレクトリのシンボリックリンクを作成する。
   # sudo su web
   # cd ~/html/vacancy_api
   # ln -s /home/web/vacancy_data/media media
   # exit
7) プロジェクトを再起動する。
   # sudo su -
   # service gunicorn_vacancy_api stop
       ※警告が出た場合は systemctl stop gunicorn_vacancy_api.socket
   # service gunicorn_vacancy_api start
   # service nginx restart
8) SSH接続をexitする。
9) ブラウザで管理サイトを表示する。
     例: http://vasyworks-api.yworks.net/
       ※エラーが出る場合はサーバを再起動
10) 自社のAPIキーを使用し、APIのURLを直接入力して表示を確認する。

7.VasyworksSEARCH(空室情報検索プロジェクト)のデプロイ

1) web ユーザでサーバにFTP接続する。
2) web ユーザのホームディレクトリの/html/vacacancy_search/ を開く
3) db.sqllite3 ファイルがあれば削除する。
4) vacancy_search プロジェクトの下記をコピーする。
  ※ vacancy_search ディレクトリのsettings.pyのSECRET_KEYはファイルコピーの前に保管しておく。
  ※ 本稼働用のサーバの場合、各ディレクトリにtestsディレクトリがあれば削除する。
  ・vacancy_search ディレクトリのsettings.pyとurls.py
  ・api ディレクトリの全て
  ・building ディレクトリの全て
  ・garage ディレクトリの全て
  ・libディレクトリの全て
  ・menu ディレクトリの全て
  ・movie ディレクトリの全て
  ・panorama ディレクトリの全て
  ・rent_db ディレクトリの全て
  ・room ディレクトリの全て
  ・search ディレクトリの全て
  ・search_map ディレクトリの全て
  ・users ディレクトリの全て 
  ・viewer ディレクトリの全て
  ・static ディレクトリの全て
  ・templates ディレクトリの全て
5) vacancy_search プロジェクトのvacancy_search ディレクトリのsettings.pyを修正する。
  ・SECRET_KEY='保管しておいたSECRET_KEY'
  ・DEBUG=False
  ・データベースの設定
        HOSTは127.0.0.1
        PASSWORDは設定済みのyworksのパスワード
6) media ディレクトリのシンボリックリンクを作成する。
   # sudo su web
   # cd ~/html/vacancy_search
   # ln -s /home/web/vacancy_data/media media
   # exit
7) プロジェクトを再起動する。
   # sudo su -
   # service gunicorn_vacancy_search stop
       ※警告が出た場合は systemctl stop gunicorn_vacancy_search.socket
   # service gunicorn_vacancy_search start
   # service nginx restart
8) SSH接続をexitする。
9) ブラウザで管理サイトを表示する。
     例: http://vasyworks-search.yworks.net/
10) 空室情報の閲覧ユーザでログインし、表示を確認する。

8.ユニットテスト用データの準備

各プロジェクトのユニットテストを実行する場合は、下記のような手順でユニットテスト用データを用意する。

1) GitHubのVasyworksDBリポジトリにあるtest-dataをディレクトリごと、 web ユーザのホームディレクトリにコピーしする。
2) /home/web/test-data/Mediaディレクトリにある、privateディレクトリとpublicディレクトリ、test_dataディレクトリをディレクトリごと、/home/web/vacancy_data/にコピーする。

※テスト用のMediaファイルの削除や移動、ファイル名を変更を行った場合、ユニットテストに通らないものが出てきますので、ユニットテストを実施する際は都度、3)と4)を実施する必要があります。

3) psqlでrent_dbに接続する。
    # psql -h 127.0.0.1 -U yworks -d rent_db
4) psqlで下記のコマンドを実行する。
    rent_db=# \cd /home/web/test-data/Sql/Test
    rent_db=# \i prepare_test_data.sql
    rent_db=# \q

※ユニットテスト用データにデータの追加、削除、変更を行った場合、ユニットテストに通らないものが出てきますので、ユニットテストを実施する際は都度、3)と4)を実施する必要があります。