Odooインストール · 10 min read · Nov 17, 2025

Rocky Linux 9にOdoo 17 ERPソフトウェアをインストールする方法

Odoo(以前はOpenERPとして知られていました)は、CRM、eコマース、会計、在庫、プロジェクト管理、販売時点管理など、さまざまなビジネスニーズに対応する10,000以上のオープンソースアプリケーションの自己ホスト型スイートです。これらのアプリケーションは完全に統合されており、馴染みのあるWebインターフェースを通じてアクセスされます。

このチュートリアルでは、Rocky Linux 9サーバーにOdoo 16スタックをインストールする方法を学びます。

前提条件

  1. Odooスタックをホストするために最低2GBのRAMを持つRocky Linux 9サーバー。
  2. PostgreSQLデータベースをホストするために最低2GBのRAMを持つ2台目のRocky Linux 9サーバー。ただし、Odooと同じサーバーにデータベースをインストールすることもできますが、運用環境では別のサーバーにインストールすることを強くお勧めします。また、任意のプロバイダーから利用可能な管理データベースオプションを選択することもできます。
  3. RAMの要件は、スタックを使用する同時ユーザーの数によって異なります。システム要件の計算方法についての詳細なガイドは、Odooのドキュメントにあります。
  4. システムを最新の状態に保ちます。 $ sudo dnf update
  5. 両方のサーバーでsudo権限を持つ非rootユーザー。
  6. Fail2Banがインストールされている必要があります。このステップはオプションです。同じくRocky LinuxにFail2Banをインストールするガイドに従うことができます。
  7. SELinuxは無効にする必要があります。
  8. システムに必要なパッケージがいくつかあります。 $ sudo dnf install wget curl nano unzip yum-utils policycoreutils-python-utils -y これらのパッケージのいくつかは、すでにシステムにインストールされているかもしれません。

ステップ1 - ファイアウォールルールの設定

最初のステップはファイアウォールを設定することです。Rocky LinuxはFirewalldファイアウォールを使用します。このチュートリアルでは、両方のサーバーにFirewalldファイアウォールがインストールされていると仮定します。

ファイアウォールの状態を確認します。

$ sudo firewall-cmd --state
running

ファイアウォールは異なるゾーンで機能し、パブリックゾーンがデフォルトで使用されます。ファイアウォールでアクティブなすべてのサービスとポートをリストします。

$ sudo firewall-cmd --zone=public --list-all

次の出力が表示されるはずです。

public
  target: default
  icmp-block-inversion: no
  interfaces: eth0
  sources: 
  services: cockpit dhcpv6-client ssh
  ports: 
  protocols: 
  forward: yes
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules:

Odooサーバーでは、ポート22、80、443、6010、5432、および8069を開く必要があります。22はSSHに使用され、80はHTTP、443はHTTPS、6010はOdoo通信に使用され、5432はPostgreSQLによって使用され、8069はOdooサーバーアプリケーションに使用されます。

Odooサーバーで必要なポートを開くために、次のコマンドを実行します。

$ sudo firewall-cmd --zone=public --add-port={6010,5432,8069,8072}/tcp
$ sudo firewall-cmd --zone=public --add-service=http
$ sudo firewall-cmd --zone=public --add-service=https

ファイアウォールの状態を確認します。

$ sudo firewall-cmd --zone=public --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: eth0
  sources: 
  services: cockpit dhcpv6-client http https ssh
  ports: 6010/tcp 5432/tcp 8069/tcp 8072/tcp
  protocols: 
  forward: yes
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules:

PostgreSQLサーバーでは、ポート22、6010、および5432を開く必要があります。次のコマンドを使用して開きます。

$ sudo firewall-cmd --zone=public --add-port={6010,5432}/tcp

すべての変更を永続化し、ファイアウォールを再読み込みして変更を有効にします。

$ sudo firewall-cmd --runtime-to-permanent
$ sudo firewall-cmd --reload

ステップ2 - ホスト名の割り当て

サーバーのIPアドレスを使用するか、利用可能な場合は完全修飾ドメイン名(FQDN)を使用できます。このチュートリアルではFQDNを使用し、そのために両方のサーバーでホスト名を設定する必要があります。

次のコマンドを使用してOdooサーバーのホスト名を設定します。

$ sudo hostnamectl set-hostname odoo.yourdomain.com

次のコマンドを使用してPostgreSQLサーバーのホスト名を設定します。

$ sudo hostnamectl set-hostname postgresql.yourdomain.com

Odooサーバーで/etc/hostsファイルを開きます。

$ sudo nano /etc/hosts

次のようになっていることを確認してください。

127.0.0.1  localhost
127.0.0.1  odoo.yourdomain.com  odoo
10.1.1.10  postgresql.yourdomain.com  postgresql

PostgreSQLサーバーでファイルを開き、次のようになっていることを確認します。

127.0.0.1  localhost
127.0.0.1  postgresql.yourdomain.com  postgresql
10.1.2.10  odoo.yourdomain.com  odoo

Ctrl + Xを押してエディタを閉じ、ファイルを保存するように求められたらYを押します。

ステップ3 - PostgreSQLのインストールと設定

Rocky Linux 9にはデフォルトでPostgreSQL 13が付属しており、PostgreSQL 15はpostgresql:15モジュールストリームとして提供されています。ただし、私たちはこのチュートリアルを書く時点で利用可能な最新バージョンであるPostgreSQL 16を公式リポジトリからインストールします。

PostgreSQLリポジトリRPMをインストールします。

$ sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-9-x86_64/pgdg-redhat-repo-latest.noarch.rpm

組み込みのPostgreSQLモジュールを無効にします。

$ sudo dnf -qy module disable postgresql

PostgreSQL 16をインストールします。

$ sudo dnf install -y postgresql16-server postgresql16-contrib

データベースを初期化します。

$ sudo /usr/pgsql-16/bin/postgresql-16-setup initdb

PostgreSQLサービスを有効にして開始します。

$ sudo systemctl enable postgresql-16
$ sudo systemctl start postgresql-16

サービスの状態を確認します。

$ sudo systemctl status postgresql-16

次のような出力が得られるはずです。

? postgresql-16.service - PostgreSQL 16 database server
     Loaded: loaded (/usr/lib/systemd/system/postgresql-16.service; enabled; preset: disabled)
     Active: active (running) since Sun 2024-04-07 02:22:42 UTC; 3s ago
       Docs: https://www.postgresql.org/docs/16/static/
    Process: 8673 ExecStartPre=/usr/pgsql-16/bin/postgresql-16-check-db-dir ${PGDATA} (code=exited, status=0/SUCCESS)
   Main PID: 8678 (postgres)
      Tasks: 7 (limit: 10819)
     Memory: 17.4M
        CPU: 60ms
     CGroup: /system.slice/postgresql-16.service
             ??8678 /usr/pgsql-16/bin/postgres -D /var/lib/pgsql/16/data/
             ??8679 "postgres: logger "
             ??8680 "postgres: checkpointer "
             ??8681 "postgres: background writer "
             ??8683 "postgres: walwriter "
             ??8684 "postgres: autovacuum launcher "
             ??8685 "postgres: logical replication launcher "

Apr 07 02:22:42 postgresql systemd[1]: Starting PostgreSQL 16 database server...
Apr 07 02:22:42 postgresql postgres[8678]: 2024-04-07 02:22:42.370 UTC [8678] LOG:  redirecting log output to logging collector process
Apr 07 02:22:42 postgresql postgres[8678]: 2024-04-07 02:22:42.370 UTC [8678] HINT:  Future log output will appear in directory "log".
Apr 07 02:22:42 postgresql systemd[1]: Started PostgreSQL 16 database server.

次に、データベースユーザーodooを作成する必要があります。ロールのパスワードを求められます。お好みの強力なパスワードを入力してください。

$ sudo -u postgres createuser odoo -U postgres -dP

オプション-uは、postgresユーザーとしてコマンドを実行します。

オプション-Uは、接続するユーザー名を示します。

オプション-dは、ユーザーにデータベースを作成する権限を付与します。

オプション-pは、新しいユーザーのパスワードを求めます。

ホストベースの認証の設定

PostgreSQLサービスがOdooサーバーに接続できるようにするための権限を与える必要があります。

まず、PostgreSQLサービスを停止します。

$ sudo systemctl stop postgresql-16

PostgreSQLがクライアント認証ファイルをどこに保存しているかを見つけるために、次のコマンドを実行してPostgreSQLシェルを起動します。

$ sudo -u postgres psql

次のクエリを実行してファイルの場所を見つけます。

postgres=# SHOW hba_file;

次の出力が得られます。

              hba_file              
------------------------------------
 /var/lib/pgsql/16/data/pg_hba.conf
(1 row)

シェルを終了するにはexitと入力します。

ファイル/var/lib/pgsql/16/data/pg_hba.confを編集のために開きます。

$ sudo nano /var/lib/pgsql/16/data/pg_hba.conf

次の行を最後に貼り付けます。

host        all     odoo        odoo.yourdomain.com     scram-sha-256

この行は、odooユーザーがこのサーバー内のすべてのデータベースに接続する権限を付与します。allキーワードを使用する代わりに、データベースの名前を指定することもできます。

Ctrl + Xを押してエディタを閉じ、ファイルを保存するように求められたらYを押します。

PostgreSQLリスニングアドレスの設定

次に、データベースサーバーがリモート接続をリッスンできるようにする必要があります。

PostgreSQLシェルを起動し、次のコマンドを実行してPostgreSQL設定ファイルの場所を見つけます。

$ sudo -u postgres psql
postgres=# SHOW config_file;

次の出力が得られます。

              config_file               
----------------------------------------
 /var/lib/pgsql/16/data/postgresql.conf
(1 row)

シェルを終了するにはexitと入力します。

ファイル/var/lib/pgsql/16/data/postgresql.confを編集のために開きます。

$ sudo nano /var/lib/pgsql/16/data/postgresql.conf

listen_addressesの行を次のように変更します。

#listen_addresses = 'localhost' # what IP address(es) to listen on;

から

listen_addresses = '*'

*はすべてのIPアドレスをリッスンすることを意味します。OdooインスタンスのIPアドレスに変更することもできます。

listen_addresses = 'localhost, '

Ctrl + Xを押してエディタを閉じ、ファイルを保存するように求められたらYを押します。

PostgreSQLサービスの有効化と開始

設定が完了したので、PostgreSQLサービスを開始する時が来ました。

$ sudo systemctl start postgresql-16    

ステップ4 - Odooのインストール

Python 3.10のインストール

Rocky Linux 9にはPython 3.9が付属していますが、Odoo 17はPython 3.10以上を必要とします。したがって、まずそれをインストールする必要があります。

現在の利用可能なバージョンを最初に確認できます。

$ python --version
Python 3.9.18

Pythonに必要な依存関係をインストールします。

$ sudo dnf groupinstall "Development Tools"
$ sudo dnf install readline-devel ncurses-devel openssl-devel sqlite-devel tk-devel gdbm-devel libc6-dev libbz2-dev libffi-dev zlib1g-dev
$ sudo dnf install -y openssl-devel bzip2-devel libffi-devel readline-devel ncurses-devel sqlite-devel tk-devel

Pythonのウェブサイトからソースコードをダウンロードします。このチュートリアルを書く時点での最新の3.10.xバージョンは3.10.14で、これを使用しました。

$ wget https://www.python.org/ftp/python/3.10.14/Python-3.10.14.tgz

アーカイブを抽出します。

$ tar xzf Python-3.10.14.tgz

抽出したディレクトリに移動します。

$ cd Python-3.10.14

ソースコードを設定します。

$ ./configure --enable-optimizations

Python 3.10.14をインストールします。altinstallコマンドは、システムのPythonバージョンを上書きしないように使用されます。

$ sudo make altinstall

インストールを確認します。

$ python3.10 -V
OR
$ python3.10 --version

次の出力が得られるはずです。

Python 3.10.14

次に、Python 3.10をデフォルトのPythonバージョンとして設定する必要があります。サーバーにインストールされている各Pythonバージョンのシンボリックリンクを作成します。シンボリックバージョンを作成する際には、コマンドにPythonの正確なバージョンを含める必要があります。次のコマンドを実行してシンボリックリンクを作成します。

$ sudo update-alternatives --install /usr/bin/python3 python3 /usr/local/bin/python3.10 1
$ sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.9 2

利用可能なPythonバージョンを表示するには、次のコマンドを使用します。

$ sudo update-alternatives --config python3

次の出力が表示されるはずです。

There are 2 programs which provide 'python3'.

  Selection    Command
-----------------------------------------------
   1           /usr/local/bin/python3.10
*+ 2           /usr/bin/python3.9

Enter to keep the current selection[+], or type selection number:

番号1を選択してPython 3.10に切り替えます。

ターミナルからログアウトして再度ログインすると、Pythonバージョンが切り替わります。これでpythonを直接使用してPython 3.10.14を使用できます。

依存関係のインストールとインストールの準備

Odooサーバー上でOdooプロセスを管理するための新しいシステムユーザーを作成します。ホームディレクトリは/opt/odooです。これは、rootユーザーで実行することによるセキュリティリスクを防ぐためです。

$ sudo useradd -m -d /opt/odoo -U -r -s /bin/bash odoo

Odoo 17のセットアップに必要なシステム依存関係をインストールします。

$ sudo dnf install -y git libxslt-devel bzip2-devel openldap-devel libjpeg-devel freetype-devel libpq-devel

Nodejsをインストールします。Rocky Linux 9にはNode 18.xが付属しており、これはNodejsの現在のLTSバージョンです。ただし、公式のNodesourceリポジトリを使用します。

Node 20リポジトリを追加します。

$ curl -fsSL https://rpm.nodesource.com/setup_20.x | sudo bash -

Nodejsをインストールします。

$ sudo dnf -y install nodejs

Nodeのバージョンを確認します。

$ node --version
v20.12.1

Nodeを使用してLess CSSパッケージをインストールします。右から左にインターフェースを持つ言語を使用している場合は、rtlcssパッケージもインストールします。

$ sudo npm install -g less rtlcss

wkhtmltopdfをインストールします。Wkhtmltopdf GitHubパッケージリポジトリからRPMパッケージを使用します。このチュートリアルを書く時点での最新バージョンは0.12.6.1 r3です。

Wkhtmltopdf RPMをダウンロードします。

$ cd ~
$ wget https://github.com/wkhtmltopdf/packaging/releases/download/0.12.6.1-3/wkhtmltox-0.12.6.1-3.almalinux9.x86_64.rpm

Wkhtmltopdfに必要なフォントをインストールします。

$ sudo dnf install xorg-x11-fonts-75dpi.noarch xorg-x11-fonts-Type1.noarch

Wkhtmltopdfをインストールします。

$ sudo rpm -i wkhtmltox-0.12.6.1-3.almalinux9.x86_64.rpm

インストールされたwkhtmltopdfのバージョンを確認します。

$ wkhtmltopdf --version
wkhtmltopdf 0.12.6.1 (with patched qt)

Odooファイルのダウンロード

Odooシステムユーザーに切り替えます。

$ sudo su - odoo

OdooのGitHubリポジトリをシステムにクローンします。

$ git clone https://github.com/odoo/odoo.git --depth 1 --branch 17.0 --single-branch

私たちの目的のために、Odooを/opt/odooディレクトリにコピーしています。ここからインストールされます。これにより、/opt/odoo/odooディレクトリが作成され、インストールに使用されます。

Python環境の仮想環境の設定

このステップはオプションですが、Odooの仮想Python環境を作成することで、特にOSのアップグレードを行う際に、オペレーティングシステムのPythonモジュールとの競合を避けるのに役立ちます。

これにはvirtualenvを使用します。

  1. Odoo用の新しいvirtualenv環境を作成します。 $ python3 -m venv odoo-env
  2. 仮想環境をアクティブにします。システムユーザーのホームディレクトリの下に環境を作成しています。好きな場所を選んで構いません。 $ source odoo-env/bin/activate
  3. 念のためPIPを更新します。 (odoo-env) $ pip3 install --upgrade pip
  4. 仮想環境にPythonのwheelをインストールします。 $ pip3 install wheel

Python依存関係のインストール

Odoo 17に必要なPython依存関係をインストールします。

$ pip3 install -r /opt/odoo/odoo/requirements.txt

要件のインストールには時間がかかる場合があるので、辛抱強くお待ちください。

インストールされたPythonモジュールのリストを確認して、要件が正しくインストールされているかどうかを確認します。

$ pip3 list
Package           Version
----------------- --------
attrs             23.2.0
Babel             2.9.1
beautifulsoup4    4.12.3
cached-property   1.5.2
certifi           2024.2.2
cffi              1.16.0
chardet           4.0.0
cryptography      3.4.8
decorator         4.4.2
docopt            0.6.2
docutils          0.17
ebaysdk           2.1.5
freezegun         1.1.0
geoip2            2.9.0
gevent            21.8.0
greenlet          1.1.2
idna              2.10
isodate           0.6.1
Jinja2            3.0.3
libsass           0.20.1
lxml              4.8.0
MarkupSafe        2.0.1
maxminddb         2.6.0
num2words         0.5.10
ofxparse          0.21
passlib           1.7.4
Pillow            9.0.1
pip               24.0
platformdirs      4.2.0
polib             1.1.1
psutil            5.9.0
psycopg2          2.9.2
pyasn1            0.6.0
pyasn1_modules    0.4.0
pycparser         2.22
pydot             1.4.2
pyOpenSSL         21.0.0
pyparsing         3.1.2
PyPDF2            1.26.0
pyserial          3.5
python-dateutil   2.8.1
python-ldap       3.4.0
python-stdnum     1.17
pytz              2024.1
pyusb             1.2.1
qrcode            7.3.1
reportlab         3.6.8
requests          2.25.1
requests-file     2.0.0
requests-toolbelt 1.0.0
rjsmin            1.1.0
setuptools        65.5.0
six               1.16.0
soupsieve         2.5
urllib3           1.26.5
vobject           0.9.6.1
Werkzeug          2.0.2
wheel             0.43.0
xlrd              1.2.0
XlsxWriter        3.0.2
xlwt              1.3.0
zeep              4.1.0
zope.event        5.0
zope.interface    6.2

Python仮想環境を終了します。

$ deactivate

サードパーティのアドオン用のディレクトリを作成

$ mkdir /opt/odoo/odoo/custom-addons

このディレクトリは、Odooがモジュールを探すディレクトリを定義するaddons_pathパラメータに追加する必要があります。Odooシステムユーザーから退出します。

$ exit

ステップ5 - Odooの設定

デフォルトのOdoo設定ファイルをコピーして新しいものを作成します。

$ sudo cp /opt/odoo/odoo/debian/odoo.conf /etc/odoo.conf

編集のためにファイルを開きます。

$ sudo nano /etc/odoo.conf

ファイルを次のように編集します。

[options]
; This is the password that allows database operations:
admin_passwd = admin
db_host = postgresql.yourdomain.com
db_port = False
db_user = odoo
db_password = odoo_password
addons_path = /opt/odoo/odoo/addons, /opt/odoo/odoo/custom-addons
xmlrpc_port = 8069
default_productivity_apps = True

Ctrl + Xを押してエディタを閉じ、ファイルを保存するように求められたらYを押します。

オプションadmin_passwdは、Odoo GUI内での管理操作を許可するパスワードです。安全なパスワードを選択してください。

オプションdb_hostは、PostgreSQLサーバーのFQDNまたはIPアドレスです。

オプションdb_portは、デフォルトのPostgreSQLポート5432が使用されているため、falseに設定されています。別のポートを使用する場合は、この値を更新する必要があります。

オプションdb_userは、PostgreSQLユーザーの名前です。

オプションdb_passwordは、以前にPostgreSQLサーバーで作成したPostgreSQLの’odoo’ユーザーのパスワードです。

オプションaddons_pathは、デフォルトのアドオンパスです。カスタムパスをアドオン用に追加することもできます。

オプションxmlrpc_portは、Odooがリッスンするポートです。

オプションdefault_productivity_appsは、デフォルトの生産性アプリ(従業員、メールマーケティング、プロジェクト、調査)が有効のままにすることを確認します。これらの4つのアプリはOdooコミュニティエディションのデフォルトです。エンタープライズエディションでは、デフォルトで有効にできる追加の生産性アプリ(アポイントメント、ナレッジ、プランニング、サイン)があります。

Odooサービスの作成

システム再起動後もOdooが動作し続けるようにするために、サービスを作成する必要があります。

ファイル/lib/systemd/system/odoo-server.serviceを作成し、編集のために開きます。

$ sudo nano /lib/systemd/system/odoo-server.service

次のコードを貼り付けます。

[Unit]
Description=Odoo Open Source ERP and CRM
Requires=postgresql-16.service
After=network.target postgresql-16.service

[Service]
Type=simple
SyslogIdentifier=odoo-server
User=odoo
Group=odoo
ExecStart=/opt/odoo/odoo-env/bin/python3 /opt/odoo/odoo/odoo-bin --config=/etc/odoo.conf --addons-path=/opt/odoo/odoo/addons/ --logfile /var/log/odoo/odoo-server.log
WorkingDirectory=/opt/odoo/odoo/
StandardOutput=journal+console
KillMode=mixed

[Install]
WantedBy=multi-user.target

/home/をPython仮想環境のインストール先に置き換えます。

Ctrl + Xを押してエディタを閉じ、ファイルを保存するように求められたらYを押します。

Odoo用のログディレクトリを作成

$ sudo mkdir /var/log/odoo

ファイルの権限を設定

odoo-server.serviceファイルの権限を設定し、Odooユーザーのみが読み取りまたは実行できるようにします。

$ sudo chmod 755 /lib/systemd/system/odoo-server.service
$ sudo chown odoo: /lib/systemd/system/odoo-server.service

Python環境、Odooインストール、およびログディレクトリの所有権を設定します。

$ sudo chown -R odoo: /opt/odoo/
$ sudo chown -R odoo: /opt/odoo/odoo-env
$ sudo chown -R odoo: /var/log/odoo

Odoo設定ファイルの制限を設定します。

$ sudo chown odoo: /etc/odoo.conf
$ sudo chmod 640 /etc/odoo.conf

Odooサーバーの開始

Odooサーバーを開始して有効にします。

$ sudo systemctl start odoo-server
$ sudo systemctl enable odoo-server

サーバーの状態を確認します。

$ sudo systemctl status odoo-server
? odoo-server.service - Odoo Open Source ERP and CRM
     Loaded: loaded (/usr/lib/systemd/system/odoo-server.service; enabled; preset: disabled)
     Active: active (running) since Tue 2024-04-09 23:59:38 UTC; 1s ago
   Main PID: 102598 (python3)
      Tasks: 4 (limit: 10736)
     Memory: 69.6M
        CPU: 895ms
     CGroup: /system.slice/odoo-server.service
             ??102598 /opt/odoo/odoo-env/bin/python3 /opt/odoo/odoo/odoo-bin --config=/etc/odoo.conf --addons-path=/opt/odoo/odoo/addons/ --logfile /var/log/odoo/odoo-server.log

Apr 09 23:59:38 odoo.yourdomain.com systemd[1]: Started Odoo Open Source ERP and CRM.

ステップ6 - Nginxのインストールと設定

Rocky Linux 9には古いバージョンのNginxが付属しています。最新バージョンをインストールするには、公式のNginxリポジトリを使用する必要があります。

ファイル/etc/yum.repos.d/nginx.repoを作成し、編集のために開きます。

$ sudo nano /etc/yum.repos.d/nginx.repo

次のコードを貼り付けます。

[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

完了したら、Ctrl + Xを押してファイルを保存し、Yを押します。上記のファイルのmainlineセクションでenabled=1を使用してmainlineリポジトリを有効にしたため、私たちはmainlineバージョンのNginxを使用します。どちらかを選択できます。

Nginxをインストールします。

$ sudo dnf install -y nginx

インストールを確認します。

$ nginx -v
nginx version: nginx/1.25.4

Nginxサーバーサービスを有効にして開始します。

$ sudo systemctl enable nginx --now

サービスの状態を確認します。

$ sudo systemctl status nginx
? nginx.service - nginx - high performance web server
     Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; preset: disabled)
     Active: active (running) since Wed 2024-04-10 06:52:14 UTC; 3s ago
       Docs: http://nginx.org/en/docs/
    Process: 103452 ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf (code=exited, status=0/SUCCESS)
   Main PID: 103453 (nginx)
      Tasks: 3 (limit: 10736)
     Memory: 3.1M
        CPU: 17ms
     CGroup: /system.slice/nginx.service
             ??103453 "nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf"
             ??103454 "nginx: worker process"
             ??103455 "nginx: worker process"

ステップ7 - SSLのインストール

Let’s Encryptが提供する無料のSSL証明書を生成するためにCertbotをインストールする必要があります。それにはSnapdパッケージインストーラーを使用します。これにはEPEL(Enterprise Linux用の追加パッケージ)リポジトリが必要です。

EPELリポジトリをインストールします。

$ sudo dnf install -y epel-release

Rocky Linux 9にはSnapdがインストールされていません。Snapdパッケージをインストールします。

$ sudo dnf install -y snapd

Snapサービスを有効にして開始します。

$ sudo systemctl enable snapd --now

Snapコアパッケージをインストールし、Snapdのバージョンが最新であることを確認します。

$ sudo snap install core
$ sudo snap refresh core

Snapdが機能するために必要なリンクを作成します。

$ sudo ln -s /var/lib/snapd/snap /snap
$ echo 'export PATH=$PATH:/var/lib/snapd/snap/bin' | sudo tee -a /etc/profile.d/snapd.sh

Certbotをインストールします。

$ sudo snap install --classic certbot

Certbotコマンドが実行できることを確認するために、次のコマンドを使用して/usr/binディレクトリにシンボリックリンクを作成します。

$ sudo ln -s /snap/bin/certbot /usr/bin/certbot

Certbotが正常に機能しているか確認します。

$ certbot --version
certbot 2.10.0

証明書を生成します。DHParams証明書も作成する必要があります。

$ sudo certbot certonly --nginx --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m [email protected] -d odoo.yourdomain.com

Diffie-Hellman鍵交換証明書を生成します。

$ sudo openssl dhparam -dsaparam -out /etc/ssl/certs/dhparam.pem 4096

Certbotの更新スケジューラーサービスを確認します。

$ sudo systemctl list-timers

スケジュールされたサービスの1つとしてsnap.certbot.renew.serviceが表示されます。

NEXT                        LEFT          LAST                        PASSED   UNIT                         ACTIVATES
....                        ....          ....                        ......   ....                         ..........
Wed 2024-04-10 13:32:11 UTC 1h 42min left Wed 2024-04-10 11:43:41 UTC 5min ago dnf-makecache.timer          dnf-makecache.service
Wed 2024-04-10 19:08:00 UTC 7h left       -                           -        snap.certbot.renew.timer     snap.certbot.renew.service
Thu 2024-04-11 00:00:00 UTC 12h left      Wed 2024-04-10 00:00:36 UTC 11h ago  logrotate.timer              logrotate.service

SSL更新が正常に機能しているか確認するために、プロセスのドライランを行います。

$ sudo certbot renew --dry-run

エラーが表示されなければ、すべて設定完了です。証明書は自動的に更新されます。

ステップ8 - Nginxの設定

Nginx経由で実行するには、Odooをlocalhostで実行する必要があります。それを変更するために、Odooサービスを停止します。

$ sudo systemctl stop odoo-server

Odooサーバー設定ファイルを開きます。

$ sudo nano /etc/odoo.conf

次の行を追加します。

xmlrpc_interface = 127.0.0.1
proxy_mode = True

Odoo用のNginx設定ファイルを作成します。

$ sudo nano /etc/nginx/conf.d/odoo.conf

以下のコードを貼り付けます。

#odoo server
upstream odoo {
 server 127.0.0.1:8069;
}
upstream odoochat {
 server 127.0.0.1:8072;
}
map $http_upgrade $connection_upgrade {
  default upgrade;
  ''      close;
}
map $sent_http_content_type $content_type_csp {
    default "";
    ~image/ "default-src 'none'";
}

# http -> https
server {
   listen 80;
   listen [::]:80;
   server_name odoo.yourdomain.com;
   return 301 https://$host$request_uri;
}

server {
 listen 443 ssl;
 listen [::]:443 ssl;
 http2 on;
 http3 on;
 quic_retry on;

 server_name odoo.yourdomain.com;

 proxy_read_timeout 720s;
 proxy_connect_timeout 720s;
 proxy_send_timeout 720s;

 # Add Headers for odoo proxy mode
 proxy_set_header X-Forwarded-Host $host;
 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
 proxy_set_header X-Forwarded-Proto $scheme;
 proxy_set_header X-Real-IP $remote_addr;

 # SSL parameters
 ssl_certificate /etc/letsencrypt/live/odoo.yourdomain.com/fullchain.pem;
 ssl_certificate_key /etc/letsencrypt/live/odoo.yourdomain.com/privkey.pem;
 ssl_trusted_certificate /etc/letsencrypt/live/odoo.yourdomain.com/chain.pem;

 ssl_session_timeout 30m;
 ssl_session_cache shared:MozSSL:10m;  # about 40000 sessions
 ssl_session_tickets off;

 ssl_protocols TLSv1.2 TLSv1.3;
 ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
 ssl_ecdh_curve X25519:prime256v1:secp384r1:secp521r1;
 ssl_prefer_server_ciphers off;
 ssl_stapling on;
 ssl_stapling_verify on;
 ssl_dhparam /etc/ssl/certs/dhparam.pem;

 # log
 access_log /var/log/nginx/odoo.access.log;
 error_log /var/log/nginx/odoo.error.log;

 # Redirect longpoll requests to odoo longpolling port
 location /longpolling {
   proxy_pass http://odoochat;
 }

 location /websocket {
   proxy_pass http://odoochat;
   proxy_set_header Upgrade $http_upgrade;
   proxy_set_header Connection $connection_upgrade;
   proxy_set_header X-Forwarded-Host $http_host;
   proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
   proxy_set_header X-Forwarded-Proto $scheme;
   proxy_set_header X-Real-IP $remote_addr;
   proxy_cookie_flags session_id samesite=lax secure;  # requires nginx 1.19.8
 }

 # Redirect requests to odoo backend server
 location / {
  # Add Headers for odoo proxy mode
   proxy_set_header X-Forwarded-Host $http_host;
   proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
   proxy_set_header X-Forwarded-Proto $scheme;
   proxy_set_header X-Real-IP $remote_addr;
   proxy_redirect off;
   proxy_pass http://odoo;
   proxy_cookie_flags session_id samesite=lax secure;  # requires nginx 1.19.8
 }

 # common gzip
 gzip_types text/css text/scss text/plain text/xml application/xml application/json application/javascript;
 gzip on;

 # Serve static files right away
 location ~ ^/[^/]+/static/.+$ {
   # root and try_files both depend on your addons paths
   root /opt/odoo/odoo;
   try_files /opt/odoo/odoo/addons$uri @odoo;
   expires 24h;
   add_header Content-Security-Policy $content_type_csp;
 }
}

Ctrl + Xを押してエディタを閉じ、ファイルを保存するように求められたらYを押します。

ファイル/etc/nginx/nginx.confを編集のために開きます。

$ sudo nano /etc/nginx/nginx.conf

include /etc/nginx/conf.d/*.conf;の前に次の行を追加します。

server_names_hash_bucket_size 64;

Ctrl + Xを押してファイルを保存し、Yを押します。

Nginx設定をテストします。

$ sudo nginx -t

エラーが表示されなければ、準備完了です。Nginxサーバーを再起動します。

$ sudo systemctl restart nginx

ステップ9 - Odooの起動

すべての設定が完了したら、Odooサーバーを再度起動できます。

$ sudo systemctl start odoo-server

ブラウザでhttps://odoo.yourdomain.comにアクセスします。ブラウザでURLhttp://:8069またはhttp://odoo.yourdomain.com:8069を開くと、すべてが正常に動作していればOdooのデータベース作成画面が表示されます。

メールアドレスとパスワードを選択してログイン資格情報を作成します。マスターパスワードは/etc/odoo.confファイルに追加したadmin_passwdです。残りのフィールドにすべて入力します。

データベースにサンプルデータを入力するためにDemo Dataフィールドをチェックします。インターネットに接続されたサーバーにデモデータをインストールしないでください。デモデータを含むデータベースには、システムに侵入するために使用できるデフォルトのログインとパスワードが含まれており、重大な問題を引き起こす可能性があります。これはチュートリアル目的でのみ使用しています。

Create databaseボタンをクリックしてインストールを完了します。データベースを初めて作成する際、アドオンページの読み込みに時間がかかるため、ページをリフレッシュしないでください。データベースが作成されると、自動的に次のログインページにリダイレクトされます。

前のステップで使用した資格情報を入力してOdoo ERPにログインすると、以下のようなダッシュボードページに移動します。デモデータで事前に入力されています。デモデータオプションをデータベース作成ページでチェックしなかった場合、異なる、はるかにクリーンなダッシュボードが表示されます。

ここからOdooを使用してビジネスを管理できます。

ステップ10 - Odooの更新

Odooサーバーを停止します。

$ sudo systemctl stop odoo-server

Odooシステムユーザーに切り替えます。

$ sudo su - odoo

GitHubから最新のソースコードを取得します。

$ git fetch
$ git rebase --autostash

2番目のコマンドは、ソースを手動で変更した場合にソースコードの競合が発生する可能性があります。競合したファイルのリストが表示されます。すべてのファイルを手動で変更し、問題を修正するためにコマンドを再実行する必要があります。

競合する変更を破棄したい場合は、次のコマンドを実行してソースをリセットできます。

$ git reset --hard

Python仮想環境をアクティブにします。

$ source odoo-env/bin/activate

Python依存関係をインストールします。

$ pip3 install -r /opt/odoo/odoo/requirements.txt

Python仮想環境を終了します。

$ deactivate

Odooサーバーを起動します。

$ sudo systemctl start odoo-server

ステップ11 - Fail2Banを使用してOdooを保護

このステップはオプションですが、Fail2Banがインストールされている場合は、Odooを保護するための設定を追加できます。

odoo-login.confファイルを作成して編集のために開きます。

$ sudo nano /etc/fail2ban/jail.d/odoo-login.conf

次のコードを貼り付けます。

[odoo-login]
enabled = true
port = http,https
bantime = 900  ; 15 min ban
maxretry = 10  ; if 10 attempts
findtime = 60  ; within 1 min  /!\ Should be adjusted with the TZ offset
logpath = /var/log/odoo.log  ;  set the actual odoo log path here

Ctrl + Xを押してエディタを閉じ、ファイルを保存するように求められたらYを押します。

odoo-login.confフィルタファイルを作成して編集のために開きます。

$ sudo nano /etc/fail2ban/filter.d/odoo-login.conf

次のコードを貼り付けます。

[Definition]
failregex = ^ \d+ INFO \S+ \S+ Login failed for db:\S+ login:\S+ from 
ignoreregex =

Ctrl + Xを押してエディタを閉じ、ファイルを保存するように求められたらYを押します。

Fail2Banを再起動します。

$ sudo systemctl restart fail2ban

結論

これで、Rocky Linux 9サーバーにOdooをインストールおよび設定するチュートリアルが終了しました。質問がある場合は、下のコメントに投稿してください。

Share: X/Twitter LinkedIn

新しい投稿を受信箱で受け取る

スパムはありません。いつでも購読を解除できます。