Migrasi host Odoo 10 dan pemutakhiran ke Odoo 11, 12, dan 13¶
Langkah-langkah umum¶
- Membuat droplet baru odoo10-migrasi dengan sistem operasi Ubuntu 16.04
- Instalasi
nginx
apt-get install curl gnupg2 ca-certificates lsb-release echo "deb http://nginx.org/packages/ubuntu `lsb_release -cs` nginx" \ | tee /etc/apt/sources.list.d/nginx.list curl -fsSL https://nginx.org/keys/nginx_signing.key | apt-key add - apt-key fingerprint ABF5BD827BD9BF62z apt-get update && apt-get install -y nginx nginx -v - Instalasi
psql
echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | apt-key add - apt-get update && apt-get install -y postgresql-client psql --version - Instalasi
wkhtmltopdf
VERSI_WKHTMLTOPDF="0.12.6-1" REPO_WKHTMLTOPDF="https://github.com/wkhtmltopdf/packaging/releases/download" DISTRO_ARSITEKTUR="xenial_amd64" wget $REPO_WKHTMLTOPDF/$VERSI_WKHTMLTOPDF/wkhtmltox_$VERSI_WKHTMLTOPDF.$DISTRO_ARSITEKTUR.deb dpkg --install *.deb apt-get --fix-missing install -y apt-get --fix-broken install -y wkhtmltopdf --version
- Instalasi
- Memastikan aturan pada cloud firewall sudah sesuai untuk akses antara
odoo10-sumber,odoo10-migrasidanodoo-postgresql12 - Mencadangankan PD, dilakukan pada peladen PD
odoo-postgresql12
BERKAS_CADANGAN="`date +%Y%m%d%H%M`.wow.dump.sql" NAMA_HOS_SUMBER="10.20.30.10" PENGGUNA_HOS_SUMBER="pengguna_hos_sumber" PD_APL_SUMBER="pd_apl_sumber" echo $BERKAS_CADANGAN pg_dump -h $NAMA_HOS_SUMBER \ -U $PENGGUNA_HOS_SUMBER \ -d $PD_APL_SUMBER \ -v -O -x -c -C -Fc > $BERKAS_CADANGAN - Memulihkan PD, dilakukan pada peladen PD
db04-postgresql12
NAMA_HOS_TUJUAN="10.20.30.20" PENGGUNA_HOS_TUJUAN="pengguna_hos_tujuan" PD_APL_TUJUAN="pd_apl_tujuan" pg_restore -h $NAMA_HOS_TUJUAN \ -U $PENGGUNA_HOS_TUJUAN \ -C -d $PD_APL_TUJUAN \ -v -e -O -x -c --if-exists $BERKAS_CADANGAN - Duplikat PD melalui http://ip-odoo10-migrasi/web/database/manager
- Mematikan modul pada PD hasil duplikat untuk memperlancar pemutakhiran PD Odoo 10 ke 11
- Utama
- account_accountant
- hr_expense
- sale_expense
- account_asset
- account_budget
- auth_ldap
- auth_signup
- gamification
- gamification_sale_crm
- hr_contract
- hr_gamification
- hr_recruitment_survey
- hr_timesheet_sheet
- project_issue_sheet
- website_project_issue_sheet
- maintenance
- mass_mailing
- mrp_repair
- rating_project
- rating_project_issue
- sale_service_rating
- note
- account_accountant
- Tambahan
- asset
- auditlog
- backend_theme_v10
- base_user_role
- document_management_system
- hr_holidays_multi_levels_approval
- knowledge
- mailgun
- mail_tracking
- mail_tracking_mailgun
- mass_editing
- odoo_web_login
- smile_api_rest
- snippet_google_map
- google_account
- google_calendar
- google_drive
- google_spreadsheet
- website_google_map
- Modul utama (tepakai belum maksimal, sudah ada sejarah data)
- fleet
- hr_attendence
- hr_holidays
- Utama
- Duplikat terlebih dahulu PD yang akan dimigrasikan melalui
http://domain.tld/web/database/manager - Eksekusi satu kali pembaruan Odoo 10
NAMA_PD_ODOO10="nama_pd_odoo10" systemctl stop odoo sudo -u odoo /usr/bin/odoo --config=/etc/odoo/odoo.conf --database=$NAMA_PD_ODOO10 --update=all --stop-after-init systemctl start odoo - Menyiapkan Python 3.7
# dep apt-get install -y \ build-essential \ checkinstall \ libbz2-dev \ libc6-dev libbz2-dev \ libffi-dev \ libgdbm-dev \ libncurses5-dev \ libncursesw5-dev \ libreadline-dev \ libreadline-gplv2-dev \ libsqlite3-dev \ libssl-dev \ llvm \ make \ tk-dev xz-utils \ zlib1g-dev # OpenSSL VERSI_OPENSSL="1.1.1g" cd /usr/src curl https://www.openssl.org/source/openssl-$VERSI_OPENSSL.tar.gz \ | tar xz cd openssl-$VERSI_OPENSSL ./config shared --prefix=/usr/local/ make -j4 && make install mkdir lib cp -v ./*.{so,so.1.1,a,pc} ./lib export LDFLAGS="-L/usr/local/lib/" export LD_LIBRARY_PATH="/usr/local/lib/" export CPPFLAGS="-I/usr/local/include -I/usr/local/include/openssl" # Python 3 VERSI_PYTHON="3.7.9" BIN_PYTHON="python3.7" cd /usr/src wget https://www.python.org/ftp/python/$VERSI_PYTHON/Python-$VERSI_PYTHON.tgz tar xzf Python-$VERSI_PYTHON.tgz cd Python-$VERSI_PYTHON ./configure \ --with-openssl=/usr/src/openssl-$VERSI_OPENSSL \ --with-ensurepip=install # --enable-optimizations make -j4 && make altinstall # uji python3.7 openssl $BIN_PYTHON
import ssl ssl.OPENSSL_VERSION exit()
# certifi BIN_PIP="pip3.7" $BIN_PIP install certifi ln -sv /usr/local/lib/$BIN_PYTHON/site-packages/certifi/cacert.pem \ /usr/local/ssl/cert.pem - Nonaktifkan beberapa parameter pada
/etc/odoo/odoo.conf
#addons_path #dbfilter #logrotate #server_wide_modules #workers - Instal OpenUpgrade
BIN_PIP="pip3.7" systemctl stop odoo git clone https://github.com/OCA/OpenUpgrade.git cd OpenUpgrade git checkout 11.0 $BIN_PIP install -U pip $BIN_PIP install wheel setuptools $BIN_PIP install -r requirements.txt $BIN_PIP install ninja2 gdata python-openid psycogreen PyPDF2 $BIN_PIP install PyPDF2 passlib babel werkzeug decorator $BIN_PIP install --ignore-installed git+https://github.com/OCA/openupgradelib.git@master - Migrasi PD dari Odoo 10 ke Odoo 11
BIN_PYTHON="python3.7" PD_MIGRASI="migrasi1011_3_1_1" PD_HOS="10.20.30.9" PD_PENGGUNA="app07_wow" PD_SANDI="Flakily8-6jugs-mass-5Lurch-curie-neutral" BERKAS_LOG="/var/log/odoo/odoo-server.log" DIREKTORI_DATA="/tmp" sudo -u odoo $BIN_PYTHON ./odoo-bin \ --database=$PD_MIGRASI \ --db_host=$PD_HOS \ --db_user=$PD_PENGGUNA \ --db_password=$PD_SANDI \ --logfile=$BERKAS_LOG \ --update=all \ --stop-after-init \ --data-dir=$DIREKTORI_DATA # --config=/etc/odoo/odoo.conf - Membuat droplet baru odoo-11 dengan sistem operasi Debian 10 untuk menampung hasil migrasi PD Odoo 10 ke 11, dan melanjutkan proses migrasi ke 12 dan 13
- Instalasi
nginx
apt-get install -y curl gnupg2 ca-certificates lsb-release rsync echo "deb http://nginx.org/packages/debian `lsb_release -cs` nginx" \ > /etc/apt/sources.list.d/nginx.list curl -fsSL https://nginx.org/keys/nginx_signing.key \ | apt-key add - apt-key fingerprint ABF5BD827BD9BF62 apt-get update && apt-get install -y nginx && nginx -v systemctl enable --now nginx - Instalasi
psql
echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" \ > /etc/apt/sources.list.d/pgdg.list wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc \ | apt-key add - apt-get update && apt-get install -y postgresql-client && psql --version - Instalasi
wkhtmltopdf
VERSI_WKHTMLTOPDF="0.12.6-1" REPO_WKHTMLTOPDF="https://github.com/wkhtmltopdf/packaging/releases/download" DISTRO_ARSITEKTUR="buster_amd64" wget $REPO_WKHTMLTOPDF/$VERSI_WKHTMLTOPDF/wkhtmltox_$VERSI_WKHTMLTOPDF.$DISTRO_ARSITEKTUR.deb dpkg --install *.deb apt-get --fix-missing install -y apt-get --fix-broken install -y wkhtmltopdf --version
- Instalasi
- Memastikan aturan pada cloud firewall sudah sesuai untuk akses antara
app07-wow-11,app07-wow-migrasidandb04-postgresql12 - Menginstall Odoo 11 pada host baru yang sudah disiapkan untuk tujuan migrasi
wget -O - https://nightly.odoo.com/odoo.key | apt-key add - echo "deb http://nightly.odoo.com/11.0/nightly/deb/ ./" \ > /etc/apt/sources.list.d/odoo.list apt-get update && apt-get install -y odoo && odoo --version - Mematikan peladen
postgresqlyang otomatis terinstal, karena tidak diperlukan
systemctl stop postgresql systemctl disable postgresql systemctl unmask postgresql - Mematikan peladen
odoountuk proses pemindaahan data
systemctl stop odoo - Membuat direktori
filestore
sudo -u odoo mkdir -p /var/lib/odoo/.local/share/Odoo/filestore - Salin isi direktori
/var/lib/odoo/.local/share/Odoo/filestoredari peladenodoo10-migrasike peladen baruodoo11-baru
KUNCI_PRIVAT="/home/deploy/.ssh/kunci_privat" IP_TUJUAN="10.20.30.20" NAMA_PD="nama_pd" LOKASI_FILESTORE="/var/lib/odoo/.local/share/Odoo/filestore" rsync -Pav -e "ssh -i $KUNCI_PRIVAT" \ $LOKASI_FILESTORE/$NAMA_PD \ root@$IP_TUJUAN:$LOKASI_FILESTORE - Pesiapan Certbot SSL
openssl dhparam -out /etc/nginx/dhparam.pem 2048 mkdir -p /var/www/_letsencrypt chown nginx /var/www/_letsencrypt
apt-get install -y certbot python-certbot-nginx - Konfigurasi nginx
- Sesuaikan konfigurasi
/etc/nginx/nginx.conf
cp -v /etc/nginx/nginx.conf{,.`date +%Y%m%d%H%M`} cat << EOF > /etc/nginx/nginx.conf user nginx; pid /run/nginx.pid; worker_processes auto; worker_rlimit_nofile 65535; events { multi_accept on; worker_connections 65536; } http { charset utf-8; sendfile on; tcp_nopush on; tcp_nodelay on; server_tokens off; keepalive_timeout 65; types_hash_max_size 2048; # MIME include mime.types; default_type application/octet-stream; # Logging access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log warn; # Limits limit_req_log_level warn; limit_req_zone \$binary_remote_addr zone=login:10m rate=10r/m; # SSL # ssl on; ssl_session_timeout 1d; # ssl_session_timeout 30m; ssl_session_cache shared:SSL:10m; ssl_session_tickets off; # Diffie-Hellman parameter for DHE ciphersuites ssl_dhparam /etc/nginx/dhparam.pem; # Mozilla Intermediate configuration 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_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA'; # ssl_prefer_server_ciphers on; # OCSP Stapling ssl_stapling on; ssl_stapling_verify on; resolver 1.1.1.1 1.0.0.1 8.8.8.8 8.8.4.4 208.67.222.222 208.67.220.220 valid=60s; resolver_timeout 2s; # Load configs include /etc/nginx/conf.d/*.conf; include /etc/nginx/sites-enabled/*; } EOF -
/etc/nginx/conf.d/$FQDN_INSTALASI.conf
FQDN_INSTALASI="fqdn_instalasi" UPSTREAM="upstream"
cat << EOF > /etc/nginx/conf.d/$FQDN_INSTALASI.conf #app07-wow server upstream $UPSTREAM { server 127.0.0.1:8069; } upstream $UPSTREAM-chat { server 127.0.0.1:8072; } server { listen 443 ssl http2; server_name $FQDN_INSTALASI; # SSL ssl_certificate /etc/letsencrypt/live/$FQDN_INSTALASI/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/$FQDN_INSTALASI/privkey.pem; ssl_trusted_certificate /etc/letsencrypt/live/$FQDN_INSTALASI/chain.pem; # BEGIN SECURITY #include conf.d/security.conf; add_header X-Frame-Options "SAMEORIGIN" always; add_header X-XSS-Protection "1; mode=block" always; add_header X-Content-Type-Options "nosniff" always; add_header Referrer-Policy "no-referrer-when-downgrade" always; add_header Content-Security-Policy "default-src 'self' http: https: data: blob: 'unsafe-inline' 'unsafe-eval' 'unsafe-hashes'" always; add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always; # . files location ~ /\.(?!well-known) { deny all; } ## END SECURITY # logging access_log /var/log/nginx/$FQDN_INSTALASI.access.log; error_log /var/log/nginx/$FQDN_INSTALASI.error.log warn; ## BEGIN PROXY #include conf.d/proxy.conf proxy_http_version 1.1; proxy_cache_bypass \$http_upgrade; # Add Headers for odoo proxy mode proxy_set_header Upgrade \$http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Host \$host; proxy_set_header X-Real-IP \$remote_addr; proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto \$scheme; proxy_set_header X-Forwarded-Host \$host; proxy_set_header X-Forwarded-Port \$server_port; # Proxy timeouts proxy_connect_timeout 720s; proxy_send_timeout 720s; proxy_read_timeout 720s; # additional proxy parameters proxy_next_upstream error timeout invalid_header http_500 http_502 http_503; # increase proxy buffer to handle some OpenERP web requests proxy_buffers 16 64k; proxy_buffer_size 128k; # by default, do not forward anything proxy_redirect off; proxy_buffering on; proxy_max_temp_file_size 0; # cache some static data in memory for 60mins. # under heavy load this should relieve stress on the OpenERP web interface a bit. location ~* /web/static/ { proxy_pass http://$UPSTREAM; proxy_buffering on; proxy_cache_valid 200 60m; expires 864000; } # Specifies the maximum accepted body size of a client request, # as indicated by the request header Content-Length. client_max_body_size 512m; # IP Whitelist location /web/database/ { allow 159.89.200.13; deny all; proxy_pass http://$UPSTREAM; } # location /.well-known/acme-challenge/ { # proxy_pass http://$UPSTREAM; # allow all; # } # Redirect requests to odoo backend server location / { proxy_redirect off; proxy_pass http://$UPSTREAM; } # Redirect longpoll requests to odoo longpolling port location /longpolling { proxy_pass http://$UPSTREAM-chat; } ## END PROXY ## BEGIN GENERAL # favicon.ico location = /favicon.ico { log_not_found off; access_log off; } # robots.txt location = /robots.txt { log_not_found off; access_log off; } # common gzip gzip on; gzip_types text/css text/less text/plain text/xml application/xml application/json application/javascript; gzip_disable "msie6"; gzip_vary on; gzip_proxied any; gzip_comp_level 6; gzip_buffers 16 8k; gzip_http_version 1.1; ## END GENERAL } # subdomains redirect server { listen 443 ssl http2; server_name *.$FQDN_INSTALASI; # SSL ssl_certificate /etc/letsencrypt/live/$FQDN_INSTALASI/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/$FQDN_INSTALASI/privkey.pem; ssl_trusted_certificate /etc/letsencrypt/live/$FQDN_INSTALASI/chain.pem; return 301 https://\$host\$request_uri; } # HTTP redirect server { listen 80; server_name .$FQDN_INSTALASI; # rewrite ^(.*) https://\$host\$1 permanent; #include conf.d/letsencrypt.conf; # ACME-challenge location ^~ /.well-known/acme-challenge/ { root /var/www/_letsencrypt; } location / { return 301 https://\$host\$request_uri; } } EOF
- Sesuaikan konfigurasi
- Inisiasi Certbot SSL
SUREL_LE="[email protected]" sed -i -r 's/(listen .*443)/\1;#/g; s/(ssl_(certificate|certificate_key|trusted_certificate) )/#;#\1/g' /etc/nginx/conf.d/$FQDN_INSTALASI.conf nginx -t && systemctl reload nginx
certbot certonly --webroot -d $FQDN_INSTALASI --email $SUREL_LE -w /var/www/_letsencrypt -n --agree-tos --force-renewal sed -i -r 's/#?;#//g' /etc/nginx/conf.d/$FQDN_INSTALASI.conf nginx -t && systemctl reload nginx echo -e '#!/bin/bash\nnginx -t && systemctl reload nginx' | tee /etc/letsencrypt/renewal-hooks/post/nginx-reload.sh chmod a+x /etc/letsencrypt/renewal-hooks/post/nginx-reload.sh - Konfigurasi Odoo 11
/etc/odoo/odoo11.conf
SANDI_ADMIN_PD_ODOO="sandi_admin_pd_odoo" PD_HOS="10.20.30.10" PD_PENGGUNA="pd_pengguna" PD_SANDI="pd_sandi" BERKAS_LOG="/var/log/odoo/odoo-server.log" DIREKTORI_DATA="/tmp" #cp -v /etc/odoo/odoo.conf{,.`date +%Y%m%d%H%M`} cat << EOF > /etc/odoo/odoo11.conf [options] # Addons and data locations addons_path = /usr/lib/python3/dist-packages/odoo/addons #addons_path = /usr/lib/python3/dist-packages/odoo/addons,/home/deploy/odoo-custom-addons # csv_internal_sep = , data_dir = /var/lib/odoo/.local/share/Odoo geoip_database = /usr/share/GeoIP/GeoLiteCity.dat # DB parameters admin_passwd = $SANDI_ADMIN_PD_ODOO db_host = $PD_HOS db_maxconn = 64 db_name = False db_password = $PD_SANDI db_port = False db_template = template1 db_user = $PD_PENGGUNA # dbfilter = ^%d$ #dbfilter = wow list_db = True # pg_path = None # demo = {} # import_partial = # Performance parameters limit_memory_hard = 4684354560 limit_memory_soft = 4147483648 limit_request = 8192 limit_time_cpu = 600 limit_time_real = 1200 limit_time_real_cron = -1 max_cron_threads = 2 osv_memory_age_limit = 1.0 osv_memory_count_limit = False workers = 4 # Logs parameters syslog = False log_db = True logrotate = True log_level = info log_db_level = warning log_handler = :INFO logfile = $BERKAS_LOG # pidfile = None reportgz = True server_wide_modules = web # Email parameters # email_from = False # test_commit = False # test_enable = False # test_file = False # test_report_directory = False # translate_modules = ['all'] # unaccent = False # without_demo = False # Proxy and connectivity proxy_mode = True xmlrpc = True xmlrpc_interface = 127.0.0.1 xmlrpc_port = 8069 netrpc_interface = 127.0.0.1 longpolling_port = 8072 EOF - Eksekusi manual pertama kali pada hos
odoo11-baru-migrasisetelah PD selesai di konversi ke Odoo 11
PD_MIGRASI="pd_migrasi" sudo -u odoo /bin/odoo --config=/etc/odoo/odoo.conf --database=$PD_MIGRASI --update=all --stop-after-init systemctl restart odoo - Menyetel ulang kata sandi pengguna admin
PD_HOS="10.20.30.10" PD_PENGGUNA="pd_pengguna" psql -h $PD_HOS -U $PD_PENGGUNA -d $PD_MIGRASI -c "\l"
UPDATE res_users SET password='password' WHERE login='login'; - LANJUT
- Instal OpenUpgrade
BIN_PIP="pip3.7" apt-get install python3-pip systemctl stop odoo git clone https://github.com/OCA/OpenUpgrade.git cd OpenUpgrade git checkout 12.0 $BIN_PIP install -U pip $BIN_PIP install -r requirements.txt $BIN_PIP install --ignore-installed git+https://github.com/OCA/openupgradelib.git@master - Migrasi PD dari Odoo 11 ke Odoo 12
BIN_PYTHON="python3.7" PD_MIGRASI="PD_MIGRASI" PD_HOS="10.20.30.10" PD_PENGGUNA="pd_pengguna" PD_SANDI="pd_sandi" BERKAS_LOG="/var/log/odoo/odoo-server.log" DIREKTORI_DATA="/tmp" sudo -u odoo $BIN_PYTHON ./odoo-bin \ --database=$PD_MIGRASI \ --db_host=$PD_HOS \ --db_user=$PD_PENGGUNA \ --db_password=$PD_SANDI \ --logfile=$BERKAS_LOG \ --update=all \ --stop-after-init \ --data-dir=$DIREKTORI_DATA - Menghapus Odoo 11 lalu menginstall Odoo 12 pada host baru yang sudah disiapkan untuk tujuan migrasi
apt-get remove odoo echo "deb http://nightly.odoo.com/12.0/nightly/deb/ ./" \ > /etc/apt/sources.list.d/odoo.list apt-get update && apt-get install -y odoo && odoo --version