linux tabanlı bir sistemden php + apache ikilisinde yeni bir php sürümü yüklenince güncel php sürümünü kullanmak için eski sürümü pasif ederek yeni sürümü aktif etmek ihtiyacı bulunmaktadır.
https://ferhatcicek.com/siremis/ yazısında siremis hakkında temel bilgileri blogumda paylaşmıştım. kamailio kullanıyorsanız siremis olmazsa olmazınızdır. sistemizde kamaili nun kurulu olduğunu düşünerek siremisi nasıl kuracağımızı basitçe anlatmaya başlayalım. öncelikle
adresinden güncel sürümü indirelim. şu an güncel sürüm 4.2. indirdiğiz yazılımı uygun bir noktada açalım.
root@cicek:/var/www# tar zxvf siremis-4.2.0.tgz
açılan dizin içine girerek apache konfigürasyon dosyalarında eklemiz gereken satırları oluşturacak olan make komutunu çalıştıralım. burada kullandığınız apache sürümü önemli. ben sistemimde 2.4 sürümünü kullandığım için apache24-conf parametresini kullandım.
root@cicek:/var/www# cd siremis-4.2.0/
root@cicek:/var/www/siremis-4.2.0# ls
ChangeLog Makefile misc openbiz README siremis
root@cicek:/var/www/siremis-4.2.0# make apache24-conf
# siremis apache conf snippet ...
Alias /siremis "/var/www/siremis-4.2.0/siremis"
<Directory "/var/www/siremis-4.2.0/siremis">
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Require all granted
<FilesMatch "\.xml$">
Require all denied
<FilesMatch "\.inc$">
Require all denied
bu kodu apachenin 000-default.conf konfigürasyon dosyası içine ekliyoruz. ben şu an debian kullanıyorum ve bu dosyanın yeri /etc/apache2/sites-available/000-default.conf şeklinde.
gerekli değişiklik yapıldıktan sonra apache yi yeniden başlatıyoruz.
root@cicek:/etc/apache2/sites-available# service apache2 restart
bundan sonra gerekli erişim ve yetki ayarlamalarını yapılabilmesi için prepare ve chown parametrelerini işletiyoruz.
root@cicek:/var/www/siremis-4.2.0# make prepare
updating htaccess file...
updating app.inc file...
creating folders...
done
root@cicek:/var/www/siremis-4.2.0# make chown
changing onwner to www-data:www-data ...
chown -R www-data:www-data .
şimdi internet tarayıcımızdan http://locahost/siremis/ adresine erişim testi yapalım. erişim testi başarılı ise sıra siremis için mysql kullanıcı erişim ayarlarının yapılmasına geldi.
root@cicek:/var/www/siremis-4.2.0# mysql -u root -p
Enter password:
mysql> GRANT ALL PRIVILEGES ON siremis.* TO siremis@localhost IDENTIFIED BY 'siremisrw';
Query OK, 0 rows affected (0.05 sec)
kanailio nunda tabiki mysql eklentisinin aktif edilmiş ve ayarlarının yapılmış olması gerekmektedir. eğer yok ise kuralım ve kurulum sonrası /etc/kamailio/kamctlrc dosyası üzerinde mysql aktif eder mysql ile ilgili ayarlarıda yapalım.
sonrasında ysql veri tabanı ile ilgili işlemlerin yapılması için kamailionun kamdbctl aracını çalıştıralım
root@cicek:/etc/kamailio# kamdbctl create
MySQL password for root:
INFO: test server charset
INFO: creating database kamailio ...
INFO: granting privileges to database kamailio ...
INFO: creating standard tables into kamailio ...
INFO: Core Kamailio tables succesfully created.
Install presence related tables? (y/n): y
INFO: creating presence tables into kamailio ...
INFO: Presence tables succesfully created.
Install tables for imc cpl siptrace domainpolicy carrierroute
userblacklist htable purple uac pipelimit mtree sca mohqueue
rtpproxy? (y/n): y
INFO: creating extra tables into kamailio ...
INFO: Extra tables succesfully created.
Install tables for uid_auth_db uid_avp_db uid_domain uid_gflags
uid_uri_db? (y/n): y
INFO: creating uid tables into kamailio ...
INFO: UID tables succesfully created.
root@cicek:/etc/kamailio#
buraya kadar sorunsuz olarak geldiyseniz sıre siremisin web arayüzünden kurulumu tamamlamaya geldi.
http://locahost/siremis/ adresinden aşagıdaki ekran görüntülerinde yer aldığı gibi gerekli verileri girerek tamamlıyoruz.
siremis artık kullanıma hazırdır. ancak
[{"target":"ERROR","content":"
\n[2015-07-03 10:01:48 (GMT)] An exception occurred while executing this script:
\nError message: #8192, Non-static method BizSystem::getConfiguration() should not be called statically, assuming $this from incompatible context< \/font>
\nScript name and line number of error: \/var\/www\/siremis-4.2.0\/openbiz\/bin\/data\/BizDataObj_Abstract.php:268< \/font>
\n
hatasını veya benzer hataları alacak olursanız https://github.com/asipto/siremis üzerinden en sonra halini indirerek denemenizi öneririm.
bunlardan sonra siremiz altındaki install klasörünü silmeniz önerilmektedir.
daha önceki örneklerimizde raspberry nin sistem özelliklerini okumayı ve bu verileri rrd veri tabanına kaydetmeyi ve izlemesi konusunda örnekler yapmıştık.
bu yöntemin uygun olmayacağı veya istenmeyeceği durumlar olabilir. böyle bir durum olduğunu düşünerek okuduğumuz cpu sıcaklık değerini bir veri tabanına (örneğimizde mysql olacak) kaydedelim ve dinamik bir arayüz ile veri tabanına kaydettiğimiz verileri kullanıcılarımız sunacağımız bir uygulama geliştirelim.
öncelikle veri tabanımızda hangi verilerin olacağını belirlemeli ve veritabanımızı oluşturmalıyız. raspberry pinin klasik dağıtımları üzerinde mysql, php, apache gibi sunucu yazılımları mevcut değil. bunları kurmanız gerektiğini unutmayınız. internette konu hakkında dokümanlar mevcut. uygun bir zamanda detaylı olarak onuda ekleyebiliriz. bunların olduğunu var sayarak esas konumuza dönelim.
bu örneğimizde tarih ve saat verisinin yanında sadece sıcaklık değerini tutmamız yeterli olacaktır.
sudo mysql -u root -p
CREATE DATABASE raspberry_sistem;
USE raspberry_sistem;
CREATE TABLE cpu_temp ( id INT NOT NULL AUTO_INCREMENT,
tarih DATE NOT NULL,
saat TIME NOT NULL,
sicaklik varchar(50),
PRIMARY KEY ( id ));
GRANT INSERT,SELECT ON raspberry_sistem.* TO 'raspberry'@'localhost' IDENTIFIED BY 'pi';
FLUSH PRIVILEGES;
artık veritabanımız hazır. sıra sıcaklık değeri okuyarak veri tabanına eklemeye geldi. ben örneğimi python kullanarak yapacağım. benim kullandığım python kütüphaneleri sizin raspberry üzerinde olmayabilir. kodun çalışması için eksik kütüphaneleri yüklemeniz gerekmektedir.
#sicaklik_cpu.py dosyasi
import time
import os
import fnmatch
import MySQLdb as mdb
import logging
import time
import datetime
#cpu sicaklik degerinin okunmasi
def cpu_sicaklik_oku():
res = os.popen('vcgencmd measure_temp').readline()
return(res.replace("temp=","").replace("'C\n",""))
#mysql veritabanina veri eklenmesi
def insertDB(cpu_sicaklik):
sql = "INSERT INTO cpu_temp (tarih, saat, sicaklik) VALUES ('%s', '%s', '%s' )" % (time.strftime("%Y-%m-%d"), time.strftime("%H:%M"), cpu_sicaklik)
try:
con = mdb.connect('localhost', 'raspberry', 'pi', 'raspberry_sistem');
cursor = con.cursor()
cursor.execute(sql)
con.commit()
con.close()
except mdb.Error, e:
logger.error(e)
#sicaklik okuma ve veritabanina yazma fonksiyonlarini calistiralim
cpu_sicaklik = float(cpu_sicaklik_oku())
print cpu_sicaklik
insertDB(cpu_sicaklik)
kodun oldukça sadece ve anlaşılır olduğunuz düşüyorum. temel olarak sıcaklık verisinin okunmasını ve bu verinin veri tabanına eklenmesini sağlayarak iki ayrı fonksiyon oluşturduk. ve bu fonksiyonları sırası ile çağırıyoruz.
sıcaklık değeri okundu ve ekrana yazıldı ve herhangi bir hata vermedi. kontrol için eklediğimiz kodu “print cpu_sicaklik” her şey tamam olduktan sonra kaldıracağız. veri tabanına gerekli veri girişi doğru şekilde yapıldığının kontrolünü de yapalım.
mysql> select * from cpu_temp;
Empty set (0.01 sec)
mysql> select * from cpu_temp;
+----+------------+----------+----------+
| id | tarih | saat | sicaklik |
+----+------------+----------+----------+
| 1 | 2015-07-19 | 22:35:00 | 54.1 |
+----+------------+----------+----------+
1 row in set (0.00 sec)
kodumuz sağlıklı olarak çalışıyor. şimdi bu işlemi otomatikleştirmek için crontab içine yerleştirelim.
5 dakika bir çalışacak şekilde gerekli ilavemizi de yaptıktan sonra sıra kullanıcı arayüzüne geldi. grafik çizimi için google chart servisini line chart kullanacağım. detaylı bilgiyi https://developers.google.com/chart/interactive/docs/gallery/linechart adresinden alınabilir.
bu servis sayesinde grafik kütüphaneleri ile fazla uğraşmayacağım ve işimi kolayca halledeceğim.
<!DOCTYPE html>
<script type="text/javascript" src="https://www.google.com/jsapi"></script>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
<script type="text/javascript">
google.load('visualization', '1', {'packages':['corechart']});
google.setOnLoadCallback(drawChart);
function drawChart() {
var json = $.ajax({
url: 'get_json.php',
dataType: 'json',
async: false
}).responseText;
var data = new google.visualization.DataTable(json);
var options = {
title: 'Raspberry CPU Sicaklik',
width: 600,
height: 400
};
var chart = new google.visualization.LineChart(document.getElementById('chart_div'));
chart.draw(data, options);
setInterval(drawChart, 500 );
}
</script>
<div id="chart_div" style="width: 600px; height: 400px;"></div>
yukarıdaki kodu index.html olarak kaydelim ve esas işi yapacak get_json.php php dosyamızı da oluşturalım
örnekte site1.com ve site2.com alan adlarna sahip iki sitenin sunucumuz üzerinden yayın yapabilmesi için en basit konfigürasyonun nasıl yapılacağına bakacağız.
apache için öncelikle vhost_alias modülünü aktif edelim.
a2enmod vhost_alias
sitelerin barındırılacağı alanı disk üzerinde belirlememiz bu dizinleri oluşturarak gerekli yetkilendirmeyi yapmamız gerekiyor. alan adlarına ait dosyalar /var/www/sitex.com/public_html olarak barındıracağımızı düşünerek
gerekli dizinleri ve kullanıcı izinlerini vermiş olduk. şimdi test aşamasında kullanılmak üzere birer adet index.html dosyası oluşturalım. bu en kolay kısmı 🙂
nano /var/www/site1.com/public_html/index.html
site1
site1.com sitemiz başarılı şekilde çalışmaktadır.
nano /var/www/site2.com/public_html/index.html
site2
site2.com sitemiz başarılı şekilde çalışmaktadır.
gerekli index.html dosyasına oluşturduğumuza göre esas konfigürasyona gelebiliriz.
apachenin sites-available altındaki örnek default konfigürasyonuda sitemiz adına uygun olarak kopyalayalım.
eğer konfigürasyonumuzda hata yoksa komutları uyguladığımızda
Enabling site site1.com.
To activate the new configuration, you need to run:
service apache2 reload
şeklinde bir bilgilendirme mesajı alacağız. yönergeyi uygulayarak apache suncumuzu yeniden başlatıyoruz.
sudo service apache2 restart
apache sunucumuzda hata vermez ise yapamız gereken bir tek nokta kaldı. oda hosts dosyasının güncellenmesi. bu işlem sonucunda /etc/apache2/sites-enabled dizini altına konfigürasyon dosyaları kopyalanmış olacaktır.
ferhat@cicek:/etc/apache2/sites-enabled# ls
000-default.conf site1.com.conf site2.com.conf
sudo nano /etc/hosts
hosts dosyasının içine alan adlarımıza ait gerekli satırları ekleyerek işlemimizi tamamlıyoruz.
Linux üzerinde Apache kullanıyor ve Linux üzerindeki kullanıcılarınıza bir alan açmak istiyorsanız bu işlem için en kolay yöntem userdir eklentisini aktifleştirmek olacaktır. Bunun ne kadar güvenli ve yönetilebilir olduğu tartışılır ancak en kolay yöntem olduğu kesin.
Gerekli modüllerin ve araçların yüklü olduğundan emin olunmalıdır. Aşağıdaki örnek debian tabanlı bir dağıtım da uygulanmıştır. Dağıtımlara göre dizin yapısı vb fark edebilir.
A2enmod ile userdir modülünü aktifleştirelim.
sudo a2enmod userdir
Modül aktifleştirdikten sonra Apache konfigürasyon dosyaları altında userdir modülü ile ilgili konfigürasyon dosyaları oluşturulmuştur. Bu konfigürasyon dosyası içinde gerekli düzenlemeleri yapılması gerekmektedir.
sudo nano /etc/apache2/mods-enabled/userdir.conf
Temel konfigürasyon dosyası aşağıdaki gibidir. Kullanıcıya açılan dizin ve erişim yetkisi ayarları doğru şekilde ayarlanmalıdır. Yoksa başımıza olmadık işler açabilir.
UserDir public_html
UserDir disabled root
AllowOverride All
Options MultiViews Indexes SymLinksIfOwnerMatch
# Apache < = 2.2:
Order allow,deny
Allow from all
# Apache >= 2.4:
#Require all granted
# Apache < = 2.2:
Order deny,allow
Deny from all
# Apache >= 2.4:
#Require all denied
Statik bir alan verecekseniz bu kadar yeterlidir. statik alanmı kaldı diyebilirsiniz. kullanıcıların php kullanmalarını istiyorsanız apachenin php modül konfigürasyon dosyasında gerekli düzenlemeyi yapmanız gerekecektir.
sudo nano /etc/apache2/mods-available/php5.conf
güvenlik gereği kullanıcı dizinlerinde server-side uygulamalar engellenmiş durumdadır. yapılması gereken “php_admin_value engine Off” satırını pasif ederek sunucu yeni konfigürasyonu ile başlatmaktır.
SetHandler application/x-httpd-php
SetHandler application/x-httpd-php-source
# To re-enable php in user directories comment the following lines
# (from to .) Do NOT set it to On as it
# prevents .htaccess files from disabling it.
# php_admin_value engine Off
sunucumuzu yeniden başlattıktan sonra mevcut kullanıcılar için public_html dizinini oluşturmayı unutmayalım..
sudo service apache2 restart
mkdir /home/$USER/public_html