Lewati ke isi

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
      
  • Memastikan aturan pada cloud firewall sudah sesuai untuk akses antara odoo10-sumber, odoo10-migrasi dan odoo-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
    • 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
  • 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
      
  • Memastikan aturan pada cloud firewall sudah sesuai untuk akses antara app07-wow-11, app07-wow-migrasi dan db04-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 postgresql yang otomatis terinstal, karena tidak diperlukan
    systemctl stop postgresql
    systemctl disable postgresql
    systemctl unmask postgresql
    
  • Mematikan peladen odoo untuk 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/filestore dari peladen odoo10-migrasi ke peladen baru odoo11-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
      
  • 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-migrasi setelah 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