Создаем сервер в облаке на Onapp. Часть 2

Drupal / 13 января 2016
/ 155

Продолжение кина про облачный сервер.

Эта часть почти не имеет отношения к Onapp, да и вообще к облачной платформе. По этой инструкции вы сможете создать рабочий сервер для хоть на своем домашнем компьютере, при условии, что снесете windows и установите Ubuntu. 

Консоль и SSH авторизация

Я пользуюсь программой putty, для работы с удаленной машиной. Как ее запустить и где скачать я писал здесь на 4-6 шагах.

Если лень постоянно вводить пароль в консоли, настраиваем SSH ключ по этой статье.

Nginx, PHP-FPM, MariaDB и прочие мелочи

Putty мы установили, и запустили, в консоли авторизовались, поехали.

Обновимся:

sudo su
sudo apt-get update
sudo apt-get -y upgrade

Устанавливаем nginx и php5-fpm

sudo apt-get install nginx -y
apt-get install php5-fpm php5-cli php5-gd php5-mysql -y

Открываем файл /etc/php5/fpm/php.ini. Ищем cgi.fix_pathinfo, меняем значение на 0 и раскомментируем, удаляем в начале строки точку с запятой.

Редактируем /etc/nginx/sites-available/default – раскомментируем строки 45-52, должно быть так:

location ~ \.php$ {
 include snippets/fastcgi-php.conf;
#
# # With php5-cgi alone:
# fastcgi_pass 127.0.0.1:9000;
# # With php5-fpm:
 fastcgi_pass unix:/var/run/php5-fpm.sock;
}

Проверяем все ли правильно:

nginx -t

Если все нормально, перезагружаем:

systemctl restart nginx
systemctl restart php5-fpm

Устанавливаем MariaDB

sudo apt-get install mariadb-client mariadb-server -y
systemctl start mysql

Cоздаем root пароль:

mysql_secure_installation

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

mysql -u root -p

Вводим пароль созданный ранее и создаем базу:

CREATE DATABASE ВАША_БАЗА;
CREATE USER ВАШ_USER@localhost;
SET PASSWORD FOR ВАШ_USER@localhost= PASSWORD("ПАРОЛЬ");
GRANT ALL PRIVILEGES ON ВАША_БАЗА.* TO ВАШ_USER@localhost IDENTIFIED BY 'ПАРОЛЬ';
FLUSH PRIVILEGES;

Выходим:

exit

Домен

Создаем директорию сайта:

mkdir -p /var/www/вашсайт.ru

В папке /etc/nginx/sites-available/ создаем файл с названием вашсайт.ru с таким содержанием, если вы не используете SSL:

server {
 server_name www.вашсайт.ru;
 listen 80;
 listen [::]:80;
 return 301 http://вашсайт.ru$request_uri;
}
server {
 server_name вашсайт.ru;
 root /var/www/вашсайт.ru; ## <-- Your only path reference.
 index index.php index.html index.htm;
listen 80;
 listen [::]:80;
location = /favicon.ico {
 log_not_found off;
 access_log off;
 }
location = /robots.txt {
 allow all;
 log_not_found off;
 access_log off;
 }
# Very rarely should these ever be accessed outside of your lan
 location ~* \.(txt|log)$ {
 allow 192.168.0.0/16;
 deny all;
 }
location ~ \..*/.*\.php$ {
 return 403;
 }
location ~ ^/sites/.*/private/ {
 return 403;
 }
# Block access to "hidden" files and directories whose names begin with a
 # period. This includes directories used by version control systems such
 # as Subversion or Git to store control files.
 location ~ (^|/)\. {
 return 403;
 }
location / {
 # try_files $uri @rewrite; # For Drupal <= 6
 try_files $uri $uri/ /index.php?q=$uri&$args;
 }
location @rewrite {
 rewrite ^/(.*)$ /index.php?q=$1;
 }
# In Drupal 8, we must also match new paths where the '.php' appears in the middle,
 # such as update.php/selection. The rule we use is strict, and only allows this pattern
 # with the update.php front controller. This allows legacy path aliases in the form of
 # blog/index.php/legacy-path to continue to route to Drupal nodes. If you do not have
 # any paths like that, then you might prefer to use a laxer rule, such as:
 # location ~ \.php(/|$) {
 # The laxer rule will continue to work if Drupal uses this new URL pattern with front
 # controllers other than update.php in a future release.
 location ~ '\.php$|^/update.php' {
 fastcgi_split_path_info ^(.+?\.php)(|/.*)$;
 #NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini
 include fastcgi_params;
 fastcgi_param SCRIPT_FILENAME $request_filename;
 fastcgi_intercept_errors on;
 fastcgi_pass unix:/var/run/php5-fpm.sock;
 }
# Fighting with Styles? This little gem is amazing.
 # location ~ ^/sites/.*/files/imagecache/ { # For Drupal <= 6
 location ~ ^/sites/.*/files/styles/ { # For Drpal >= 7
 try_files $uri @rewrite;
 }
location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
 expires max;
 log_not_found off;
 }
}

Если используете SSL, то с таким:

server {
 server_name www.вашсайт.ru;
 listen 80;
 listen [::]:80;
 listen 443 ssl;
 ssl_certificate /etc/nginx/ssl/вашсайт.ru.crt;
 ssl_certificate_key /etc/nginx/ssl/вашсайт.ru.key;
 return 301 http://вашсайт.ru$request_uri;
}
server {
 server_name вашсайт.ru;
 root /var/www/вашсайт.ru; ## <-- Your only path reference.
 index index.php index.html index.htm;
listen 80;
 listen [::]:80;
 listen 443 ssl;
ssl_certificate /etc/nginx/ssl/вашсайт.ru.crt;
 ssl_certificate_key /etc/nginx/ssl/вашсайт.ru.key;
# Redirect HTTP to HTTPS
 if ($scheme = http) {
 return 301 https://$server_name$request_uri;
 }
location = /favicon.ico {
 log_not_found off;
 access_log off;
 }
location = /robots.txt {
 allow all;
 log_not_found off;
 access_log off;
 }
# Very rarely should these ever be accessed outside of your lan
 location ~* \.(txt|log)$ {
 allow 192.168.0.0/16;
 deny all;
 }
location ~ \..*/.*\.php$ {
 return 403;
 }
location ~ ^/sites/.*/private/ {
 return 403;
 }
# Block access to "hidden" files and directories whose names begin with a
 # period. This includes directories used by version control systems such
 # as Subversion or Git to store control files.
 location ~ (^|/)\. {
 return 403;
 }
location / {
 # try_files $uri @rewrite; # For Drupal <= 6
 try_files $uri $uri/ /index.php?q=$uri&$args;
 }
location @rewrite {
 rewrite ^/(.*)$ /index.php?q=$1;
 }
# In Drupal 8, we must also match new paths where the '.php' appears in the middle,
 # such as update.php/selection. The rule we use is strict, and only allows this pattern
 # with the update.php front controller. This allows legacy path aliases in the form of
 # blog/index.php/legacy-path to continue to route to Drupal nodes. If you do not have
 # any paths like that, then you might prefer to use a laxer rule, such as:
 # location ~ \.php(/|$) {
 # The laxer rule will continue to work if Drupal uses this new URL pattern with front
 # controllers other than update.php in a future release.
 location ~ '\.php$|^/update.php' {
 fastcgi_split_path_info ^(.+?\.php)(|/.*)$;
 #NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini
 include fastcgi_params;
 fastcgi_param SCRIPT_FILENAME $request_filename;
 fastcgi_intercept_errors on;
 fastcgi_pass unix:/var/run/php5-fpm.sock;
 }
# Fighting with Styles? This little gem is amazing.
 # location ~ ^/sites/.*/files/imagecache/ { # For Drupal <= 6
 location ~ ^/sites/.*/files/styles/ { # For Drpal >= 7
 try_files $uri @rewrite;
 }
location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
 expires max;
 log_not_found off;
 }
}

Выполняем:

ln -s /etc/nginx/sites-available/вашсайт.ru /etc/nginx/sites-enabled/

Проверяем:

nginx -t

Если все нормально перезагружаем nginx:

systemctl restart nginx

Раскомментируем в /etc/nginx/nginx.conf строки:

gzip on;
gzip_disable "msie6";
gzip_vary on;
gzip_proxied any;
gzip_comp_level 6;
gzip_buffers 16 8k;
gzip_http_version 1.1;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;

Перезагружаем nginx:

systemctl restart nginx

Устанавливаем прочие мелочи

sudo apt-get install curl libcurl3 libcurl3-dev php5-curl
sudo apt-get install zip
sudo apt-get install git drush -y
sudo apt-get install php5-dev
pear channel-discover pear.twig-project.org
pear install twig/CTwig

Добавляем в php.ini строку:

extension=twig.so

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

sudo pecl install uploadprogress

добавляем в php.ini строку:

extension=uploadprogress.so

Устанавливаем php-apc:

apt-get install php-apc
service php5-fpm restart

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

sudo apt-get install phpmyadmin

Чтобы он запускался по адресу http://вашсайт.ru/phpmyadmin выполним:

sudo ln -s /usr/share/phpmyadmin/ /var/www/вашсайт.ru

Настраиваем php-apc, у меня это файл /etc/php5/mods-available/apcu.ini с таким содержанием:

extension=apcu.so
apc.enabled = 1
apc.shm_segments = 1
apc.shm_size = 64
apc.cache_by_default = 1
apc.rfc1867 = 1
apc.num_files_hint = 2048
apc.ttl=7200
apc.filters="-/usr/share/phpmyadmin/"

Устанавливаем drupal 8

cd /var/www/вашсайт.ru
drush dl drupal-8
mv drupal-8.0.1/* /var/www/вашсайт.ru/

Скачиваем permissions.sh отсюда, на шаге 17 и кладем его в папку /var/www/вашсайт.ru, запускаем:

bash permissions.sh

Идем по адресу http://вашсайт.ru и устанавливаем друпал.

Далее просто картинки, тут все просто.

Не обращаем внимания на предупреждение про пропущенные строки перевода.

После установки, если в отчете о состоянии drupal будет жаловаться на "Настройки доверенного хоста" 

то в settings.php добавляем:

$settings['trusted_host_patterns'] = array(
 '^вашсайт\.ru$',
 '^www\.вашсайт\.ru$',
);

Думаю вы понимаете, что это еще игрушка, я про drupal 8. Из-за отсутствия модулей придется еще подождать. Я его установил из чистого любопытства. Но на этот сервер я перенес некоторые свои сайты на Drupal 7 и они прекрасно работают.

И еще не все. Еще одна приятная мелочь для тех кто пользуется модулем кэширования Boost. В вашем файле хоста /etc/nginx/sites-available/вашсайт.ru замените это:

location / {
 # try_files $uri @rewrite; # For Drupal <= 6
 try_files $uri $uri/ /index.php?q=$uri&$args;
 }
location @rewrite {
 rewrite ^/(.*)$ /index.php?q=$1;
 }

этим:

location / {
 # try_files $uri @rewrite; # For Drupal <= 6
 # try_files $uri $uri/ /index.php?q=$uri&$args;
 try_files $uri @cache;
 }
location @cache {
 if ($http_cookie ~ "DRUPAL_UID") { return 405; }
 if ($request_method !~ ^(GET|HEAD)$ ) { return 405; }
 error_page 405 = @drupal;
 gzip on;
 add_header Expires "Tue, 22 Sep 1974 08:00:00 GMT";
 add_header Cache-Control "must-revalidate, post-check=0, pre-check=0";
 try_files /cache/normal/$host/${uri}_${args}.html /cache/perm/$host/${uri}_.css /cache/perm/$host/${uri}_.js /cache/$host/0$uri.html /cache/$host/0${uri}/index.html @drupal;
 }
location @drupal {
 rewrite ^/(.*)$ /index.php?q=$1;
 }
location @rewrite {
 rewrite ^/(.*)$ /index.php?q=$1;
 }

Теперь кажись все...

comments powered by HyperComments