menu

Docker - Laradock (docker for laravel)


Pada tutorial kemarin codedoct sudah membagikan beberapa syntax docker yang sering digunakan, kali ini kita akan mensetup docker untuk project laravel yang bernama laradock untuk halaman resminya bisa akses disini.

Sebelum menginstall laradock pastikan aplikasi docker sudah terinstal pada komputer masing-masing saat ini codedoct sedang menggunakan macbook cara menginstall docker sangat mudah untuk mac silahkan download disini jika menggunakan windows silahkan download disini jika menggunakan linux silahkan ikuti langkah pada artikel ini.

Jika docker sudah terinstal dengan baik selanjutnya langsung saja kita install laradocknya,
$ git clone https://github.com/Laradock/laradock.git
$ cp env-example .env
$ docker-compose up -d nginx mysql phpmyadmin workspace

Jika sudah silahkan akses url localhost.

Yang perlu diperhatikan:

1. Secara default nginx laradock akan membaca folder public, maka susunan folder harus sperti ini,


jika ingin mengubah nya maka silahkan edit file default.conf pada path nginx/sites/, anda akan menemukan code
root /var/www/public;
silahkan ubah misal menjadi sperti ini
root /var/www;
maka default nginx akan membaca folder yang setara dengan folder laradocknya.
Jika sudah jangan lupa untuk merestart docker-compose nya
$ docker-compose restart

2.  Mengubah default url "localhost" dan multi project laravel
Secara default kita tidak bisa mengakses multi project pada laradock jika anda ingin memprovide 2 project laravel maka harus menginstall 2 laradock juga sehingga penampakan struktur foldernya akan tampak seperti ini,


Tapi kita juga bisa hanya menggunakan 1 laradock saja dengan sedikit penyesuaian pada nginx caranya pada path nginx/sites/ kita buat file baru misal namaya projectB.conf ini configurasi untuk project projectB dan satu lagi pada path yang sama kita buat file lagi dengan nama projectA.conf keduanya adalah project laravel, dan isi code kedua file tersebut adalah,

- projectB.conf
server {

    listen 80;
    listen [::]:80;

    # For https
    # listen 443 ssl;
    # listen [::]:443 ssl ipv6only=on;
    # ssl_certificate /etc/nginx/ssl/default.crt;
    # ssl_certificate_key /etc/nginx/ssl/default.key;

    server_name projectB.test;
    root /var/www/projectB/public;
    index index.php index.html index.htm;

    location / {
         try_files $uri $uri/ /index.php$is_args$args;
    }

    location ~ \.php$ {
        try_files $uri /index.php =404;
        fastcgi_pass php-upstream;
        fastcgi_index index.php;
        fastcgi_buffers 16 16k;
        fastcgi_buffer_size 32k;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        #fixes timeouts
        fastcgi_read_timeout 600;
        include fastcgi_params;
    }

    location ~ /\.ht {
        deny all;
    }

    location /.well-known/acme-challenge/ {
        root /var/www/letsencrypt/;
        log_not_found off;
    }

    error_log /var/log/nginx/laravel_error.log;
    access_log /var/log/nginx/laravel_access.log;
}

- projectA.conf
server {

    listen 80;
    listen [::]:80;

    # For https
    # listen 443 ssl;
    # listen [::]:443 ssl ipv6only=on;
    # ssl_certificate /etc/nginx/ssl/default.crt;
    # ssl_certificate_key /etc/nginx/ssl/default.key;

    server_name projectA.test;
    root /var/www/projectA/public;
    index index.php index.html index.htm;

    location / {
         try_files $uri $uri/ /index.php$is_args$args;
    }

    location ~ \.php$ {
        try_files $uri /index.php =404;
        fastcgi_pass php-upstream;
        fastcgi_index index.php;
        fastcgi_buffers 16 16k;
        fastcgi_buffer_size 32k;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        #fixes timeouts
        fastcgi_read_timeout 600;
        include fastcgi_params;
    }

    location ~ /\.ht {
        deny all;
    }

    location /.well-known/acme-challenge/ {
        root /var/www/letsencrypt/;
        log_not_found off;
    }

    error_log /var/log/nginx/laravel_error.log;
    access_log /var/log/nginx/laravel_access.log;
}

Jangan lupa untuk kembali merestart docker-compose seperti cara diatas.
Selanjutnya maping target url, buka file hosts dengan cara "vim /etc/hosts" dan tambahkan projectB dan projectA seperti ini,


Selanjutnya silahkan akses url projectB.test dan projectA.test pada browser.

3. Tidak bisa login phpmyadmin
Secara default user access phpmyadmin adalah,
host: default
user: root
pass: root
Untuk mengaksesnya pada url localhost:8080
tapi jika kita menggunakan versi latest mysql akan ada masalah saat login searching2 ternyata belum support, untuk melihat versi dan pengaturan mysql ini bisa dilihat pada .env laradock seperti gambar dibawah,


Silahkan ganti version mysql menjadi 5.7 seperti diatas.
Selanjutnya ikuti step dibawah untuk restart image mysql
### shutdown container
docker-compose down

### remove mysql data laradock
rm -rf ~/.laradock/data/mysql

### rebuild mysql image
docker-compose build mysql

### re-up all container
docker-compose up -d nginx mysql workspace phpmyadmin

4. Menggunakan GUI untuk mengakses mysql
Misal menggunakan mysql workbench konfigurasinya seperti gambar dibawah,


5. Mengganti versi php
Buka kembali file .env laradock dan ubah PHP_VERSION seperti gambar dibawah,


Selanjutnya ikuti step dibawah untuk restart image mysql
### Build fpm and cli for new version                       
docker-compose build php-fpm                       
docker-compose build workspace
                                               
### Restart Container to use new version of php
docker-compose down                       
docker-compose up -d nginx mysql workspace phpmyadmin

===DONE!===

Syntax - Docker


Artikel ini merupakan artikel pertama di bulan ramadhan, ada banyak sekali ide yang ingin ditulis sampai bingung mau mulai dari yang mana. Sampai akhirnya codedoct memutuskan untuk menulis tentang docker dan sebelum memulai artikel selanjutnya tentang docker ada baiknya kita mulai dulu pengenalan sintax-sintax nya.

Oke dimulai dari melihat daftar container,
# list running containers
$ docker ps

# list all containers
$ docker ps -a

# list latest created container
$ docker ps -l

# list n last created containers
$ docker ps -n=-1

Selanjutnya melihat list images,
# list used images
$ docker images

# list all images
$ docker images -a

# list images unused
$ docker images -f dangling=true

# find list images with param
$ docker images -a |  grep "param"

Operation,
# stop container
$ docker stop {id_container}

# stop all container
$ docker stop $(docker ps -a -q)

# remove contaner
$ docker rm {id_container}

# remove all container
$ docker rm $(docker ps -a -q)

# remove images
$ docker image rm {id_container}

# remove all images
$ docker rmi $(docker images -a -q)

# remove unused container, volume, etc
$ docker system prune —-volumes

# remove all images which are not referenced by any existing container, not just dangling ones
$ docker image prune -a

===DONE!===

AWS - Elastic IP (EC2)


Tutorial sebelumnya kita sudah men-setup cloud server menggunakan EC2 AWS dan kita sudah mendapatkan IP public untuk melakukan SSH remote ke server, tapi ada kelemahan pada IP public tersebut yaitu setiap kali kita menghentikan(stop) service EC2 kemudian menghidupkan(start) kembali service EC2 IP public tersebut akan direset, untuk itulah pada tutorial kali ini kita akan membuat sebuah elastic IP agar setiap kali start-stop service EC2 IP public tidak berubah.

Oke kita mulai saja, pertama masuk ke console AWS dan buka service EC2 kemudian pada sidebar klik menu "Elastic IPs" dan akan tampil halaman seperti berikut,


Klik "Allocate new address" dan setting seperti gambar dibawah,


Klik "Allocate" sehingga akan terbentuk Elastic IP baru,


Klik button "Action" pilih "Associate address" seperti gambar dibawah,


Isikan Instance dengan instance yang ingin dihubungkan dengan Elastic IP berikut,


Klik button "Associate" dan akan tampil halaman seperti gambar dibawah,


Berrati kita berhasil menghubungkan Elastic IP dengan instance yang kita pilih, coba dicek pada halaman "Instance" IP public akan berubah mengikuti Elastic IP yang baru kita buat.

Sehingga kita hanya bisa mengakses SSH remote ke server menggunakan Elastic IP yang baru dan meskipun service EC2 di start-stop IP public instance yang merupakan Elastic IP tidak akan berubah/direset.

===DONE!===

AWS - Setup IAM



Sebenarnya tema dari artikel ini terlewatkan karena sebelum artikel ini codedoct sudah share terlebih dahulu beberapa tools yang ada di AWS, tapi tidak apa-apa lebih baik terlambat dari pada tidak sama sekali.

Oke pada artikel ini akan membahas hal pertama yang harus dilakukan saat pertama kali kita mendapatkan account pada AWS yaitu mensetup IAM.
Pertama login terlebih dahulu ke akun AWS dan buka menu services kemudian cari IAM setelah masuk ke halaman IAM kita akan melihat tampilan seperti berikut.


Setup pertama yang akan kita lakukan adalah mengaktivasi MFA(Multi-Factor Authenticator), klik "Activate MFA on your root account" dan klik button "Manage MFA" dan akan tampil halaman berikut,


Selanjutnya klik button "Activate MFA" seperti gambar dibawah,


Pilih A virtual MFA device dan klik button "Next Step" seperti gambar dibawah,


Selanjutnya, "Next Step" lagi,


Dan selanjutnya akan masuk ke halaman berikut(dibawah) untuk mendapatkan code dari barcode gunakan google authenticator atau apps sejenisnya,  download ke handphone dan scan barcodenya sehingga akan muncul code pertama masukan ke Authentication code 1,


Setelah memasukan code 1 maka pada google authenticator akan muncul code kedua dan isikan ke Authentication code 2, jika sudah klik button "Activate virtual MFA" dan akan muncul pop-up berikut,


Sampai sini kita sudah success mengaktifkan MFA, kembali ke dashboard IAM dan tampilan indikator MFA nya akan berubah seperti ini,


Selanjutnya kita akan membuat user IAM baru klik button "Manage Users" seperti gambar dibawah,


Dan akan muncul halaman seperti dibawah, klik button "Add user"


Isikan field seperti gambar dibawah untuk membuat sebuah user admin baru,


Lanjutkan dengan klik button "Next: Permissions" untuk mengatur permission yang diinginkan,
dan tampil halaman berikut,


Pilih "AdministratorAccess" ini berarti semua access, klik button "Next: Review" halaman berikutnya langsung klik "Create user" dan success membuat user baru,


Klik "Download .csv" untuk mengunduh password akses saat login pertama kali, dan klik button "Close" sehingga tampil halaman berikut,


Kembali ke dashboard, dan security status akan update seperti gambar dibawah,


Lanjut ke tahap berikutnya, "Use groups to assign permissions" klik button "Manage Group"


Isikan nama group misal "admin"


Klik "Next Step" sama seperti di user, pilih "AdministratorAccess" klik "Next Step" lagi dan "Create Group", sehingga  akan tampil halaman berikut,


Klik admin dan "Add Users to Group" untuk menambahkan user ke group admin,


Pilih user yang ingin dimasukan ke dalam group admin


Klik "Add Users" dan masuk kembali ke menu sidebar "Users"


Kita akan melihat user yang baru di masukan ke group admin tadi memiliki 2 permissions(1 permission user, 1 permission admin) untuk itu hapus saja yang paling atas dengan mngklik icon "x".
Jika sudah kembali kedashboard dan kita akan melihat status securitynya update seperti gambar dibawah,


Baiklah tinggal satu step lagi, masuk ke "Apply an IAM password policy" dan akan tampil halaman seperti gambar dibawah,


Secara default isi saja seprti berikut, kemudian klik button "Apply password policy" jika sudah kembali ke dashboard status security akan update kembali menjadi seperti gambar dibawah,


Pada dashboard klik "Customize" pada IAM users sign-in link untuk mengubah account alias yang berfungsi untuk login,


Jika sudah klik "Yes, Create" dan link IAM users sign-in juga akan ikut berubah, silahkan copy link tersebut dan logout dari account AWS, kemudian browse link yang tadi di copy pada browser sehingga akan masuk ke halaman berikut untuk memperbaharui password pertama kali,


Passwordnya ada di file .csv yang sudah kita download saat membuat user baru sebelumnya, setelah klik "Sign In" akan menuju halaman change password, tinggal ganti saja password lama dengan yang baru dan "Confirm password"


Akhirnya kita bisa login dengan user yang baru dibuat dengan berdasarkan permission yang kita set sebagai administrator.

Jika teman-teman sudah bisa masuk menggunakan user admin yang baru tadi maka akan lebih baik user root lama yang digunakan untuk login AWS pertama kali jangan digunakan lagi saja demi keamanan account AWS.

===DONE!===

How - Masalah saat instalasi server pertama kali


Sudah allow cors pada .htaccess tapi api tetap tidak memberikan response dengan benar?
secara default saat menginstall LAMP pertama kali headers memang selalu enabled tapi ada kemungkinan juga belum enabled secara default contohnya saat codedoct setup server ubuntu dengan EC2 milik AWS maka dari itu harus di enabled terlebih dahulu dengan cara,
$ sudo a2enmod headers

Muncul error seperti ini "GD Library extension not available with this PHP" install extension dengan cara,
// PHP5
$ sudo apt-get install php5-gd

// PHP5.6
$ sudo apt-get install php5.6-gd

// PHP7.2
$ sudo apt-get install php7.2-gd

Menggunakan framework Laravel, error 404 not found saat akan hit url selain page home/index?
masalah tersebut biasanya terjadi karena module "rewrite" belum terinstall pada server cara installnya,
$ sudo a2enmod rewrite
$ sudo service apache2 restart
kemudian cek config apache agar terlihat seperti ini,
<virtualhost>
        <directory dist-dev="" projectA-backoffice="" var="" www="">
           Options Indexes FollowSymLinks
           AllowOverride All
           Require all granted
        </directory>

    ServerAdmin webmaster@
    ServerName dev-admin.project-A.com
    ServerAlias www.dev-admin.project-A.com
    DocumentRoot /var/www/projectA-backoffice/dist-dev
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</virtualhost>

Pada server EC2 codedoct sering mendapati error seperti ini: "GPG error 'NO_PUBKEY'",
$ sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys <pubkey>
$ sudo apt-get update

===DONE!===

How - Make yandex business email can open in gmail


Pada tutorial sebelumnya kita sudah membuat sebuah email bisnis dengan yandex sekarang kita akan membuat bagaimana caranya agar email bisnis kita yang hanya bisa dibuka pada yandex mail dapat dibuka juga pada gmail.

Oke langkah pertama silahkan login pada gmail dan temukan setelan atau setting pada halaman utama gmail seperti ini,

  

Kemudian masuk ke "Akun dan Impor" seperti gambar dibawah,


Pada menu tersebut kita akan menemukan pengaturan untuk memeriksa email lain di gmail seperti gambar dibawah,


Klik "Tambahkan akun email" dan akan muncul tampilan seperti gambar dibawah,


Isi alamat bisnis email, selanjutnya klik berikutnya dan akan masuk ke halaman berikut,


Oke pada pengaturan diatas kita ingin mengimpor email dari akun yandex menggunakan POP3 maka pada yandex kita harus pastikan dulu email yandex kita bisa di akses melalui POP3 dengan cara masuk ke halaman setting "Email Clients" pada yandex mail dan mengaktifkan setting POP3 seperti gambar dibawah,


Oke kembali ke halaman gmail yang sebelumnya, pilih import email dari akun saya yang lain(POP3) dan klik "berikutnya" sehingga akan muncul halaman berikut,


Isi nama pengguna dan sandi dari yandex mail, kemudian klik "Tambahkan Akun" maka kita telah berhasil menambahkan akun email yandex pada gmail.
Setelah itu kita akan membuat gmail dapat mengirimkan email dari email yandex, kembali masuk ke halaman setelan di gmail dan masuk ke menu "Akun dan Import" dan cari setting ini,


Klik "Tambahkan alamat email lainnya"


Isi nama dan alamat email sesuai email yandex dan klik "Langkah Berikutnya" dan akan muncul gambar dibawah,


Isi nama pengguna dan sandi sesuai dengan email yandex dan klik "Tambahkan Akun", dan akan tampil halaman berikutnya,


Masukan code yang dikirim oleh gmail ke email yandex, dan verifikasi

===DONE!===