
Tentang apa artikel ini
Artikel ini akan berbicara tentang pengalaman kami menggunakan Docker untuk dengan cepat mengkonfigurasi lingkungan pengembangan yang dapat diskalakan untuk pengembangan web. Saya akan berbicara secara singkat tentang tugas-tugas yang menghadang kami dan alat-alat yang dipilih untuk menyelesaikan masalah ini. Artikel ini ditandai dengan ikon tutorial, karena Anda akan menemukan petunjuk tentang penerapan lingkungan di dalamnya. Dibandingkan dengan artikel serupa (tautan di akhir artikel), akan ada lebih sedikit detail teknis dan lebih banyak contoh langsung.
Tugas apa yang kita hadapi?
Itu terjadi bahwa pengembang baru terhubung ke tim yang ada. Agar dia dapat mulai melakukan tugas (dengan kata lain, menulis kode dan memeriksa pekerjaannya), tidak cukup untuk mendapatkan kode sumber. Anda memerlukan lingkungan yang mencakup server web, kompiler php, dan basis data. Ini adalah set minimum. Bergantung pada proyek, lingkungan dapat meliputi:
- NoSQL
- Server Antrian
- Mesin pencari teks lengkap;
- Solusi caching;
- Pemetik;
- Alat pengembang yang berguna
Semua ini harus diinstal secara lokal di pengembang, dan versi yang sama dengan anggota tim lainnya. Dan di sini ada kesulitan:
- Setelah instalasi, Anda perlu mengkonfigurasi;
- Perangkat lunak sudah diinstal, tetapi ini adalah versi yang berbeda;
- Itu adalah waktu yang lama;
Dan fakta bahwa pengembang bekerja pada platform yang berbeda (windows, linux, os x) membuat segalanya semakin rumit.
Untuk mengatasi masalah, Docker dipilih. Mungkin alasan utamanya adalah karena mudah masuk ke infrastruktur yang ada. Ini berfungsi dengan baik di Linux, dan sebagian besar pengembang kami di OS ini.
AlternatifLaravel menyediakan solusi sendiri untuk mengatur lingkungan lokal yang disebut Homestead. Ini adalah serangkaian konfigurasi dan skrip untuk Vagrant, dengan bantuan perangkat lunak yang diperlukan digunakan dalam mesin virtual VirtualBox. Tetapi deskripsi Homestead berada di luar cakupan artikel ini.
Proyek Laradock
Pada awalnya, proyek ini hanya bertujuan meluncurkan Laravel on Docker, yang tercermin dalam namanya. Tetapi ketika popularitas tumbuh di komunitas php, Laradock mulai mendukung proyek-proyek php lainnya: Symfony, CodeIgniter, WordPress, Drupal. Proyek ini sangat populer, didukung dan dikembangkan secara aktif:

Laradock adalah serangkaian gambar Docker independen yang telah dikonfigurasi sebelumnya yang dapat Anda pasang berdasarkan persyaratan proyek Anda. Didokumentasikan dengan baik dan sangat mudah digunakan. Untuk memulai komponen, kami cukup daftar mereka:
docker-compose up apache2 php-fpm mysql phpmyadmin
atau
docker-compose up nginx php-fpm mariadb adminer
Catatan : tidak perlu secara eksplisit menentukan php-fpm, karena ketika server web kontainer php-fpm dimulai, wadah tersebut mulai secara otomatis.
Repositori memiliki lebih dari 48 kontainer, termasuk:
- Database : MySQL, MariaDB, Percona, MongoDB, MSSQL, PostgreSQL
- Manajemen Basis Data : PhpMyAdmin, Adminer, PgAdmin
- Server web : nginx, Apache2, Caddy
- Kompiler PHP : PHP FPM, HHVM
- Lain-lain : Selenium, Jenkins, ElasticSearch, Kibana, Gitlab, Mailhog, MailDev, Laravel Echo, Phalcon
- Alat : PHP CLI, Komposer, Git, Linuxbrew, Node, V8JS, Gulp, SQLite, xDebug, Utusan, Penyebar, Vim, Benang, Drush
Persyaratan dan kondisi awal
Anda akan membutuhkan:
dan konsol tempat perintah akan dieksekusi. Situs web buruh pelabuhan memiliki dokumentasi komprehensif tentang pemasangan untuk berbagai platform (tautan juga ada di akhir artikel). Jika Anda belum menginstal git, lakukan sesuai dengan instruksi dari situs resmi.
Arsitektur repositori Git: proyek utama dan Laradock
Laradock dapat digunakan dalam dua versi:
- Pisahkan laradock untuk setiap proyek
- Satu laradock untuk banyak proyek
Dalam kasus pertama, struktur direktori akan terlihat seperti ini:

Yang kedua, seperti ini:

Kami
selalu menggunakan opsi pertama: satu proyek - satu laradock. Pendekatan inilah yang memberikan fleksibilitas dan kemandirian satu proyek dari yang lain.
Pertanyaan penting kedua adalah: membuat satu repositori umum atau dua yang terpisah? Dengan kata lain, apakah saya perlu menambahkan file laradock ke repositori utama dengan proyek? Jawabannya diperlukan, tetapi dalam bentuk submodule ke repositori utama. Lingkungan Docker adalah bagian tambahan dari proyek dan tidak selalu diperlukan. Misalnya, pada server pementasan dan produksi, itu tidak perlu. Ketika Anda menggunakan git, file lingkungan tidak akan sampai di sana.
Nama direktori lingkungan
Secara default, nama kontainer menggunakan nama direktori saat ini sebagai suffix: laradock_nginx_1, laradock_mysql_1, dll. Untuk menghindari data yang membingungkan dalam volume, nama direktori unik diperlukan untuk lingkungan Anda. Ini mudah dicapai jika Anda tetap menggunakan skema pilihan kami: tambahkan nama proyek ke nama direktori dengan lingkungan, misalnya:
- laradock-mysite
- laradock-proj1
- laradock-mobapp
yaitu, awalan "laradock" dan nama direktori dengan proyek melalui tanda hubung.
Satu peluncuran situs
Di mana kita memulai peluncuran situs?
Seperti yang kami sebutkan di bab ketiga, kami menggunakan Laradoc untuk menciptakan lingkungan.
Proses startup terdiri dari langkah-langkah untuk mengkonfigurasi lingkungan dan aplikasi laravel.
Pengaturan proyek
Laradoc menyertakan contoh file konfigurasi lingkungan. Kami membuat salinan untuk proyek kami.
cp env-example .env
Opsi .env cukup jelas. Dalam parameter kami mengatur akses database, parameter email, akses ke layanan pihak ketiga, jika kami menggunakannya dalam proyek kami.
Memulai dan menghentikan aplikasi lingkungan dilakukan dengan perintah docker-compose
docker-compose up
dan
docker-compose stop
Jika perlu, Anda dapat meminta unduhan layanan yang diperlukan dalam perintah mulai. Misalnya, tiga layanan tambahan akan dimuat dengan cara ini:
docker-compose up -d nginx percona adminer
Anda dapat menghapus perintah ini dalam skrip shell terpisah sehingga Anda tidak harus memasukkannya secara manual setiap kali.
Skrip startup dapat disebut "start.sh", atau apa pun yang Anda suka:
Skrip berhenti layanan dapat disebut "stop.sh", atau "down.sh":

Inisialisasi Proyek
Transisi ke lingkungan wadah dilakukan oleh perintah
docker-compose exec --user=laradock workspace bash
Kesalahan Penempatan
Saat menginstal Laradoc di lingkungan linux, masalah izin file dapat terjadi.
Dalam hal ini, file mungkin memiliki pemilik yang salah, atau hak akses tidak mencukupi.
Gejala : ketika Anda mencoba untuk memulai lingkungan dengan perintah "buruh pelabuhan-menulis" atau pergi ke wadah dengan perintah "buruh pelabuhan-menulis ...", seperti dalam contoh di atas, kesalahan mirip dengan yang
/ var / www / vendor tidak ada dan tidak dapat dibuat
Aliran atau file "/var/www/storage/logs/laravel.log" tidak dapat dibuka: gagal membuka streaming: Izin ditolak
Alasan untuk kesalahan adalah bahwa dalam contoh konfigurasi lingkungan buruh pelabuhan ID Pengguna dan Kelompok Pengguna adalah hard-kode, secara default 1000 dan 1000 masing-masing.
Jika dalam sistem unix kami ID ini sudah ditempati oleh entitas lain, maka Anda perlu mengedit konfigurasi secara manual.
Prosedur koreksi kesalahan
Periksa pengguna dan grup di direktori:
ls -la /var/www
Pemilik file dan direktori (Grup Pengguna dan Pengguna) harus laradock laradock.
Jika alih-alih laradock: laradock pemilik dan grup ditandai dengan angka (1001: 1001, 1001: 13002 dan kombinasi serupa), maka Anda perlu membuat perubahan pada file pengaturan.
Jika ID Pengguna dan Grup Pengguna Anda (/ etc / passwd, / etc / group) tidak cocok dengan yang ditentukan, maka untuk operasi yang benar, Anda perlu membuat perubahan pada file-file berikut:
/ laradock / php-fpm / Dockerfile *, sejalan
"
LARI usermod -u 1000 www-data "
ganti 1000 dengan ID pengguna
/laradock/.env dalam barisan
WORKSPACE_PUID = 1000
WORKSPACE_PGID = 1000
WORKSPACE_PUID - tentukan ID pengguna Anda, WORKSPACE_PGID - ID grup pengguna
/ laradock / workspace / Dockerfile *, sejalan
ARG PUID = 10315
ARG PGID = 10004
PUID - ID pengguna, PGID - ID grup pengguna
Setelah membuat perubahan, bangun kembali ruang kerja dan php-fpm lagi dan kemudian mulai wadah:
docker-compose build workspace php-fpm
Jika Anda mengalami masalah seperti itu, maka Anda perlu memeriksa hak akses ke direktori framework Laravel. Tetapkan izin untuk direktori yang memerlukan izin tulis:
sudo chgrp -R www-data storage bootstrap/cache; sudo chmod -R ug+rwx storage bootstrap/cache
Sertifikat SSL dan https
Kemungkinan besar situs Anda dalam produksi akan bekerja sesuai dengan protokol yang aman. Masuk akal untuk melakukan pengembangan lokal di https. Ini tidak terlalu sulit untuk dilakukan, Anda memerlukan sertifikat SSL dan pengaturan kecil. Artikel ini dijelaskan secara lebih rinci dalam
Cara Mengeluarkan Sertifikat SSL yang Ditandatangani Sendiri .
Menjalankan banyak situs
Jadi, semua proyek bekerja sesuai dengan skema "Satu Laradock - satu proyek". Tetapi satu proyek belum tentu satu situs. Terkadang Anda perlu menjalankan beberapa situs secara bersamaan, karena mereka akan berinteraksi satu sama lain.
Dalam hal ini, dua laradock tidak dapat dimulai pada saat yang sama, karena di masing-masing server web diluncurkan yang mendengarkan port 80 - kami mendapatkan konflik. Tetapi kita memiliki akses ke file konfigurasi nginx, mari kita konfigurasikan.
Tapi pertama-tama, catatan tentang arsitektur dan repositori git. Dalam hal beberapa situs, kami menggunakan struktur direktori dari opsi kedua:

Repositori git dengan laradock tidak lagi menjadi submodul dari repositori lain, tetapi menjadi sepenuhnya independen.
Konfigurasi server web akan ditampilkan menggunakan nginx sebagai contoh. Di direktori laradock, buka nginx / sites. Kita melihat file default.conf dan beberapa * .conf.example. Berdasarkan file default.conf atau sampel, kami membuat konfigurasi untuk situs.
Perhatikan root dokumen. Secara default, arahan root terlihat seperti ini:
root /var/www/public;
tetapi harus seperti ini:
root /var/www/site-1/public; root /var/www/site-2/public;
Penting!
Lihatlah isi .gitignore di direktori ini. Semua file * .conf kecuali default.conf diabaikan. Penting untuk menambahkan file yang dibuat ke pengecualian, yaitu, jangan mengabaikannya.
Konfigurasikan crontab agar penjadwal laravel dapat bekerja dengan benar. Untuk melakukan ini, tambahkan path di file workspace / crontab / laradock:
* * * * * laradock /usr/bin/php /var/www/site-1/artisan schedule:run >> /dev/null 2>&1 * * * * * laradock /usr/bin/php /var/www/site-2/artisan schedule:run >> /dev/null 2>&1
Untuk komunikasi yang sukses dari situs di dalam wadah, tambahkan alias. Dalam file docker-compose.yml kami menemukan bagian tersebut
### NGINX Server ###
dan tambahkan alias ke setiap domain:

Ini semua yang perlu Anda lakukan untuk menjalankan proyek dengan banyak domain. Di luar artikel, pertanyaan tentang pengorganisasian https untuk beberapa domain tetap ada. Semua dengan analogi dengan organisasi ssl untuk satu domain, yang dijelaskan pada bagian di atas. Tambahkan komentar jika Anda mengalami kesulitan, saya akan menjawabnya atau menjelaskan fitur-fitur pada artikel terpisah.
Fitur tambahan
Di lingkungan Docker, memungkinkan untuk mengonfigurasi aplikasi yang kita butuhkan. Konfigurasi dasar Laradoc sudah termasuk paket aplikasi:
Server aplikasi web | Apache2, Caddy |
Caching Aplikasi Web | Nginx, Varnish |
Database dan Layanan Caching | Mongo, Redis, Mssql, Mysql, Percona, Mariadb, Elasticsearch, Memcached, Redis, RethinkDb, Aerospike |
Antarmuka web ke database | Admin, PhpMyAdmin |
Load balancer | Haproxy |
Pemrograman, kerangka dan kerangka kerja | Php, Python, Symfony, Laravel, Node |
Utilitas | Php, Python, Symfony, Laravel, Node |
Manajer paket | Komposer benang |
Alat uji | Jenkins |
Alat Konfigurasi Infrastruktur Aplikasi | Bentuk Terra |
Secara singkat pertimbangkan aplikasi yang paling banyak disebutkan.
RabbitmqMekanisme pengiriman pesan antar aplikasi. Pengembang paket ini menentukan tujuannya sebagai berikut: “manajer antrian”, “perantara pesan” atau “antrian pesan”.
Pesan dapat berisi kumpulan data apa pun.
Dalam skenario bekerja dengan manajer antrian, pesan dari satu aplikasi - pengirim - disimpan hingga aplikasi lain (penerima) menghubungkan dan mengambil (menerima) pesan dari antrian.
RedisMembuat cache data dalam RAM. Itu juga dapat digunakan sebagai gudang data bersama dengan server database, atau menggantinya.
Redis mendukung string, daftar, set, set memerintahkan, dan tabel hash.
Kelemahan utama lobak adalah hilangnya data jika terjadi pembersihan RAM, saat OS dinyalakan kembali, atau saat peralatan dimatikan. Pengembang lobak telah membayangkan skenario serupa: dalam mode AOF (Append Only File), data ditambahkan ke file disk setiap detik.
Keuntungan utama lobak adalah akses tercepat ke data dengan kecepatan akses ke RAM.
Tautan Material
LaravelDockerLaradockRumah tinggal Laravel“Cara menerbitkan sertifikat SSL yang ditandatangani sendiri dan membuat browser Anda memercayainya”Docker + Laravel =Kesimpulan
Memilih Laravel + Docker untuk pengembangan web, kami memenangkan hadiah paling berharga: waktu.
Mengikuti skenario pengembangan di WAMP atau LAMP, kami harus menghabiskan waktu
tidak berguna dan tidak ada tempat.
Baik WAMP dan LAMP memerlukan pengembang php untuk memiliki tingkat keahlian tertentu di bidang yang tidak terkait langsung dengan pengembangan web: mengkonfigurasi server web, mengkonfigurasi parameter php, dll.
Menggunakan Laradoc memungkinkan kami, setelah menciptakan seluruh lingkungan proyek, untuk menyebarkannya di tempat kerja baru dalam waktu sesingkat mungkin. Dan segera mulai bekerja.
Sebagai kesimpulan, kami mencatat manfaat menggunakan Laradoc:
- infrastruktur terpadu di setiap tempat kerja: server web, server sql, seperangkat kerangka kerja dan perpustakaan;
- penggunaan waktu kerja yang rasional;
- entri cepat pengembang baru ke dalam proyek.
Tulis di komentar bagaimana tim Anda bekerja dengan lingkungan, alat dan pendekatan apa yang Anda gunakan.