Ubuntu / Apache üzerinde Laravel/WebSockets Kurulumu ve Yapılandırılması.
Tags: laravel, websockets, digitalocean, apache
Published: 2023-04-03 14:16:37

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:

```bash
scp /home/baris/app.zip kullanici@sunucuadresi:/var/www/html
```

> 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
```bash
ssh root@ipadresi
```

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

```bash
cd ..
cd var/www/html
```

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.

```bash
unrar x app.rar
## veya
unzip app.zip
```

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

```bash
unrar x app.rar laravelapp
```



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

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

```bash
chown -R www-data:www-data /var/www/html/laravelapp
```


Node.js ve Composer modüllerini yükleyelim

```bash
> composer install --no-dev
> npm install
> npm run build
```

## 3. Apache Ayarları

**_vim_** editorü ile gerekli ayarları yapmak üzere `config` dosyamızı açalım

 ```bash
vim /etc/apache2/sites-available/000-default.conf
```

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 :)

```vim
<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>
```

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

```bash
> a2enmod rewrite
> apachectl restart
```

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

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

```bash
sudo mysql
```

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:

```sql
CREATE DATABASE laravelapp;
```

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.

```sql
CREATE USER 'laravelappuser'@'localhost' IDENTIFIED BY 'password';
```

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:

```sql
GRANT ALL PRIVILEGES ON laravelapp.* TO 'laravelappuser'@'localhost';
FLUSH PRIVILEGES;
```

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.

```bash
apt install supervisor
```

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

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

```bash
cd /etc/supervisor/conf.d/
```
```bash
touch laravel-websockets.conf
```
```bash
vim laravel-websockets.conf
```

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.

```vim
[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
```

Supervisor'ü yeniden başlatalım

```bash
service supervisor restart
```

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.