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 unicorn
và sidekiq
, 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 443
và smtp
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:
- Cách sử dụng Systemctl để quản lý các đơn vị và dịch vụ Systemd
- Hiểu đơn vị Systemd và file đơn vị
- Cách sử dụng Journalctl để xem và thao tác log Systemd
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
và /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:
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:
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:
[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:
[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:
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ã:
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ẩn80
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ổng443
(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!
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:
- Giới thiệu về SELinux trên CentOS 7 - Phần 1: Các khái niệm cơ bản
- Giới thiệu về SELinux trên CentOS 7 - Phần 2: Tệp và Quy trình
- Giới thiệu về SELinux trên CentOS 7 - Phần 3: User
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:
- Chạy lệnh dưới đây để
grep
quaaudit.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
- 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.
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 72015-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