Kami biasa menjalankan situs web sosial, dengan konfigurasi LAMP standar. Kami memiliki server Langsung, server Uji, dan server Pengembangan, serta mesin pengembang lokal. Semua dikelola menggunakan GIT.
Di setiap mesin, kami memiliki file PHP, tetapi juga layanan MySQL, dan folder dengan Gambar yang akan diunggah pengguna. Server Live tumbuh memiliki beberapa pengguna berulang 100K (!), Dumpnya sekitar 2GB (!), Folder Gambar sekitar 50GB (!). Pada saat saya pergi, server kami telah mencapai batas CPU, Ram, dan yang paling penting, batas koneksi internet bersamaan (Kami bahkan menyusun versi driver kartu jaringan kami sendiri untuk memaksimalkan server 'lol'). Kami tidak bisa ( dan Anda tidak boleh berasumsi dengan situs web Anda ) memasukkan 2GB data dan 50GB gambar di GIT.
Untuk mengelola semua ini di bawah GIT dengan mudah, kami akan mengabaikan folder biner (folder yang berisi Gambar) dengan memasukkan jalur folder ini ke .gitignore. Kami juga memiliki folder bernama SQL di luar jalur documentroot Apache. Dalam folder SQL itu, kita akan meletakkan file SQL kita dari pengembang dalam penomoran tambahan (001.florianm.sql, 001.johns.sql, 002.florianm.sql, dll). File SQL ini dikelola oleh GIT juga. File sql pertama memang akan berisi sekumpulan besar skema DB. Kami tidak menambahkan data pengguna di GIT (mis. Catatan tabel pengguna, atau tabel komentar), tetapi data seperti konfigurasi atau topologi atau data spesifik situs lainnya, disimpan dalam file sql (dan karenanya oleh GIT). Sebagian besar pengembang (yang tahu kode terbaik) yang menentukan apa dan apa yang tidak dikelola oleh GIT berkaitan dengan skema SQL dan data.
Ketika sampai pada rilis, administrator login ke server dev, menggabungkan cabang langsung dengan semua pengembang dan membutuhkan cabang pada mesin dev ke cabang pembaruan, dan mendorongnya ke server uji. Di server pengujian, ia memeriksa apakah proses pembaruan untuk server Live masih valid, dan secara berurutan, mengarahkan semua lalu lintas di Apache ke situs placeholder, membuat dump DB, mengarahkan direktori kerja dari pembaruan 'langsung' ke ' ', mengeksekusi semua file sql baru ke mysql, dan mengembalikan lalu lintas kembali ke situs yang benar. Ketika semua pemangku kepentingan setuju setelah meninjau server uji, Administrator melakukan hal yang sama dari server Uji ke server Langsung. Setelah itu, ia menggabungkan cabang langsung di server produksi, ke cabang master di semua server, dan mengubah semua cabang langsung.
Jika ada masalah di server pengujian, mis. penggabungan memiliki terlalu banyak konflik, kemudian kodenya dikembalikan (menunjuk cabang kerja kembali ke 'live') dan file sql tidak pernah dieksekusi. Saat file sql dieksekusi, ini dianggap sebagai tindakan yang tidak dapat dibalik pada saat itu. Jika file SQL tidak berfungsi dengan baik, maka DB dikembalikan menggunakan Dump (dan pengembang mengatakan, untuk menyediakan file SQL yang tidak teruji).
Hari ini, kami memelihara folder sql-up dan sql-down, dengan nama file yang setara, di mana para pengembang harus menguji bahwa kedua file sql yang diupgrade, dapat diturunkan peringkatnya. Ini pada akhirnya bisa dieksekusi dengan skrip bash, tapi itu ide yang bagus jika mata manusia terus memantau proses peningkatan.
Ini tidak bagus, tetapi bisa dikelola. Semoga ini memberi wawasan tentang situs kehidupan nyata, praktis, dan ketersediaan relatif tinggi. Mungkin agak ketinggalan jaman, tapi tetap diikuti.