Вступление
Диаспора - это распределенная социальная сеть с открытым исходным кодом.
Он отличается от большинства других социальных сетей тем, что децентрализован - настоящая сеть без центральной базы. Во всем мире есть серверы (называемые pods), каждый из которых содержит данные пользователей, которые решили зарегистрироваться на нем. Эти модули общаются друг с другом без проблем, так что вы можете зарегистрироваться в любом модуле и свободно общаться со своими контактами, где бы они ни находились в сети. Вы можете прочитать больше на about странице диаспоры.
В этом уроке мы собираемся настроить и настроить модуль диаспоры. Помимо прочего, вы узнаете:
-
Как настроить приложение Rails (диаспора) для производства
-
Как настроить MariaDB с диаспорой
-
Как настроить Nginx в качестве обратного прокси-сервера для диаспоры
-
Лучшие практики для конфигурации SSL для Nginx
-
Как написать собственные файлы модулей systemd для использования в приложении Rails
-
Для тех, кто заботится о безопасности, есть бонусный раздел о том, как настроить SELinux для хорошей игры с диаспорой.
-
Отклонения от официального руководства по установке диаспоры *
Руководства по установке диаспоры wiki предлагают использовать Ruby Version Manager. Хотя вы можете сделать это, мы будем использовать вместо этого упакованный в систему Ruby. Таким образом, мы избегаем установки Ruby из исходного кода и появления другой зависимости, например, RVM.
Официальное руководство также предлагает использовать + script / server +
, скрипт, который запускает + unicorn +
и + sidekiq +
, два приложения, которые нам нужны для диаспоры. Поскольку CentOS 7 использует systemd, вместо этого мы будем писать собственные файлы инициализации для этих сервисов.
Предпосылки
Пожалуйста, выполните эти предварительные условия перед началом обучения.
-
CentOS 7 с 1 ГБ оперативной памяти + Минимальный объем оперативной памяти, необходимый для небольшого сообщества, составляет * 1 ГБ *, поэтому мы будем использовать * 1 ГБ / 1 CPU * Droplet.
-
пользователь sudo + Большинству команд ниже нужны права суперпользователя. Обратитесь к how для добавления пользователей руководству, чтобы добавить своего пользователя и дать это sudo привилегии. Эта учетная запись пользователя будет добавлена к учетной записи пользователя * diaspora *, которую мы создадим позже и которой будут пользоваться службы Diaspora с более ограниченными привилегиями.
-
Сертификат SSL + Хотя Diaspora может работать без SSL-сертификата, для подключения Diaspora к другим модулям требуется действительный SSL-сертификат. Для производства у вас должен быть paid SSL-сертификат. Нам просто нужны два файла сертификата, созданные в этой статье (общедоступный, приватный), поэтому вы можете пропустить часть настройки этого веб-сервера, посвященную настройке веб-сервера. Мы сделаем это самостоятельно. + В качестве альтернативы вы можете создать самозаверяющий сертификат. См. Https://www.digitalocean.com/community/tutorials/openssl-essentials-working-with-ssl-certificates-private-keys-and-csrs#generating-ssl-certificates[thutorial] для подробностей или просто запустите эта команда из вашего домашнего каталога:
openssl req \ -newkey rsa:2048 -nodes -keyout ssl.key \ -x509 -days 365 -out ssl.crt
-
Зарегистрированное доменное имя, указывающее на IP вашего Droplet
-
Файл подкачки + Для сервера объемом 1 ГБ требуется файл подкачки не менее 1 ГБ. Следуйте инструкциям Add swap on CentOS 7, чтобы создать его.
-
Следуйте инструкциям Initial Server Setup с CentOS 7
-
Следуйте инструкциям Ad рекомендуемые шаги для новых серверов CentOS 7
Шаг 1 - Установите утилиты
Давайте установим пару пакетов для утилит, которые пригодятся позже:
sudo yum install deltarpm yum-cron vim
Затем обновите нашу систему:
sudo yum update
Шаг 2 - Включите репозиторий EPEL
EPEL расшифровывается как Extra Packages для Enterprise Linux, и в нем есть несколько пакетов, которые нам нужно установить, которые не являются частью базовых репозиториев CentOS.
Давайте включим его, установив пакет + epel-release +
и проверив наличие обновлений любого + пакета:
sudo yum install epel-release
sudo yum update
Если вас попросят импортировать ключ EPEL 7 gpg, как показано ниже, ответьте «да»:
Retrieving key from file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
Importing GPG key 0x352C64E5:
Userid : "Fedora EPEL (7) <[email protected]>"
Fingerprint: 91e9 7d7c 4a5e 96f1 7f3e 888f 6a2f aea2 352c 64e5
Package : epel-release-7-5.noarch (@extras)
From : /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
Is this ok [y/N]:
Шаг 3 - Установите пакеты для Ruby и C
Следующие пакеты нужны Диаспоре и ее жемчужинам, имеющим собственные расширения Си.
Установите пакеты:
sudo yum install git ruby ruby-devel libxslt-devel libxml2-devel gcc gcc-c++ automake net-tools libcurl-devel libffi-devel make redis nodejs ImageMagick-devel
Redis - это хранилище данных значения ключа с открытым исходным кодом, которое Диаспора использует в качестве своей базы данных. Теперь, когда Redis установлен, давайте настроим его на загрузку и запустим службу:
sudo systemctl enable redis
sudo systemctl start redis
Шаг 4 - Добавить выделенного пользователя диаспоры
Создайте учетную запись пользователя для запуска Диаспоры. Вы можете назвать эту учетную запись как угодно, но в этом руководстве предполагается, что этот пользователь называется * диаспора *.
sudo useradd diaspora
Шаг 5 - Настройте брандмауэр
Настройка и ужесточение брандмауэра очень важны при настройке производственной среды. Инструмент, который мы будем использовать, это + firewalld +
, который упрощает вещи по сравнению с чистыми командами + iptables +
.
Сначала запустите сервис + firewalld +
и включите его при загрузке:
sudo systemctl start firewalld
sudo systemctl enable firewalld
Теперь мы разрешим + ssh +
для порта + 22 +
, + http
для порта` + 80 + ,
+ https` для порта + 443 +
и + smtp
для порта` +25 + `. Как ваш пользователь sudo, добавьте эти сервисы:
sudo firewall-cmd --permanent --add-service=ssh
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --permanent --add-service=smtp
Перезагрузите правила брандмауэра:
sudo firewall-cmd --reload
Для получения дополнительной информации об использовании + firewalld +
прочитайте Additional Рекомендуемые действия для новых серверов CentOS 7 руководство.
Шаг 6 - Установите и защитите MariaDB
Следующим большим шагом является создание базы данных для диаспоры. В этом уроке мы будем использовать MariaDB, хотя в уроке мы расскажем о нескольких тонкостях для PostgreSQL.
Установите необходимые пакеты:
sudo yum install mariadb-server mariadb-devel
Убедитесь, что MariaDB запущен и включен при загрузке:
sudo systemctl start mariadb
sudo systemctl enable mariadb
Защитите установку MariaDB, выполнив следующую команду:
sudo mysql_secure_installation
Ответьте на вопросы, как показано ниже в тексте, и добавьте надежный пароль root при появлении запроса:
Enter current password for root (enter for none):
Set root password? [Y/n]
Remove anonymous users? [Y/n]
Disallow root login remotely? [Y/n]
Remove test database and access to it? [Y/n]
Reload privilege tables now? [Y/n]
Шаг 7 - Создание пользователя и базы данных диаспоры
Далее мы войдем в MariaDB, чтобы создать пользователя * diaspora *. При появлении запроса введите пароль * root *, который вы создали выше:
mysql -u root -p
Создать пользователя для диаспоры. Измените ++
в приведенной ниже команде на реальный пароль. Он не должен совпадать с паролем * root *, который вы указали во время + mysql_secure_installation +
.
CREATE USER 'diaspora'@'localhost' IDENTIFIED BY '';
Создайте производственную базу данных диаспоры:
CREATE DATABASE IF NOT EXISTS `diaspora_production` DEFAULT CHARACTER SET `utf8mb4` COLLATE `utf8mb4_bin`;
Предоставьте пользователю MariaDB * диаспора * необходимые разрешения для базы данных:
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER, LOCK TABLES ON `diaspora_production`.* TO 'diaspora'@'localhost';
Закройте сеанс базы данных.
\q
Попробуйте подключиться к новой базе данных с пользователем * диаспора * (используйте пароль, который вы ввели для + IDENTIFIED BY '' +
выше).
mysql -u diaspora -p -D diaspora_production
Теперь вы должны увидеть приглашение: + MariaDB [diaspora_production]> +
. Выйдите из сеанса + базы данных, введя:
\q
Мы закончили установку базы данных MariaDB.
Для дополнительной безопасности посмотрите подробную статью на https://www.digitalocean.com/community/tutorials/how-to-secure-mysql-and-mariadb-databases-in-a-linux-vps[How To Secure MySQL и Базы данных MariaDB.
Затем мы возьмем исходный код диаспоры и настроим его для работы на VPS.
Шаг 8 - Установите Bundler
Bundler - менеджер пакетов для драгоценных камней Ruby. Мы установим его, чтобы он был доступен по всему миру.
sudo gem install bundler
Поскольку исполняемый файл + bundle +
установлен в + / usr / local / bin / bundle +
, создайте символическую ссылку, чтобы включить ее в пользовательский + PATH +
.
sudo ln -sf /usr/local/bin/bundle /usr/bin/bundle
Шаг 9 - Получить исходный код диаспоры
Диаспора развита в трех основных направлениях. + stable +
содержит код, который считается стабильным и должен быть выпущен, + master +
имеет стабильные версии с тегами, которые мы будем использовать, в то время как +velop +
имеет последний код с возможными ошибками.
Перейдите в учетную запись пользователя * диаспора *.
sudo su - diaspora
Проверьте мастер ветку. На момент написания статьи она содержала версию диаспоры + 0.5.1.1 +
.
git clone -b master https://github.com/diaspora/diaspora.git
Шаг 10 - Настройка базы данных диаспоры
Теперь перейдите в рабочий каталог.
cd ~/diaspora/
Скопируйте пример файла конфигурации базы данных и откройте + database.yml +
в вашем любимом редакторе.
cp config/database.yml.example config/database.yml
vim config/database.yml
Теперь мы отредактируем файл конфигурации, чтобы он соответствовал настройкам базы данных, созданным ранее.
Отредактируйте самые первые строки, где определен адаптер + mysql2 +
. (MariaDB - это замена для MySQL.) Замените * root * на * diaspora * и замените ++
на пароль для пользователя базы данных * диаспоры *, который вы создали ранее. Не удаляйте цитаты. Когда закончите, сохраните и закройте файл.
mysql: &mysql
adapter: mysql2
host: "localhost"
port: 3306
username: ""
password: ""
encoding: utf8mb4
collation: utf8mb4_bin
Шаг 11 - Настройте основные параметры диаспоры
Начнем с копирования примера файла конфигурации.
cp config/diaspora.yml.example config/diaspora.yml
Вам нужно отредактировать несколько настроек в этом файле, чтобы диаспора работала правильно. Внимательно прочитайте весь файл, чтобы понять, что он делает и как. Это довольно очевидно, но давайте посмотрим на некоторые из наиболее важных параметров.
Откройте файл в текстовом редакторе.
vim config/diaspora.yml
Строка 39 - Раскомментируйте строку + url +
, чтобы она выглядела следующим образом:
url: ""
Замените ++
своим собственным доменным именем. Используемый здесь URL будет жестко запрограммирован в базе данных, поэтому убедитесь, что он точный. * Прочитайте комментарии выше этой строки конфигурации для деталей *.
Строка 47 - Раскомментируйте строку + certificate_authorities +
, чтобы она выглядела следующим образом:
certificate_authorities: '/etc/pki/tls/certs/ca-bundle.crt'
Строка 166. Раскомментируйте строку + rails_environment +
и замените + development +
на + production
, чтобы она выглядела следующим образом:
rails_environment: ''
Сохраните и закройте файл.
Это минимальные изменения, необходимые для работы стручка диаспоры. Есть еще много вариантов для изучения и настройки по вашему вкусу, таких как подключение к другим социальным сетям (Twitter, WordPress, Tumblr, Facebook). Пожалуйста, прочитайте файл и внесите необходимые изменения в конфигурацию.
Шаг 12 - Установите Gems и настройте базу данных
Установите необходимые гемы, настройте базу данных и предварительно скомпилируйте ресурсы.
Убедитесь, что вы находитесь в правильном каталоге:
cd /home/diaspora/diaspora/
Сначала мы говорим гему nokogiri использовать системную библиотеку libxm2, которую мы ранее установили:
bundle config build.nokogiri --use-system-libraries
Далее, используйте bundler для установки необходимых гемов:
RAILS_ENV=production bin/bundle install --without test development --deployment
Настройте базу данных:
RAILS_ENV=production bin/rake db:create db:schema:load
Прекомпилируйте активы:
RAILS_ENV=production bin/rake assets:precompile
На этом этапе вы можете оставить учетную запись пользователя * diaspora * и переключиться обратно на пользователя sudo, которого вы создали, выполняя предварительные требования этого руководства.
exit
Шаг 13 - Настройте системные службы Диаспоры
Диаспора состоит из двух основных служб, которые необходимо запустить:
-
единорог, сервер приложений
-
sidekiq, для фоновой обработки заданий
Для этого случая предусмотрен скрипт, который находится в + script / server +
, но вместо этого мы будем использовать systemd. systemd - это система инициализации, используемая в CentOS 7.
Чтобы лучше понять, как работает systemd, прочитайте следующие статьи:
Создайте каталог tmpfiles
Создайте каталог, в котором будет находиться + unicorn +
Unix-сокет.
sudo mkdir /run/diaspora
Смените владельца на пользователя * диаспора * и установите разрешения.
sudo chown diaspora:diaspora /run/diaspora
sudo chmod 750 /run/diaspora
Поскольку каталоги + / run +
и + / var / run +
являются изменчивыми, только что созданный каталог + / run / diaspora +
не выдержит перезагрузки системы. С помощью systemd мы можем использовать tmpfiles для сохранения этого каталога между перезагрузками.
Откройте + / etc / tmpfiles.d / diaspora.conf +
для редактирования.
sudo vim /etc/tmpfiles.d/diaspora.conf
Вставьте следующую строку:
/etc/tmpfiles.d/diaspora.conf
d /run/diaspora 0750 diaspora diaspora - -
Формат конфигурации - одна строка на путь, содержащая поля типа, пути, режима, владельца, возраста и аргумента соответственно. Вы можете узнать больше о + tmpfiles.d +
на его official web page или на его справочной странице.
единорог
Сначала мы отредактируем + diaspora.yml +
, чтобы служба прослушивала сокет Unix. Мы вернемся к пользователю diaspora для этого.
sudo su - diaspora
Откройте файл конфигурации для редактирования:
vim /home/diaspora/diaspora/config/diaspora.yml
Раскомментируйте строку 157 следующим образом:
/home/diaspora/diaspora/config/diaspora.yml
listen: 'unix:/run/diaspora/diaspora.sock'
Сохраните и выйдите из файла.
Теперь вернитесь к своему пользователю sudo.
su -
Создайте файл + unicorn.service +
.
sudo vim /etc/systemd/system/diaspora-unicorn.service
Вставьте следующий контент точно, чтобы создать скрипт. Не забудьте проверить предыдущие ссылки о systemd, если вам нужна помощь, чтобы понять, что находится в этом файле:
/etc/systemd/system/diaspora-unicorn.service
[Unit]
Description=Diaspora Unicorn Server
Requires=redis.service
After=redis.service network.target
[Service]
User=diaspora
Group=diaspora
SyslogIdentifier=diaspora-unicorn
WorkingDirectory=/home/diaspora/diaspora
Environment=RAILS_ENV=production
## Uncomment if postgres is installed
#Environment=DB=postgres
PIDFile=/run/diaspora/unicorn.pid
Restart=always
CPUAccounting=true
emoryAccounting=true
BlockIOAccounting=true
CapabilityBoundingSet=
PrivateTmp=true
NoNewPrivileges=true
ExecStart=/usr/bin/bundle exec "unicorn_rails -c config/unicorn.rb -E production"
[Install]
WantedBy=multi-user.target
Запустите сервис единорога и включите его при загрузке.
sudo systemctl start diaspora-unicorn
sudo systemctl enable diaspora-unicorn
Теперь проверьте статус сервиса:
systemctl status diaspora-unicorn
Если все прошло хорошо, эта команда должна вернуть результат, подобный следующему:
diaspora-unicorn.service - Diaspora Unicorn Server
Loaded: loaded (/etc/systemd/system/diaspora-unicorn.service; enabled)
Active: active (running) since Tue 2015-06-23 10:18:25 EDT; 16s ago
Main PID: 16658 (ruby)
CGroup: /system.slice/diaspora-unicorn.service
└─16658 ruby /home/diaspora/diaspora/vendor/bundle/ruby/bin/unicorn_rails -c config/unicorn.rb -E production
Sidekiq
Аналогично с + sidekiq +
, давайте создадим файл + sidekiq.service +
.
sudo vim /etc/systemd/system/diaspora-sidekiq.service
Вставьте в следующее:
/etc/systemd/system/diaspora-sidekiq.service
[Unit]
Description=Diaspora Sidekiq Worker
Requires=redis.service
After=redis.service network.target
[Service]
User=diaspora
Group=diaspora
SyslogIdentifier=diaspora-sidekiq
WorkingDirectory=/home/diaspora/diaspora
Environment=RAILS_ENV=production
## Uncomment if postgres is installed
#Environment=DB=postgres
Restart=always
CPUAccounting=true
emoryAccounting=true
BlockIOAccounting=true
CapabilityBoundingSet=
PrivateTmp=true
ExecStart=/usr/bin/bundle exec "sidekiq -e production -L log/sidekiq.log >> log/sidekiq.log 2>&1"
[Install]
WantedBy=multi-user.target
Запустите сервис sidekiq и включите его при загрузке:
sudo systemctl start diaspora-sidekiq
sudo systemctl enable diaspora-sidekiq
Теперь запустите:
systemctl status diaspora-sidekiq
Вывод должен быть похож на это:
diaspora-sidekiq.service - Diaspora Sidekiq Worker
Loaded: loaded (/etc/systemd/system/diaspora-sidekiq.service; enabled)
Active: active (running) since Mon 2014-12-29 08:21:45 UTC; 44s ago
Main PID: 18123 (sh)
CGroup: /system.slice/diaspora-sidekiq.service
├─18123 sh -c sidekiq -e production -L log/sidekiq.log >> log/sidekiq.log 2>&1
└─18125 sidekiq 2.17.7 diaspora [0 of 5 busy]
Шаг 14 - Установите Nginx
Nginx будет служить нашим обратным прокси-сервером, поэтому почти все запросы будут отправлены в Unicorn. Только файлы в + public / +
будут обслуживаться напрямую Nginx.
Давайте сначала установим веб-сервер.
sudo yum install nginx
Запустите сервис и включите его при загрузке:
sudo systemctl start nginx
sudo systemctl enable nginx
Шаг 15 - Дайте разрешения Nginx
Чтобы Nginx мог получить доступ к домашней папке пользователя * diaspora *, нам нужно добавить пользователя * nginx * в группу * diaspora *:
sudo usermod -a -G diaspora nginx
Наконец, мы ослабим разрешения для домашнего каталога пользователя * diaspora *, чтобы разрешить чтение и выполнение доступа к группе диаспоры:
sudo chmod 750 /home/diaspora/
Шаг 16 - Загрузите сертификат SSL и включите прямую секретность
Теперь вам понадобятся файлы сертификатов SSL от вашего центра сертификации. В приведенном ниже примере конфигурации мы используем + / etc / ssl / diaspora / ssl.crt +
для открытого сертификата и + / etc / ssl / diaspora / ssl.key +
для закрытого ключа.
Создайте каталог для хранения файлов сертификатов.
sudo mkdir /etc/ssl/diaspora
Загрузите или переместите файлы сертификатов и ключей на сервер и поместите их в каталог +, который мы только что создали. SFTP или SCP могут быть использованы для этого; см. this theutorial.
Прямая секретность стала неотъемлемой частью шифрованных соединений SSL / TLS. Для более подробного объяснения прямой секретности см. Эту Mozilla[ wiki запись безопасности сервера.
Снова измените на системного пользователя * root *.
sudo su -
Создайте файл + dhparam.pem +
.
openssl dhparam 2048 > /etc/ssl/dhparam.pem
Файл dhparam может занять несколько минут. Когда он закончится, войдите в свою учетную запись пользователя sudo.
su -
Шаг 17 - Отключите сайт по умолчанию в nginx.conf
Теперь мы изменим + / etc / nginx / nginx.conf +
, чтобы сообщение по умолчанию Welcome to Nginx не мешало создаваемому нами файлу конфигурации диаспоры.
sudo vim /etc/nginx/nginx.conf
Найдите в блоке + server +
строки, включая + default_server; +
. Удалите + default_server +
из этих записей, чтобы область блока сервера выглядела следующим образом:
/etc/nginx/nginx.conf
server {
server_name localhost;
root /usr/share/nginx/html;
Шаг 18 - Создайте собственный файл конфигурации Nginx для диаспоры
Создайте новый файл конфигурации nginx для нашего модуля диаспоры:
sudo vim /etc/nginx/conf.d/diaspora.conf
Вставить в следующем содержании; объяснения даны чуть ниже кода:
/etc/nginx/conf.d/diaspora.conf
upstream diaspora {
server unix:/run/diaspora/diaspora.sock fail_timeout=0;
}
server {
listen [::]:80;
listen 80;
server_name _;
return 301 https://$request_uri;
}
server {
listen [::]:443 ssl spdy;
listen 443 ssl spdy;
server_name ;
root /home/diaspora/diaspora/public;
server_tokens off;
error_log /var/log/nginx/diaspora_error.log;
# Configure maximum picture size
# Note that Diaspora has a client side check set at 4M
client_max_body_size 4M;
## SSL settings
ssl_certificate ;
ssl_certificate_key ;
# https://wiki.mozilla.org/Security/Server_Side_TLS
ssl_dhparam /etc/ssl/dhparam.pem;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128:AES256:AES:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK';
ssl_session_timeout 5m;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:50m;
add_header Strict-Transport-Security "max-age=31536000";
location / {
# Proxy if requested file not found
try_files $uri $uri/index.html $uri.html @diaspora;
}
location @diaspora {
gzip off;
proxy_set_header X-Forwarded-Ssl on;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https;
proxy_set_header Host $http_host;
proxy_set_header X-Frame-Options SAMEORIGIN;
proxy_redirect off;
proxy_pass http://diaspora;
}
}
Замените следующие переменные:
-
++
с вашим собственным зарегистрированным доменным именем; вам нужно будет сделать это в * двух * местах -
++
с путем к вашему собственному общедоступному сертификату -
++
с путем к вашему личному ключу
Объяснение:
-
Блок
+ upstream +
- это место, где мы настраиваем сокет Unix, который слушает диаспора (который мы также установили в Unicorn ранее). Это используется позже как директива+ proxy_pass +
. -
Первый блок
+ server +
слушает стандартный HTTP-порт+ 80 +
и перенаправляет любые запросы в HTTPS. -
Второй блок
+ server +
слушает порт+ 443 +
(SSL) и устанавливает некоторые надежные параметры SSL, которые были взяты из вики Mozilla.
Для получения дополнительной информации о блоках сервера Nginx в целом, пожалуйста, прочитайте thutorial.
После завершения всех изменений проверьте файл конфигурации на наличие ошибок.
sudo nginx -t
Если все прошло хорошо, это должно вернуться:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
Перезапустите Nginx, чтобы применить изменения.
sudo systemctl restart nginx
Если вы теперь посещаете доменное имя вашего модуля диаспоры в своем браузере (например, + https: // example.com +
), вы должны перейти на страницу приветствия диаспоры. Поздравляем!
изображение: https: //assets.digitalocean.com/articles/socialnetwork_diaspora/diaspora.png [страница приветствия диаспоры]
Шаг 19 - Создайте пользователя диаспоры
Давайте создадим вашего первого пользователя из диаспоры. Нажмите на ссылку в * Начните с создания учетной записи. *
Заполните детали, чтобы создать нового пользователя диаспоры. После этого вы сможете просмотреть домашнюю страницу своего пользователя и начать пользоваться социальной сетью диаспоры.
Шаг 20 - Настройте SELinux (необязательно)
_ * Предупреждение: * Если вы не знакомы с SELinux, учтите, что * это может сломать вещи *. Вы можете пропустить этот раздел и начать использовать диаспору. _
В каплях CentOS 7 SELinux отключен по умолчанию. Для максимальной безопасности вы можете включить SELinux и настроить его для работы со службами вашего модуля диаспоры. Если вы новичок в SELinux, вот серия руководств, на которые вы можете обратиться за дополнительной информацией:
Включить SELinux
Откройте + / etc / selinux / config +
в текстовом редакторе.
sudo vim /etc/selinux/config
Измените настройку + SELINUX +
с + disabled +
на ++
, как показано ниже. Прежде всего необходимо установить разрешающий статус, потому что каждый файл в системе должен иметь свой контекст, помеченный, прежде чем SELinux может быть применен.
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
SELINUX=
# SELINUXTYPE= can take one of these two values:
# targeted - Targeted processes are protected,
# minimum - Modification of targeted policy. Only selected processes are protected.
# mls - Multi Level Security protection.
SELINUXTYPE=targeted
Сохраните и закройте файл.
После внесения этого изменения перезагрузите Droplet, чтобы настройки вступили в силу. Просто введите:
sudo reboot
Введите пароль пользователя sudo для перезагрузки системы. Затем вернитесь к дроплету по SSH и перейдите в учетную запись вашего пользователя sudo с помощью:
su -
Теперь отредактируйте + / etc / selinux / config +
еще раз и установите для параметра + SELINUX +
значение ++
.
sudo vim /etc/selinux/config
Когда закончите, строка должна сказать это:
SELINUX=
Сохраните и закройте файл. * Перезагрузите капельку еще раз. *
sudo reboot
Затем вернитесь к вашему дроплету по SSH после того, как он снова появится в сети.
Политика SELinux Nginx
Отсюда вы хотите остаться пользователем + root
. Если вы сейчас посетите свой домен, вам будет выдана ошибка * 502 *. В нашем случае SELinux блокирует сокет Nginx и доступ к домашнему каталогу пользователя * diaspora *.
Вы можете проверить журналы аудита с:
grep denied /var/log/audit/audit.log
Вы должны увидеть сообщения, подобные приведенным ниже:
type=AVC msg=audit(1424394514.632:385): avc: denied { search } for pid=1114 comm="nginx" name="diaspora" dev="vda1" ino=783369 scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:object_r:user_home_dir_t:s0 tclass=dir
type=AVC msg=audit(1424394514.632:386): avc: denied { write } for pid=1114 comm="nginx" name="diaspora.sock" dev="tmpfs" ino=21382 scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:object_r:var_run_t:s0 tclass=sock_file
Установите инструменты ниже, чтобы начать исправление проблемы:
yum install policycoreutils-{python,devel} setroubleshoot-server
Мы проверим файл + audit.log +
и разрешим записи Denied в нашей политике SELinx. Run:
grep nginx /var/log/audit/audit.log | audit2allow -M nginx_diaspora
Сгенерированная политика SELinux хранится в файле + nginx_diaspora.te +
в корневом каталоге + / home +
(хотя вы можете организовать политики SELinux в любом месте). Двоичный файл + nginx_diaspora.pp +
должен быть передан команде + semodule +
для импорта политики. Откройте + nginx_diaspora.te +
, чтобы увидеть, что теперь разрешено SELinux.
vim nginx_diaspora.te
Он должен содержать следующие записи. Если нет, замените содержимое + nginx_diaspora.te +
на то, что показано ниже.
module nginx_diaspora 1.0;
require {
type var_run_t;
type httpd_t;
type user_home_t;
type init_t;
class sock_file write;
class unix_stream_socket connectto;
class file { read open };
}
#============= httpd_t ==============
allow httpd_t init_t:unix_stream_socket connectto;
#!!!! This avc can be allowed using the boolean 'httpd_read_user_content'
allow httpd_t user_home_t:file { read open };
allow httpd_t var_run_t:sock_file write;
Многие из разрешенных контекстов могут быть сужены, но это подходящая отправная точка. Тогда давайте импортируем модуль политики.
semodule -i nginx_diaspora.pp
Если вы обновите страницу в своем браузере, вы должны снова увидеть страницу приветствия диаспоры. Поздравляем с настройкой защищенного SELinux модуля диаспоры, работающего на CentOS 7!
Краткое описание проблем с SELinux
Если страница приветствия загружается, но показывает заполненные изображения, а не фактические изображения, выполните следующие действия:
-
Запустите команду ниже для
+ grep +
через+ audit.log +
и добавьте новые Denied записи в политику Nginx.
grep nginx /var/log/audit/audit.log | audit2allow -M nginx_diaspora
-
Перезагрузите модуль политики.
semodule -i nginx_diaspora.pp
Вы можете повторить эти шаги несколько раз.
tail -f /var/log/messages
Вот пример показаний:
. . .
***** Plugin catchall (100. confidence) suggests **************************
If you believe that nginx should be allowed write access on the sock_file by default.
Then you should report this as a bug.
You can generate a local policy module to allow this access.
Do
allow this access for now by executing:
# grep nginx /var/log/audit/audit.log | audit2allow -M mypol
# semodule -i mypol.pp
. . .
Заключение
Теперь, когда вы настроили свой модуль диаспоры, вы можете начать приглашать своих друзей и семью подключиться к нему. Хотя в крупных коммерческих социальных сетях с закрытым исходным кодом отсутствуют некоторые функции, одним из преимуществ диаспоры является то, что вы получаете свои данные.
Отсюда вы можете прочитать вики Diaspora для pod сопровождающих и зарегистрировать свой модуль в глобальном списке модулей, чтобы другие могли извлечь выгоду из вашей установки.