DEV Community

Barış AKSU
Barış AKSU

Posted on

Ubuntu / Apache üzerinde Laravel/WebSockets Kurulumu ve Yapılandırılması.

Bu blog yazısında, DigitalOcean droplet'ına (sanal özel sunucu) kurulu Ubuntu işletim sistemi üzerinde Laravel web uygulaması kurulumu ve WebSockets yapılandırması adımlarını öğreneceksiniz.


1. Dosyaların Sunucuya Gönderilmesi

Laravel projesi için gerekli dosyaları sunucuya göndermek için scp kullanalım. Örnek olarak:

scp /home/baris/app.zip kullanici@sunucuadresi:/var/www/html
Enter fullscreen mode Exit fullscreen mode

Eğer github'dan çekecekseniz ne yapmanız gerektiğini zaten biliyorsunuzdur git clone ...

Dosya aktarımı tamamlandıktan sonra ssh ile sunucuya bağlanalım

ssh root@ipadresi
Enter fullscreen mode Exit fullscreen mode

Projenin kök klasörüne geçmek için aşağıdaki komutları kullanalım.

cd ..
cd var/www/html
Enter fullscreen mode Exit fullscreen mode

ls komutu ile app.rar dosyanızın bu klasörün içinde olduğundan emin olun, ardından bu dosyayı dışarıya aktaralım.

unrar x app.rar
## veya
unzip app.zip
Enter fullscreen mode Exit fullscreen mode

veya direkt klasör adı belirterek dosyaları klasöre çıkartalım.

unrar x app.rar laravelapp
Enter fullscreen mode Exit fullscreen mode

2. Proje Kurulumu ve Yapılandırılması

Projenin düzgün çalışması için gerekli izinleri verelim.

chown -R www-data:www-data /var/www/html/laravelapp
Enter fullscreen mode Exit fullscreen mode

Node.js ve Composer modüllerini yükleyelim

> composer install --no-dev
> npm install
> npm run build
Enter fullscreen mode Exit fullscreen mode

3. Apache Ayarları

vim editorü ile gerekli ayarları yapmak üzere config dosyamızı açalım

vim /etc/apache2/sites-available/000-default.conf
Enter fullscreen mode Exit fullscreen mode

Yapılandırma dosyamız aşağıdaki gibi görünmeli aşağıdaki örnek yapılandırma dosyasını kullanarak, projeniz için virtual host ayarlarını yapılandırabilirsiniz. Ayrıca, sakın 127.0.0.1 adresini değiştirmeyin, burası çokomelli :)

<VirtualHost *:80>
        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/html/laravelapp/public

        <Directory /var/www/html/laravelapp>
            Options Indexes FollowSymLinks
            AllowOverride All
            Require all granted
        </Directory>

        ###  127.0.0.1 olarak kalmalı ###
        ProxyPass "/app/" "ws://127.0.0.1:6001/app/"
        ProxyPass "/apps/" "http://127.0.0.1:6001/apps/"
        ### websockets içindi bu alan ###

        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined

        <IfModule mod_dir.c>
            DirectoryIndex index.php index.pl index.cgi index.html index.xhtml index.htm
        </IfModule>

</VirtualHost>
Enter fullscreen mode Exit fullscreen mode

Ardından, gerekli Apache modüllerini yüklemek için sırayla aşağıdaki komutları yazalım.

> a2enmod rewrite
> apachectl restart
Enter fullscreen mode Exit fullscreen mode

4. Veritabanı ve Veritabanı Kullanıcısı Oluşturma

MySQL veya MariaDB'ye bağlanmak için aşağıdaki komutu kullanalım

sudo mysql
Enter fullscreen mode Exit fullscreen mode

Bu komutla MySQL veya MariaDB istemcisini başlatabilir ve sunucuya bağlanabilirsiniz. Ardından, aşağıdaki komutu kullanarak yeni bir veritabanı oluşturalım:

CREATE DATABASE laravelapp;
Enter fullscreen mode Exit fullscreen mode

Bu komutla "laravelapp" adında yeni bir veritabanı oluşturmuş oluyoruz. Daha sonra, bu veritabanına bağlanmak için bir kullanıcı oluşturmanız gerekiyor. Aşağıdaki komutla yeni bir kullanıcı oluşturalım.

CREATE USER 'laravelappuser'@'localhost' IDENTIFIED BY 'password';
Enter fullscreen mode Exit fullscreen mode

Bu komutla "laravelappuser" adında yeni bir kullanıcı oluşturduk. Kullanıcının şifresini "password" olarak belirledik, ancak gerçek bir uygulamada daha güçlü bir şifre kullanmanız gerektiğini hatırlatmama gerek yok sanırım :).

Son olarak, yeni kullanıcının laravelapp veritabanına erişebilmesi için aşağıdaki komutla izinleri vermeniz gerekiyor:

GRANT ALL PRIVILEGES ON laravelapp.* TO 'laravelappuser'@'localhost';
FLUSH PRIVILEGES;
Enter fullscreen mode Exit fullscreen mode

Bu komutlarla "laravelappuser" kullanıcısına "laravelapp" veritabanı için tüm izinleri vermiş oluyoruz.

Artık Laravel projemiz için "laravelapp" adında bir veritabanı oluşturuldu ve "laravelappuser" kullanıcısı bu veritabanına erişebilecek şekilde yapılandırıldı. Laravel konfigürasyonunda (.env) veritabanı bilgilerinizi güncelleyerek sunucudaki veritabanına bağlanabilirsiniz.

5. Supervisor Yapılandırması

Supervisor, sistem başlatıldığında arka planda çalışan işlemleri yönetmek için kullanılan bir araçtır. Bu nedenle, Laravel projenizde kullanacağınız Websocket işlemcisi de Supervisor ile yönetilebilir.

Supervisor'ü kuralım.

apt install supervisor
Enter fullscreen mode Exit fullscreen mode

Supervisor yapılandırma dosyasını oluşturalım.

laravel-websockets adını değiştirmeyin ufak ama mide bulandırıcı detaylar var :)

cd /etc/supervisor/conf.d/
Enter fullscreen mode Exit fullscreen mode
touch laravel-websockets.conf
Enter fullscreen mode Exit fullscreen mode
vim laravel-websockets.conf
Enter fullscreen mode Exit fullscreen mode

Dosyamızın içeriğini aşağıdaki gibi düzenleyelim, directory ve command kısmındaki path'i değiştirdiğinizden emin olun.

[program:laravel-websockets]
directory=/var/www/html/laravelapp
command=php /var/www/html/laravelapp/artisan websockets:serve
numprocs=1
user=root
autostart=true
autorestart=true
stderr_logfile=/var/log/websockets.err.log
stdout_logfile=/var/log/websockets.out.log
Enter fullscreen mode Exit fullscreen mode

Supervisor'ü yeniden başlatalım

service supervisor restart
Enter fullscreen mode Exit fullscreen mode

son olarak /var/www/html/laravelapp/resources/js/bootstrap.js dosyasında wshost değerini window.location.hostname olarak değiştirmeliyiz.

wsHost: window.location.hostname,

6. Sonuç

Bu yazıda, DigitalOcean üzerinde Ubuntu ve Apache kullanarak Laravel projenizde Websocket'leri nasıl kurabileceğinizi ve yapılandırabileceğinizi anlattım. Adımları doğru bir şekilde takip ederseniz, Laravel projenizde Websocket'leri kullanarak gerçek zamanlı bir uygulama geliştirebilirsiniz.

Top comments (0)