Cara menggunakan tiredofit nginx php fpm

Anda dapat menyetel perintah max_fails dan fail_timeout dari nginx untuk menunjukkan bahwa nginx harus mencoba ulang x jumlah permintaan koneksi ke container sebelum gagal pada ketidaktersediaan server upstream.

Anda dapat menyetel kedua angka ini sesuai infrastruktur Anda dan kecepatan seluruh penyiapan akan datang. Anda dapat membaca lebih banyak detail tentang bagian health check di URL di bawah ini: http://nginx.org/en/docs/http/load_balancing.html

Berikut adalah kutipan dari http://nginx.org/en/docs/http/ngx_http_upstream_module.html#server max_fails=number

menetapkan jumlah upaya gagal untuk berkomunikasi dengan server yang harus terjadi dalam durasi yang ditetapkan oleh parameter fail_timeout untuk mempertimbangkan server tidak tersedia untuk durasi yang juga ditetapkan oleh parameter fail_timeout. Secara default, jumlah upaya yang gagal diatur ke 1. Nilai nol menonaktifkan penghitungan upaya. Apa yang dianggap sebagai upaya yang tidak berhasil ditentukan oleh arahan proxy_next_upstream, fastcgi_next_upstream, uwsgi_next_upstream, scgi_next_upstream, dan memcached_next_upstream.

fail_timeout=time

menetapkan waktu selama sejumlah upaya komunikasi yang tidak berhasil untuk berkomunikasi dengan server harus dilakukan untuk mempertimbangkan server tidak tersedia; dan jangka waktu server dianggap tidak tersedia. Secara default, parameter disetel ke 10 detik.

Tepatnya file konfigurasi nginx Anda yang dimodifikasi harus seperti berikut (skrip ini mengasumsikan bahwa semua kontainer naik setidaknya 25 detik, jika tidak, silakan ubah fail_timeout atau max_fails di bawah bagian hulu): Catatan: Saya tidak uji skripnya sendiri, jadi Anda bisa mencobanya!

upstream phpupstream {
   server waapi_php_1:9000 fail_timeout=5s max_fails=5;
}
server {
    listen  80;

    root /var/www/test;

    error_log /dev/stdout debug;
    access_log /dev/stdout;

    location / {
        # try to serve file directly, fallback to app.php
        try_files $uri /index.php$is_args$args;
    }

    location ~ ^/.+\.php(/|$) {
        # Referencing the php service host (Docker)
        fastcgi_pass phpupstream;

        fastcgi_split_path_info ^(.+\.php)(/.*)$;
        include fastcgi_params;

        # We must reference the document_root of the external server ourselves here.
        fastcgi_param SCRIPT_FILENAME /var/www/html/public$fastcgi_script_name;

        fastcgi_param HTTPS off;
    }
}

Selain itu, sesuai Catatan berikut dari buruh pelabuhan ( https://github.com/docker/docker.github.io/blob/master/compose/networking.md#update-containers ), terbukti bahwa logika coba lagi untuk memeriksa Kesehatan dari container lain bukanlah tanggung jawab buruh B / M dan sebaliknya container tersebut harus melakukan health check sendiri.

Memperbarui kontainer

Jika Anda membuat perubahan konfigurasi pada layanan dan menjalankan docker-compose untuk memperbaruinya, container lama akan dihapus dan container baru akan bergabung dengan jaringan di bawah alamat IP yang berbeda tetapi dengan nama yang sama. Penampung yang berjalan akan dapat mencari nama itu dan terhubung ke alamat baru, tetapi alamat lama akan berhenti berfungsi.

Jika ada kontainer yang memiliki koneksi terbuka ke kontainer lama, mereka akan ditutup. Merupakan tanggung jawab penampung untuk mendeteksi kondisi ini, mencari namanya lagi, dan menyambungkan kembali.

Cara konfigurasi docker hingga terhubung 

nginx + php + mysql

1. Buka repo git berikut ini

https://github.com/IshtarStar/docker-compose-nginx-phpfpm

simpan file yang penting berikut ini pada suatu folder

- default.conf

- docker-compose.yml

buat folder src/index.php (isi terserah, bisa langung file koneksi)

pada file docker-compose.xml

ganti php 8 menjadi 7 

2. pastikan docker compose sudah terinstall di komputer

masuk ke terminal dengan mode root lalu ketikkan perintah

docker-compose up

prosess installasi nginx dan php akan dilakukan secara otomatis, 

setelah proses installasi selesai. kita dapat mengecek nginx dan php dengan cara masuk ke container php-fpm

Cara menggunakan tiredofit nginx php fpm

ketikkan perintah berikut ini

docker ps

docker exec -it <idCntainer> bash

untuk installasi awal biasanya nano belum terinall

ketikkan

apt-get update

apt-get install nano

Cara menggunakan tiredofit nginx php fpm

silahkan buat file dengan extensi php (terserah) atau file koneksi mysli dengan code berikut ini :

<?php

$servername = "db:3306"; //db = nama host mysql container, 3306 adalah port container

$username = "root";

$password = "123456";

$dbname = "wp_db";

$conn = mysqli_connect($servername, $username, $password, $dbname);

if (!$conn) {

  die("Connection failed: " . mysqli_connect_error());

}else{

  echo "koneksi suskes";

}

echo "<br>";

/*

$sql = "SELECT *from barang";

$result = mysqli_query($conn, $sql);

if (mysqli_num_rows($result) > 0) {  

  while($row = mysqli_fetch_assoc($result)) {    

    echo $row["nama"]."<br>";

  }

} else {

  echo "0 results";

}

*/

//mysqli_close($conn);

echo "<br>";

//phpinfo();

?>

simpan, dan buka url berikut ini pada browser

http://localhost:8080/koneksi.php

apabila ada peringatan koneksi error. itu wajar karena kita belum melakukan installasi mysql docker

3.  Installasi mysql docker

pada tab terminal masuk dengan mode root lalu ketikkan perintah berikut ini :

docker run --name db -e MYSQL_ROOT_PASSWORD=123456 -d mysql

setelah proses installasi selesai, kita masuk ke dalam container mysql untuk membuat database mysql

docker exec -it db mysql -u root -p

create database wp_db;

oke. sekarang database sudah selesai dibuat. sekarang kita coba buka kembali alamat ini di browser

http://localhost:8080/koneksi.php

Nah kok masih error?

eit tenang, kita belum membuat network dari docker

4.  Membuat network pada docker.

oke jadi kita masih perlu membuat network atau koneksi pada docker. intinya kita masih harus menguhungkan ketiga container.

docker network create net-wp

NB : net-wp adalah nama network, nama network bersifat bebas

docker network connect net-wp db

docker network connect net-wp docker_web_1

docker network connect net-wp docker_php-fpm_1

NB : db, docker_web_1, docker_php-fpm_1  adalah nama container

Cara menggunakan tiredofit nginx php fpm

untuk mengecek network docker dapat dilakukan dengan perintah berikut ini

docker network inspect net-wp

restart kembali semua container. dan jalankan kembali

docker-compose up

lalu buka kembali alamat http://localhost:8080/koneksi.php 

seharusnya koneksi.php sudah sukses terjadi.

-------------------------------------------------------------------------------------------------------------------------

Catatan perintah pada docker :

docker pull

docker run

docker run --options

docker stop

docker start

docker ps

docker exec -it

docker logs

-------------

docker images

unt melihat images yang sudah terinstall di docker (belum ada di container)

docker run redis

unt menjalankan container + images

docker ps

unt melihat docker yang berjalan

docker run redis -d

unt menjalankan docker + images dg

mode lepas

docker stop <idContainer>6d442dc503cb

untuk menghentikan container yang berjalan

docker ps -a

untuk melihat container yang sudah exist mungkin (berhenti)

docker run -d redis:5.0

untuk menjalankan images dg versi tertentu. (akan download terlebih dahulu apabila tidak berjlan)

docker run -p 6000:6379 -d redis

untuk menjalankan container dg binding port Host dg Port bawaan images

6000 = port host

6379 = port default images redis

===============================

printah Troubleshoot docker

docker logs <idContainer>

untuk melihat logs dari container

sama dengan

docker logs <namaContainer>

docker logs -f <namaContainer>

untuk mengecek logs terakhir pada container

docker run -d -p 6000:6379 --name redis_jadul redis:5.0

untuk mensetting nama pada container

docker exec -it <idContainer> bash

untuk masuk ke dalam container

hostname

pwd

dll

env

unt melihat environtment di dalam container

exit

untuk keluar dari container

docker run -d \

-p 5432:5432 \

--name todo-postgres \

-e POSTGRES_USER=postgres \

-e POSTGRES_PASSWORD=rahasia \

-e POSTGRES_DB=belajar \

-v $(pwd)/postgres/init.sql:/docker-entrypoint-initdb.d/init.sql \

postgres

netstat -nlp | grep 8080

kill PID

You have to remove (or rename) that container to be able to reuse that name

docker ps -a

docker rm name_of_the_docker_container

docker run -it --rm --name my-running-script -v "$PWD":/usr/src/myapp -w /usr/src/myapp php:7.4-cli php

docker run --name mynginx -p 8080:80 -v "$PWD":/usr/share/nginx/html:ro -d nginx

docker run --name some-nginx -p 8080:80 -v ~/site-content:/usr/share/nginx/html:ro -d nginx

docker run -p 8080:80 -v $(pwd):/usr/share/nginx/html nginx

docker run -it --rm -d -p 8080:80 -v ~/site-content:/usr/share/nginx/html nginx

docker run -p 8080:80 -v $(pwd):/usr/share/nginx/html nginx

docker run -p 8080:80 -v ~/site-content:/app ~/site-content:/var/log/nginx:/var/log/nginx nginx

docker run -it --rm --name my-running-script -p 8001:80 -v "$PWD":/usr/src/myapp -w /usr/src/myapp php:7.4-cli php hello.php

untuk mendapatkan IP

docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' 1f0ccad7f303

docker inspect -f '{{.Name}} - {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $(docker ps -aq)

untuk melihat servic yang aktif di dalam container

service --status-all

untuk setting ssh user login

https://www.youtube.com/watch?v=GicWz2OF0sk

https://phoenixnap.com/kb/how-to-ssh-into-docker-container

https://stackoverflow.com/questions/22499443/why-the-sshd-service-is-unrecognized

docker exec -it 494aa867466b /bin/bash

docker exec -it 233c93e5153a /bin/sh

docker exec -u 0 -it 494aa867466b bash

untuk masuk ke dalam kontainer

belajar docker

https://rizkimufrizal.github.io/belajar-docker/

https://github.com/GrzegorzBGda/clean-docker-php

stop dan start container

docker build -t nginx_webserver .

------------------------------------

https://www.youtube.com/watch?v=wjEv6Kj6yRw&t=3s

networking

docker run --name wp -p 3035:80 -d wordpress

docker run --name db -e MYSQL_ROOT_PASSWORD=123456 -d mysql

docker exec -it db mysql -u root -p

create database wp_db;

docker network create net-wp

docker network ls

docker network connect net-wp db

docker network connect net-wp wp

docker network inspect net-wp

docker network rm 2a714f6a59b2

docker network rm net-wp

docker run --name some-nginx -v /some/content:/usr/share/nginx/html:ro -d nginx

docker run --name some-nginx -p 8080:80 -v ~/site-content:/usr/share/nginx/html -d nginx

docker run -it --rm --name my-running-script -v "$PWD":/usr/src/myapp -w /usr/src/myapp php:7.4-cli php your-script.php

kode untuk Dockerfile

docker build -t nginx_webserver .

netstat -nlp | grep 8080

kill PID

cara membuat container dari images

docker run --name mynginx1 -p 8080:80 -d nginx

it work

docker run -it --rm --name my-running-script -v "$PWD":/usr/src/myapp -w /usr/src/myapp php:7.4-cli php

it work

docker run -it --rm --name my-running-script -v "$PWD":/usr/src/myapp -w /usr/src/myapp php:7.4-fpm php

catatan nginx + php + mysql

1) https://github.com/IshtarStar/docker-compose-nginx-phpfpm

buat docker-compose.yml

buat default.conf

buat folder src/index.php (isi terserah, bisa langung file koneksi)

ganti php 8 menjadi 7 

install images 

https://hub.docker.com/_/mysql

https://hub.docker.com/_/php

docker file : 

FROM php:7.4-fpm

RUN apt-get update && apt-get install -y \

        libfreetype6-dev \

        libjpeg62-turbo-dev \

        libpng-dev \

    && docker-php-ext-configure gd --with-freetype --with-jpeg \

    && docker-php-ext-install -j$(nproc) gd

jalankan docker compose up

lalu masuk ke container php dan install file berikut

docker-php-ext-install mysqli  

docker-php-ext-enable mysqli

matikan docker-compose dan jalankan lagi

lihat di phpinfo seharusnya mysqli sudah muncul

cek di phpinfo()

apakh mysqli sudah terinsall

jalankan images mysql menjadi container

lalu buat databasesnya (masuk ke container)

file koneksi.php

host : nama container misal (db)

user : root

pwd : misal 12345

db : database yang kita buat (opsional)

apabila masih muncul pesan error 

Warning: mysqli_connect(): php_network_getaddresses: getaddrinfo failed: Temporary failure in name resolution

buat netwrok yang mencangkup ketiga(semua container)

seharusnya docker sudah bisa mengakses database

--------------------------------

docker stop namaContainer

docker start namaContainer

docker restart namaContainer

--------------------------------

restart all container (waspada)

docker restart $(docker ps -a -q)

Perintah Berbahaya, peringatan!!!.

docker rm -vf $(docker ps -aq)

hapus semua container

docker rmi -f $(docker images -aq)

untuk remove semua images

install ulang docker-compose

rm /usr/local/bin/docker-compose

sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

chmod +x /usr/bin/docker-compose