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.
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.
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.99location = /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.
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 benarmkdir bootcamp
untuk membuat folder proyekcd 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
membuat layanan
sudo nano /etc/systemd/system/gunicorn.service
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
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'