Triển khai EzyPlatform trên Ubuntu

Cập nhật lúc 1769779898000
EzyPlatform có thể triển khai trên các hệ điều hành khác nhau, tuy nhiên tốt nhất và là các hệ điều hành linux như ubuntu hay centos để đảm bảo khả năng khởi động lại một cách tự động. Ở đây tôi sẽ sử dụng hệ điều hành ubuntu .

Cấu hình tối thiểu

  • 1 core CPU.
  • 2GB RAM.

Cấu hình đề xuất

  • 2 core CPU
  • 4GB RAM.

Truy cập vào máy chủ

Ví dụ bạn có máy chủ với địa chỉ ip v4 là 102.74.182.23 đang mở cổng ssh là 22, có tài khoản truy cập là root và mật khẩu là 12345678. Bạn có thể dùng lệnh sau để truy cập vào máy chủ:
ssh root@102.74.182.23
Nhấn Enter sau đó bạn nhập mật khẩu 12345678 là truy cập được.

Bổ sung ssh public keys

Lần nào cũng phải ruy cập qua mật khẩu khá rườm rà nên bạn có thể bổ sung ssh public keys để đăng nhập cho tiện.
mkdir -p ~/.ssh
nano ~/.ssh/authorized_keys
# add key và close

Thay đổi timezone

timedatectl list-timezones | grep <keyword>
sudo timedatectl set-timezone your_time_zone
timedatectl

Cài đặt tường lửa

Lưu ý chỉ cần cài cho những loại server hoặc vps mà nhà cung cấp chưa có dịch vụ tường lửa.
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow ssh
sudo ufw enable
sudo ufw allow http
sudo ufw allow https
Nếu ứng dụng của bạn có sử dụng socket và websocket, bạn sẽ cần mở thêm các port.
  1. 3005 cho socket
  2. 2208 nếu bạn chỉ sử dụng ws.
  3. 2812 nếu bạn sử dụng wss.
  4. 2611 nếu bạn sử dụng udp.
sudo ufw allow 3005
sudo ufw allow 2208
sudo ufw allow 2812
sudo ufw allow 2611/udp

Cài đặt mysql

sudo apt update
sudo apt install mysql-server
sudo systemctl start mysql.service

Cấu hình mysql

sudo mysql
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '<new password>';
exit
mysql -u root -p
ALTER USER 'root'@'localhost' IDENTIFIED WITH auth_socket;
exit
sudo mysql_secure_installation
Bạn có thể sử dụng công cụ này để tạo mật khẩu ngẫu nhiên.

Tạo database

CREATE SCHEMA `new_schema` DEFAULT CHARACTER SET utf8 COLLATE utf8_bin ;
Tạo user mới, ví dụ:
CREATE USER '<username>'@'localhost' IDENTIFIED BY '<password>';
GRANT ALL PRIVILEGES ON new_schema . * TO '<username>'@'localhost';

Cài đặt nginx

sudo apt update
sudo apt install nginx
systemctl status nginx
Khởi động lại nginx:
sudo systemctl stop nginx
sudo systemctl start nginx
sudo systemctl restart nginx
sudo systemctl reload nginx
Xoá file default tại 2 thư mục /etc/nginx/sites-enabled/etc/nginx/sites-available.
Di chuyển vào thư mục /etc/nginx/sites-enabled và tạo lần lượt 2 file cho site public và site admin.
Site public, ví dụ <host name>:
server {
    server_name <host name>;

    location / {
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header Host $http_host;
        proxy_pass "http://127.0.0.1:8080";
        client_max_body_size 50M;
    }
}
Nếu bạn muốn thêm Cache-Control header cho web bạn có thể bổ sung:
location ~* \.(css|js|woff|woff2|ttf|gif|jpg|jpeg|png|svg|webp)$ {
        expires 1h;
        add_header Cache-Control "public, max-age=3600";
        proxy_pass "http://127.0.0.1:8080";
}
Nếu bạn muốn chỉ định trình duyệt cache cả các tập tin âm thanh và video, bạn có thể bổ sung:
location ~* .(mp3|mp4|ogg)$ {
        expires 24h;
        add_header Cache-Control "public, max-age=86400";
        add_header Accept-Ranges bytes;
        proxy_pass "http://127.0.0.1:8080";
}
Nêu website của bạn cho phép người dùng upload, bạn có thể bổ sung:
location /api/v1/media/add {
    proxy_pass http://127.0.0.1:8080;
    proxy_http_version 1.1;
    proxy_set_header Host              $host;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header X-Forwarded-For   $proxy_add_x_forwarded_for;

    proxy_request_buffering off;
    proxy_buffering off;
    client_max_body_size 100M;
}
Site admin, ví dụ admin.<host name>:
server {
    server_name admin.<host name>;

    location / {
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header Host $http_host;
        proxy_pass "http://127.0.0.1:9090";
        client_max_body_size 100M;
    }

    location /api/v1/media/add {
        proxy_pass http://127.0.0.1:9090;
        proxy_http_version 1.1;
        proxy_set_header Host              $host;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Forwarded-For   $proxy_add_x_forwarded_for;

        proxy_request_buffering off;
        proxy_buffering off;
        client_max_body_size 100M;
    }
}
Nếu bạn muốn thêm Cache-Control header cho admin bạn có thể bổ sung:
location ~* \.(css|js|woff|woff2|ttf|gif|jpg|jpeg|png|webp)$ {
        expires 24h;
        proxy_pass "http://127.0.0.1:9090";
}
Kiểm tra cấu hình nginx: sudo nginx -t, nếu hiển thị thế này thì ok.
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

sudo systemctl reload nginx

Cài đặt certbot

sudo apt install certbot python3-certbot-nginx
sudo certbot
Sau khi sử dụng certbot xong có thể file cấu hình sẽ bị thay đổi thế này:
server {
    server_name admin.tvd12.com;

    location / {
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_set_header Host $http_host;
        proxy_pass "http://127.0.0.1:9090";
        client_max_body_size 100M;
    }

    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/tvd12.com/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/tvd12.com/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

}
Bây giờ bạn có thể khởi động lại nginx: sudo systemctl reload nginx.

Cài đặt JDK 8

sudo apt update
java -version
Chạy 2 câu lệnh này sẽ hiển thị ra danh sách cái cài đặt của java.
apt install default-jre            
apt install openjdk-11-jre-headless
apt install openjdk-8-jre-headless 
apt install openjdk-9-jre-headless
Chọn apt install openjdk-8-jre-headless.
Cài đặt JAVA_HOME, sử dụng vim để thêm biến vào .bash_profile. Bạn có thể mở file này bằng lệnh:
vi ~/.bash_profile
Sau đó bạn nhấn phím i để chuyển sang chế độ sửa, bạn dán dòng sau vào file:
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-amd64
Tiếp theo bạn nhấn Esc, nhấn Shift + : sau đó nhấn tiếp phím xEnter để thoát trình soạn thảo vim.
Sau đó chạy: source ~/.bash_profile để áp dụng.

Cài đặt ezyplatform

Bạn có thể tải bản mới nhất từ Home về sau đó sử dụng công cụ để copy lên server, hoặc là sử dụng wgetinspect nút download tại Home để lấy bản mới nhất, ví dụ:
wget https://ezyplatform.com/api/v1/platforms/1.0.4/download && mv download ezyplatform.zip
Sau đó unzip file: unzip ezyplatform.zip.
Tìm đến folder ezyplatform/settings và thay đổi file setup.properties (ví dụ: nano settings/setup.properties) với các thông tin cơ sở dữ liệu bạn đã tạo trước đó, ví dụ:
datasource.jdbc_url=jdbc:mysql://localhost:3306/<databaseName>
datasource.driver_class_name=com.mysql.cj.jdbc.Driver
datasource.username=<username>
datasource.password=<password>
tables.create_manually=false
Bắt đầu hãy start bằng chế độ console trước để xem có lỗi gì không:
bash cli.sh "console admin"
Nếu bạn thấy ở console in ra EZHTTP READYvà không có exception gì nghĩa là việc khởi động đã thành công.
Từ đây hãy giả sử website tôi đang cần tạo là tvd12.com hãy mở trình duyệt và mở lên: https://admin.tvd12.com/setup-admin bạn sẽ thấy màn hình để setup:
setup-ezyplatform.png
Hãy cài đặt các thông tin cần thiết và submit, sau đó màn hình home sẽ hiển thị ra:
ezyplatform-home.png
Hãy đảm bảo bạn đã tắt hết các website của ezyplatform ở localhost đang chạy đi và xoá bỏ toàn bộ cookie.
Di chuyển vào Dashboard > Admin và cập nhật Admin URLAdmin Properties, ví dụ:
ezyplatform-admin.png
https://admin.tvd12.com
cors.allowed_origins=https://admin.tvd12.com
cors.enable=true
server.host=0.0.0.0
server.multipart.file_size_threshold=100MB
server.multipart.max_file_size=100MB
server.multipart.max_request_size=100MB
server.port=9090
Bây giờ hãy tắt chế độ console nhấn Ctrl+C đi và bạn sẽ start bằng chế độ background:
bash cli.sh "start admin" ; tail -f logs/admin-server.log
Đợi khoảng 10, 15 giây cho server khởi động xong, trở lại trình duyệt, chọn vào Dashboard > Web. Hãy cập nhật Web URLWeb properties, ví dụ:
ezyplatform-web.png
https://tvd12.com
cors.allowed_origins=https://tvd12.com,https://admin.tvd12.com
cors.enable=true
management.enable=true
management.port=18080
management.uris_expose=true
resources.enable=true
resources.locations=static
resources.upload.enable=true
server.allow_override_uri=true
server.host=0.0.0.0
server.multipart.file_size_threshold=100MB
server.multipart.max_file_size=100MB
server.multipart.max_request_size=100MB
server.port=8080
Sau đó nhấn vào nút start. Đợi 10, 15 giây và bạn có thể truy cập: https://tvd12.com.

Cài đặt SSL cho socket

Nếu bạn không sử dụng đến socket hoặc bạn đang ở localhost, bạn có thể bỏ qua bước này.
  1. Bạn có thể xem hướng dẫn tạo file keystore tại đây.
  2. Sau khi đã có file keystore, bạn có thể upload và set mật khẩu tại: Dashboard > Socket > SSL configuration.
Vậy là bạn đã triển khai ezyplatform thành công trên server ubuntu, tiếp theo bạn có thể cài đặt các theme và plugin theo ý thích của bạn.

Đối với Java phiên bản từ 17 trở lên

Bạn sẽ cần tạo tập tin vm-options.txt có nội dung như sau:
--add-opens java.base/java.lang=ALL-UNNAMED
Vào các thư mục admin, socket, web bên trong ezyplatform, sau đó khởi động ezyplatform bằng lệnh:
bash cli.sh "start admin" ; tail -f logs/admin-server.log
Nếu ezyplatform không khởi động được, bạn có thể chạy lệnh:
bash cli.sh "console admin"
Để có thông tin lỗi.

Mục lục