Bagaimana salam semuanya, ini adalah artikel pertama saya di <» DesdeLinux (dari beberapa yang saya punya di draft saya xD), semoga bermanfaat bagi anda 😀
Nah, dalam pekerjaan saya yang baru dan saat ini, pada saat migrasi beberapa sistem ke Django sedang dilakukan (betapa aneh eh ?? xD) dan salah satu tugas saya, selain pengembangan, adalah memasukkan ke dalam produksi ini, lalu sebagai magang yang baik, karena ini adalah pertama kalinya saya menempatkan aplikasi ke dalam produksi di server nyata: $ Saya mulai membaca dokumen resmi dari masing-masing paket tumpukan yang diperlukan (Gunicorn dan Supervisord lebih dari semuanya), dan melihat tutorial itu Dalam bahasa Spanyol mereka tidak terlalu jelas bagi saya dalam beberapa aspek, saya memutuskan untuk membuat panduan mini dengan langkah-langkah yang saya ikuti untuk memasukkan aplikasi ke dalam produksi, berdasarkan tumpukan Django, Gunicorn, Supervisord, Nginx dan Postgresql.
Dalam kasus di mana saya bekerja, server masih menjalankan Debian Squeeze, tetapi panduannya harus sepenuhnya valid untuk distribusi lain ... jadi mari kita langsung ke intinya dan memulai:
Saya akan bekerja sebagai pengguna super. Pertama-tama, paket berikut diperlukan:
PIP -> Alat untuk menginstal dan mengelola paket untuk Python
aptitude install python-pip
Nginx -> Server web (kami akan menggunakannya sebagai proxy terbalik dan untuk menyimpan file statis 'img, js, css') Kami menginstalnya dengan:
aptitude install nginx
Supervisord -> Aplikasi untuk mengelola dan memantau aplikasi kita, meskipun digunakan lebih banyak lagi. Kami menginstalnya dengan:
aptitude install supervisor
virtualenv -> Ini membantu kami membuat lingkungan eksekusi virtual yang disesuaikan untuk aplikasi kami. Kami menginstalnya dengan:
aptitude install python-virtualenv
gunicorn -> server web untuk python (kami belum menginstal ini)
Saya berasumsi mereka seharusnya sudah menginstal dan mengkonfigurasi postgresql
psycopg2.dll -> Konektor Postgresql untuk python (kami juga belum akan menginstalnya)
Buat lingkungan virtual dengan virtualenv:
Pertama kita akan pindah ke direktori kerja yang akan kita gunakan untuk produksi:
cd /var/www/
Kemudian di direktori ini kita akan membuat lingkungan virtual:
virtualenv ENV-nombreApp
Kami pindah ke direktori yang baru saja saya buat virtualenv
cd ENV-nombreAPP
Kami menyalin aplikasi di direktori ini dan sekarang kami melanjutkan untuk mengaktifkan lingkungan dengan:
source bin/activate
Prompt sekarang akan terlihat seperti (ENV)usuario@host:
Ini sekarang akan membuat semua yang kita lakukan disimpan di direktori / var / www / ENV-appname / tanpa mempengaruhi paket sistem
Sekarang kita pindah ke direktori aplikasi:
cd nombreApp
Kami melanjutkan untuk menginstal daftar dependensi aplikasi (jika perlu), di mana mereka ditentukan dalam file requirement.txt:
pip install -r requirements.txt
Kami juga dapat menginstal paket satu per satu, misalnya, untuk menginstal konektor postgresql:
pip install psycopg2
Instalasi dan konfigurasi GUnicorn:
Untuk menginstalnya kami melakukannya dengan cara yang sama:
pip install gunicorn
Sekarang kita akan mengkonfigurasinya, untuk ini kita akan membuat file bernama gunicorn-deploy.py di root aplikasi kita, (walaupun namanya bisa apa saja) dengan konten berikut:
bind = "127.0.0.1:8001" # dirección a donde accederá Nginx
logfile = "/var/www/logs/nombreApp/gunicorn.log" # dirección donde estarán los logs de la aplicación
workers = 1 # dependerá en medida de la carga de trabajo que tenga la aplicación, también depende del hardware con que se cuente
loglevel = 'info' # tipo de logging
Konfigurasi supervisord:
Sekarang mari kita atur pengawas, untuk itu kita menghasilkan file konfigurasi dengan
echo_supervisord_conf > /etc/supervisord.conf
Sekarang kami mengedit file konfigurasi:
vim /etc/supervisord.conf
Dan kami menghapus tanda komentar pada baris berikut dengan menghapus; (titik koma):
[unix_http_server] file = / tmp / supervisor.sock [supervisord] logfile = / var / log / supervisord.log logfile_maxbytes = 50MB logfile_backups = 10 loglevel = debug pidfile = / var / run / supervisord.pid nodaemon = false minfds = 1024 minprocs = 200 [rpcinterface: supervisor] supervisor.rpcinterface_factory = supervisor.rpcinterface: make_main_rpcinterface [supervisorctl] serverurl = unix: [program: appname] perintah = / var / www / ENV-appname / bin / django_unicorn -c / var / www / ENV -Appname / appname / gunicorn-deploy.py direktori = / var / www / ENV-appname / appname / autostart = true autorestart = true user = Nama pengguna redirect_stderr = true stdout_logfile = / var / www / logs / appname / supervisord.log
Sekarang kita akan membuat skrip untuk supervisord untuk memulai dengan sistem, untuk itu kita akan membuat file:
vim /etc/init.d/supervisord
Dan kami menambahkan konten berikut:
# Supervisord mulai otomatis # # deskripsi: Supervisord mulai otomatis # nama proses: supervisord # pidfile: /var/run/supervisord.pid SUPERVISORD = / usr / local / bin / supervisord SUPERVISORCTL = / usr / local / bin / supervisorctl case $ 1 di awal) echo -n "Pengawas awal:" $ SUPERVISORD echo ;; stop) echo -n "Menghentikan supervisord:" $ SUPERVISORCTL shutdown echo ;; restart) echo -n "Menghentikan supervisord:" $ SUPERVISORCTL shutdown echo echo -n "Memulai supervisord:" $ SUPERVISORD echo ;; itu C
Dan sekarang kami memberikan izin eksekusi file sehingga dapat dimulai dengan sistem:
sudo chmod +x /etc/init.d/supervisord
Kami memperbarui tautan untuk memulai layanan:
sudo update-rc.d supervisord defaults
Kami memulai layanan:
sudo /etc/init.d/supervisord start
Menyiapkan nginx:
Langkah ini juga cukup sederhana, kita akan membuat file konfigurasi berikut nginx untuk aplikasi kita:
vim /etc/nginx/sites-enabled/nombreApp
Dan kami akan menambahkan konten berikut untuk Anda
server {dengarkan 9001; # port di mana mereka ingin nginx server_name mendengarkan www.domain.com; # atau 192.168.0.100, alamat yang akan kita akses access_log /var/log/nginx/Appname.access.log; # di mana kita akan memiliki lokasi log aplikasi / {# di mana nginx akan menelepon saat mengakses www.dominio.com/ proxy_pass http://127.0.0.1:8001; proxy_set_header Host $ http_host; } location / static / {# di mana nginx akan mengakses ketika kita memasuki www.domain.com/static/ alias / var / www / ENV-appname / appname / staticfiles /; }}
Dan kami memulai ulang nginx:
service nginx restart
Menyiapkan Django:
Mari modifikasi file konfigurasi django:
vim nombreApp/settings.py
Kami mencari baris yang bertuliskan DEBUG = Benar dan kami mengubah nilainya, tersisa DEBUG = Salah
Kami menambahkan parameter DB:
DATABASES = {'default': {'ENGINE': 'django.db.backends.postgresql_psycopg2', # atau mysql, atau apapun yang mereka gunakan 'NAME': 'DBName', 'USER': 'DBUser', 'PASSWORD' : 'password DB', 'HOST': 'localhost', # atau yang mereka butuhkan 'PORT': '', # atau yang mereka gunakan}}
Kami mencari garis ALLOWED_HOSTS = [] dan kami menambahkan domain atau alamat yang akan kami akses, meninggalkan sesuatu seperti ALLOWED_HOSTS = ['www.domain.com']
Kami mengkonfigurasi direktori untuk file statis, kami mencari baris yang bertuliskan STATIC_ROOT = ' '
dan kami mengubah nilainya, menempatkan jalur absolut di mana kami ingin file statis kami berada, dalam kasus saya, saya membiarkannya kurang lebih seperti ini STATIC_ROOT='/var/www/ENV-nombreApp/nombreApp/statics/'
Hampir selesai, kami menjalankan perintah berikut:
./manage.py collectstatic
Ini akan membuat folder dengan nama 'statika di jalur yang kami tentukan di file settings.py ', di situlah semua file statis kami berada.
Dan akhirnya kami memulai ulang supervisor untuk mengambil perubahan baru:
supervisorctl restart nombreApp
Dan itu saja, pada akhirnya tidak terlalu buruk? menurutku itu sederhana 😀
Semoga bermanfaat untuk bapak ibu salam 😉
Saya memahami bahwa aplikasi Django tidak boleh ditempatkan di akar folder server web (/ var / www)? Demi keamanan, saya tidak tahu apakah saya salah.
Salam.
Baiklah !!! Itu adalah sesuatu yang sama sekali tidak saya sadari, saya akan memperbarui entri 😛 dan segera setelah saya kembali pada hari Senin saya akan membuat perubahan dalam aplikasi xD
terima kasih
Tutorial bagus saudara epale. Baru-baru ini saya juga berada di tempat yang sama tetapi di Debian 7, saya harus mencari dan membaca lebih atau kurang. Saya menyarankan Anda membuat lingkungan virtual virtualenv di rumah pengguna di folder tersembunyi.
Salam!
hahaha ctm saya kemarin mendokumentasikan Django dan Anda sudah melalui galaksi 999999 Salam men xD
Artikel yang sangat bagus =) hanya seminggu yang lalu saya menerapkan aplikasi django saya tetapi saya melakukannya dengan uwsgi dan nginx, apakah Anda tahu keuntungan apa yang dimiliki gunicorn? Saya telah melihatnya disebutkan banyak.
Sangat menyenangkan melihat django menjadi sangat populer, kenyataannya adalah kerangka kerja terbaik yang pernah saya lihat =)
Untuk STATIC_ROOT yang saya lakukan adalah menentukan variabel global. Sesuatu seperti ini:
import os
PROJECT_PATH = os.path.dirname(os.path.abspath(__file__))
STATIC_ROOT = os.path.join(PROJECT_PATH, '../backend/static')
Dimana backend adalah aplikasi yang saya buat. Dengan cara ini saya memastikan bahwa di mana saya menerapkan proyek, jalur globalnya sama.
Menarik, saya akan mencoba di masa depan.
Ngomong-ngomong, apakah ada yang tahu cara mengaktifkan aksen dan karakter non-ascii dalam aplikasi django?
Saya telah mencari ke mana-mana, tidak ada metode berikut yang berhasil untuk saya:
sys.setdefaultencoding ('utf-8') # di sites.py
# - * - coding: utf-8 - * - # di setiap file python
Mengedit site.py, dan meletakkan utf-8 daripada ascii seharusnya berfungsi, tetapi $ file models.py memberi tahu saya bahwa file saya masih ascii.
Ada Saran?
Berhasil !!!!
tutorial yang sangat bagus tetapi Anda dapat melakukan salah satu cara mengunggah aplikasi saya di server web yang sudah diproduksi
terima kasih