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.