вторник, 28 июня 2011 г.

Установка и настройка Apache + PHP + MySQL на FreeBSD

 

 

Еще один вариант настройки Web-сервера теперь уже для FreeBSD.

Будем ставить из портов.

Apache:

cd /usr/ports/www/apache22
make&&make install&&make clean

PHP:

cd /usr/ports/lang/php5
make&&make install&&make clean

cd /usr/ports/lang/php5-extensions/
make&&make install&&make clean

MySQL:

cd /usr/ports/databases/mysql51-server
make&&make install&&make clean

Для запуска Apache и MySQL при старте системы добавим в файл /etc/rc.conf строки:

apache22_enable=”YES”
mysql_enable=”YES”

Запустим Apache и MySQL:

/usr/local/etc/rc.d/mysql-server start
apachectl start

Создадим пароль для пользователя root в базе данных:

mysqladmin -u root password 'мегасложныйпароль'

Перейдем к настройке.

Открываем для редактирования файл конфигурации Apache /usr/local/etc/apache22/httpd.conf, ищем строки начинающиеся с AddType и дописываем туда:

AddType application/x-httpd-php    .php
AddType application/x-httpd-php-sourse    .phps

Это нужно что бы сервер знал что делать с файлами с расширениями php и phps.

Также добавляем имя нашего хоста:

ServerName localhost

Что бы проверить работоспособность Web-сервера отрываем браузер и в адресной строке набираем localhost, если появилась надпись “It works!”, значить все нормально.

Проверим работу php. В каталоге /usr/local/www/apache22/data/ создадим файл index.php со следующим содержимым:

<?phpinfo()?>

В адресной строке браузера набираем localhost/index.php, долна отобразится страница с информацией о php.

По умолчанию на нашем сервере лежит один сайт, файлы которого находятся в папке /usr/local/www/apache22/data/.  Если же вам мало одного то придется настроить добавление виртуальных хостов.

Наши сайты будут лежать в папке /usr/local/www/, поэтому нужно сделать доступной эту папку для нашего сервера. Для этого добавим в конец файла http.conf следующие строки:

<Directory "/usr/local/www/*">
    Options Indexes FollowSymLinks
    AllowOverride None
    Order allow,deny
    Allow from all
</Directory>

Также добавим строку:

NameVirtualHost *:80

и

Include etc/apache22/sites-enabled/*

Последняя нужна для того что бы указать серверу папку с настройками виртуальных хостов. Естественно эту папку нужно создать:

mkdir /usr/local/etc/apache22/sites-enabled

В ней создадим дефолтный файл настроек:

<VirtualHost *:80>
    ServerName example.com
    DocumentRoot /usr/local/www/example.com
</VirtualHost>

Для добавления нового хоста теперь достаточно лишь скопировать этот файл с именем нашего добавляемого сайта, заменить example.com на новое имя и создать директорию в которой будут лежать файлы сайта, с аналогичным именем в папке /usr/local/www/.

То есть если мы добавляем сайт bestsite.com то у нас должна появиться папка /usr/local/www/bestsite.com и файл /usr/local/etc/apache22/sites-enabled/bestsite.com следующего содержания:

<VirtualHost *:80>
    ServerName bestsite.com
    DocumentRoot /usr/local/www/bestsite.com
</VirtualHost>

После этого перезапускаем Apache:

apachectl restart

и можем заходить на bestsite.com.

Процесс добавления/удаления виртуальных хостов можно автоматизировать. Следующий скрипт предназначен для этого:

#!/bin/sh

#Add function
add_site()
        {
        echo "Creating new site"
        sleep 1
        echo -n  "Please, enter the name of site:"
       
        while read SITE
        do
        if
            [ "$SITE" != "" ]
        then
            DIR="/usr/local/www/$SITE"
            FILE="/usr/local/etc/apache22/sites-enabled/$SITE"
            if
                [ -d $DIR ]
            then
                echo  "Site with that name already exists"
                echo  "Please try again with correct name"
                exit 1
            else
                touch $FILE
                echo  "Creating settings file $FILE"
                sleep 1
                echo "<VirtualHost *:80>
    ServerName $SITE
    DocumentRoot $DIR
</VirtualHost>" >>$FILE

                echo "Creating directory for site $DIR"
                sleep 1
                mkdir -p $DIR
                chmod -R 777 $DIR
                echo "127.0.0.1 $SITE" >> /etc/hosts
                echo  "Restarting Apache"
                sleep 1
                apachectl restart
                echo  "Congratulations, the site $SITE has been successfully added"
                exit 0
            fi
        fi
        echo "You have not entered a name"
        echo -n "Please, enter the name of the site or CTRL+Z to exit:"
        done
        }

#function for removing
rm_site()
        {
        echo "Removing site"
        echo -n "Please, enter the site name:"
        while read SITE
        do
        if
            [ "$SITE" != "" ]
        then
            DIR="/usr/local/www/$SITE"
            FILE="/usr/local/etc/apache22/sites-enabled/$SITE"
            if
                [ -d $DIR ]
            then
                echo "Removing site $SITE"
                sleep 1
                rm -r $DIR
                rm $FILE
                 sed -i "" '/127.0.0.1 $SITE/d' /etc/hosts
                echo  "Restarting Apache"
                sleep 1
                apachectl restart
                echo "Congratulations, the site $SITE has been successfully removed"
                exit 0
            else
                echo "Site $SITE not on the server"
            fi
        fi
        echo "You have not entered a name"
        echo -n "Please, enter the name of the site or CTRL+Z to exit:"
        done
        }

#check user rights
if
    [ $(whoami) != "root" ]
then
    echo 'You must be root.'
    exit 1
fi

#deletion-addition process
if
    [ "$1" = "" ]
then
    echo "Invalid option"
    echo  "Use 'add' or 'remove' option"
    exit 1
else
    case $1 in
        add)
        add_site
        ;;
        rm)
        rm_site
        ;;
    esac

Сохраняем его. Называем наш файл site, делаем исполняемым и помещаем в папку /usr/bin.

Запускать его нужно с параметрами:

site add – для добавления сайта;

site rm – для удаления.

четверг, 23 июня 2011 г.

DHCP сервер в Ubuntu. Настройка.

 

Для того чтобы Ubuntu выполняла роль DHCP-сервера надо поставить всего один пакет dhcp3-server

apt-get install dhcp3-server 

Все сам сервер установлен и будет запускаться при старте системы.

Перейдем к настройке. Основной конфигурационный файл /etc/dhcp/dhcpd.conf

В нем должно присутствовать следующее:

default-lease-time 600; 
max-lease-time 7200;
subnet 192.168.30.0 netmask 255.255.255.0 {
     option routers                  192.168.30.1;  #getway
     option domain-name              "home.net";
     option domain-name-servers      192.168.0.2; #DNS-сервер
     range 192.168.30.1 192.168.30.100; # Диапазон ip адресов
}

Если нужно чтобы сервер выдавал определенному хосту ip по mac-адресу нужно добавить следующую секцию:





host host1 {
option host-name "host1.home.net";
#имя хоста
hardware ethernet 00:12:34:56:45.26; #mac-адрес хоста
fixed-address 192.168.30.2; #ip для этого хоста
}

Еще нам понадобится указать интерфейс на котором будет работать наш сервер. Для этого отредактируем файл /etc/default/isc-dhcp-server и добавляем наш интерфейс:





INTERFACES="eth0"

Теперь можно запустить сервер:


 






/etc/init.d/isc-dhcp-server start


Историю аренды адресов можно просмотреть в файле /var/lib/dhcp3/dhcpd.leases

Управление пользователями Ubuntu из консоли

 

Для управления пользователями в Ubuntu существует ряд команд:

useradd
userdel
passwd
gpasswd

Опишем их подробнее.

useradd или adduser – добавляет нового пользователя в систему.

Добавим нового пользователя:

sudo useradd vasya

После этого система попросит ввести пароль для пользователя и личные данные, после завершения диалога новый пользователь vasya  появится в системе.

userdel или deluser – удаление пользователя.

Удалим пользователя vasya:

sudo userdel vasya

 

passwd – используется для изменения пароля.

sudo passwd  vasya

Откроется диалог изменения пароля. При запуске без имени будет изменен пароль текущего пользователя.

gpasswd – используется для перемещения пользователя между группами. Для добавления и удаления пользователей используются опции –a и –d

Добавим пользователя vasya в группу test:

sudo gpasswd -a vasya test

Теперь удалим этого пользователя из группы:

sudo gpasswd -d vasya test

для просмотра пользователей входящих в группу используется опция -M

Для создания и удаления групп используются команды groupadd и groupdel.

Создание новой группы:

sudo groupadd test

Удаление группы:

sudo groupdel test

пятница, 17 июня 2011 г.

Настройка Samba-сервера в Ubuntu.

 

Вариант 1. Открываем общий доступ к файлам

Очень часто возникает необходимость открыть через сеть доступ к ресурсам на компьтере с Linux, для реализации этого лучше всего воспользоваться таким решением как Samba. Возможности здесь большие и вы можете настроить как доступ к отдельным папкам так и отдельным пользователям. То есть мы можем сделать файл-сервер. Об этом и пойдет речь. В данном примере будет самая простая конфигурация – доступ из сети к отдельным папкам, для всех пользователей.

Для начала нам нужен сам сервер. Установка:

sudo apt-get install samba

Теперь нам нужно определиться к чему и кому мы хотим открыть доступ. Для примера возьмем папку /mnt/media которую нужно сделать доступной для всех без каких либо ограничений.

Создадим в системе нового пользователя который будет владельцем всех файлов и папок в наших общих ресурсах. Под его идентификатором будет предоставляться доступ для всех:

sudo useradd –m sambauser –p qwerty123

Мы добавили пользователя sambauser, задали его домашний каталог (ключ –m) и пароль (ключ –p) qwerty123.

Теперь создадим папку /mnt/media (название и расположение можно выбрать любое):

sudo mkdir /mnt/media

Назначим владельцем нашего нового пользователя и зададим разрешения:

sudo chown –R sambauser:users /mnt/media
sudo chmod –R 777 /mnt/media

Теперь можно заняться настройкой сервера. Ищем файл /etc/samba/smb.conf. В нем содержатся основные настройки но мы создадим свой файл конфигурации. На всякий случай сохраним дефолтный smb.conf

sudo mv  /etc/samba/smb.conf /etc/samba/smb.conf.default

Так как разработчики Samba рекомендуют иметь файл конфигурации как можно меньшего размера и с минимальным количеством комментариев то мы создадим два файла – один только с настройками а второй с настройками и комментариями. Создаем файл:

sudo touch /etc/samba/smb.conf.comments

Вносим в него параметры:

#Глобальные параметры
[global]
#название рабочей группы, в windows по умолчанию WORKGROUP
#если у вас другое название то измените
workgroup = WORKGROUP
#NetBIOS-имя компьютера под которым будет отображаться в
#сетевом окружении
netbios name = ALTSERVER
#режим безопасности
security = SHARE
#Описание в сетевом окружении
server string = shared files
#описание наших папок
#
[media]
#комментарий, то, как будет подписан наш ресурс в сетевом
#окружении
comment=Наши файлы
#путь к общей папке
path=/mnt/media
create mask = 0777
directory mask = 0777

#принуждаем быть владельцем общего ресурса пользователя
#sambauser
force user=sambauser
#принуждаем быть владельцем общего ресурса группу users
force group=users
#указываем, что можно не только читать, но и записывать
read only=No
#открываем гостевой доступ, по сути всем
guest ok=Yes

Теперь создадим основной файл без комментариев:





sudo testparm –s smb.conf.comments>smb.conf

Если команда отработала без ошибок то у нас должен появится новый файл smb.conf


Все теперь из сети будет видно наш сервер с общим доступом к папке media.


 


 


Вариант 2. Персональные общие папки


Здесь мы рассмотрим вариант когда в сети много клиентов и каждому из них нужен доступ только к своей папке на нашем сервере с Samba и нет доступа к чужим. При этом добавим еще одного пользователя который будет иметь право просматривать папки всех пользователей.


Для начала определимся с пользователями:





Пользователь     Учетная запись          Пароль                     Каталог
Иванов               boss                          qwerty1                     /mnt/allfiles
Петров               buhgalter                    qwerty2                     /mnt/allfiles/buhgalter Сидоров             logist                         qwerty3                     /mnt/allfiles/logist

Также у нас имеется сеть ARS и наш сервер который будет виден под именем Resourses


Создадим группу для пользователей:






sudo groupadd firma


Создадим пользователей:





sudo useradd -m -G firma -c "Иванов" boss
sudo passwd boss
sudo smbpasswd -a boss

Повторяем эту операцию для всех пользователей.


Создадим каталоги и раздадим права на них:






sudo mkdir /mnt/allfiles
sudo mkdir /mnt/allfiles/buhgalter
sudo mkdir /mnt/allfiles/logist


 






sudo chown boss /mnt/allfiles/
sudo chown buhgalter /mnt/allfiles/buhgalter
sudo chown logist /mnt/allfiles/logist/
sudo chgrp -R firma /mnt/allfiles/
sudo chmod –R 771 /mnt/allfiles/


В итоге у нас должно быть так:






cd /mnt
ls -l
drwxrwx--x 4 boss firma 4096 2011-06-20 13:05 allfiles
cd /mnt/allfiles/
ls -l
drwxrwx--x 2 buhgalter firma 4096 2011-06-20 13:05 buhgalter
drwxrwx--x 2 logist    firma 4096 2011-06-20 13:05 logist


Теперь можно приступить к настройке конфигурации. Приводим файл /etc/smb.conf к следующему виду:






[global]
        workgroup = ARS
        netbios name = Resourses
        server string = files on %h
        log file = /var/log/samba/log.%m

[files]
        comment = My files
        path = /mnt/allfiles/%U
        read only = no

[boss]
        comment = VIP
        path = /mnt/allfiles
        valid users = boss
        read only = no


Продолжение следует..

пятница, 10 июня 2011 г.

Django на Ubuntu с Apache и mod_wsgi

 

Устанавливаем django:

sudo apt-get install python-django

Проверяем корректность установки, следующая команда должна показать версию:

python -c "import django; print django.VERSION;"

Устанавливаем Apache и mod_wsgi:

sudo apt-get install apache2 libapache2-mod-wsgi

Устанавливаем MySQL:

sudo apt-get install mysql-server python-mysqldb

Создаем директорию для наших проектов:

mkdir -p /home/django-projects

Создаем проект myproject:

django-admin startproject myproject

Создаем необходимые директории.

Для настроек wsgi:

sudo mkdir -p /home/django-project/myproject/deploy

Директория для статики:

sudo mkdir -p /home/django-project/myproject/media

Директория для логов:

sudo mkdir -p /home/django-project/myproject/logs

Корректируем название модуля для корректного импорта:

sudo perl -pi -e 's/myproject.urls/urls/g' myproject/settings.py

Для изоляции кода проекта от остальной системы (в целях безопасности), добавим в  систему нового пользователя от имени которого будет работать код проекта:


Создаем системную группу:







sudo addgroup --quiet --system dw


 
Создаем системного пользователя:

 




sudo adduser --quiet --system --ingroup dw \
--no-create-home --no-create-home dw

 

Меняем владельца:




sudo chown dw:www-data -R /home/django-project/myproject
Изменяем права доступа к проекту:




sudo chmod u=rwx,g=rx,o= -R /home/django-project/myproject

Чтобы привязать наш проект к URL-адресу, необходимо добавить и настроить виртуальный хост в Apache. Сначала создадим файл:





sudo –u dw touch /home/django_project/myproject/deploy/myproject.com

И добавим в него следующий код:






<VirtualHost *:80>
    # Описание сервера
    ServerAdmin admin@myproject.com
    ServerName myproject.com

    # Логи
    ErrorLog    /home/django_project/myproject/logs/error_log
    CustomLog   /home/django_project/
myproject/logs/access_log common

    # wsgi-обработчик (см. ниже)
   WSGIScriptAlias / /home/django_project/myproject/deploy/django.wsgi

    # Параметры запуска wsgi
    WSGIDaemonProcess dw-site user=dw group=dw \


                       home=/home/django_project/myproject/media/ \
                      processes=2 threads=10 maximum-requests=100 \


                      display-name=apache-dw-wsgi



   WSGIProcessGroup dw-site


    # Статические файлы django-админки
    Alias "/media_admin/" \


         "/usr/lib/pymodules/python2.7/django/contrib/admin/media/"



    <Location "/media_admin/">
        SetHandler None
    </Location>


    # Статические файлы проекта
    Alias "/media/" "/home/django_project/myproject/media/"
    <Location "/media/">
        SetHandler None
    </Location>


</VirtualHost>


Теперь нужно создать wsgi-обработчик. Создаем файл:





sudo –u dw touch /home/django_project/myproject/deploy/django.wsgi

И добавляем в него следующее содержимое:






#/usr/bin/python
# -*- coding: utf-8 -*-

import os, sys



path = '/home/django_project'
if path not in sys.path:
    sys.path.insert(0, '/home/django_project/myproject')

os.environ['DJANGO_SETTINGS_MODULE'] = 'settings'

import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()


Теперь можно включить наш виртуальный хост. Добавим ссылку в список доступных хостов:





sudo ln –s /home/jango_project/myproject/deploy/myproject.com \
/etc/apache2/sites-available/myproject.com

Включим наш виртуальный хост:





a2ensite myproject.com

И перезапустим Apache:





/etc/init.d/apache2 restart

Добавляем наш адрес в hosts и пытаемся открыть в браузере. Если все в норме то отобразится следующее:





It worked!
Congratulations on your first Django-powered page.

Of course, you haven't actually done any work yet.
Here's what to do next:
* If you plan to use a database,
edit the
DATABASE_* settings in settings/settings.py.
* Start your first app by running python
settings/manage.py startapp [appname].

Убедившись что Django работает можем перейти к созданию базы данных. Заходим в MySQL под root’ом:





mysql --user=root –p

Создаем новую базу данных:





mysql> CREATE DATABASE myproject_db CHARACTER SET utf8;

Создаем пользователя:





mysql> CREATE USER myproject_user@localhost IDENTIFIED BY 'passw';

Вместо 'passw' подставляем свой пароль.


И даем новому пользователю доступ к базе:





mysql> GRANT ALL ON myproject_db.* TO myproject_user@localhost;

После этого нужно прописать новую базу и пользователя в файл настроек проекта settings.py:






DATABASES = {
    'default': {
        'ENGINE': 'mysql',
 
        'NAME': 'myproject_db',  
        'USER': 'myproject_user',      
        'PASSWORD': 'passw',       
        'HOST': '',                     
        'PORT': '',                     
    }
}


В этом же файле нужно прописать пути к файлам основного проекта и админки:






# URL that handles the media served from MEDIA_ROOT. Make sure to use a
# trailing slash if there is a path component (optional in other cases).
# Examples: "http://media.lawrence.com", "http://example.com/media/"
MEDIA_URL = '/media/'

# URL prefix for admin media -- CSS, JavaScript and images. Make sure to use a
# trailing slash.
# Examples: "http://foo.com/media/", "/media/".
ADMIN_MEDIA_PREFIX = '/media_admin/'


Теперь можно дать команду для создания в базе данных основных таблиц:





sudo -u dw /home/django-projects/myproject/manage.py syncdb

Теперь Django настроен полностью. Чтобы получить доступ к интерфейсу администрирования в файле urls.py раскоментируем следующие строки:






# Uncomment the next two lines to enable the admin:
from django.contrib import admin
admin.autodiscover()

urlpatterns = patterns('',
    # Example:
    # (r'^myproject/', include('myproject.foo.urls')),

    # Uncomment the admin/doc line below to enable admin documentation:
   (r'^admin/doc/', include('django.contrib.admindocs.urls')),

    # Uncomment the next line to enable the admin:
    (r'^admin/', include(admin.site.urls)),
)


И в браузере набираем “hhtp://myproject.com/admin”. Если появилась форма авторизации значит все работает.