Thứ tư, 04/03/2015 | 00:00 GMT+7

Cách chạy một mạng xã hội phân tán nguồn mở với Diaspora trên CentOS 7

Diaspora là một mạng xã hội phân tán open-souce .

Nó khác với hầu hết các mạng xã hội khác vì nó phi tập trung - một mạng thực sự không có cơ sở trung tâm. Có server (gọi là vỏ) khắp nơi trên thế giới, từng có chứa các dữ liệu của user đã được lựa chọn để đăng ký với nó. Các group này giao tiếp với nhau một cách liền mạch để bạn có thể đăng ký với bất kỳ group nào và giao tiếp thoải mái với các liên hệ của bạn , dù họ ở đâu trên mạng. Bạn có thể đọc thêm trên trang của Diaspora.

Trong hướng dẫn này, ta sẽ cài đặt và cấu hình một group Diaspora. Trong số khác
những điều, bạn sẽ học:

  • Cách cài đặt ứng dụng Rails (Diaspora) để production
  • Cách cấu hình MariaDB với Diaspora
  • Cách cài đặt Nginx làm server Reverse Proxy cho Diaspora
  • Các phương pháp hay nhất để cấu hình SSL cho Nginx
  • Cách viết các file đơn vị systemd tùy chỉnh để sử dụng trong ứng dụng Rails
  • Đối với những người quan tâm đến bảo mật, có một phần bổ sung về cách cấu hình SELinux để chơi tốt với Diaspora

Sai lệch so với hướng dẫn cài đặt Diaspora chính thức

Hướng dẫn cài đặt Diaspora wiki đề xuất ta sử dụng Trình quản lý version Ruby. Trong khi bạn có thể làm điều đó, ta sẽ sử dụng Ruby được đóng gói hệ thống thay thế. Bằng cách đó, ta tránh cài đặt Ruby từ nguồn và phải lo lắng về một dependencies khác như RVM.

Hướng dẫn chính thức cũng gợi ý việc sử dụng script/server , một tập lệnh khởi động unicornsidekiq , hai ứng dụng ta cần cho Diaspora. Vì CentOS 7 sử dụng systemd nên ta sẽ viết các file init của riêng mình cho các dịch vụ này.

Yêu cầu

Vui lòng hoàn thành các yêu cầu này trước khi bắt đầu hướng dẫn.

  • CentOS 7 với RAM 1 GB

    RAM tối thiểu cần thiết cho một cộng đồng nhỏ là 1 GB , vì vậy ta sẽ sử dụng 1 GB / 1 CPU Server.

  • user sudo

    Hầu hết các lệnh bên dưới đều cần quyền root. Kiểm tra hướng dẫn cách thêm user để thêm user của bạn và cấp cho người đó các quyền . Tài khoản user này sẽ bổ sung cho account user diaspora mà ta sẽ tạo sau này và các dịch vụ của Diaspora sẽ chạy với các quyền hạn chế hơn.

  • Chứng chỉ SSL

    Mặc dù Diaspora có thể chạy mà không cần certificate SSL, nhưng cơ chế của Diaspora để kết nối với các group khác certificate request SSL hợp lệ. Để production , bạn nên có chứng chỉ SSL trả phí . Ta chỉ cần hai file cert được tạo trong bài viết này (công khai, riêng tư), vì vậy bạn có thể bỏ qua phần cấu hình web server của hướng dẫn đó. Ta sẽ làm điều đó của riêng mình.

    Ngoài ra, cho mục đích thử nghiệm, bạn có thể tạo certificate tự ký. Xem hướng dẫn này để biết chi tiết hoặc chỉ chạy lệnh này từ folder chính của bạn:

    openssl req \    -newkey rsa:2048 -nodes -keyout ssl.key \    -x509 -days 365 -out ssl.crt 
  • Tên domain đã đăng ký trỏ đến IP của Server

  • Trao đổi file

    Đối với server 1 GB, cần có file swap ít nhất 1 GB. Làm theo hướng dẫn Thêm swap trên CentOS 7 để cài đặt .

  • Làm theo hướng dẫn Cài đặt Server Ban đầu với CentOS 7

  • Thực hiện theo các bước được đề xuất bổ sung cho hướng dẫn Server CentOS 7 mới

Bước 1 - Cài đặt Tiện ích

Hãy cài đặt một vài gói cho các tiện ích sẽ hữu ích sau này:

  • sudo yum install deltarpm yum-cron vim

Sau đó cập nhật hệ thống của ta :

  • sudo yum update

Bước 2 - Kích hoạt Kho EPEL

EPEL là viết tắt của Extra Packages for Enterprise Linux và nó có một số gói ta cần cài đặt không phải là một phần của repository CentOS cơ sở.

Hãy kích hoạt nó bằng cách cài đặt gói epel-release và kiểm tra bất kỳ
cập nhật gói:

  • sudo yum install epel-release
  • sudo yum update

Nếu bạn được yêu cầu nhập khóa EPEL 7 gpg như hình dưới đây, hãy trả lời có:

Retrieving key from file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7 Importing GPG key 0x352C64E5:   Userid     : "Fedora EPEL (7) <epel@fedoraproject.org>"   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]: y 

Bước 3 - Cài đặt các gói cho Ruby và C

Các gói sau là cần thiết bởi Diaspora và các đá quý của nó có phần mở rộng C root .

Cài đặt các gói:

  • 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 là một repodata giá trị khóa open-souce mà Diaspora sử dụng làm database của bạn . Bây giờ Redis đã được cài đặt, hãy cấu hình nó để được bật khi khởi động và khởi động dịch vụ:

  • sudo systemctl enable redis
  • sudo systemctl start redis

Bước 4 - Thêm user Diaspora chuyên dụng

Tạo account user để chạy Diaspora. Bạn có thể đặt tên account này bất cứ điều gì bạn thích, nhưng hướng dẫn này sẽ giả định user này được gọi là diaspora .

  • sudo useradd diaspora

Bước 5 - Cấu hình firewall

Cấu hình và thắt chặt firewall có tầm quan trọng lớn khi cài đặt môi trường production . Công cụ ta sẽ sử dụng là firewalld , đơn giản hóa mọi thứ so với các lệnh iptables thuần túy.

Đầu tiên, hãy khởi động dịch vụ firewalld và kích hoạt nó khi khởi động:

  • sudo systemctl start firewalld
  • sudo systemctl enable firewalld

Bây giờ ta sẽ cho phép ssh trên cổng 22 , http trên cổng 80 , https trên cổng 443smtp trên cổng 25 . Là user sudo của bạn, hãy thêm các dịch vụ sau:

  • 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

Reload các luật firewall :

  • sudo firewall-cmd --reload

Để biết thêm thông tin về cách sử dụng firewalld , hãy đọc hướng dẫn Các bước được Đề xuất Bổ sung cho Server CentOS 7 Mới .

Bước 6 - Cài đặt và bảo mật MariaDB

Bước quan trọng tiếp theo là cài đặt database cho Diaspora. Trong hướng dẫn này, ta sẽ sử dụng MariaDB, mặc dù ta sẽ bao gồm một vài mẩu tin cho PostgreSQL trong suốt hướng dẫn.

Cài đặt các gói bắt buộc:

  • sudo yum install mariadb-server mariadb-devel

Đảm bảo rằng MariaDB được khởi động và kích hoạt khi khởi động:

  • sudo systemctl start mariadb
  • sudo systemctl enable mariadb

Bảo mật cài đặt MariaDB bằng cách chạy lệnh sau:

  • sudo mysql_secure_installation

Trả lời các câu hỏi như được hiển thị bên dưới bằng text màu đỏ và thêm password root mạnh khi được yêu cầu :

Enter current password for root (enter for none): ENTER Set root password? [Y/n] Y Remove anonymous users? [Y/n] Y Disallow root login remotely? [Y/n] Y Remove test database and access to it? [Y/n] Y Reload privilege tables now? [Y/n] Y 

Bước 7 - Tạo Database và User Diaspora

Tiếp theo, ta sẽ đăng nhập vào MariaDB để tạo người dùng diaspora . Khi được yêu cầu , hãy nhập password gốc bạn đã tạo ở trên:

  • mysql -u root -p

Tạo user cho Diaspora. Thay đổi password trong lệnh dưới đây thành password thực. Mật khẩu này không được giống với password gốc bạn đã cung cấp trong mysql_secure_installation .

  • CREATE USER 'diaspora'@'localhost' IDENTIFIED BY 'password';

Tạo database production Diaspora:

  • CREATE DATABASE IF NOT EXISTS `diaspora_production` DEFAULT CHARACTER SET `utf8mb4` COLLATE `utf8mb4_bin`;

Cấp cho người dùng MariaDB diaspora các quyền cần thiết trên database :

  • GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER, LOCK TABLES ON `diaspora_production`.* TO 'diaspora'@'localhost';

Thoát phiên database .

  • \q

Hãy thử kết nối với database mới với user hải ngoại (sử dụng password bạn đã nhập để IDENTIFIED BY ' password ' ở trên).

  • mysql -u diaspora -p -D diaspora_production

Đến đây bạn sẽ thấy dấu nhắc : MariaDB [diaspora_production]> . Thoát khỏi
phiên database bằng lệnh :

  • \q

Bây giờ ta đã hoàn tất việc cài đặt database MariaDB.

Để bảo mật bổ sung, hãy xem bài viết chi tiết về Cách bảo mật database MySQL và MariaDB .

Tiếp theo, ta sẽ lấy mã nguồn Diaspora và cấu hình nó để chạy trên VPS của bạn.

Bước 8 - Cài đặt Bundler

Bundler là trình quản lý gói cho đá quý Ruby. Ta sẽ cài đặt nó để có sẵn trên phạm vi global .

  • sudo gem install bundler

Vì file thực thi bundle được cài đặt trong /usr/local/bin/bundle , hãy tạo một softlink để đưa nó vào PATH của user .

  • sudo ln -sf /usr/local/bin/bundle /usr/bin/bundle

Bước 9 - Tìm nạp mã nguồn Diaspora

Diaspora được phát triển theo ba nhánh chính. stable chứa mã được coi là ổn định và sẽ được phát hành, master có các version được gắn thẻ ổn định mà ta sẽ sử dụng, trong khi develop có mã mới nhất với các lỗi có thể xảy ra.

Thay đổi thành account user diaspora .

  • sudo su - diaspora

Kiểm tra chi nhánh chủ. Tại thời điểm viết bài này, nó có version Diaspora 0.5.1.1 .

  • git clone -b master https://github.com/diaspora/diaspora.git

Bước 10 - Cấu hình Database Diaspora

Bây giờ thay đổi vào folder làm việc.

  • cd ~/diaspora/

Sao chép file cấu hình database mẫu và mở database.yml bằng trình soạn thảo yêu thích của bạn.

  • cp config/database.yml.example config/database.yml
  • vim config/database.yml

Bây giờ ta sẽ chỉnh sửa file cấu hình để phù hợp với cài đặt database đã tạo trước đó.

Lưu ý: Hãy hết sức cẩn thận để không làm gãy thụt đầu dòng khi chỉnh sửa file yaml ( .yml ). Luôn sử dụng dấu cách thay vì tab.

Chỉnh sửa những dòng đầu tiên nơi bộ điều hợp mysql2 được xác định. (MariaDB là một bản thay thế cho MySQL.) Thay thế root bằng diaspora và thay đổi password thành password cho diaspora user database mà bạn đã tạo trước đó. Không bỏ dấu ngoặc kép. Khi hoàn tất, hãy lưu file .

mysql: &mysql   adapter: mysql2   host: "localhost"   port: 3306   username: "diaspora"   password: "password"   encoding: utf8mb4   collation: utf8mb4_bin 

Lưu ý: Thay vào đó, bạn cần điền vào phần PostgreSQL nếu bạn đang sử dụng database đó và thay đổi database thành PostgreSQL.

Bước 11 - Cấu hình cài đặt cơ bản của Diaspora

Hãy bắt đầu bằng cách sao chép file cấu hình ví dụ.

  • cp config/diaspora.yml.example config/diaspora.yml

Bạn cần chỉnh sửa một vài cài đặt trong file này để Diaspora hoạt động bình thường. Đọc kỹ toàn bộ file để nắm bắt ý tưởng về những gì nó làm và như thế nào. Nó khá dễ hiểu, nhưng ta hãy xem xét một số cài đặt quan trọng nhất.

Mở file trong editor .

  • vim config/diaspora.yml

Dòng 39 - Bỏ comment url để nó trông giống như sau:

url: "https://example.org/" 

Thay thế https://example.org/ bằng domain của bạn . URL bạn sử dụng ở đây sẽ được mã hóa cứng vào database , vì vậy hãy đảm bảo nó chính xác. Đọc các comment phía trên dòng cấu hình này để biết chi tiết .

Dòng 47 - Bỏ comment certificate_authorities để nó trông giống như sau:

certificate_authorities: '/etc/pki/tls/certs/ca-bundle.crt' 

Lưu ý: Có hai certificate_authorities dòng; đảm bảo bạn bỏ ghi chú cho CentOS.

Dòng 166 - Bỏ comment rails_environment và thay thế development bằng production để nó trông giống như sau:

rails_environment: 'production' 

Lưu và đóng file .

Đây là những thay đổi tối thiểu cần thiết để có một group Diaspora hoạt động. Có nhiều tùy chọn hơn để khám phá và cấu hình theo ý thích của bạn như kết nối với các mạng xã hội khác (Twitter, WordPress, Tumblr, Facebook). Vui lòng đọc qua file và áp dụng các thay đổi cấu hình mong muốn của bạn.

Bước 12 - Cài đặt Gems và Cài đặt Database

Cài đặt các gem cần thiết, cài đặt database và biên dịch trước các nội dung.

Đảm bảo rằng bạn đang ở đúng folder :

  • cd /home/diaspora/diaspora/

Đầu tiên, ta yêu cầu gem nokogiri sử dụng thư viện libxm2 hệ thống mà ta đã cài đặt trước đó:

  • bundle config build.nokogiri --use-system-libraries

Tiếp theo, sử dụng Bundler để cài đặt các gem cần thiết:

  • RAILS_ENV=production bin/bundle install --without test development --deployment

Cài đặt database :

  • RAILS_ENV=production bin/rake db:create db:schema:load

Biên dịch trước các nội dung:

  • RAILS_ENV=production bin/rake assets:precompile

Đến đây, bạn có thể rời khỏi account user diaspora và chuyển về user sudo mà bạn đã tạo khi làm theo Yêu cầu của hướng dẫn này.

  • exit

Bước 13 - Cấu hình Dịch vụ Diaspora systemd

Diaspora bao gồm hai dịch vụ chính cần chạy:

  • kỳ lân, server ứng dụng
  • sidekiq, để xử lý công việc nền

Một tập lệnh được cung cấp cho trường hợp này, nằm trong script/server , nhưng ta sẽ sử dụng systemd để thay thế. systemd là hệ thống init được sử dụng trong CentOS 7.

Để hiểu rõ hơn về cách thức hoạt động của systemd, hãy đọc các bài viết sau:

Tạo folder tmpfiles

Tạo folder chứa socket Unix unicorn .

  • sudo mkdir /run/diaspora

Thay đổi quyền sở hữu cho người dùng diaspora và đặt quyền.

  • sudo chown diaspora:diaspora /run/diaspora
  • sudo chmod 750 /run/diaspora

Vì các folder /run/var/run rất dễ bay hơi, folder /run/diaspora mà ta vừa tạo sẽ không tồn tại khi hệ thống khởi động lại. Với systemd, ta có thể sử dụng tmpfiles để bảo vệ folder này giữa các lần khởi động lại.

Mở /etc/tmpfiles.d/diaspora.conf để chỉnh sửa.

  • sudo vim /etc/tmpfiles.d/diaspora.conf

Dán vào dòng sau:

/etc/tmpfiles.d/diaspora.conf
d /run/diaspora 0750 diaspora diaspora - - 

Định dạng cấu hình là một dòng trên mỗi đường dẫn, chứa các trường loại, đường dẫn, chế độ, quyền sở hữu, độ tuổi và đối số tương ứng. Bạn có thể tìm hiểu thêm về tmpfiles.d tại trang web chính thức hoặc trang chủ của nó.

con kỳ lân

Đầu tiên, ta sẽ chỉnh sửa diaspora.yml để dịch vụ lắng nghe một socket Unix. Ta sẽ thay đổi trở lại người dùng cộng đồng cho điều này.

  • sudo su - diaspora

Mở file cấu hình để chỉnh sửa:

  • vim /home/diaspora/diaspora/config/diaspora.yml

Dòng chú thích 157 để nó ghi:

/home/diaspora/diaspora/config/diaspora.yml
listen: 'unix:/run/diaspora/diaspora.sock' 

Lưu và thoát khỏi file .

Bây giờ quay lại user sudo của bạn.

  • su - username

Tạo file unicorn.service .

  • sudo vim /etc/systemd/system/diaspora-unicorn.service

Dán chính xác nội dung sau để tạo kịch bản. Hãy nhớ kiểm tra các liên kết trước đó về systemd nếu bạn cần trợ giúp để hiểu những gì trong file này:

/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 

Lưu ý: Bỏ comment Environment=DB=postgres nếu bạn đang sử dụng PostgreSQL. Đối với MariaDB, không cần thay đổi.

Khởi động dịch vụ kỳ lân và kích hoạt nó khi khởi động.

  • sudo systemctl start diaspora-unicorn
  • sudo systemctl enable diaspora-unicorn

Bây giờ hãy kiểm tra trạng thái dịch vụ:

  • systemctl status diaspora-unicorn

Nếu mọi việc suôn sẻ, lệnh đó sẽ trả về một kết quả tương tự như sau:

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

Tương tự với sidekiq , hãy tạo file sidekiq.service .

  • sudo vim /etc/systemd/system/diaspora-sidekiq.service

Dán vào phần sau:

/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 

Lưu ý: Bỏ comment Environment=DB=postgres nếu bạn đang sử dụng PostgreSQL. Đối với MariaDB, không cần thay đổi.

Khởi động dịch vụ sidekiq và kích hoạt nó khi khởi động:

  • sudo systemctl start diaspora-sidekiq
  • sudo systemctl enable diaspora-sidekiq

Bây giờ chạy:

  • systemctl status diaspora-sidekiq

Đầu ra phải giống như sau :

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] 

Bước 14 - Cài đặt Nginx

Nginx sẽ được dùng làm Reverse Proxy của ta để gần như tất cả các yêu cầu sẽ được gửi đến Unicorn. Chỉ các file public/ sẽ được phân phối trực tiếp bởi Nginx.

Đầu tiên hãy cài đặt web server .

  • sudo yum install nginx

Khởi động dịch vụ và kích hoạt nó khi khởi động:

  • sudo systemctl start nginx
  • sudo systemctl enable nginx

Bước 15 - Cấp quyền cho Nginx

Để Nginx có thể truy cập folder chính của user diaspora , ta cần thêm user nginx vào group diaspora :

  • sudo usermod -a -G diaspora nginx

Cuối cùng, ta sẽ nới lỏng quyền đối với folder chính của người dùng diaspora để cho phép đọc và thực thi quyền truy cập vào group diaspora:

  • sudo chmod 750 /home/diaspora/

Bước 16 - Tải lên certificate SSL và cho phép chuyển tiếp bí mật

Đến đây bạn cần file certificate SSL từ Tổ chức phát hành certificate của bạn. Trong ví dụ cấu hình bên dưới, ta sử dụng /etc/ssl/diaspora/ssl.crt cho public certificate và /etc/ssl/diaspora/ssl.key cho private key .

Tạo một folder để lưu trữ các file certificate .

  • sudo mkdir /etc/ssl/diaspora

Tải lên hoặc di chuyển certificate và các file khóa đến server và đặt chúng dưới
folder ta vừa tạo. SFTP hoặc SCP được dùng để làm điều này; xem hướng dẫn này .

Lưu ý: Nếu bạn đã tạo certificate tự ký, hãy di chuyển đến folder đó và sao chép các file vào /etc/ssl/diaspora bằng sudo cp ssl.crt ssl.key /etc/ssl/diaspora .

Chuyển tiếp bí mật đã trở thành một phần thiết yếu của thông tin liên lạc được mã hóa SSL / TLS. Để được giải thích chi tiết hơn về bí mật chuyển tiếp, hãy xem mục wiki bảo mật server Mozilla này.

Thay đổi lại thành user gốc của hệ thống.

  • sudo su -

Tạo file dhparam.pem .

  • openssl dhparam 2048 > /etc/ssl/dhparam.pem

Có thể mất vài phút để hoàn thành file dhparam. Khi hoàn tất, hãy đăng nhập lại vào account user sudo của bạn.

  • su - username

Bước 17 - Tắt trang web mặc định trong nginx.conf

Bây giờ ta sẽ sửa đổi /etc/nginx/nginx.conf để thông báo Chào mừng đến với Nginx mặc định không ảnh hưởng đến file cấu hình Diaspora mà ta sẽ tạo.

  • sudo vim /etc/nginx/nginx.conf

Tìm kiếm trong khối server cho các dòng bao gồm default_server; . Xóa default_server khỏi các mục này để khu vực của khối server trông giống như sau:

/etc/nginx/nginx.conf
server { listen 80; listen [::]:80; server_name localhost; root /usr/share/nginx/html; 

Lưu ý: Bạn thậm chí có thể comment toàn bộ khối server nếu bạn muốn; điều đó cũng sẽ hoạt động.

Bước 18 - Tạo file cấu hình Nginx của riêng Diaspora

Tạo file cấu hình nginx mới cho group Diaspora của ta :

  • sudo vim /etc/nginx/conf.d/diaspora.conf

Dán nội dung sau; giải thích được đưa ra ngay bên dưới mã:

/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://example.com$request_uri; } server {   listen [::]:443 ssl spdy;   listen 443 ssl spdy;   server_name example.com;   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 /etc/ssl/diaspora/ssl.crt;   ssl_certificate_key /etc/ssl/diaspora/ssl.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;   } } 

Thay thế các biến sau:

  • example.com với domain đã đăng ký của bạn ; bạn cần làm điều này ở hai nơi
  • /etc/ssl/diaspora/ssl.crt với đường dẫn đến public certificate của bạn
  • /etc/ssl/diaspora/ssl.key với đường dẫn đến private key của bạn

Giải trình:

  • Khối upstream là nơi ta cài đặt socket Unix mà Diaspora lắng nghe (mà ta cũng đã đặt trong Unicorn trước đó). Điều này được sử dụng sau này làm chỉ thị proxy_pass .
  • Khối server đầu tiên lắng nghe cổng HTTP tiêu chuẩn 80 và chuyển hướng bất kỳ yêu cầu nào đến HTTPS.
  • Khối server thứ hai lắng nghe cổng 443 (SSL) và đặt một số tham số SSL mạnh được lấy từ Mozilla wiki.

Để biết thêm về các khối server Nginx nói chung, vui lòng đọc hướng dẫn này .

Sau khi tất cả các sửa đổi hoàn tất, hãy kiểm tra file cấu hình xem có lỗi nào không.

  • sudo nginx -t

Nếu mọi việc suôn sẻ, điều này sẽ trở lại:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful 

Khởi động lại Nginx để áp dụng các thay đổi.

  • sudo systemctl restart nginx

Nếu bây giờ bạn truy cập domain của Diaspora pod trong trình duyệt của bạn (ví dụ: https://example.com ), bạn sẽ đến trang chào mừng Diaspora. Xin chúc mừng!

Trang chào mừng Diaspora

Lưu ý: Nhấp qua cảnh báo của trình duyệt nếu bạn sử dụng certificate tự ký.

Bước 19 - Tạo user Diaspora

Hãy tạo user Diaspora đầu tiên của bạn. Nhấp vào liên kết trong Bắt đầu bằng cách tạo account .

Điền thông tin chi tiết để tạo user Diaspora mới. Sau đó, bạn có thể xem trang chủ của user của bạn và bắt đầu sử dụng mạng xã hội Diaspora.

Bước 20 - Cấu hình SELinux (Tùy chọn)

Cảnh báo: Nếu bạn không quen thuộc với SELinux, hãy lưu ý điều này có thể làm hỏng mọi thứ . Bạn có thể bỏ qua phần này và bắt đầu sử dụng Diaspora.

CentOS 7 Server đã tắt SELinux theo mặc định. Để bảo mật tối đa, bạn có thể kích hoạt SELinux và cấu hình nó hoạt động với các dịch vụ của group Diaspora của bạn. Nếu bạn chưa quen với SELinux, đây là loạt bài hướng dẫn bạn có thể tham khảo để biết thêm thông tin:

Bật SELinux

Mở /etc/selinux/config trong editor .

  • sudo vim /etc/selinux/config

Thay đổi cài đặt SELINUX từ disabled thành permissive như hình dưới đây. Trước tiên, cần đặt trạng thái cho phép vì mọi file trong hệ thống cần có ngữ cảnh được gắn nhãn trước khi SELinux có thể được thực thi.

# 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=permissive # 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 

Lưu và đóng file .

Sau khi thực hiện thay đổi này, hãy khởi động lại Server để cài đặt có hiệu lực. Chỉ cần gõ:

  • sudo reboot

Nhập password user sudo của bạn để khởi động lại hệ thống. Sau đó, SSH trở lại Server và thay đổi trở lại account user sudo của bạn với:

  • su - username

Bây giờ, hãy chỉnh sửa /etc/selinux/config và đặt cài đặt SELINUX thành enforcing .

  • sudo vim /etc/selinux/config

Khi kết thúc, dòng sẽ nói thế này:

SELINUX=enforcing 

Lưu và đóng file . Khởi động lại Server .

  • sudo reboot

Sau đó, SSH trở lại Server sau khi nó trực tuyến trở lại.

Chính sách SELinux Nginx

Từ đây, bạn muốn tiếp tục là user root . Nếu bây giờ bạn truy cập domain của bạn , bạn sẽ gặp lỗi 502 . Trong trường hợp của ta , SELinux đang chặn socket của Nginx và quyền truy cập vào folder chính của người dùng cộng đồng .

Bạn có thể kiểm tra log kiểm tra với:

  • grep denied /var/log/audit/audit.log

Bạn sẽ thấy các thông báo như dưới đây:

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 

Cài đặt các công cụ bên dưới để bắt đầu khắc phục sự cố:

  • yum install policycoreutils-{python,devel} setroubleshoot-server

Ta sẽ chuyển qua file audit.log và cho phép các mục nhập Bị từ chối trong policy SELinx của ta . Chạy:

  • grep nginx /var/log/audit/audit.log | audit2allow -M nginx_diaspora

Chính sách SELinux đã tạo được lưu trữ trong file nginx_diaspora.te trong folder root /home folder chính của bạn (mặc dù bạn có thể tổ chức các policy SELinux của bạn ở bất kỳ vị trí nào). nginx_diaspora.pp binary phải được chuyển đến lệnh semodule để nhập policy . Mở nginx_diaspora.te để xem những gì hiện được SELinux cho phép.

  • vim nginx_diaspora.te

Nó phải chứa các mục sau. Nếu không, hãy thay thế nội dung của nginx_diaspora.te bằng những gì được hiển thị bên dưới.

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; 

Nhiều bối cảnh được phép có thể được thu hẹp lại, nhưng đây là một điểm khởi đầu thích hợp. Sau đó, hãy nhập module policy .

  • semodule -i nginx_diaspora.pp

Nếu bây giờ bạn làm mới trang trong trình duyệt của bạn , bạn sẽ thấy lại trang chào mừng Diaspora. Chúc mừng bạn đã cấu hình một pod Diaspora được hỗ trợ bởi SELinux chạy trên CentOS 7!

Gỡ rối SELinux ngắn gọn

Nếu trang chào mừng tải nhưng hiển thị trình giữ chỗ hình ảnh bị hỏng chứ không phải hình ảnh thực tế, hãy làm theo các bước sau:

  1. Chạy lệnh dưới đây để grep qua audit.log và thêm các mục bị từ chối mới chủ trương Nginx.
  • grep nginx /var/log/audit/audit.log | audit2allow -M nginx_diaspora
  1. Reload module policy .
  • semodule -i nginx_diaspora.pp

Bạn có thể lặp lại các bước này một vài lần.

Lưu ý: Bạn có thể sử dụng lệnh dưới đây để mở stream kết quả theo thời gian thực từ /var/log/messages . Điều này sẽ hiển thị cho bạn các thông báo lỗi SELinux mà con người có thể đọc được và cung cấp các bản sửa lỗi được đề xuất.

  • tail -f /var/log/messages

Đây là một ví dụ về bài đọc:

. . .  *****  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  . . . 

Kết luận

Đến đây bạn đã cài đặt group Diaspora của bạn , bạn có thể bắt đầu mời bạn bè và gia đình của bạn kết nối với group đó. Mặc dù nó thiếu một số tính năng hiện có trong các mạng xã hội mã nguồn đóng, thương mại lớn, nhưng một trong những lợi thế của Diaspora là bạn có thể sở hữu dữ liệu của bạn .

Từ đây, bạn có thể đọc wiki Diaspora dành cho những người bảo trì group và đăng ký group của bạn vào danh sách group global để những người khác có thể hưởng lợi từ việc cài đặt của bạn.


Tags:

Các tin liên quan

Cách lưu giữ log lịch sử hiệu quả với Graphite, carbon và sưu tập trên CentOS 7
2015-02-23
Cách cài đặt và cấu hình truy cập từ xa VNC cho GNOME Desktop trên CentOS 7
2014-11-25
Cách ghi lại mạng của bạn bằng Netdot trên CentOS 7
2014-11-24
Cách cài đặt và cập nhật WordPress với Kiểm soát phiên bản trên CentOS 7
2014-11-10
Cách thêm swap trên CentOS 7
2014-10-31
Cách cài đặt và cấu hình OpenShift Origin trên CentOS 6.5
2014-10-31
Cách cài đặt WordPress trên CentOS 7
2014-10-30
Cách cài đặt Git trên CentOS 7
2014-10-29
Cách thêm và xóa người dùng trên server CentOS 7
2014-10-28
Giới thiệu về SELinux trên CentOS 7 - Phần 1: Các khái niệm cơ bản
2014-09-05