Catata berikut mendokumentasikan proses migrasi infrastruktur myapps dari existing yang berbasis CT (Container) ke server baru yang berbasis VM (KVM).
resolv.conf
Nah, karena ada isu koneksi ke repository saat awal-awal melakukan konfigurasi dan perlu menambahkan/mengubah berkas resolv.conf agar mengarah ke DNS server milik cloudmatika. Maka gunakan IP berikut untuk ditambahkan:
[root@myapps-server-vm ~]# cat /etc/resolv.conf nameserver 8.8.8.8 nameserver 8.8.4.4 ; generated by /usr/sbin/dhclient-script #nameserver 192.168.0.3 #nameserver 192.168.0.2
IP 192.168.x.y merupakan bawaan instalasi diberi tanda # di depan.
yum update yum install epel-release rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm yum install php56-php-{devel,fpm,fpm,gd,json,mbstring,mcrypt,mysqlnd,odbc,pdo,process,soap,xml,xmlrpc,cli,pear} redis rsync mariadb-server openvpn tmux httpd wget htop vim zip supervisor php -v
Proses di atas adalah untuk memasang paket-paket yang dibutuhkan. Baris terakhir akan menampilkan error karena path php belum didaftarkan ke sistem.
cat /opt/remi/php56/enable . /opt/remi/php56/enable which php php -v
Perintah-perintah di atas untuk menguji script yang telah disediakan oleh repo remi untuk mengaktifkan path php56. Baris terakhir seharusnya telah menampilkan path php yang berada di /opt/remi/php56/root/usr/bin/php yang artinya php cli telah dapat digunakan. Keluarannya kurang lebih seperti berikut:
PHP 5.6.40 (cli) (built: Apr 28 2021 14:35:32) Copyright (c) 1997-2016 The PHP Group Zend Engine v2.6.0, Copyright (c) 1998-2016 Zend Technologies
Untuk mendaftarkan secara default kita akan menempatkan script ke dalam direktori /etc/profile.d/ agar dapat dibaca oleh seluruh sistem. Buat file php.sh
vim /etc/profile.d/php.sh
lalu letakkan baris berikut:
. /opt/remi/php56/enable
Coba logout & login lagi, seharusnya sekarang sudah dapat langsung menggunakan php. Untuk melihat path php yang aktif bisa diperiksa dengan perintah:
which php
Untuk membuat user, dapat menggunakan perintah berikut:
adduser -m -U -s /bin/bash myapps su - myapps
Kembali ke user root, lalu buat konfigurasi php-fpm untuk user myapps
cd /etc/opt/remi/php56/php-fpm.d cp www.conf myapps.conf
Konten konfigurasinya kurang lebih sebagai berikut:
[myapps] user = myapps group = myapps ;listen = 127.0.0.1:9000 listen = /run/php56-fpm.sock listen.owner = myapps listen.group = myapps ;listen.mode = 0660 listen.allowed_clients = 127.0.0.1 pm = dynamic pm.max_children = 200 pm.start_servers = 10 pm.min_spare_servers = 5 pm.max_spare_servers = 35 ;pm.process_idle_timeout = 10s; ;pm.max_requests = 500 ;pm.status_path = /status ;ping.path = /ping ;ping.response = pong ;access.log = log/$pool.access.log ;access.format = "%R - %u %t \"%m %r%Q%q\" %s %f %{mili}d %{kilo}M %C%%" slowlog = /opt/remi/php56/root/var/log/php-fpm/www-slow.log ;request_slowlog_timeout = 0 ;request_terminate_timeout = 0 ;rlimit_files = 1024 ;rlimit_core = 0 ;chroot = ;chdir = /var/www ;catch_workers_output = yes ;clear_env = no ;security.limit_extensions = .php .php3 .php4 .php5 ;env[HOSTNAME] = $HOSTNAME ;env[PATH] = /usr/local/bin:/usr/bin:/bin ;env[TMP] = /tmp ;env[TMPDIR] = /tmp ;env[TEMP] = /tmp ;php_admin_value[sendmail_path] = /usr/sbin/sendmail -t -i -f www@my.domain.com ;php_flag[display_errors] = off php_admin_value[error_log] = /opt/remi/php56/root/var/log/php-fpm/www-error.log php_admin_flag[log_errors] = on ;php_admin_value[memory_limit] = 128M php_value[session.save_handler] = files php_value[session.save_path] = /opt/remi/php56/root/var/lib/php/session php_value[soap.wsdl_cache_dir] = /opt/remi/php56/root/var/lib/php/wsdlcache
Beberapa penyesuaian antara lain terkait user & path listen file.
systemctl status php56-php-fpm cat /usr/lib/systemd/system/php56-php-fpm.service
Aktifkan service php-fpm-nya dengan perintah-perintah berikut:
systemctl enable php56-php-fpm
systemctl start php56-php-fpm
systemctl status php56-php-fpm
Agar dapat menggunakan composer, kita perlu memasangnya terlebih dahulu. Nah, di sini kita kan meletakkan di direktori bin dari php56 yang telah kita pasang sebelumnya. Cari tau dulu path-nya ada di mana, lalu kita akan berpindah ke sana:
which php cd /opt/remi/php56/root/usr/bin/
Selanjutnya download binary composer, beri akses execute, dan buat symlink menjadi composer:
wget https://github.com/composer/composer/releases/download/1.10.21/composer.phar chmod +x composer.phar ln -s composer.phar composer
Sampe di sini composer telah dapat digunakan.
Yang tak kalah penting adalah konfigurasi httpd. Kita cek apakah service httpd sudah jalan atau belum, lalu coba aktifkan.
ss -tulpn systemctl start httpd systemctl enable httpd systemctl status httpd
Untuk mencoba langsung dari cli bisa dicoba dengan curl:
curl localhost
bagian konfigurasi, kita hapus konfigurasi default berupa welcome.conf lalu kita buat file baru myapps.conf
cd /etc/httpd/conf.d/ rm welcome.conf vim myapps.conf
konten file tersebut kurang lebih sebagai berikut:
<VirtualHost *:80 > ServerName "myapps.co.id" ServerAlias "www.myapps.co.id" ServerAlias "apps.myapps.co.id" UseCanonicalName Off DocumentRoot "/home/myapps/httpdocs" CustomLog /home/myapps/logs/access_log combined ErrorLog /home/myapps/logs/error_log <IfModule mod_suexec.c> SuexecUserGroup "myapps" "myapps" </IfModule> <FilesMatch \.php$> SetHandler "proxy:unix:/run/php56-fpm.sock|fcgi://localhost/" </FilesMatch> TimeOut 120 <Directory /home/myapps/httpdocs> #Options +Indexes +FollowSymLinks +MultiViews AllowOverride All Order allow,deny allow from all Require all granted </Directory> #<IfModule mod_rewrite.c> # RewriteEngine On # RewriteCond %{HTTP_HOST} ^myapps.co.id$ [NC] # RewriteRule ^(.*)$ http://www.myapps.co.id$1 [L,R=301] #</IfModule> </VirtualHost>
Tentunya, lakukan modifikasi lebih lanjut jika diperlukan. Pastikan konfig httpd-nya tidak ada yang error dengan mengetikkan:
apachectl configtest
kalau hasilnya muncul Syntax OK berarti sudah benar konfigurasinya. Restart service httpd:
systemctl restart httpd systemctl status httpd
Jalankan perintah berikut untuk pertama kalinya untuk memberi password pada akun root pada mariadb:
mysql_secure_installation
Simpan credential user root di home directory-nya user root:
vim /root/.my.cnf
kontennya sebagai berikut:
[client] user=root password=mysecurepassword
Catatan: Ganti mysecurepassword dengan password yang aman, misalnya random karakter.
Oiya, kalo ternyata belum aktif ya diaktifkan dulu:
systemctl enable mariadb systemctl status mariadb systemctl start mariadb
Buat database untuk prod:
MariaDB [(none)]> create database myapps_production; MariaDB [(none)]> grant all privileges on myapps_production.* to 'myapps'@'localhost' identified by 'myrandompassword'; MariaDB [(none)]> flush privileges;
Impor database dari file backup:
cd /home/myapps/migrasi/ zcat myapps_production.sql.gz | mysql -u root myapps_production
Catatan: file backup telah disediakan.
Jadi begini cara install-nya:
yum localinstall --nogpgcheck https://download1.rpmfusion.org/free/el/rpmfusion-free-release-7.noarch.rpm yum install ffmpeg ffmpeg-devel
Sudah, itu aja.
Supervisor dibutuhkan oleh myapps:
cd /etc/supervisord.d/ vim myapps.conf
Isi konten konfigurasinya kurang lebih begini:
[program:myapps] command=/opt/remi/php56/root/usr/bin/php artisan queue:work --sleep=1 --tries=3 directory=/home/myapps/httpdocs autostart=true autorestart=true user=myapps startsecs=10 startretries=10 log_stdout=true log_stderr=true logfile=/home/myapps/logs/supervisor/myapps.log logfile_maxbytes=2MB logfile_backups=7
Kalo ternyata ada yang kurang kompatibel, disesuaikan lagi aja ya. Karena khusus yang ini belum dites.
Sebelumnya kita buat dulu file dhparam.pem dengan perintah berikut:
openssl dhparam -C -2 -out /etc/ssl/certs/dhparam.pem 4096
Selanjutnya tambahkan konfig pada file myapps.conf
cd /etc/httpd/conf.d/ vim myapps.conf
tambahkan di bawahnya sebagai berikut:
<VirtualHost *:443 > ServerName "myapps.co.id" ServerAlias "www.myapps.co.id" ServerAlias "apps.myapps.co.id" UseCanonicalName Off SSLEngine on DocumentRoot "/home/myapps/httpdocs" CustomLog /home/myapps/logs/access_log combined ErrorLog /home/myapps/logs/error_log DirectoryIndex index.html index.php <IfModule mod_suexec.c> SuexecUserGroup "myapps" "myapps" </IfModule> <FilesMatch \.php$> SetHandler "proxy:unix:/run/php56-fpm.sock|fcgi://localhost/" </FilesMatch> TimeOut 120 <Directory /home/myapps/httpdocs> #Options +Indexes +FollowSymLinks +MultiViews AllowOverride All Order allow,deny allow from all Require all granted </Directory> #<IfModule mod_rewrite.c> # RewriteEngine On # RewriteCond %{HTTP_HOST} ^myapps.co.id$ [NC] # RewriteRule ^(.*)$ http://www.myapps.co.id$1 [L,R=301] #</IfModule> Include "/etc/httpd/include/myapps_ssl.conf" </VirtualHost>
Nah, di situ ada juga file myapps_ssl.conf kita buat juga file-nya:
mkdir -p /etc/httpd/include vim /etc/httpd/include/myapps_ssl.conf
Isinya kurang lebih seperti berikut:
SSLCertificateFile /etc/ssl/myapps/www-myapps-co-id.crt SSLCertificateKeyFile /etc/ssl/myapps/www-myapps-co-id.key SSLCertificateChainFile /etc/ssl/myapps/CA-fullchain.pem SSLProtocol TLSv1.2 SSLCompression off SSLProtocol All -SSLv2 -SSLv3 SSLHonorCipherOrder on SSLCipherSUite "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH EDH+aRSA !CAMELLIA !SEED !3DES !RC4 !aNULL !eNULL !LOW !MD5 !EXP !PSK !SRP !DSS" #SSLOpenSSLConfCmd Curves secp384r1 #SSLOpenSSLConfCmd DHParameters "/etc/ssl/certs/dhparam.pem" <FilesMatch "\.(ttf|ttc|otf|eot|woff|woff2|font.css|css|js)$"> Header always set Access-Control-Allow-Origin "*" </FilesMatch>
Tentunya, berkas yang ada di /etc/ssl/myapps/* perlu dipersiapkan terlebih dahulu, yaitu file SSL yang telah disediakan dari klien.
Buat sebuah file security.conf secara terpisah:
cd /etc/httpd/include vim security.conf
Isinya kurang lebih seperti berikut:
ServerTokens Prod ServerSignature Off TraceEnable Off Header set X-Frame-Options: "SAMEORIGIN" Header set X-Content-Type-Options: "nosniff" Header set X-XSS-Protection: "1; mode=block" Header always edit Set-Cookie (.*) "$1;HttpOnly;Secure" Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains" # sesuaikan bagian ini Header always set Content-Security-Policy "default-src 'self' https://*.piwik.pro www.google-analytics.com stats.g.doubleclick.net dialogflow.cloud.google.com; font-src 'self' data: https://fonts.gstatic.com; img-src 'self' data: https://www.google-analytics.com https://s tats.g.doubleclick.net *.myapps.co.id https://*.piwik.pro https://*.google.com https://*.google.co.id *.googleusercontent.com; script-src * https://www.googletagmanager.com www.google-analytics.com https://*.piwik.pro 'unsafe-inline' 'unsafe-eval'; style-src * 'unsafe-inli ne'; frame-src https://*.youtube.com https://app.midtrans.com https://app.sandbox.midtrans.com https://bid.g.doubleclick.net *.qiscus.com; connect-src 'self' *.myapps.co.id *.qiscus.com *.google-analytics.com *.doubleclick.net dialogflow.cloud.google.com;" Header always set Referrer-Policy "strict-origin" Header always set Feature-Policy: "vibrate 'none'"
Lalu sertakan berkas tersebut ke dalam konfigurasi httpd yang utama, yaitu di httpd.conf:
vim /etc/httpd/conf/httpd.conf
Tambahkan teks berikut di akhir baris:
Include "/etc/httpd/include/security.conf"
Simpan, lalu cek untuk memastikan tidak ada konfigurasi yang error dengan perintah:
apachectl configtest
Jika muncul keluaran Syntax OK, maka bisa dilanjut untuk restart service httpd-nya.
systemctl restart httpd systemctl status httpd
Sekian catatan kali ini.