"Enter"a basıp içeriğe geçin

NGINX – uWSGI Uygulamasını Dağıtma

Last updated on 28 Ocak 2021

FastCGI’ye alternatif olarak WSGI’yi (“Web Server Gateway Interface” (Web Sunucusu Ağ Geçidi Arayüzü)) kullanan örnek bir uygulama oluşturacağız. Bu kurulumdan sonra, NGINX’in WSGI uygulamalarına nasıl proxy sağlayabileceğini araştıracağız.

Kaynaklarımız,

İşlemleri aşağıda belirtilen dizin içinde çalıştıralım

cd /etc/nginx/
cd /srv/www/

Python 3’ü Hazırlama

Örnek uygulama, Python 2’yi desteklemeyen Django 2’yi kullanır, bu nedenle Python 3’ün kurulu olduğundan emin olmamız gerekir. Yum kullanarak Python 3.6 ve Python 3.6 geliştirme başlıklarını kuracağız:

[root] $ yum install python36 python36-devel

Python 3’ü kurduktan sonra, Python bağımlılıklarını yönetmemize yardımcı olmak için pip ve pipenv yüklememiz gerekecek:

[root] $ wget https://bootstrap.pypa.io/get-pip.py
...
[root] $ python3.6 get-pip.py
...
[root] $ pip3.6 install pipenv requests
...

Uygulamayı İndirmek

[root] $ cd /srv/www
[root] $ git clone https://github.com/linuxacademy/content-nginx-uwsgi
[root] $ cd content-nginx-uwsgi

Veritabanını Hazırlama

Uygulamamızın çalışabilmesi için notlarımızı kaydetmek için bir veritabanına ihtiyacımız var. MariaDB’yi zaten sunucumuza kurduğumuzdan, bu çalışan sunucuyu farklı bir kullanıcı ve veritabanıyla kullanacağız. Kullanıcıyı ve veritabanını şimdi oluşturalım:

mysql -u root -p
MariaDB [(none)]> CREATE DATABASE django_notes;
Query OK, 1 row affected (0.00 sec)
MariaDB [(none)]> GRANT ALL PRIVILEGES ON django_notes.* TO notes@localhost
IDENTIFIED BY "p@ssw0rd";
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.01 sec)
MariaDB [(none)]> \q
[root] $

Artık uygulamamızı çalıştırmaya başladığımızda aşağıdaki bilgileri kullanabiliriz:

Database Name: django_notes
Database User: notes
Database Password: p@ssw0rd

Uygulamayı Çalıştırma

Bu Python uygulaması için, bağımlılıklarımızı kurmak için bir virtualenv kurmamız gerekecek. Varsayılan olarak, paket yöneticisi pipenv, yüklemeyi çalıştıran kullanıcı için tüm bağımlılıkları bir .local dizinine yerleştirir ve biz bunu istemeyiz. Makefile, daha sonra bazı sorunları önleyebilmemiz için virtualenv ve bağımlılıkların projeye yerel olarak yüklenmesini sağlayacak bazı özelleştirilmiş yalanlara sahiptir.

make install

Uygulamayı bir soket kullanarak uwsgi ile çalıştırmak için systemd servisini kurmamız gerekiyor. Make service task, bizim için hizmet dosyasını oluşturacak ve yerleştirecektir. Bu görev ayrıca bizim için soket, günlükler ve statik varlıklar için bazı dizinler oluşturacaktır.

[root] $ make install
PIPENV_VENV_IN_PROJECT=true pipenv install
Creating a virtualenv for this project…
Using /bin/python3.6m (3.6.3) to create virtualenv…
?Running virtualenv with interpreter /bin/python3.6m
Using base prefix '/usr'
New python executable in /srv/www/content-nginx-uwsgi/.venv/bin/python3.6m
Also creating executable in /srv/www/content-nginx-uwsgi/.venv/bin/python
Installing setuptools, pip, wheel...done.

Virtualenv location: /srv/www/content-nginx-uwsgi/.venv
Installing dependencies from Pipfile.lock (0d8c73)…
  ????   ???????????????????????????????? 7/7 —  00:00:40
To activate this project's virtualenv, run the following:
 $ pipenv shell

Uygulamayı bir soket kullanarak uwsgi ile çalıştırmak için systemd servisini kurmamız gerekiyor. Make service task, bizim için hizmet dosyasını oluşturacak ve yerleştirecektir. Bu görev ayrıca bizim için soket, günlükler ve statik varlıklar için bazı dizinler oluşturacaktır.

[root] $ make service
./systemd/create_service.sh
Host: notes.example.com
Database Name: django_notes
Database User: notes
Database Password:
chown -R nginx:nginx .
mkdir -p /run/uwsgi
chown -R nginx:nginx /run/uwsgi
mkdir -p /var/log/uwsgi
touch /var/log/uwsgi/notes.log
chown nginx:nginx /var/log/uwsgi/notes.log

Hizmetimiz çalışmadan önce tüm veritabanı tablolarının var olduğundan emin olmak için geçişlerimizi çalıştırmamız gerekir.

[root] $ export NOTES_HOST=notes.example.com
[root] $ export NOTES_DB=django_notes
[root] $ export NOTES_DB_USER=notes
[root] $ export NOTES_DB_PASSWORD="p@ssw0rd"
[root] $ make migrate
PIPENV_VENV_IN_PROJECT=true pipenv run python manage.py migrate
Operations to perform:
  Apply all migrations: auth, contenttypes, notepad, sessions
Running migrations:
  Applying contenttypes.0001_initial... OK
/srv/www/content-nginx-uwsgi/.venv/lib/python3.6/site-packages/django/db/backends/mysql/base.py:71: Warning: (1146, "Table 'mysql.column_stats' doesn't exist")
  return self.cursor.execute(query, args)
  Applying contenttypes.0002_remove_content_type_name... OK
  Applying auth.0001_initial... OK
  Applying auth.0002_alter_permission_name_max_length... OK
  Applying auth.0003_alter_user_email_max_length... OK
  Applying auth.0004_alter_user_username_opts... OK
  Applying auth.0005_alter_user_last_login_null... OK
  Applying auth.0006_require_contenttypes_0002... OK
  Applying auth.0007_alter_validators_add_error_messages... OK
  Applying auth.0008_alter_user_username_max_length... OK
  Applying auth.0009_alter_user_last_name_max_length... OK
  Applying notepad.0001_initial... OK
  Applying sessions.0001_initial... OK

Son olarak servisi başlatabilir ve etkinleştirebiliriz.

[root] $ systemctl start notes.uwsgi
[root] $ systemctl enable notes.uwsgi

Uygulama ve veritabanı kurulumunu hallettik. NGINX’in uwsgi etkileşimleriyle çalışmaya devam etmek için bir sonraki makaleyi bekleyebiliriz.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir