Bootcamp: Membantu menyiapkan produksi.

Dibuat pada 17 Okt 2019  ·  12Komentar  ·  Sumber: vitorfs/bootcamp

Hai, saya mencoba membuat Bootcamp sebagai jejaring sosial untuk para peneliti di Universitas saya. Namun, karena beberapa kendala, saat ini saya tidak dapat menggunakan caddy sebagai proxy terbalik untuk penerapan. Sebagai gantinya saya menggunakan nginx. Jika memungkinkan, dapatkah Anda memberi saya beberapa panduan tentang parameter apa yang perlu saya tentukan untuk lingkungan produksi. Saya melihat file env.example tetapi karena proyek ini baru bagi saya, saya tidak tahu bagaimana semuanya terhubung satu sama lain. Saya terjebak dengan kesalahan berikut

manage.py runworker: error: the following arguments are required: channels

Bantuan apa pun dihargai.

Support discussion help wanted

Komentar yang paling membantu

Dalam kasus saya, IM menggunakan python 3.7.1 di mesin server Ubuntu

Versi Python pengaturan opsional
sudo update alternatives --install /usr/bin/python/ python /usr/bin/python3.7.1

Dengan perintah ini, python 3.7.1 adalah prioritas pertama saya

Pertama, instal lingkungan pada mesin
sudo -H pip3 install virtualenv

cd /home/pages untuk mengubah ke folder yang benar

mkdir bootcamp untuk membuat folder proyek

cd bootcamp/

buat lingkungan
virtualenv bootcampenv
Aktifkan lingkungan Anda
source bootcampenv/bin/activate

installl gunicorn
pip3 install gunicorn

kembali ke direktori halaman
cd ..
dan buat folder untuk proyek bootcamp

django-admin startproject bootcampprojectdir

cd bootcampprojectdir

Dan instal persyaratannya
pip install -U -r requirements/production.txt

Jika Anda menggunakan basis data yang berbeda atau sesuatu, mulai migrasi dan kumpulkan statis

Perbarui firewall untuk mengizinkan port 8000
sudo ufw allow 8000

buat gunicorn wsgi
gunicorn --bind 0.0.0.0:8000 settings.wsgi

buat soket sistem
sudo nano /etc/systemd/system/gunicorn.socket

[Satuan]
Description=gunicorn.sock

[Stopkontak]
ListenStream=/run/gunicorn.sock

[Install]
WantedBy=socket.target

membuat layanan
sudo nano /etc/systemd/system/gunicorn.service

[Satuan]
Deskripsi=gunicorn daemon
Membutuhkan=gunicorn.socket
Setelah=jaringan.target

[Melayani]
Pengguna = halaman
Grup=www-data
WorkingDirectory=/home/pages/bootcampprojectdir/bootcampenv/bin/gunicorn
--akses-logfile-
--pekerja 3
--bind unix:run/gunicorn.sock
settings.wsgi.application

[Install]
WantedBy=multi-pengguna.target

aktifkan semuanya
sudo systemctl start gunicorn.socket
sudo systemctl enable gunicorn.socket

Periksa
file /run/gunicorn.sock
Ketika Anda tidak memiliki kesalahan, maka baik-baik saja

Periksa status
sudo systemctl status gunicorn.socket

periksa layanan
curl --unix-socket /run/gunicorn.sock localhost

Ketika Anda tidak melihat kode htnl, sesuatu dengan gunicorn.service

pastikan layanan berjalan
sudo systemctl status gunicorn

Ketika semuanya baik-baik saja, langkah selanjutnya NGinx lolos ke gunicorn
instal nginx
sudo apt install nginx

buat situs di nginx
membuat layanan
sudo nano /etc/nginx/sites-available/bootcampproject

server {
mendengarkan 80;
nama_server 99.99.99.99

  location = /favicon.ico { access_log off; log_not_found off; }
  location /static/ {
        root /home/pages/bootcampprojectdir;
  }

lokasi / {
sertakan proxy_params;
proxy_pass http://unix :/run/gunicorn.sock;
}
}

simpan dan salin file ini ke situs yang diaktifkan
sudo ln -s /etc/nginx/sites-available/bootcampproject /etc/nginx/sites/enabled

dan periksa pengaturan nginx

sudo nginx -t

Jika tidak ada kesalahan, mulai ulang nginx
sudo systemctl restart nginx

tambahkan port firewall nginx, tetapi pertama-tama hapus port 8000 dari pengujian

sudo ufw delete allow 8000

tambahkan nginx
sudo ufw allow 'Nginx Full'

Semua 12 komentar

Hai,
Saya tidak menggunakan caddy. Saya menggunakan gunicorn untuk semua proyek Django saya.

Apakah Anda menginstal semua persyaratan?
saluran>=2.1.1 # https://github.com/django/channels
saluran-redis>=2.2.1 # https://github.com/django/channels_redis

Anda dapat memeriksa melalui konsol

$ python -c "import channels"
$ echo $?

0 artinya, ada
1 berarti, modul tidak ada di sistem

saluran dipasang. Saya menghadapi masalah lain sekarang. Berikut adalah file buruh pelabuhan saya dan .env. Saya mengalami masalah dengan layanan pekerja. Tidak yakin apa fungsinya. Sangat menghargai bantuan Anda, proyek Anda sangat menarik dan dapat membantu banyak orang di universitas saya jika ini mulai diproduksi.

env.txt

docker-compose.txt

Berikut adalah log kesalahan.

worker_1    | /usr/local/lib/python3.6/site-packages/daphne/server.py:13: UserWarning: Something has already installed a non-asyncio Twisted reactor. Attempting to uninstall it; you can fix this warning by importing daphne.server early in your codebase or finding the package that imports Twisted and importing it later on.
worker_1    |   UserWarning,
django_1    | DEBUG 2019-10-17 21:28:37,751 base 1 140450066271560 Configuring Raven for host: https://sentry.io
worker_1    | DEBUG 2019-10-17 21:28:35,663 base 1 140638836505928 Configuring Raven for host: https://sentry.io
worker_1    | Running worker for channels ['channels', 'notifications']
worker_1    | DEBUG 2019-10-17 21:28:36,297 base 1 140638836505928 Sending message of length 5534 to https://sentry.io/api/1782977/store/
worker_1    | Traceback (most recent call last):
worker_1    |   File "manage.py", line 30, in <module>
worker_1    |     execute_from_command_line(sys.argv)
worker_1    |   File "/usr/local/lib/python3.6/site-packages/django/core/management/__init__.py", line 381, in execute_from_command_line
worker_1    |     utility.execute()
worker_1    |   File "/usr/local/lib/python3.6/site-packages/django/core/management/__init__.py", line 375, in execute
worker_1    |     self.fetch_command(subcommand).run_from_argv(self.argv)
worker_1    |   File "/usr/local/lib/python3.6/site-packages/django/core/management/base.py", line 323, in run_from_argv
worker_1    |     self.execute(*args, **cmd_options)
worker_1    |   File "/usr/local/lib/python3.6/site-packages/django/core/management/base.py", line 364, in execute
worker_1    |     output = self.handle(*args, **options)
worker_1    |   File "/usr/local/lib/python3.6/site-packages/channels/management/commands/runworker.py", line 46, in handle
worker_1    |     worker.run()
worker_1    |   File "/usr/local/lib/python3.6/site-packages/asgiref/server.py", line 60, in run
worker_1    |     event_loop.run_until_complete(self.handle())
worker_1    |   File "/usr/local/lib/python3.6/asyncio/base_events.py", line 484, in run_until_complete
worker_1    |     return future.result()
worker_1    |   File "/usr/local/lib/python3.6/site-packages/channels/worker.py", line 30, in handle
worker_1    |     [listener.result() for listener in listeners]
worker_1    |   File "/usr/local/lib/python3.6/site-packages/channels/worker.py", line 30, in <listcomp>
worker_1    |     [listener.result() for listener in listeners]
worker_1    |   File "/usr/local/lib/python3.6/site-packages/channels/worker.py", line 37, in listener
worker_1    |     message = await self.channel_layer.receive(channel)
worker_1    |   File "/usr/local/lib/python3.6/site-packages/channels_redis/core.py", line 461, in receive
worker_1    |     return (await self.receive_single(channel))[1]

perubahan di lingkunganmu
REDIS_URL=redis://127.0.0.1:6379

Bisakah Anda menunjukkan kepada saya cara mengonfigurasi layanan pekerja? Dan mengapa kita membutuhkannya? Baru dalam proyek ini jadi tidak yakin di mana mencari informasi itu

uh, banyak sekali. Ini tidak dilakukan dalam beberapa menit ...

Pertama-tama, periksa apakah Anda menginstal semua persyaratan di lingkungan server Anda

pip install -U -r requirements/production.txt

Kedua, proyek Anda bekerja di lokal?

Mengonfigurasi proyek tidak mungkin dilakukan tanpa semua file. Dan saya bukan yang terbaik untuk mengkonfigurasinya. Saya dapat memeriksa konfigurasi dan berbagi saya, tetapi ini TIDAK diuji dan disetujui untuk bootcamp. Mungkin Anda memerlukan pengaturan tambahan.

Saya memutar layanan menggunakan docker compose. Penyebaran lokal berfungsi dengan baik tetapi production.yml adalah hal yang sama sekali berbeda. Saya melibatkan redis, daphne, postgres. Jika Anda memiliki file docker-compose yang berguna di suatu tempat, silakan bagikan. Terima kasih

Dapatkan Outlook untuk iOS https://aka.ms/o0ukef


Dari: samazaphikel [email protected]
Dikirim: Kamis, 17 Oktober 2019 17:03:30
Kepada: vitorfs/bootcamp [email protected]
Cc: Tri Minh Pham [email protected] ; Penulis [email protected]
Perihal: Re: [vitorfs/bootcamp] Bantuan dalam menyiapkan produksi. (#193)

uh, banyak sekali. Ini tidak dilakukan dalam beberapa menit ...

Pertama-tama, periksa apakah Anda menginstal semua persyaratan di lingkungan server Anda

pip install -U -r requirements/production.txt

Kedua, proyek Anda bekerja di lokal?

Mengonfigurasi proyek tidak mungkin dilakukan tanpa semua file. Dan saya bukan yang terbaik untuk mengkonfigurasinya. Saya dapat memeriksa konfigurasi dan berbagi saya, tetapi ini TIDAK diuji dan disetujui untuk bootcamp. Mungkin Anda memerlukan pengaturan tambahan.


Anda menerima ini karena Anda yang menulis utas.
Balas email ini secara langsung, melihatnya di GitHub https://github.com/vitorfs/bootcamp/issues/193?email_source=notifications&email_token=ADEK4AB5JEUP5LQ4APTJ6ITQPDOLFA5CNFSM4JB4YOCKYY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOEBRVI2A#issuecomment-543380584 , atau berhenti berlangganan https://github.com/notifications/unsubscribe- auth/ADEK4ADBCG24WLWIT3IM6OLQPDOLFANCNFSM4JB4YOCA .

Dalam kasus saya, IM menggunakan python 3.7.1 di mesin server Ubuntu

Versi Python pengaturan opsional
sudo update alternatives --install /usr/bin/python/ python /usr/bin/python3.7.1

Dengan perintah ini, python 3.7.1 adalah prioritas pertama saya

Pertama, instal lingkungan pada mesin
sudo -H pip3 install virtualenv

cd /home/pages untuk mengubah ke folder yang benar

mkdir bootcamp untuk membuat folder proyek

cd bootcamp/

buat lingkungan
virtualenv bootcampenv
Aktifkan lingkungan Anda
source bootcampenv/bin/activate

installl gunicorn
pip3 install gunicorn

kembali ke direktori halaman
cd ..
dan buat folder untuk proyek bootcamp

django-admin startproject bootcampprojectdir

cd bootcampprojectdir

Dan instal persyaratannya
pip install -U -r requirements/production.txt

Jika Anda menggunakan basis data yang berbeda atau sesuatu, mulai migrasi dan kumpulkan statis

Perbarui firewall untuk mengizinkan port 8000
sudo ufw allow 8000

buat gunicorn wsgi
gunicorn --bind 0.0.0.0:8000 settings.wsgi

buat soket sistem
sudo nano /etc/systemd/system/gunicorn.socket

[Satuan]
Description=gunicorn.sock

[Stopkontak]
ListenStream=/run/gunicorn.sock

[Install]
WantedBy=socket.target

membuat layanan
sudo nano /etc/systemd/system/gunicorn.service

[Satuan]
Deskripsi=gunicorn daemon
Membutuhkan=gunicorn.socket
Setelah=jaringan.target

[Melayani]
Pengguna = halaman
Grup=www-data
WorkingDirectory=/home/pages/bootcampprojectdir/bootcampenv/bin/gunicorn
--akses-logfile-
--pekerja 3
--bind unix:run/gunicorn.sock
settings.wsgi.application

[Install]
WantedBy=multi-pengguna.target

aktifkan semuanya
sudo systemctl start gunicorn.socket
sudo systemctl enable gunicorn.socket

Periksa
file /run/gunicorn.sock
Ketika Anda tidak memiliki kesalahan, maka baik-baik saja

Periksa status
sudo systemctl status gunicorn.socket

periksa layanan
curl --unix-socket /run/gunicorn.sock localhost

Ketika Anda tidak melihat kode htnl, sesuatu dengan gunicorn.service

pastikan layanan berjalan
sudo systemctl status gunicorn

Ketika semuanya baik-baik saja, langkah selanjutnya NGinx lolos ke gunicorn
instal nginx
sudo apt install nginx

buat situs di nginx
membuat layanan
sudo nano /etc/nginx/sites-available/bootcampproject

server {
mendengarkan 80;
nama_server 99.99.99.99

  location = /favicon.ico { access_log off; log_not_found off; }
  location /static/ {
        root /home/pages/bootcampprojectdir;
  }

lokasi / {
sertakan proxy_params;
proxy_pass http://unix :/run/gunicorn.sock;
}
}

simpan dan salin file ini ke situs yang diaktifkan
sudo ln -s /etc/nginx/sites-available/bootcampproject /etc/nginx/sites/enabled

dan periksa pengaturan nginx

sudo nginx -t

Jika tidak ada kesalahan, mulai ulang nginx
sudo systemctl restart nginx

tambahkan port firewall nginx, tetapi pertama-tama hapus port 8000 dari pengujian

sudo ufw delete allow 8000

tambahkan nginx
sudo ufw allow 'Nginx Full'

Hai @phamminhtris Saya senang Anda menggunakan proyek ini, dan ternyata bermanfaat. Ada dua cara utama untuk menyebarkan proyek ke lingkungan produksi. Yang pertama akan menggunakan Docker, tetapi memiliki peringatan, dan jelas membutuhkan cukup banyak keakraban dengan Docker dan docker-compose . Saya jauh dari ahli dan itulah mengapa saya hanya menggunakannya untuk pengembangan, tetapi mungkin Anda dapat menemukan sesuatu yang berguna di sini .

Cara lain adalah mengimplementasikan proyek apa adanya, yang "lebih mudah" (atau setidaknya Anda dapat menemukan lebih banyak sumber daya dan panduan untuk menerapkannya), ingatlah untuk memuat file .env dengan variabel yang diperlukan, Anda dapat menggunakan versi contoh yang disertakan untuk memahami cara mendeklarasikannya.

Apakah cukup menggunakan gunicorn sebagai satu-satunya server? Saya melihat beberapa fitur membutuhkan server aplikasi ASGI seperti daphne untuk melayani lalu lintas soket web. Tolong koreksi saya jika saya salah. Terima kasih atas bantuan Anda. Sangat menghargai itu.

Nginx adalah tempat permintaan dari internet datang lebih dulu. Itu dapat menanganinya dengan sangat cepat, dan biasanya dikonfigurasi untuk hanya membiarkan permintaan itu lewat, yang benar-benar perlu tiba di aplikasi web Anda.

Gunicorn menerjemahkan permintaan yang didapat dari Nginx ke dalam format yang dapat ditangani oleh aplikasi web Anda, dan memastikan bahwa kode Anda dijalankan saat dibutuhkan.

Masing-masing dapat melakukan sesuatu, yang lainnya tidak.
Nginx adalah server web dan proxy terbalik. Ini sangat dioptimalkan untuk semua hal yang perlu dilakukan server web.

Jaga perutean nama domain (memutuskan ke mana permintaan harus pergi, atau jika ada respons kesalahan)
Sajikan file statis
Menangani banyak permintaan yang masuk sekaligus
Menangani klien yang lambat
Meneruskan permintaan yang harus dinamis ke Gunicorn
Hentikan SSL (https terjadi di sini)
Hemat sumber daya komputasi (CPU dan memori) dibandingkan dengan kode Python Anda
Dan masih banyak lagi, jika Anda mengonfigurasinya untuk melakukannya (load balancing, caching, ...)

gunicorn
Setelah Nginx memutuskan, bahwa permintaan tertentu harus diteruskan ke Gunicorn (karena aturan yang Anda konfigurasikan).

Gunicorn sangat dioptimalkan dan memiliki banyak fitur yang nyaman.

Menjalankan kumpulan proses/utas pekerja (mengeksekusi kode Anda!)
Menerjemahkan permintaan yang datang dari Nginx agar kompatibel dengan WSGI
Terjemahkan tanggapan WSGI aplikasi Anda ke dalam tanggapan http yang tepat
Sebenarnya memanggil kode Python Anda ketika ada permintaan masuk
Gunicorn dapat berbicara dengan banyak server web yang berbeda
Gunicorn hanyalah salah satu dari banyak server WSGI yang valid. Aplikasi Anda tidak peduli yang mana yang Anda gunakan, dan Nginx juga tidak peduli.

Saya memahami hal di atas. Namun, proyek ini cukup istimewa dalam hal protokol. Ini melayani pemberitahuan melalui websocket dan menurut pemahaman saya, kita akan membutuhkan lebih dari sekadar gunicorn dan nginx biasa untuk menggerakkan aplikasi? Ketika saya menjalankan penulisan buruh pelabuhan lokal, saya perhatikan bahwa /notifikasi sepertinya tidak berfungsi. Saya tahu bahwa saya banyak bertanya tetapi sangat menghargai waktu dan upaya Anda untuk membantu saya @samazaphikel. Akan mencoba konfigurasi lokal (tidak ada docker-compose, docker) hanya membuka ubuntu dan melihat apakah itu berfungsi. Terima kasih semuanya

Panduan yang sangat membantu. Penutupan.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat

Masalah terkait

norouzzadeh picture norouzzadeh  ·  3Komentar

mwanjajoel picture mwanjajoel  ·  5Komentar

sebastian-code picture sebastian-code  ·  11Komentar

Allan-Nava picture Allan-Nava  ·  9Komentar

yashLadha picture yashLadha  ·  21Komentar