Triển khai Static Web (Nâng cao)
Đ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?
Với cách thức triển khai Static Web nâng cao bạn có thể tự định nghĩa cấu hình của Webserver mà bạn muốn chạy thông qua file cấu hình .conf.
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.
App Engine hỗ trợ 2 loại web server để chạy các static web là Nginx và Apache(httpd). Bạn cần chọn 1 trong 2 để chạy web của bạn.
Lưu ý: Với cách thức triển khai Static Web dạng nâng cao, bạn cần chọn Service Type khi tạo Service là HTTP
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