安裝 Redis Server 為 Magento 2.3.3 提供 Session 快取加速

Magento 預設的 Session 是存放在實體硬碟上,位置位於 var/session

而 Redis Server 是一種 NoSQL 記憶體式的資料庫(key-value)

即便使用 SSD,在速度上還是比不上存放在記憶體中

安裝方式

於 CentOS 7 之下可直接利用 yum 來安裝

yum install -y redis

#設定開機啟動
systemctl enable redis

#立即啟動
systemctl start redis

#查看redis監聽的port(預設是6379)
systemctl status redis
ss -nlp | grep redis

#開放 6379 port
firewall-cmd --permanent --zone=public --add-port=6379/tcp
firewall-cmd --reload

#查看防火牆開放的 port 是否有 6379
firewall-cmd --list-all --zone=public

設定 Magento 預設快取

bin/magento setup:config:set --cache-backend=redis

設定 Magento 頁面快取

bin/magento setup:config:set --page-cache=redis

設定 Magento Session 快取

bin/magento setup:config:set --session-save=redis
之後檢查 var/session  var/cache 資料夾應該不會再產生新的檔案

參考資料

Use Redis for session storage

Use Redis for the Magento page and default cache

 

 

安裝 Redis Server 為 Magento 1.9 提供 Session 快取加速

Magento 預設的 Session 是存放在實體硬碟上,位置位於 var/session

而 Redis Server 是一種 NoSQL 記憶體式的資料庫(key-value)

即便使用 SSD,在速度上還是比不上存放在記憶體中

安裝方式

於 CentOS 7 之下可直接利用 yum 來安裝

yum install -y redis

#設定開機啟動
systemctl enable redis

#立即啟動
systemctl start redis

#查看redis監聽的port(預設是6379)
systemctl status redis
ss -nlp | grep redis

#開放 6379 port
firewall-cmd --permanent --zone=public --add-port=6379/tcp
firewall-cmd --reload

#查看防火牆開放的 port 是否有 6379
firewall-cmd --list-all --zone=public

調整 Magento 設定

/app/etc/local.xml 第 29 行的

<session_save><![CDATA[files]]></session_save>

替換為

 
<!-- This is a child node of config/global -->
<cache>
  <backend>Cm_Cache_Backend_Redis</backend>
  <backend_options>
    <server>127.0.0.1</server> <!-- or absolute path to unix socket -->
    <port>6379</port>
    <persistent></persistent> <!-- Specify unique string to enable persistent connections. E.g.: sess-db0; bugs with phpredis and php-fpm are known: //github.com/nicolasff/phpredis/issues/70 -->
    <database>0</database> <!-- Redis database number; protection against accidental data loss is improved by not sharing databases -->
    <password></password> <!-- Specify if your server requires authentication -->
    <force_standalone>0</force_standalone>  <!-- 0 for phpredis, 1 for standalone PHP -->
    <connect_retries>1</connect_retries>    <!-- Reduces errors due to random connection failures; a value of 1 will not retry after the first failure -->
    <read_timeout>10</read_timeout>         <!-- Set read timeout duration; phpredis does not currently support setting read timeouts -->
    <automatic_cleaning_factor>0</automatic_cleaning_factor> <!-- Disabled by default -->
    <compress_data>1</compress_data>  <!-- 0-9 for compression level, recommended: 0 or 1 -->
    <compress_tags>1</compress_tags>  <!-- 0-9 for compression level, recommended: 0 or 1 -->
    <compress_threshold>20480</compress_threshold>  <!-- Strings below this size will not be compressed -->
    <compression_lib>gzip</compression_lib> <!-- Supports gzip, lzf, lz4 (as l4z) and snappy -->
    <use_lua>0</use_lua> <!-- Set to 1 if Lua scripts should be used for some operations -->
  </backend_options>
</cache>
        <!--session_save><![CDATA[files]]></session_save-->
 
<session_save>db</session_save>
        <redis_session>                       <!-- All options seen here are the defaults -->
            <host>127.0.0.1</host>            <!-- Specify an absolute path if using a unix socket -->
            <port>6379</port>
            <password></password>             <!-- Specify if your server requires authentication -->
            <timeout>2.5</timeout>            <!-- This is the connection timeout, not the locking timeout -->
            <persistent></persistent>         <!-- Specify unique string to enable persistent connections. E.g.: sess-db0; bugs with phpredis and php-fpm are known: //github.com/nicolasff/phpredis/issues/70 -->
            <db>0</db>                        <!-- Redis database number; protection from accidental loss is improved by using a unique DB number for sessions -->
            <compression_threshold>2048</compression_threshold>  <!-- Set to 0 to disable compression (recommended when suhosin.session.encrypt=on); known bug with strings over 64k: //github.com/colinmollenhour/Cm_Cache_Backend_Redis/issues/18 -->
            <compression_lib>gzip</compression_lib>              <!-- gzip, lzf, lz4 or snappy -->
            <log_level>1</log_level>               <!-- 0 (emergency: system is unusable), 4 (warning; additional information, recommended), 5 (notice: normal but significant condition), 6 (info: informational messages), 7 (debug: the most information for development/testing) -->
            <max_concurrency>6</max_concurrency>                 <!-- maximum number of processes that can wait for a lock on one session; for large production clusters, set this to at least 10% of the number of PHP processes -->
            <break_after_frontend>5</break_after_frontend>       <!-- seconds to wait for a session lock in the frontend; not as critical as admin -->
            <fail_after>10</fail_after>                          <!-- seconds after which we bail from attempting to obtain lock (in addition to break after time) -->
            <break_after_adminhtml>30</break_after_adminhtml>
            <first_lifetime>600</first_lifetime>                 <!-- Lifetime of session for non-bots on the first write. 0 to disable -->
            <bot_first_lifetime>60</bot_first_lifetime>          <!-- Lifetime of session for bots on the first write. 0 to disable -->
            <bot_lifetime>7200</bot_lifetime>                    <!-- Lifetime of session for bots on subsequent writes. 0 to disable -->
            <disable_locking>0</disable_locking>                 <!-- Disable session locking entirely. -->
            <min_lifetime>60</min_lifetime>                      <!-- Set the minimum session lifetime -->
            <max_lifetime>2592000</max_lifetime>                 <!-- Set the maximum session lifetime -->
        </redis_session>

再修改 app/etc/modules/Cm_RedisSession.xml

<active>false</active>

<active>true</active>

清除快取

php ./resetopc.php
rm -rf ./var/session/* && ./var/cache/*
之後檢查 session 資料夾應該不會再產生新的檔案

參考資料

CentOS 7 安裝 Redis、php-pecl-redis(phpredis)

Configure Magento 1.9.x with Redis as Backend Cache

在magento1上設定Redis session

 

如何在 gcloud 上將 CentOS 7 中的 PHP 5.6 升級至 PHP 7.2

Mattermost 升級教學 4.7.0 to 5.27.0 on CentOS 7.0

於 CentOS 7.0 安裝 odoo 10.0(遠端資料庫)- 安裝篇

此篇教學是使用 CentOS 7.0 Minimal ISO – CentOS-7-x86_64-Minimal-1611.iso 安裝初始系統

yum -y update
yum install -y wget vim open-vm-tools epel-release unzip gcc python-psutil python-ldap
調整防火牆規則
firewall-cmd --zone=public --permanent --add-port=8069/tcp && firewall-cmd --reload
安裝 postgresql 9.6.9 版(遠端 PostgreSQL Server 使用 9.6.9 版)
yum install -y https://download.postgresql.org/pub/repos/yum/9.6/redhat/rhel-7-x86_64/postgresql96-9.6.9-1PGDG.rhel7.x86_64.rpm https://download.postgresql.org/pub/repos/yum/9.6/redhat/rhel-7-x86_64/postgresql96-libs-9.6.9-1PGDG.rhel7.x86_64.rpm
安裝 Python 相依性模組
wget https://raw.githubusercontent.com/odoo/odoo/10.0/requirements.txt
easy_install pip
pip install --upgrade setuptools
pip install -r requirements.txt

python-psutil ?
python-ldap ?
reportlab ? 

建立 Odoo 10.0 的 yum repo
wget https://nightly.odoo.com/10.0/nightly/rpm/odoo.repo -P /etc/yum.repos.d/
安裝 Odoo 10.0
yum update && yum install -y odoo
編輯 config 檔
vim /etc/odoo/odoo.conf

[options]
; This is the password that allows database operations:
admin_passwd = 要使用的密碼
db_host = 遠端資料庫 IP
db_port = 5432
db_user = 遠端資料庫用戶名稱
db_password = 遠端資料庫用戶密碼
;dbfilter = ^%d$
addons_path = /opt/odoo10_apps,/usr/lib/python2.7/site-packages/openerp/addons
logfile = /var/log/odoo/odoo-server.log
workers = 8
;limit_memory_hard = 805306368
;limit_memory_soft = 671088640
;limit_request = 8192
;limit_time_cpu = 600
;limit_time_real = 1200
max_cron_threads = 1
安裝 reportlab(用於產生 Barcode)
pip install reportlab --upgrade
cd /usr/lib64/python2.7/site-packages/reportlab && wget http://www.reportlab.com/ftp/fonts/pfbfer.zip
unzip pfbfer.zip && rm pfbfer.zip
安裝 Python Crypto(用於電子發票模組)
yum install -y python-crypto
安裝 wkhtmltopdf(用於產生 PDF 報表)
wget https://github.com/wkhtmltopdf/wkhtmltopdf/releases/download/0.12.2.1/wkhtmltox-0.12.2.1_linux-centos7-amd64.rpm
yum install -y wkhtmltox-0.12.2.1_linux-centos7-amd64.rpm
yum install -y https://github.com/wkhtmltopdf/wkhtmltopdf/releases/download/0.12.2.1/wkhtmltox-0.12.2.1_linux-centos7-amd64.rpm
啟動 odoo 並設定為開機服務
systemctl start odoo && systemctl enable odoo

就有一個完整的 Odoo 系統了

Mattermost 升級教學 4.2.0 to 4.7.0 on CentOS 7.0

CentOS 7.0 安裝 odoo 9.0(遠端資料庫)- 轉移篇

於前篇 CentOS 7.0 安裝 odoo 9.0(遠端資料庫)- 安裝篇 ,我們安裝全新的 Odoo 9.0

接著在轉移篇中我們會將於 Ubuntu 中運行的 Odoo 轉移至 CentOS 下

轉移 Filestore(假定需轉移資料庫名稱為 odoo)
# 於 Ubuntu Server
cd /var/lib/odoo/.local/share/Odoo/filestore
tar zcvf odoo_fs.tar.gz odoo
scp odoo_fs.tar.gz root@192.168.1.237:~

# 於 CentOS Server
tar zxvf odoo_fs.tar.gz
/bin/cp -rf odoo /var/lib/odoo/filestore/
Chown -R odoo: /var/lib/odoo/filestore/
rm -rf odoo odoo_fs.tar.gz
轉移 Apps(需注意 mis_builder 與 web_widget_color 存放在 odoo 資料夾中)
# 於 Ubuntu Server
/bin/cp -rf /usr/lib/python2.7/dist-packages/openerp/addons/mis_builder /usr/lib/python2.7/dist-packages/openerp/addons/web_widget_color /opt/apps_odoo9
cd /opt
tar zcvf odoo_apps.tar.gz apps_odoo9
scp odoo_apps.tar.gz root@192.168.1.237:~

# 於 CentOS Server
tar zxvf odoo_apps.tar.gz && rm -rf odoo_apps.tar.gz
mv apps_odoo9 /opt/
Chown -R root: /opt/apps_odoo9
轉移字型檔

由於 CentOS 7.0 中並沒有預載我們所需的字型 – DejaVu Sans YuanTi

因此直接從舊主機上轉移過來字型檔,並放入合適的資料夾後重新建立字型快取

# 於 Ubuntu Server
cd /usr/share/fonts/truetype/dejavu/
tar zcvf odoo_fonts.tar.gz DejaVuSans-BoldOblique.ttf DejaVuSans-Bold.ttf DejaVuSans-Oblique.ttf DejaVuSans.ttf
scp odoo_fonts.tar.gz root@192.168.1.237:~

# 於 CentOS Server
tar zxvf odoo_fonts.tar.gz
/bin/cp -rf ./ttf /usr/share/fonts/dejavu && rm -rf odoo_fonts.tar.gz *.ttf
fc-cache -fv

再來到 Odoo 8/9 中, Settings / General Settings / Report Font 中調整字型即完成

系統檔案資料

odoo 資料夾:/usr/lib/python2.7/site-packages/openerp/addons

odoo 設定檔:/etc/odoo/openerp-server.conf

odoo 紀錄檔:/var/log/odoo/odoo-server.log

odoo 檔案區:/var/lib/odoo/.local/share/Odoo/filestore (Ubuntu,owner = odoo)

odoo 檔案區:/var/lib/odoo/filestore (CentOS,owner = odoo)

字型資料夾:/usr/share/fonts/

reportlab 資料夾:/usr/lib64/python2.7/site-packages/reportlab/fonts/

潛在問題

1. 列印報表檔案內容為空白,容量 0 byte

經測試 wkhtmltopdf 只有 0.12.2.1 可正常顯示,0.12.1、0.12.4.1 都無法正常產生 PDF 檔

2. 錯誤訊息:Can’t find .pfb for face ‘Times-Roman’(尚未確認是否會遇到)

依照此連結 http://stackoverflow.com/questions/28281891/cant-setfonttimes-roman-missing-the-t1-files

下載 pfb 檔案後,解壓縮至 /usr/lib64/python2.7/dist-packages/reportlab/fonts/

fonts 目錄可能並不存在,需要先手動建立

cd /usr/lib64/python2.7/site-packages/reportlab/fonts/
wget http://www.reportlab.com/ftp/fonts/pfbfer.zip && unzip pfbfer.zip
rm -rf pfbfer.zip
3. ImportError: No module named gevent.monkey
easy_install pip
pip install gevent

 

參考資料

[10.0] Generated empty PDF file

How to use custom fonts in RML reports?

於 CentOS 7.0 安裝 odoo 9.0(遠端資料庫)- 安裝篇

此篇教學是使用 CentOS 7.0 Minimal ISO – CentOS-7-x86_64-Minimal-1611.iso 安裝初始系統

yum -y update
yum install -y wget vim open-vm-tools epel-release python-pip unzip
調整防火牆規則
firewall-cmd --zone=public --permanent --add-port=8069/tcp && firewall-cmd --reload
建立 Odoo 9.0 的 yum repo
wget https://nightly.odoo.com/9.0/nightly/rpm/odoo.repo -P /etc/yum.repos.d/
安裝 Odoo 9.0
yum install -y odoo
編輯 config 檔
vim /etc/odoo/openerp-server.conf

[options]
; This is the password that allows database operations:
admin_passwd = 要使用的密碼
db_host = 遠端資料庫 IP
db_port = 5432
db_user = 遠端資料庫用戶名稱
db_password = 遠端資料庫用戶密碼
;dbfilter = ^%d$
addons_path = /opt/apps_odoo9,/usr/lib/python2.7/site-packages/openerp/addons
logfile = /var/log/odoo/odoo-server.log
workers = 8
;limit_memory_hard = 805306368
;limit_memory_soft = 671088640
;limit_request = 8192
;limit_time_cpu = 600
;limit_time_real = 1200
max_cron_threads = 1
安裝相依性 Python 模組
yum install -y https://forensics.cert.org/centos/cert/7/x86_64//pyparsing-2.2.0-1.el7.noarch.rpm http://cbs.centos.org/kojifiles/packages/babel/1.3/6.el7/noarch/python-babel-1.3-6.el7.noarch.rpm

easy_install pip
pip install setuptools==1.4.1
pip install gevent pyserial python-chart pyusb qrcode suds-jurko
安裝 reportlab(用於產生 Barcode)
cd /usr/lib64/python2.7/site-packages/reportlab && wget http://www.reportlab.com/ftp/fonts/pfbfer.zip
unzip pfbfer.zip && rm -f pfbfer.zip
安裝 wkhtmltopdf(用於產生 PDF 報表)
cd ~ && wget https://github.com/wkhtmltopdf/wkhtmltopdf/releases/download/0.12.2.1/wkhtmltox-0.12.2.1_linux-centos7-amd64.rpm
yum install -y wkhtmltox-0.12.2.1_linux-centos7-amd64.rpm && rm -f wkhtmltox-0.12.2.1_linux-centos7-amd64.rpm
安裝 xlrd xlsxwriter(用於我們自行開發的模組,產生 Excel 表格用,xlrd 為讀取用,或許不需要安裝)
pip install xlrd xlsxwriter
啟動 odoo 並設定為開機服務
systemctl start odoo && systemctl enable odoo

就有一個完整的 Odoo 系統了

接下來可參考 於 CentOS 7.0 安裝 odoo 9.0(遠端資料庫)- 轉移篇 將現行的資料轉移新主機上

Dependency

Installing:
odoo noarch 9.0rc20180619-1 odoo-nightly 105 M
Installing for dependencies:
PyYAML x86_64 3.10-11.el7 base 153 k
antlr-python noarch 2.7.7-30.el7 base 50 k
babel noarch 0.9.6-8.el7 base 15 k
dejavu-fonts-common noarch 2.33-6.el7 base 64 k
dejavu-sans-fonts noarch 2.33-6.el7 base 1.4 M
fontpackages-filesystem noarch 1.44-8.el7 base 9.9 k
http-parser x86_64 2.7.1-5.el7_4 base 28 k
jbigkit-libs x86_64 2.0-11.el7 base 46 k
libjpeg-turbo x86_64 1.2.90-5.el7 base 134 k
libtiff x86_64 4.0.3-27.el7_3 base 170 k
libuv x86_64 1:1.19.2-1.el7 epel 121 k
libwebp x86_64 0.3.0-7.el7 base 170 k
libxml2-python x86_64 2.9.1-6.el7_2.3 base 247 k
libxslt-python x86_64 1.1.28-5.el7 base 59 k
libyaml x86_64 0.1.4-11.el7_0 base 55 k
nodejs x86_64 1:6.14.2-1.el7 epel 4.7 M
nodejs-less noarch 1.7.0-2.el7 epel 102 k
npm x86_64 1:3.10.10-1.6.14.2.1.el7 epel 2.5 M
postgresql-libs x86_64 9.2.23-3.el7_4 base 234 k
pyOpenSSL x86_64 0.13.1-3.el7 base 133 k
pychart noarch 1.39-17.el7 epel 190 k
pyparsing noarch 1.5.6-9.el7 base 94 k
python-babel noarch 0.9.6-8.el7 base 1.4 M
python-backports x86_64 1.0-8.el7 base 5.8 k
python-backports-ssl_match_hostname
noarch 3.5.0.1-1.el7 base 13 k
python-beaker noarch 1.5.4-10.el7 base 80 k
python-chardet noarch 2.2.1-1.el7_1 base 227 k
python-dateutil noarch 1.5-7.el7 base 85 k
python-docutils noarch 0.11-0.3.20130715svn7687.el7 base 1.5 M
python-feedparser noarch 5.1.3-3.el7 epel 107 k
python-ipaddress noarch 1.0.16-2.el7 base 34 k
python-jinja2 noarch 2.7.2-2.el7 base 515 k
python-ldap x86_64 2.4.15-2.el7 base 159 k
python-lxml x86_64 3.2.1-4.el7 base 758 k
python-mako noarch 0.8.1-2.el7 base 307 k
python-markupsafe x86_64 0.11-10.el7 base 25 k
python-openid noarch 2.2.5-7.el7 epel 211 k
python-passlib noarch 1.6.5-2.el7 extras 488 k
python-paste noarch 1.7.5.1-9.20111221hg1498.el7 base 866 k
python-pillow x86_64 2.0.0-19.gitd1c6db8.el7 base 438 k
python-psycopg2 x86_64 2.5.1-3.el7 base 132 k
python-reportlab x86_64 2.5-9.el7 base 1.2 M
python-requests noarch 2.6.0-1.el7_1 base 94 k
python-setuptools noarch 0.9.8-7.el7 base 397 k
python-six noarch 1.9.0-2.el7 base 29 k
python-tempita noarch 0.5.1-6.el7 base 33 k
python-urllib3 noarch 1.10.2-5.el7 base 102 k
python-vobject noarch 0.8.1c-8.el7 epel 88 k
python-werkzeug noarch 0.9.1-2.el7 extras 562 k
python-xlwt noarch 0.7.4-5.el7 epel 164 k
python2-mock noarch 1.0.1-9.el7 epel 92 k
python2-psutil x86_64 2.2.1-3.el7 epel 116 k
pytz noarch 2016.10-2.el7 base 46 k
ycssmin noarch 1.0.1-6.el7 epel 12 k

參考資料:

How to install Odoo 9 on a CentOS 7 VPS

How to Setup OpenERP (Odoo) on CentOS 7.x

Setting Up OpenERP (Odoo) 9 with Nginx on RHEL/CentOS and Debian/Ubuntu

Barcode and QR code on Odoo v9

安裝 Google Cloud SDK on CentOS 7

於 Google Compute Engine CentOS 7.0 設定 Dehydrated 與轉移 SSL 憑證

於 Google Compute Engine CentOS 7.0 建置 Magento 使用環境已經完成基礎環境設置,接著需要完成 SSL 認證檔的轉移與 Dehydrated 的設定

轉移 Dehydrated 與 SSL 憑證

建立需要的目錄

mkdir -p /etc/dehydrated/ && mkdir -p /var/www/dehydrated/ && mkdir -p /usr/share/nginx/html/.well-known/acme-challenge/

打包舊主機上的檔案

/bin/cp /etc/nginx/cert/dhparam.pem /etc/dehydrated/
cd /etc/
tar zcvf dehydrated.tar.gz dehydrated
mv dehydrated.tar.gz /usr/share/nginx/html/ && chown -R nginx: /usr/share/nginx/html/dehydrated.tar.gz

下載至新主機上並放置至相關位置

curl -O https://www.gapl.com.tw/dehydrated.tar.gz
tar zxvf dehydrated.tar.gz && mv dehydrated /etc/

轉移 Magento 檔案

打包舊主機上的 Magento 並轉移

cd /usr/share/nginx/ && tar zcf magento_$(date +%Y-%m-%d).tar.gz html --exclude html/var/cache --exclude html/var/session --exclude html/var/log
mv magento_$(date +%Y-%m-%d).tar.gz /usr/share/nginx/html && chown nginx: /usr/share/nginx/html/magento_$(date +%Y-%m-%d).tar.gz

下載至新主機上並放置至相關位置

curl -O https://www.gapl.com.tw/magento_$(date +%Y-%m-%d).tar.gz
tar zxvf magento_$(date +%Y-%m-%d).tar.gz && mv html /usr/share/nginx/
chown -R nginx: /usr/share/nginx/html

自動展期與 Cron 設定

編輯 crontab 設定檔

vim /etc/crontab

加入這三行(於每周六 AM 3:00 檢查是否需要展期,AM 3:05 reload NGINX)

*/5 * * * * nginx /usr/share/nginx/html/cron.sh
00 3 * * 6 root /etc/dehydrated/dehydrated -c -d www.gapl.com.tw
05 3 * * 6 root systemctl reload nginx.service

重新啟動 cron service

systemctl restart crond.service

移除舊主機上的 cron 設定並重新啟動 cron service