Как установить Anchor CMS на CentOS 7 LAMP VPS
Используете другую систему? Anchor CMS - это сверхпростая и чрезвычайно легкая бесплатная система управления контентом (CMS) с открытым исходным кодом.
Redmine - бесплатный веб-инструмент управления проектами с открытым исходным кодом. Он написан на Ruby on Rails и поддерживает несколько серверов баз данных для хранения базы данных. Это многофункциональное приложение, поддерживающее несколько проектов, ACL на основе ролей и систему отслеживания проблем. Он также имеет диаграмму Ганта и поддержку календаря, управление файлами, вики проекта и форум, а также многие другие функции. Он поддерживает системы контроля версий, такие как Git, SVN или CVS. Это также многоязычный, поддерживающий до 49 языков.
Это руководство было написано для Redmine 3.4.4, но может применяться и к более новым версиям.
В этом руководстве мы будем использовать 192.168.1.1
в качестве общедоступного IP-адреса и в redmine.example.com
качестве имени домена, указывающего на экземпляр Vultr. Обязательно замените все вхождения примера доменного имени и IP-адреса фактическим.
Обновите базовую систему, используя руководство Как обновить CentOS 7 . После обновления системы перейдите к установке зависимостей.
Redmine написан на Ruby on Rails, поэтому нам потребуется Phusion Passenger для интеграции с веб-сервером Apache для обслуживания приложения. Установите Apache.
sudo yum -y install httpd httpd-devel libcurl-devel
Для создания приложения Redmine нам также понадобятся инструменты разработки. Установите необходимые инструменты.
sudo yum -y install ImageMagick ImageMagick-devel git libxml2-devel libxslt-devel gcc bzip2 openssl-devel zlib-devel gdbm-devel ncurses-devel autoconf automake bison gcc-c++ libffi-devel libtool patch readline-devel sqlite-devel glibc-headers glibc-devel libyaml-devel libicu-devel libidn-devel
Redmine поддерживает несколько типов серверов баз данных, таких как MySQL, PostgreSQL и MSSQL. В этом руководстве мы будем использовать PostgreSQL для размещения сервера базы данных Redmine.
PostgreSQL - это объектно-реляционная система баз данных. yum
Репозиторий по умолчанию содержит старую версию PostgreSQL, поэтому добавьте репозиторий PostgreSQL в систему.
sudo yum -y install https://download.postgresql.org/pub/repos/yum/10/redhat/rhel-7-x86_64/pgdg-centos10-10-1.noarch.rpm
Установите сервер базы данных PostgreSQL.
sudo yum -y install postgresql10-server postgresql10-contrib postgresql10
Инициализируйте базу данных.
sudo /usr/pgsql-10/bin/postgresql-10-setup initdb
Запустите сервер PostgreSQL и включите его автоматический запуск во время загрузки.
sudo systemctl start postgresql-10
sudo systemctl enable postgresql-10
Измените пароль для пользователя PostgreSQL по умолчанию.
sudo passwd postgres
Войдите в систему как пользователь PostgreSQL.
sudo su - postgres
Создайте нового пользователя PostgreSQL для Redmine.
createuser redmine
Вам разрешено использовать любое имя пользователя вместо redmine
. PostgreSQL предоставляет psql
оболочку для выполнения запросов к базе данных. Переключитесь на оболочку PostgreSQL.
psql
Установите пароль для вновь созданного пользователя для базы данных Redmine.
ALTER USER redmine WITH ENCRYPTED password 'DBPassword';
Замените DBPassword
на безопасный пароль. Создайте новую базу данных для установки Redmine.
CREATE DATABASE redmine WITH ENCODING='UTF8' OWNER=redmine;
Выход из psql
оболочки.
\q
Переключиться на sudo
пользователя.
exit
Отредактируйте pg_hba.conf
файл, чтобы включить аутентификацию на основе MD5.
sudo nano /var/lib/pgsql/10/data/pg_hba.conf
Найдите следующие строки и измените значения peer
и ident
в METHOD
столбце trust
и md5
, соответственно.
# TYPE DATABASE USER ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all peer
# IPv4 local connections:
host all all 127.0.0.1/32 ident
# IPv6 local connections:
host all all ::1/128 ident
После обновления конфигурация должна выглядеть следующим образом.
# TYPE DATABASE USER ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all trust
# IPv4 local connections:
host all all 127.0.0.1/32 md5
# IPv6 local connections:
host all all ::1/128 md5
Перезапустите PostgreSQL, чтобы изменения вступили в силу.
sudo systemctl restart postgresql-10
Установите еще несколько необходимых зависимостей PostgreSQL.
sudo yum -y install libpqxx-devel protobuf-devel
Рекомендуется использовать непривилегированного пользователя для запуска приложения, чтобы сохранить его изолированным от остальной системы. Создайте нового пользователя для Redmine и переключитесь на вновь созданного пользователя.
sudo adduser redmine
sudo su - redmine
Мы установим последнюю версию Ruby с помощью Ruby Version Manager или RVM. Он используется для установки и управления несколькими версиями Ruby.
Добавьте ключ GPG RVM на ваш сервер.
gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB
Установите RVM.
curl -sSL https://get.rvm.io | bash -s stable
source ~/.rvm/scripts/rvm
Получить список доступных версий Ruby.
rvm list known
Вы увидите длинный список версий Ruby.
[redmine@vultr ~]$ rvm list known
# MRI Rubies
[ruby-]1.8.6[-p420]
[ruby-]1.8.7[-head] # security released on head
[ruby-]1.9.1[-p431]
[ruby-]1.9.2[-p330]
[ruby-]1.9.3[-p551]
[ruby-]2.0.0[-p648]
[ruby-]2.1[.10]
[ruby-]2.2[.7]
[ruby-]2.3[.4]
[ruby-]2.4[.1]
ruby-head
...
Установите последнюю версию Ruby из списка.
rvm install 2.4
Используйте установленную версию Ruby.
rvm use 2.4
Вы можете проверить его версию.
ruby -v
Вы увидите похожий вывод.
[redmine@vultr ~]$ ruby -v
ruby 2.4.1p111 (2017-03-22 revision 58053) [x86_64-linux]
Установите пакет, который является менеджером зависимостей для приложения Ruby.
gem install bundler
Ruby теперь установлен. Перед установкой Redmine нам нужно установить Phusion Passenger.
Выполните следующую команду, чтобы установить Passenger.
gem install passenger
Предоставить разрешение на выполнение в домашний каталог redmine
пользователя. Пассажир должен выполнить двоичные файлы для обслуживания приложения.
chmod o+x "/home/redmine"
Установите модуль Apache для пассажиров.
passenger-install-apache2-module
Сценарий установщика задаст вам несколько вопросов. Во-первых, он предоставит вам информацию о процессе установки. Затем он попросит вас выбрать язык, который вы будете использовать. Поскольку наше приложение написано на Ruby on Rails, выберите Ruby из меню и нажмите « Enter
», чтобы продолжить.
Which languages are you interested in?
Use <space> to select.
If the menu doesn't display correctly, press '!'
‣ ⬢ Ruby
⬡ Python
⬡ Node.js
⬡ Meteor
Установщик теперь проверит требования. Программа установки не обнаружит никаких отсутствующих зависимостей и автоматически продолжит компиляцию и установку модуля.
Как только модуль будет установлен, он предложит вам добавить модуль в файл конфигурации Apache.
Almost there!
Please edit your Apache configuration file, and add these lines:
LoadModule passenger_module /home/redmine/.rvm/gems/ruby-2.4.1/gems/passenger-5.1.12/buildout/apache2/mod_passenger.so
<IfModule mod_passenger.c>
PassengerRoot /home/redmine/.rvm/gems/ruby-2.4.1/gems/passenger-5.1.12
PassengerDefaultRuby /home/redmine/.rvm/gems/ruby-2.4.1/wrappers/ruby
</IfModule>
After you restart Apache, you are ready to deploy any number of web
applications on Apache, with a minimum amount of configuration!
Press ENTER when you are done editing.
Сейчас мы пропустим это и завершим позже в руководстве, поскольку у пользователя, с которым мы вошли в систему, нет sudo
прав. Нажмите « Enter
», чтобы пропустить этот шаг.
Наконец, скрипт установщика проверит установку, и вы увидите предупреждение о том, что модуль Passenger не указан в конфигурации Apache.
Validating installation...
* Checking whether this Passenger install is in PATH... ✓
* Checking whether there are no other Passenger installations... ✓
* Checking whether Apache is installed... ✓
* Checking whether the Passenger module is correctly configured in Apache... (!)
You did not specify 'LoadModule passenger_module' in any of your Apache
configuration files. Please paste the configuration snippet that this
installer printed earlier, into one of your Apache configuration files, such
as /etc/httpd/conf/httpd.conf.
Detected 0 error(s), 1 warning(s).
Press ENTER to continue.
Теперь, когда мы установили модуль Passenger для Apache, перейдите к загрузке и установке Redmine.
Загрузите последнюю версию Redmine с официальной страницы загрузки Redmine .
cd ~
wget http://www.redmine.org/releases/redmine-3.4.4.tar.gz
Извлеките архив и переименуйте каталог для удобства.
tar -xf redmine-*.tar.gz
mv redmine-*/ redmine/
Скопируйте примеры файлов конфигурации в место их производства.
cd redmine
cp config/configuration.yml.example config/configuration.yml
cp config/database.yml.example config/database.yml
Откройте файл конфигурации базы данных, который мы только что скопировали, чтобы ввести данные базы данных.
nano config/database.yml
По умолчанию файл базы данных настроен для MySQL. Найдите конфигурации для производства и разработки и протестируйте, используя адаптер MySQL. Закомментируйте все эти строки.
#production:
# adapter: mysql2
# database: redmine
# host: localhost
# username: root
# password: ""
# encoding: utf8
#development:
# adapter: mysql2
# database: redmine_development
# host: localhost
# username: root
# password: ""
# encoding: utf8
#test:
# adapter: mysql2
# database: redmine_test
# host: localhost
# username: root
# password: ""
# encoding: utf8
Furthur, найдите закомментированные строки, имеющие production
конфигурацию для postgresql
адаптера. Раскомментируйте эти строки и обновите имя базы данных и учетные данные пользователя. Убедитесь, что вы используете правильный отступ, который состоит из двух пробелов.
production:
adapter: postgresql
database: redmine
host: localhost
username: redmine
password: "DBPassword"
Настройте приложение для использования конфигурации PostgreSQL.
bundle config build.pg --with-pg-config=/usr/pgsql-10/bin/pg_config
Установите зависимости приложения, требуемые приложением.
bundle install --without development test
В конце установки вы увидите следующее сообщение.
Installing roadie-rails 1.1.1
Bundle complete! 31 Gemfile dependencies, 55 gems now installed.
Gems in the groups development and test were not installed.
Use `bundle info [gemname]` to see where a bundled gem is installed.
Следующая команда генерирует секретные токены, которые используются для кодирования данных сеанса.
bundle exec rake generate_secret_token
Написать базу данных PostgreSQL.
RAILS_ENV=production bundle exec rake db:migrate
Запустите следующую команду, которая записывает данные по умолчанию в базу данных PostgreSQL.
RAILS_ENV=production bundle exec rake redmine:load_default_data
Приведенная выше команда попросит вас выбрать язык по умолчанию для использования с приложением. Выбор по умолчанию - английский; выберите в соответствии с вашими предпочтениями.
[redmine@vultr redmine]$ RAILS_ENV=production bundle exec rake redmine:load_default_data
Select language: ar, az, bg, bs, ca, cs, da, de, el, en, en-GB, es, es-PA, et, eu, fa, fi, fr, gl, he, hr, hu, id, it, ja, ko, lt, lv, mk, mn, nl, no, pl, pt, pt-BR, ro, ru, sk, sl, sq, sr, sr-YU, sv, th, tr, uk, vi, zh, zh-TW [en]
====================================
Default configuration data loaded.
Установка приложения Redmine завершена. Смена владельца и прав доступа к каталогам и файлам.
mkdir -p tmp tmp/pdf public/plugin_assets
chown -R redmine:redmine files log tmp public/plugin_assets
chmod -R 755 files log tmp public/plugin_assets
Мы настроили все, что нам нужно от непривилегированного пользователя. Вернитесь к sudo
пользователю, запустив su - <username>
.
Добавьте модуль Passenger для Apache в файл конфигурации Apache. Это автоматически загрузит модуль Passenger.
echo "LoadModule passenger_module /home/redmine/.rvm/gems/ruby-2.4.1/gems/passenger-5.1.12/buildout/apache2/mod_passenger.so" | sudo tee -a /etc/httpd/conf.modules.d/00-base.conf
Создайте новый файл виртуального хоста для вашего приложения Redmine.
sudo nano /etc/httpd/conf.d/redmine.conf
Заполните файл следующим содержанием.
<VirtualHost *:80>
ServerName redmine.example.com
DocumentRoot /home/redmine/redmine/public
PassengerRoot /home/redmine/.rvm/gems/ruby-2.4.1/gems/passenger-5.1.12
PassengerRuby /home/redmine/.rvm/gems/ruby-2.4.1/wrappers/ruby
PassengerUser redmine
<Directory /home/redmine/redmine/public>
Allow from all
Options -MultiViews
Require all granted
</Directory>
</VirtualHost>
Убедитесь, что вы заменили redmine.example.com
свое фактическое доменное имя. Также убедитесь, что путь к PassengerRoot
и PassengerRuby
верен. Путь к двоичным файлам может измениться, когда выйдет новый выпуск Ruby или Passenger. Чтобы найти эти пути, выполните следующую команду.
sudo su redmine -c "passenger-config about ruby-command"
Вы получите следующий вывод.
[user@vultr ~]$ sudo su redmine -c "passenger-config about ruby-command"
passenger-config was invoked through the following Ruby interpreter:
Command: /home/redmine/.rvm/gems/ruby-2.4.1/wrappers/ruby
Version: ruby 2.4.1p111 (2017-03-22 revision 58053) [x86_64-linux]
To use in Apache: PassengerRuby /home/redmine/.rvm/gems/ruby-2.4.1/wrappers/ruby
To use in Nginx : passenger_ruby /home/redmine/.rvm/gems/ruby-2.4.1/wrappers/ruby
To use with Standalone: /home/redmine/.rvm/gems/ruby-2.4.1/wrappers/ruby /home/redmine/.rvm/gems/ruby-2.4.1/gems/passenger-5.1.12/bin/passenger start
После создания файла виртуального хоста перезапустите веб-сервер Apache.
sudo systemctl restart httpd
Измените конфигурацию брандмауэра, чтобы разрешить порт 80
через брандмауэр.
sudo firewall-cmd --zone=public --add-service=http --permanent
sudo firewall-cmd --reload
Теперь вы можете получить доступ к интерфейсу Redmine http://redmine.example.com
. Войти с именем пользователя admin
и паролем admin
. При первом входе в систему Redmine предложит вам обновить пароль.
Поскольку наша установка Redmine находится на общедоступном сервере, рекомендуется использовать SSL для обеспечения обмена данными с сервера.
Установите Certbot, который является клиентским приложением для Let's Encrypt CA.
sudo yum -y install epel-release
sudo yum -y install certbot mod_ssl
Прежде чем вы сможете запросить сертификаты, вам нужно будет разрешить порт 80
и / 443
или стандартные HTTP
и HTTPS
сервисы через брандмауэр. Поскольку мы уже разрешили порт 80
ранее, давайте разрешим порт 443
.
sudo firewall-cmd --zone=public --add-service=https --permanent
sudo firewall-cmd --reload
Примечание. Чтобы получить сертификаты от Let's Encrypt CA, домен, для которого должны быть созданы сертификаты, должен быть направлен на сервер. Если нет, внесите необходимые изменения в записи DNS домена и дождитесь распространения DNS, прежде чем снова делать запрос сертификата. Certbot проверяет полномочия домена перед предоставлением сертификатов.
Создайте сертификаты SSL.
sudo certbot certonly --webroot -w /home/redmine/redmine/public -d redmine.example.com
Сгенерированные сертификаты, вероятно, будут храниться в /etc/letsencrypt/live/redmine.example.com/
. Сертификат SSL будет сохранен как, cert.pem
а закрытый ключ - как privkey.pem
.
Срок действия сертификатов Let's Encrypt истекает через 90 дней, поэтому рекомендуется настроить автоматическое обновление сертификатов с помощью заданий Cron.
Откройте файл задания Cron для root
пользователя.
sudo crontab -e
Добавьте следующую строку в конец файла.
30 5 * * * /usr/bin/certbot renew --quiet
Вышеуказанная работа Cron будет выполняться каждый день в 5:30. Если срок действия сертификата истекает, он будет автоматически продлен.
Отредактируйте файл виртуального хоста, который мы создали ранее для Redmine.
sudo nano /etc/httpd/conf.d/redmine.conf
Измените файл виртуального хоста, чтобы он выглядел следующим образом.
<VirtualHost *:80>
Redirect permanent / https://www.example.com/
ServerName redmine.example.com
</VirtualHost>
<VirtualHost *:443>
ServerAdmin [email protected]
ServerName redmine.example.com
DocumentRoot "/home/redmine/redmine/public"
<Directory "/home/redmine/redmine/public">
Options None
Require all granted
</Directory>
PassengerAppEnv production
PassengerRoot /home/redmine/.rvm/gems/ruby-2.4.1/gems/passenger-5.1.12
PassengerRuby /home/redmine/.rvm/gems/ruby-2.4.1/wrappers/ruby
PassengerUser redmine
PassengerHighPerformance on
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/redmine.example.com/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/redmine.example.com/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/redmine.example.com/chain.pem
SSLProtocol all -SSLv2 -SSLv3
SSLHonorCipherOrder on
SSLCipherSuite ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS
<IfModule headers_module>
Header always edit Set-Cookie ^(.*)$ $1;HttpOnly;Secure
Header always set Strict-Transport-Security "max-age=15768000; includeSubDomains"
</IfModule>
</VirtualHost>
Сохраните файл и выйдите из редактора.
Перезапустите Apache, чтобы изменения вступили в силу.
sudo systemctl restart httpd
Вы можете теперь доступ Redmine более HTTPS
на https://redmine.example.com
.
Поздравляем, вы успешно установили Redmine на свой экземпляр CentOS 7. Начните разработку вашего проекта, создав или импортировав ваш проект.
Используете другую систему? Anchor CMS - это сверхпростая и чрезвычайно легкая бесплатная система управления контентом (CMS) с открытым исходным кодом.
При настройке нового сервера Linux рекомендуется обновить ядро системы и другие пакеты до последней стабильной версии. В этой статье
Используете другую систему? Backdrop CMS 1.8.0 - это простая и гибкая, удобная для мобильных устройств, бесплатная система с открытым исходным кодом (CMS), которая позволяет нам
Если вы хотите разместить свой инвентарь в Интернете или просто магазин технических аксессуаров, Magento - отличное решение для электронной коммерции в Интернете. Это статья
Используете другую систему? AirSonic - это бесплатный и потоковый сервер с открытым исходным кодом. В этом уроке я проведу вас через процесс развертывания
OrangeScrum - это бесплатный инструмент управления проектами с открытым исходным кодом, который широко используется в малом и среднем бизнесе. В этой статье я проведу вас через
OrientDB - это мультимодельная СУБД NoSQL с открытым исходным кодом нового поколения. Благодаря поддержке нескольких моделей данных OrientDB может обеспечить большую функциональность и гибкость в
Vtiger CRM - это популярное приложение для управления взаимоотношениями с клиентами, которое может помочь предприятиям увеличить продажи, обеспечить обслуживание клиентов и увеличить прибыль. я
MaraDNS - это легкая, но надежная программа с открытым исходным кодом для DNS-сервера. По сравнению с другими приложениями того же типа, такими как ISC BIND, PowerDNS и djbdns
Используете другую систему? Netdata - восходящая звезда в области мониторинга показателей системы в режиме реального времени. По сравнению с другими инструментами того же рода, Netdata:
Используете другую систему? В этом уроке я расскажу, как настроить сервер Starbound в CentOS 7. Предварительные условия Вы должны иметь эту игру на себе
RabbitMQ - это брокер сообщений с открытым исходным кодом, который поддерживает AMQP, STOMP и другие коммуникационные технологии. Широко используется в корпоративных приложениях
Добро пожаловать в другой учебник Vultr. Здесь вы узнаете, как установить и запустить сервер SAMP. Это руководство было написано для CentOS 6. Предварительные условия
Используете другую систему? Elgg - это движок социальных сетей с открытым исходным кодом, который позволяет создавать социальные среды, такие как социальные сети кампуса и
Bolt - это CMS с открытым исходным кодом, написанная на PHP. Исходный код Bolts размещен на GitHub. Это руководство покажет вам, как установить Bolt CMS на новую CentOS 7 Vult.
Традиционные подходы к анализу данных невозможно использовать, когда наборы данных достигают определенного размера. Современная альтернатива анализу огромных массивов данных, которые я
Elasticsearch - популярный движок полнотекстового поиска и аналитики с открытым исходным кодом. Благодаря своей универсальности, масштабируемости и простоте использования, Elasticsearch широко используется
Обзор Эта статья призвана помочь вам в кратчайшие сроки запустить и запустить кластер Kubernetes с помощью kubeadm. Это руководство будет развертывать два сервера, на
Используете другую систему? Введение Sails.js - это инфраструктура MVC для Node.js, аналогичная Ruby on Rails. Это делает для разработки современных приложений вер
Введение В этом руководстве мы будем устанавливать PufferPanel на нашем Vultr VPS. PufferPanel - это бесплатная панель управления с открытым исходным кодом для управления вами.
Изучение 26 методов анализа больших данных: часть 1
Многие из вас знают Switch, который выйдет в марте 2017 года, и его новые функции. Для тех, кто не знает, мы подготовили список функций, которые делают «Switch» обязательным гаджетом.
Вы ждете, когда технологические гиганты выполнят свои обещания? проверить, что осталось недоставленным.
Прочтите блог, чтобы узнать о различных уровнях архитектуры больших данных и их функциях самым простым способом.
Прочтите это, чтобы узнать, как искусственный интеллект становится популярным среди небольших компаний и как он увеличивает вероятность их роста и дает преимущество перед конкурентами.
CAPTCHA стало довольно сложно решать пользователям за последние несколько лет. Сможет ли он оставаться эффективным в обнаружении спама и ботов в ближайшем будущем?
По мере того, как наука развивается быстрыми темпами, принимая на себя большую часть наших усилий, также возрастает риск подвергнуться необъяснимой сингулярности. Прочтите, что может значить для нас необычность.
Что такое телемедицина, дистанционное здравоохранение и их влияние на будущее поколение? Это хорошее место или нет в ситуации пандемии? Прочтите блог, чтобы узнать мнение!
Возможно, вы слышали, что хакеры зарабатывают много денег, но задумывались ли вы когда-нибудь о том, как они зарабатывают такие деньги? Давайте обсудим.
Недавно Apple выпустила macOS Catalina 10.15.4, дополнительное обновление для исправления проблем, но похоже, что это обновление вызывает больше проблем, приводящих к поломке компьютеров Mac. Прочтите эту статью, чтобы узнать больше