Cách cài đặt Invoice Ninja trên CentOS 7

theanh

Administrator
Nhân viên
Invoice Ninja là phần mềm mã nguồn mở miễn phí trên nền tảng web để lập hóa đơn, thanh toán, theo dõi thời gian và nhiều tính năng khác. Bạn có thể tạo Hóa đơn trực tuyến trong vài giây, tích hợp với các cổng thanh toán như Stripe, PayPal và WePay. Invoice Ninja có thể hiển thị cho bạn hóa đơn trực tiếp dưới dạng tệp PDF, bạn có thể thiết lập logo công ty của riêng mình và sử dụng các mẫu hóa đơn tùy chỉnh. Invoice Ninja dựa trên PHP, xây dựng bằng Laravel Framework và có thể cài đặt trên Linux, Windows và Mac.

Trong hướng dẫn này, tôi sẽ chỉ cho bạn cách cài đặt và cấu hình Invoice Ninja trên máy chủ CentOS 7. Tôi sẽ sử dụng Nginx làm máy chủ web và MariaDB làm hệ thống Cơ sở dữ liệu.

Điều kiện tiên quyết
  • Máy chủ CentOS 7
  • Quyền root

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

Trong bước này, chúng ta sẽ cài đặt máy chủ web Nginx. Kết nối với máy chủ của bạn bằng tài khoản ssh rot.
Mã:
ssh [emailprotected]
Trước khi cài đặt Nginx, bạn phải cài đặt kho lưu trữ Epel trên hệ thống CentOS của mình.
Mã:
yum -y install epel-release
Bây giờ bạn có thể cài đặt Nginx bằng lệnh yum bên dưới từ kho lưu trữ epel:
Mã:
yum -y install nginx
Khi quá trình cài đặt hoàn tất, hãy khởi động Nginx và cho phép nó khởi động khi khởi động.
Mã:
systemctl start nginx
systemctl enable nginx
Đảm bảo Nginx đang chạy bằng cách kiểm tra cổng được Nginx sử dụng (cổng 80).
Mã:
netstat -plntu


Lưu ý:

Nếu lệnh netstat không tìm thấy, bạn có thể cài đặt net-tools như sau:
Mã:
yum -y install net-tools

Bước 2 - Cài đặt và cấu hình MariaDB Server​

Sau khi cài đặt Nginx, chúng ta cần cài đặt themariadb-server trên hệ thống. Nó có sẵn trong kho lưu trữ CentOS. Cài đặt mariadb-server và tất cả các gói cần thiết cho MariaDB bằng lệnh bên dưới.
Mã:
yum install -y mariadb-server
Khởi động dịch vụ themariadb và cho phép nó khởi động khi khởi động bằng lệnh systemctl.
Mã:
systemctl start mariadb
systemctl enable mariadb
MariaDB đã khởi động, bây giờ bạn có thể đặt mật khẩu gốc cho MariaDB bằng lệnh 'mysql_secure_installation'.
Mã:
mysql_secure_installation
Đặt mật khẩu gốc MariaDB của bạn.
Mã:
Đặt mật khẩu gốc? [Y/n] Y
Mật khẩu mới:
Nhập lại mật khẩu mới:
 
Xóa người dùng ẩn danh? [Y/n] Y
Không cho phép đăng nhập gốc từ xa? [Y/n] Y
Xóa cơ sở dữ liệu thử nghiệm và quyền truy cập vào cơ sở dữ liệu đó? [Y/n] Y
Tải lại bảng đặc quyền ngay bây giờ? [Y/n] Y
Nếu mọi thứ đã xong, bạn có thể thử kết nối với MySQL shell và người dùng root.
Mã:
mysql -u root -p
NHẬP MẬT KHẨU GỐC CỦA BẠN
Bạn sẽ thấy MySQL shell.

Tiếp theo, chúng ta cần tạo một cơ sở dữ liệu mới và một người dùng mới cho Invoice Ninja trong MySQL shell mà chúng ta đã mở. Chúng ta sẽ tạo một cơ sở dữ liệu mới có tên là 'ninjadb', một người dùng mới 'ninja' với mật khẩu 'aqwe123'. Vui lòng chọn một mật khẩu an toàn khác cho quá trình cài đặt của bạn.

Tạo mọi thứ bằng các truy vấn MySQL bên dưới: tạo cơ sở dữ liệu mới, tạo người dùng và mật khẩu mới, cấp quyền truy cập cơ sở dữ liệu cho người dùng mới bằng mật khẩu.
Mã:
create database ninjadb;
create user ninja@localhost defined by 'aqwe123';
grant all privileges on ninjadb.* to ninja@localhost defined by 'aqwe123';
flush privileges;


MariaDB đã được cài đặt và cơ sở dữ liệu và người dùng mới cho Invoice Ninja đã được tạo.

Bước 3 - Cài đặt và cấu hình PHP7.0-FPM​

Invoice Ninja dựa trên PHP, vì vậy chúng ta cần cài đặt nó trên hệ thống. Tôi sẽ sử dụng PHP7.0-FPM để cài đặt Invoice Ninja.

Không có PHP7.0 trong kho lưu trữ mặc định của CentOS, vì vậy chúng ta cần thêm kho lưu trữ PHP7.0 mới vào hệ thống. Tôi sẽ sử dụng kho lưu trữ webtatic.

Thêm kho lưu trữ PHP7.0 vào hệ thống.
Mã:
rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm
Bây giờ bạn có thể cài đặt PHP7.0-FPM và các tiện ích mở rộng PHP khác mà Invoice Ninja cần từ kho lưu trữ webtatic.
Mã:
yum -y install php70w-fpm php70w-cli php70w-pear php70w-gd php70w-xml php70w-mysql php70w-zip php70w-mbstring php70w-mcrypt php70w-curl php70w-gmp php70w-pdo
Khi quá trình cài đặt hoàn tất, hãy chỉnh sửa tệp cấu hình php.ini bằng vim.
Mã:
vim /etc/php.ini
Bỏ chú thích dòng cgi.fix_pathinfo bên dưới và thay đổi giá trị thành 0.
Mã:
cgi.fix_pathinfo=0
Lưu tệp và thoát vim.

Sau đó chỉnh sửa tệp cấu hình PHP-FPM.
Mã:
vim /etc/php-fpm.d/www.conf
Thay đổi người dùng và nhóm ở dòng 8 và 10 thành nhóm 'nginx'.
Mã:
user = nginx
group = nginx
Thay vì cổng, chúng ta sẽ sử dụng tệp socket cho php-fpm. Đổi dòng listen thành '/var/run/php/php-fpm.sock'.
Mã:
listen = /var/run/php/php-fpm.sock
Bỏ chú thích cấu hình tệp socket, chủ sở hữu, nhóm và quyền.
Mã:
listen.owner = nginx
listen.group = nginx
listen.mode = 0660
Bỏ chú thích biến môi trường php-fpm ở dòng 366-370.
Mã:
env[HOSTNAME] = $HOSTNAME
env[PATH] = /usr/local/bin:/usr/bin:/bin
env[TMP] = /tmp
env[TMPDIR] = /tmp
env[TEMP] = /tmp
Lưu tệp và thoát khỏi trình chỉnh sửa.

Bây giờ chúng ta cần tạo một thư mục phiên PHP mới và thay đổi chủ sở hữu thành người dùng và nhóm nginx.
Mã:
mkdir -p /var/lib/php/session
chown -R nginx:nginx /var/lib/php/session/
Tạo một thư mục mới cho tệp socket và thay đổi quyền thành người dùng và nhóm nginx.
Mã:
mkdir -p /var/run/php/
chown -R nginx:nginx /var/run/php/
Tiếp theo, khởi động PHP7.0-FPM và thêm nó để bắt đầu khi khởi động.
Mã:
systemctl start php-fpm
systemctl enable php-fpm


PHP-FPM đã được khởi động. Bây giờ bạn có thể kiểm tra bằng lệnh bên dưới và bạn sẽ thấy tệp socket PHP.
Mã:
netstat -pl
PHP7.0-FPM và tất cả các tiện ích mở rộng cần thiết cho Invoice Ninja đã được cài đặt.

Bước 4 - Cài đặt và cấu hình Invoice Ninja​

Trong bước này, chúng ta sẽ tải xuống và cấu hình Invoice Ninja. Trước tiên, hãy cài đặt unzip trên hệ thống của bạn.
Mã:
yum -y install unzip
Tạo một thư mục mới cho các tệp webroot của Invoice Ninja.
Mã:
mkdir -p /var/www/
cd /var/www/
Tải xuống Invoice Ninja bằng lệnh wget.
Mã:
wget https://download.invoiceninja.com/ninja-v3.1.0.zip
Giải nén tệp zip Invoice Ninja và đi đến thư mục 'ninja'.
Mã:
unzip ninja-v3.1.0.zip
cd ninja/
Đối với dự án Laravel, chúng ta cần cài đặt composer, một Trình quản lý phụ thuộc cho PHP.
Mã:
curl -sS https://getcomposer.org/installer | sudo php -- --install-dir=/usr/bin --filename=composer


Bây giờ bạn có thể sử dụng lệnh composer.

Tiếp theo, cài đặt các phụ thuộc Invoice Ninja bằng lệnh composer bên dưới.
Mã:
composer install --no-dev -o
  • --no-dev: Vô hiệu hóa cài đặt các gói require-dev.
  • -o: Tối ưu hóa trình nạp tự động trong quá trình dump trình nạp tự động.
Khi quá trình cài đặt phụ thuộc hoàn tất, hãy sao chép tệp .env và chỉnh sửa bằng vim.
Mã:
cp .env.example .env
vim .env
Thay đổi giá trị của cài đặt cơ sở dữ liệu bên dưới.
Mã:
DB_DATABASE=ninjadb
DB_USERNAME=ninja
DB_PASSWORD=aqwe123


Lưu và thoát.

Tiếp theo, chỉnh sửa cấu hình cơ sở dữ liệu trong thư mục config.
Mã:
vim config/database.php
Chúng tôi đang sử dụng cơ sở dữ liệu MariaDB/MySQL, hãy chuyển đến cài đặt MySQL ở dòng 55.
Mã:
'database' => env('DB_DATABASE', 'ninjadb'),
'username' => env('DB_USERNAME', 'ninja'),
'password' => env('DB_PASSWORD', 'aqwe123'),


Lưu và thoát.

Tất cả các tệp cấu hình được chỉnh sửa, tiếp theo chuẩn bị cơ sở dữ liệu bằng lệnh bên dưới.
Mã:
php artisan migrate
Bạn sẽ được yêu cầu chạy lệnh, nhập 'yes' và nhấn Enter.



Tiếp theo, gieo hạt giống cơ sở dữ liệu với tất cả các bản ghi.
Mã:
php artisan db:seed
Nhập 'yes' và nhấn Enter để xác nhận.



Tạo khóa ứng dụng.
Mã:
php artisan key:generate
Bạn sẽ thấy khóa ứng dụng.

Chỉnh sửa tệp app.php bằng vim.
Mã:
vim config/app.php
Đi đến dòng 85 của APP_KEY và dán khóa đã tạo (khóa bên dưới là ví dụ, sử dụng khóa mà bạn nhận được từ lệnh trên).
Mã:
'key' => env('APP_KEY', 'base64:0o5QLWbNeDCNer064+600Hl8oJ20OPCIymadKJQ1RGo='),
Lưu và thoát.

Cuối cùng, hãy thay đổi chủ sở hữu của thư mục '/var/www/ninja' thành người dùng và nhóm 'nginx'.
Mã:
cd /var/www/
chown -R nginx:nginx ninja/


Invoice Ninja đã được cấu hình và sẵn sàng để cài đặt.

Bước 5 - Cấu hình SSL và Máy chủ ảo​

Trong bước này, chúng ta sẽ tạo tệp Chứng chỉ SSL bằng lệnh openssl và tạo cấu hình máy chủ ảo mới cho Invoice Ninja. Nếu bạn đang sử dụng máy chủ trực tiếp, bạn cũng có thể sử dụng SSL miễn phí từ Let's Encrypt.

Tạo một thư mục 'cert' mới cho các tệp SSL.
Mã:
mkdir -p /etc/nginx/cert/
Chạy lệnh OpenSSL bên dưới để tạo các tệp chứng chỉ.
Mã:
openssl req -new -x509 -days 365 -nodes -out /etc/nginx/cert/ninja.crt -keyout /etc/nginx/cert/ninja.key
Thay đổi quyền của các tệp chứng chỉ thành '600'.
Mã:
chmod 600 /etc/nginx/cert/*


Tiếp theo, hãy đến thư mục Nginx và tạo một tệp cấu hình máy chủ ảo mới có tên là 'ninja.conf'.
Mã:
cd /etc/nginx/
vim conf.d/ninja.conf
Dán cấu hình máy chủ ảo bên dưới.
Mã:
server {
 # Tên miền của bạn - hakase-labs.co
 listen 80;
 server_name ninja.co www.ninja.co;
 
 # Viết lại chuyển hướng đến https
 add_header Strict-Transport-Security max-age=2592000;
 rewrite ^ https://$server_name$request_uri? vĩnh viễn;
}
 
máy chủ {
 # Tên miền của bạn - hakase-labs.co
 nghe 443 mặc định;
 tên_máy_chủ ninja.co www.ninja.co;
 
 # Bật SSL cho Invoice Ninja
 ssl bật;
 ssl_certificate /etc/nginx/cert/ninja.crt;
 ssl_certificate_key /etc/nginx/cert/ninja.key;
 ssl_session_timeout 5 phút;
 
 ssl_ciphers 'AES128+EECDH:AES128+EDH:!aNULL';
 ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
 ssl_prefer_server_ciphers bật;
 
 # Tệp gốc web Invoice Ninja
 root /var/www/ninja/public;
 
 index index.html index.htm index.php;
 
 charset utf-8;
 
 location / {
 try_files $uri $uri/ /index.php?$query_string;
 }
 
 location = /favicon.ico { access_log tắt; log_not_found tắt; }
 location = /robots.txt { access_log tắt; log_not_found tắt; }
 
 # Nhật ký truy cập và lỗi cho Invoice Ninja
 access_log /var/log/nginx/ininja.access.log;
 error_log /var/log/nginx/ininja.error.log;
 
 sendfile off;
 
 # Xử lý ứng dụng PHP
 location ~ \.php$ {
 fastcgi_split_path_info ^(.+\.php)(/.+)$;
 fastcgi_pass unix:/var/run/php/php-fpm.sock;
 fastcgi_index index.php;
 include fastcgi_params;
 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
 fastcgi_intercept_errors off;
 fastcgi_buffer_size 16k;
 fastcgi_buffers 4 16k;
 }
 
 location ~ /\.ht {
 deny all;
 }
}
Lưu và thoát.

Bây giờ hãy kiểm tra cấu hình Nginx và đảm bảo không có lỗi nào.
Mã:
nginx -t
Khởi động lại máy chủ web Nginx.
Mã:
systemctl restart nginx


Cấu hình máy chủ ảo Invoice Ninja đã được tạo.

Bước 6 - Cấu hình SELinux và Firewalld​

Nếu SELinux của bạn đã tắt, bạn có thể bỏ qua bước này và bắt đầu cấu hình Firewalld. Trong bước này, chúng ta sẽ cấu hình SELinux và Firewalld cho Invoice Ninja. Kiểm tra trạng thái SELinux của bạn và đảm bảo tường lửa đã được cài đặt.

Kiểm tra trạng thái SELinux bằng lệnh bên dưới.
Mã:
getenforce
Nếu SELinux của bạn đang bật, bạn sẽ thấy kết quả là 'Enforcing' hoặc 'Permissive'.

Bây giờ hãy cài đặt các công cụ quản lý SELinux từ kho lưu trữ.
Mã:
yum -y install policycoreutils-python
Và thực hiện các lệnh bên dưới để cho phép Invoice Ninja chạy dưới SELinux ở chế độ Enforcing.
Mã:
semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/ninja(/.*)?'
semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/ninja/public(/.*)?'
semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/ninja/storage(/.*)?'
quản lý ngữ cảnh fcontext -a -t httpd_sys_rw_content_t '/var/www/ninja/app(/.*)?'
quản lý ngữ cảnh fcontext -a -t httpd_sys_rw_content_t '/var/www/ninja/bootstrap(/.*)?'
quản lý ngữ cảnh fcontext -a -t httpd_sys_rw_content_t '/var/www/ninja/config(/.*)?'
quản lý ngữ cảnh fcontext -a -t httpd_sys_rw_content_t '/var/www/ninja/database(/.*)?'
quản lý ngữ cảnh fcontext -a -t httpd_sys_rw_content_t '/var/www/ninja/resources(/.*)?'
quản lý ngữ cảnh fcontext -a -t httpd_sys_rw_content_t '/var/www/ninja/vendor(/.*)?'
semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/ninja/tests(/.*)?'
restorecon -Rv '/var/www/ninja/'
Tiếp theo, chúng ta cần mở cổng máy chủ để có thể truy cập Invoice Ninja từ bên ngoài.

Đảm bảo firewalld đã được cài đặt trên hệ thống của bạn hoặc bạn có thể cài đặt bằng lệnh yum.
Mã:
yum -y install firewalld
Khởi động firewalld và cho phép nó khởi động vào thời gian khởi động.
Mã:
systemctl start firewalld
systemctl enable firewalld
Bây giờ chúng ta cần mở cổng HTTP và HTTPS cho Invoice Ninja. Chạy các lệnh bên dưới để mở các cổng.
Mã:
firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --add-service=https
firewall-cmd --reload
SELinux và Firewalld đã được cấu hình.

Bước 7 - Kiểm tra​

Mở trình duyệt web của bạn và nhập URL Invoice Ninja, trong trường hợp của tôi là: ninja.co.

Bạn sẽ được chuyển hướng đến kết nối https và trang thiết lập.



Nhập thông tin cấu hình được yêu cầu, Cài đặt ứng dụng, Kết nối cơ sở dữ liệu, Cài đặt email, Chi tiết người dùng và kiểm tra TOS của Invoice Ninja.



Nhấp vào 'Gửi' và bạn sẽ được chuyển hướng đến trang đăng nhập của Invoice Ninja.



Nhập email và mật khẩu của bạn, sau đó nhấn 'ĐĂNG NHẬP'.



Bạn sẽ thấy Bảng điều khiển Invoice Ninja.



Trang cài đặt Invoice Ninja.



Invoice Ninja đã được cài đặt với Nginx và MariaDB trên CentOS 7.

Tài liệu tham khảo​

 
Back
Bên trên