Triển khai ứng dụng Static web

Điều kiện tiên quyết

  • Bạn cần có tài khoản tại BizflyCloud và tài khoản này có quyền sử dụng App Engine.
  • Tài khoản của bạn chưa đạt ngưỡng giới hạn về tài nguyên.

App Engine triển khai ứng dụng Static web của bạn thế nào?

App Engine sẽ đóng gói source code của bạn và triển khai lên trên hạ tầng của BizflyCloud mà không cần yêu cầu hành động gì thêm.

App Engine hỗ trợ 2 loại web server để chạy các static web là NginxApache(httpd). Bạn cần chọn 1 trong 2 để chạy web của bạn.

Nginx

Để App Engine phát hiện được loại static web Nginx bạn cần có 2 file:

  • nginx.conf: Đây là file chưa cấu hình nginx server của bạn. Bạn có thể thay đổi các cấu hình về Port, logs, số connections,… tại file này.
  • mime.types: File này định nghĩa loại thông tin mà tệp chứa.

Một số cấu hình trong file nginx.conf

worker_processes 1;                                 ### Số worker server nginx
daemon off;

error_log stderr;
events { worker_connections 1024; }

http {
  charset utf-8;
  log_format cnb 'NginxLog "$request" $status $body_bytes_sent';
  access_log /dev/stdout cnb;                       ### Địa chỉ đầu ra của access log
  default_type application/octet-stream;
  include mime.types;
  sendfile on;

  tcp_nopush on;
  keepalive_timeout 30;
  port_in_redirect off;

  server {
    listen {{port}};                                ### Port mà nginx sẽ chạy, khai báo {{port}} sẽ lấy giá trị trong biến môi trường port
    root public;                                    ### root folder, folder chứa source code của website
    index index.html index.htm Default.htm;         ### Khai báo tên file index
  }
}

Tham khảo file mẫu tại: https://github.com/bizflycloud/app-engine-samples-code/tree/master/web-server/nginx-sample

Apache - HTTPD

Để App Engine phát hiện được loại static web Apache bạn cần có file:

  • httpd.conf: Đây là file chưa cấu hình apache server của bạn. Bạn có thể thay đổi các cấu hình về Port, logs, số connections, các module sẽ sử dụng… tại file này.

Một số cấu hình trong file httpd.conf

ServerRoot "${SERVER_ROOT}"                         ### Đường dẫn tới apache executable file
Listen "${PORT}"                                    ### Port mà httpd sẽ chạy
ServerAdmin "test@example.com"
ServerName "0.0.0.0"                                
DocumentRoot "${APP_ROOT}/htdocs"                   ### Địa chỉ tới thư mục chứa source code của bạn

LoadModule authz_core_module modules/mod_authz_core.so
LoadModule authz_host_module modules/mod_authz_host.so
LoadModule log_config_module modules/mod_log_config.so
LoadModule env_module modules/mod_env.so
LoadModule setenvif_module modules/mod_setenvif.so
LoadModule dir_module modules/mod_dir.so
LoadModule mime_module modules/mod_mime.so
LoadModule reqtimeout_module modules/mod_reqtimeout.so
LoadModule unixd_module modules/mod_unixd.so
LoadModule mpm_event_module modules/mod_mpm_event.so
LoadModule remoteip_module modules/mod_remoteip.so
LoadModule rewrite_module modules/mod_rewrite.so
LoadModule filter_module modules/mod_filter.so
LoadModule deflate_module modules/mod_deflate.so
LoadModule headers_module modules/mod_headers.so

<Directory />
    AllowOverride none
    Require all denied
</Directory>

<Directory "${APP_ROOT}/htdocs">
    Options SymLinksIfOwnerMatch
    AllowOverride All
    Require all granted
</Directory>

<Files ".ht*">
    Require all denied
</Files>

<IfModule dir_module>
    DirectoryIndex index.html
</IfModule>
<IfModule mime_module>
    TypesConfig conf/mime.types
    AddType application/x-compress .Z
    AddType application/x-gzip .gz .tgz
</IfModule>

<IfModule filter_module>
<IfModule deflate_module>
AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript application/javascript
</IfModule>
</IfModule>

ErrorLog "/proc/self/fd/2"
LogLevel info
<IfModule log_config_module>
    LogFormat "%a %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
    LogFormat "%a %l %u %t \"%r\" %>s %b" common
    LogFormat "%a %l %u %t \"%r\" %>s %b vcap_request_id=%{X-Vcap-Request-Id}i peer_addr=%{c}a" extended
    <IfModule logio_module>
      LogFormat "%a %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio
    </IfModule>
    CustomLog "/proc/self/fd/1" extended
</IfModule>

<IfModule !mpm_netware_module>
    PidFile "logs/httpd.pid"
</IfModule>
<IfModule mpm_worker_module>
    StartServers             3
    MinSpareThreads         75
    MaxSpareThreads        250
    ThreadsPerChild         25
    MaxRequestWorkers      400
    MaxConnectionsPerChild   0
</IfModule>
<IfModule mpm_event_module>
    StartServers             3
    MinSpareThreads         75
    MaxSpareThreads        250
    ThreadsPerChild         25
    MaxRequestWorkers      400
    MaxConnectionsPerChild   0
</IfModule>
<IfModule !mpm_netware_module>
    MaxMemFree            2048
</IfModule>

Timeout 60
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 5
UseCanonicalName Off
UseCanonicalPhysicalPort Off
AccessFileName .htaccess
ServerTokens Prod
ServerSignature Off
HostnameLookups Off
EnableMMAP Off
EnableSendfile On
RequestReadTimeout header=20-40,MinRate=500 body=20,MinRate=500

# Adjust IP Address based on header set by proxy
#
RemoteIpHeader x-forwarded-for
RemoteIpInternalProxy 10.0.0.0/8 172.16.0.0/12 192.168.0.0/16

# Set HTTPS environment variable if we came in over secure
#  channel.
SetEnvIf x-forwarded-proto https HTTPS=on

<IfModule !mod_headers.c>
  LoadModule headers_module modules/mod_headers.so
</IfModule>

RequestHeader unset Proxy early

Tham khảo file mẫu tại: https://github.com/bizflycloud/app-engine-samples-code/tree/master/web-server/httpd-sample