使用512M内存的最便宜的VPS,运行在docker上的nginx + php + elasticsearch
我只有在Elasticsearch上遇到了困难,几乎没有接触过PHP和Nginx。
虚拟专用服务器
亚马逊光亮航 512MB计划
https://aws.amazon.com/jp/lightsail/
操作系统:亚马逊Linux
docker-compose.yml的翻译选项:
version: "2"
services:
# php-fpm
phpfpm:
build: ./phpfpm/
links:
- elastic
volumes:
- ./data:/var/www/html
mem_limit: 64m
# nginx
nginx:
build: ./nginx/
ports:
- 80:80
links:
- phpfpm
volumes:
- ./data:/var/www/html
mem_limit: 64m
# Elasticsearch
elastic:
image: docker.elastic.co/elasticsearch/elasticsearch:6.5.1
environment:
- cluster.name=docker-cluster
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
ulimits:
nproc:
soft: 4096
hard: 4096
memlock:
soft: 256000
hard: 256000
nofile:
soft: 65536
hard: 65536
mem_limit: 256m
memswap_limit: 2g
需要重点关注的是Elasticsearch的设置。由于需要相当多的机器资源,所以本来就不应该这样使用。
基本上是Elasticsearch的官方指南,根据这个指南做了一些调整得到了上述结果。
https://www.elastic.co/guide/en/elasticsearch/reference/current/docker.html
-
- プロセス数(nproc)は4096の確保が必須。確保しないとelasticsearchのヘルスチェックでfailしてコンテナが停止
-
- ファイルディスクリプタ(nofile)は65536の確保が必須。確保しないと(ry
-
- (memlockはmem_limitに合わせただけ。確保すべき値は不明)
-
- mem_limitはホストマシンのメモリの半分≒256mを確保。えいや〜
-
- memswap_limitで2Gを確保。えいや〜
-
- bootstrap.memory_lock: true の設定を使わない。true = スワッピングをさせない
- (当然Elasticsearchの公式では、パフォーマンスとノードの安定性のためにこの設定をtrueにするように言及している)
为了提高性能和节点稳定性,需要禁用交换操作。
如果不使用这样脆弱的机器,我觉得就不需要写上面的设置。(在我的本地电脑上不需要)