Вед-дев, Сео, Манимейкинг

Настройка локального окружения для разработки в High Sierra для GravCMS

В High Sierra из коробки идет установленный Apache 2.4 и PHP 7.1. Если у вас нет необходимости в установке дополнительных модулей для Apache или PHP, то вам будет достаточно этих коробочных инструментов. На этом конфиге должны работать "из коробки" все популярные CMS/фреймворки.

Настройка Apache

Проверяем - работает ли Apache:

sudo apachectl start

В браузере набираем "localhost" и вы должны увидеть "It Works!".

Идем в конфиг файл Apache:

sudo vi /etc/apache2/httpd.conf

Указываем путь к директории с сайтами:

#
# DocumentRoot: The directory out of which you will serve your
# documents. By default, all requests are taken from this directory, but
# symbolic links and aliases may be used to point to other locations.
#
DocumentRoot "/Users/username/Sites"
<Directory "/Users/username/Sites">

Подключаем чтение .htaccess файлов сайта:

# AllowOverride controls what directives may be placed in .htaccess files.
# It can be "All", "None", or any combination of the keywords:
#   AllowOverride FileInfo AuthConfig Limit
#
AllowOverride All

Пользователь и группа:

User username
Group staff

Подключаем основные модули. Убираем знак комментария со следующих строк (стираем решетку перед Load):

- LoadModule php7_module libexec/apache2/libphp7.so
- LoadModule rewrite_module lib/httpd/modules/mod_rewrite.so
- LoadModule vhost_alias_module lib/httpd/modules/mod_vhost_alias.so
- LoadModule socache_shmcb_module libexec/apache2/mod_socache_shmcb.so
- LoadModule ssl_module libexec/apache2/mod_ssl.so

Указываем ServerName localhost

Подключаем файл виртуальных хостов:

# Virtual hosts
Include /private/etc/apache2/extra/httpd-vhosts.conf

Пример "httpd-vhosts.conf" (по этому примеры добавляем дополнительные локальные домены, чтобы не работать с /etc/hosts, нужно установить dnsmasq):

<VirtualHost *:80>
    ServerAdmin admin@webcoder.test
    ServerAdmin admin@webcoder.test
    DocumentRoot "/Users/username/Sites/grav"
    ServerName webcoder.test
    ServerAlias www.webcoder.test
    ErrorLog "/private/var/log/apache2/dummy-host.example.com-error_log"
    CustomLog "/private/var/log/apache2/dummy-host.example.com-access_log" common
</VirtualHost>

<VirtualHost *:443>
    ServerName grav.test
    DocumentRoot "/Users/username/Sites/grav"

    SSLEngine on
    SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
    SSLCertificateFile /etc/apache2/grav.crt
    SSLCertificateKeyFile /etc/apache2/grav.key

    <Directory "/Users/alexanderkim/Sites/grav">
        Options Indexes FollowSymLinks
        AllowOverride All
        Order allow,deny
        Allow from all
        Require all granted
    </Directory>
</VirtualHost>

Файл настроек SSL:

# Secure (SSL/TLS) connections
Include /private/etc/apache2/extra/httpd-ssl.conf

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

##
## SSL Virtual Host Context
##

<VirtualHost _default_:443>

<Directory "/Users/username/Sites">
  Options All
  MultiviewsMatch Any
  AllowOverride All
  Require all granted
</Directory>

#   General setup for the virtual host
DocumentRoot "/Users/username/Sites"
ServerName localhost
ServerAdmin you@example.com

Далее, идем в файл /etc/ssl/openssl.cnf и в самый низ файла вставляем (DNS.1, DNS.2 и так далее):

[ san ]
subjectAltName                  = @alt_names

[ alt_names ]
DNS.1                           = localhost
DNS.2                           = domain.test
DNS.3                           = www.domain.test

Генерируем самоподписанный сертификат для локального домена (C = Country, ST/L = City, O = Company name, CN = common name, должен совпдать с ServerName):

sudo openssl req -extensions san -config /etc/ssl/openssl.cnf -x509 -nodes -newkey rsa:4096 -keyout /private/etc/apache2/server.key -out /private/etc/apache2/server.crt -days 3650 -subj "/C=KZ/ST=Almaty/L=Almaty/O=Companyname/CN=localhost"

Добавляем сертификат в доверенные (если вы хотите убрать сообщение о небезопасном сертификате при визите https://localhost):

sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain /private/etc/apache2/server.crt

Если вы хотите добавить еще локальные домены с SSL, то добавляете сперва в /etc/ssl/openssl.cnf (alt_names), удаляете старые сертификаты (не забудьте удалить из Keychain), создаете новые и добавляете в Keychain.

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

sudo apachectl -k restart

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

brew install dnsmasq
echo 'address=/.test/127.0.0.1' > /usr/local/etc/dnsmasq.conf
sudo brew services start dnsmasq

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

<VirtualHost *:80>
    VirtualDocumentRoot /Users/username/Sites/%-2
    ServerName test
    ServerAlias *.test
    ErrorLog "/private/var/log/apache2/test-error_log"
    CustomLog "/private/var/log/apache2/test-access_log" common
</VirtualHost>

<VirtualHost *:443>
    VirtualDocumentRoot /Users/alexanderkim/Sites/%-2
    ServerName test
    ServerAlias *.test

    SSLEngine on
    SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
    SSLCertificateFile /etc/apache2/server.crt
    SSLCertificateKeyFile /etc/apache2/server.key
</VirtualHost>

О том, что означает "%-2" можете прочитать по этой ссылке.

Вам не придется создавать хост для каждого нового локального домена, имя будет браться исходя из названия директории сайта, например: директория называется webcoder, то сайт будет открывать по адресу webcoder.test

Также вам пригодится ридерект с HTTP www/non-www на HTTPS:

# http to https non-www

RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ https://%1/$1 [R=301,L]

RewriteCond %{HTTPS} !on
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

Код выше нужно поместить в .htaccess, который лежит в корне вашего сайта.



Комментарии (0)

Разделы

Подписаться

Подписка на RSS-лента последние записи из Блога

Комменты

  • andryha v rot mne uho 1 месяц 2 дня назад
    Ошибка в расположение трех последних ")", так должно быть: 
  • Olzhas 1 год 3 месяца назад
    Спасибо. С Новым Годом! 
  • Den 1 год 4 месяца назад
    В первой функции, при создании переменной $li_previous нужно поменять '←' с NULL, в $li_next сделать тоже самое. 
  • Гость 1 год 4 месяца назад
    Если все ровно так как было описано, то нет никаких сомнений что домен увел сам регистратор. Потому что вероятность того 
  • Валерий 1 год 5 месяцев назад
    да можно делать импорт-экспорт только лишь в оболочке на входя на mysql сервер 
  • admin 1 год 5 месяцев назад
    Валерий, а зачем вам именно так делать экспорт? Если я не ошибаюсь, то там нет какой-либо команды чтобы сделать экспорт 
  • Валерий 1 год 5 месяцев назад
    захожу на mysql через ssh по команде  
  • admin 1 год 5 месяцев назад
    Добрый вечер, какой у вас клиент? 
  • Валерий 1 год 5 месяцев назад
    Здравстуйте, есть команда чтобы сделать экспорт базы внутри mysql клиента? 
  • Eduard 1 год 6 месяцев назад
    Видать, домен хороший был. Заявление пробывали писать на мошенника?