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
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.
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:
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 bảo Nginx đang chạy bằng cách kiểm tra cổng được Nginx sử dụng (cổng 80).
Lưu ý:
Nếu lệnh netstat không tìm thấy, bạn có thể cài đặt net-tools như sau:
Khởi động dịch vụ themariadb và cho phép nó khởi động khi khởi động bằng lệnh systemctl.
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'.
Đặt mật khẩu gốc MariaDB của bạn.
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.
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.
MariaDB đã được cài đặt và cơ sở dữ liệu và người dùng mới cho Invoice Ninja đã được tạo.
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.
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.
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.
Bỏ chú thích dòng cgi.fix_pathinfo bên dưới và thay đổi giá trị thành 0.
Lưu tệp và thoát vim.
Sau đó chỉnh sửa tệp cấu hình PHP-FPM.
Thay đổi người dùng và nhóm ở dòng 8 và 10 thành nhóm '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'.
Bỏ chú thích cấu hình tệp socket, chủ sở hữu, nhóm và quyền.
Bỏ chú thích biến môi trường php-fpm ở dòng 366-370.
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.
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.
Tiếp theo, khởi động PHP7.0-FPM và thêm nó để bắt đầu khi khởi động.
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.
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.
Tạo một thư mục mới cho các tệp webroot của Invoice Ninja.
Tải xuống Invoice Ninja bằng lệnh wget.
Giải nén tệp zip Invoice Ninja và đi đến thư mục '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.
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.
Thay đổi giá trị của cài đặt cơ sở dữ liệu bên dưới.
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.
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.
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.
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.
Nhập 'yes' và nhấn Enter để xác nhận.
Tạo khóa ứng dụng.
Bạn sẽ thấy khóa ứng dụng.
Chỉnh sửa tệp app.php bằng vim.
Đ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).
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'.
Invoice Ninja đã được cấu hình và sẵn sàng để cài đặt.
Tạo một thư mục 'cert' mới cho các tệp SSL.
Chạy lệnh OpenSSL bên dưới để tạo các tệp chứng chỉ.
Thay đổi quyền của các tệp chứng chỉ thành '600'.
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'.
Dán cấu hình máy chủ ảo bên dưới.
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.
Khởi động lại máy chủ web Nginx.
Cấu hình máy chủ ảo Invoice Ninja đã được tạo.
Kiểm tra trạng thái SELinux bằng lệnh bên dưới.
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ữ.
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.
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.
Khởi động firewalld và cho phép nó khởi động vào thời gian khởi động.
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.
SELinux và Firewalld đã được cấu hình.
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.
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]
Mã:
yum -y install epel-release
Mã:
yum -y install nginx
Mã:
systemctl start nginx
systemctl enable nginx
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
Mã:
systemctl start mariadb
systemctl enable mariadb
Mã:
mysql_secure_installation
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
Mã:
mysql -u root -p
NHẬP MẬT KHẨU GỐC CỦA BẠN
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
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
Mã:
vim /etc/php.ini
Mã:
cgi.fix_pathinfo=0
Sau đó chỉnh sửa tệp cấu hình PHP-FPM.
Mã:
vim /etc/php-fpm.d/www.conf
Mã:
user = nginx
group = nginx
Mã:
listen = /var/run/php/php-fpm.sock
Mã:
listen.owner = nginx
listen.group = nginx
listen.mode = 0660
Mã:
env[HOSTNAME] = $HOSTNAME
env[PATH] = /usr/local/bin:/usr/bin:/bin
env[TMP] = /tmp
env[TMPDIR] = /tmp
env[TEMP] = /tmp
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/
Mã:
mkdir -p /var/run/php/
chown -R nginx:nginx /var/run/php/
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
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
Mã:
mkdir -p /var/www/
cd /var/www/
Mã:
wget https://download.invoiceninja.com/ninja-v3.1.0.zip
Mã:
unzip ninja-v3.1.0.zip
cd ninja/
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.
Mã:
cp .env.example .env
vim .env
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
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
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
Tạo khóa ứng dụng.
Mã:
php artisan key:generate
Chỉnh sửa tệp app.php bằng vim.
Mã:
vim config/app.php
Mã:
'key' => env('APP_KEY', 'base64:0o5QLWbNeDCNer064+600Hl8oJ20OPCIymadKJQ1RGo='),
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/
Mã:
openssl req -new -x509 -days 365 -nodes -out /etc/nginx/cert/ninja.crt -keyout /etc/nginx/cert/ninja.key
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
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;
}
}
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
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
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
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/'
Đả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
Mã:
systemctl start firewalld
systemctl enable firewalld
Mã:
firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --add-service=https
firewall-cmd --reload
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.