真的是高手在民间,以前见过32M内存的服务器搭建博客,博主自己也在64M内存搭建过,最近见到一个更极致的,只有16MB!基本上运行系统就不错了,别说数据库和PHP等程序的占用了,这篇文章也等于是给出了一个超小内存搭建博客的一个思路。顺便,16MB搭建博客只是折腾,真要搭建一个个人博客还是建议选择更高规格的服务器会更好。
本文由三篇文章组成,博主进行了整理!
博客演示地址:https://16mb.tw/
Table of Contents
前言
昨天不知咋的逛到了32mb的网站上,突然想起了以前按照32mb的方法使用32MB小VPS搭建博客的日子,还是挺怀念的!
后来又想,在Proxmox中,最低的内存只允许到16MB,那么使用16MB内存的VPS是否可以搭建出一个个人博客呢?
于是,就有了康康这番闲得蛋疼的纯折腾!!!
系统安装
之前康康就说过撸了一台Hetzner
的独服,所以呢,这次的操作就在这台独服上咯!
独服已安装好Proxmox
环境,直接从官方提供的模板中就可以下载,大小才1.75MB,非常非常精简!
然后创建CT虚拟机(也就是LXC、OpenVZ),输入主机名称、root密码
选择LXC模板,这里康康用的不是Proxmox
官方的,而是自己制作的,与Proxmox
的区别就是康康把openssh
给装上了,而Proxmox
的没有安装,需要自己安装。
选择磁盘大小,这个看自己需求吧,反正我无需太多。
CPU核心,肯定只要1核心啊!
重头戏,内存设置,这里内存仅设置16MB
,而交换分区为普通推荐值,内存的两倍32MB
,其实交换分区设置为16MB
也可以,不过康康试过,那样的话会导致处理速度过慢,访问效果不理想,所以这里还是设置了32MB
。
接着配置下网络,Hetzner
的网络配置康康在上一篇文章里说过,这里就不重复了。
创建完成,可以看到虚拟机状况。
然后开机启动,接下来的操作就以命令行为主了!
环境搭建
由于使用的是Alpine
系统,这系统实在是太迷你了,同时操作方式与平常大家所用的CentOS
、Debian
、Ubuntu
等还是有所区别,所以呢,这里就将的稍微详细点!
系统更新
Alpine
初次使用得更新下,否则可能出现apk
命令无法使用的问题,更新前可以配置下更新源,选择最近的更新源,这样速度能快点。
Alpine
更新源列表:https://mirrors.alpinelinux.org/
更换更新源方法请参照中科大的说明:http://mirrors.ustc.edu.cn/help/alpine.html
系统更新:
apk update
安装PHP
接下来安装PHP,Alpine
上目前支持的最高版本是PHP 7.1,可惜不是7.2,所以只能将就了,其中php7-curl
默认无需安装,由于康康要使用LoveKKComment
插件,所以要安装下。
apk add php7 php7-fpm php7-opcache php7-ctype php7-pdo_sqlite php7-session php7-curl
PHP7配置
PHP7的配置文件位于 /etc/php7/php.ini
,咱们随便配置下。
cd /etc/php7
sed -i "s@^memory_limit.*@memory_limit = 2M@" php.ini
sed -i 's@^output_buffering =@output_buffering = On\noutput_buffering =@' php.ini
sed -i 's@^;cgi.fix_pathinfo.*@cgi.fix_pathinfo=1@' php.ini
sed -i 's@^short_open_tag = Off@short_open_tag = On@' php.ini
sed -i 's@^expose_php = On@expose_php = Off@' php.ini
sed -i 's@^request_order.*@request_order = "CGP"@' php.ini
sed -i 's@^;date.timezone.*@date.timezone = Asia/Shanghai@' php.ini
sed -i 's@^post_max_size.*@post_max_size = 100M@' php.ini
sed -i 's@^upload_max_filesize.*@upload_max_filesize = 50M@' php.ini
sed -i 's@^max_execution_time.*@max_execution_time = 600@' php.ini
sed -i 's@^;realpath_cache_size.*@realpath_cache_size = 2M@' php.ini
sed -i 's@^disable_functions.*@disable_functions = passthru,exec,system,chroot,chgrp,chown,shell_exec,proc_open,proc_get_status,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,stream_socket_server,fsocket,popen@' php.ini
fpm配置
php-fpm的配置文件位于 /etc/php7/php-fpm.conf
,咱们直接重新编写一个新文件。
mv /etc/php7/php-fpm.conf /etc/php7/php-fpm.conf.bak
echo "[global]
pid = /data/run/php-fpm.pid
error_log = /data/log/php-fpm.log
log_level = warning
emergency_restart_threshold = 30
emergency_restart_interval = 60s
process_control_timeout = 5s
daemonize = yes
[www]
listen = /data/run/php-fpm.sock
listen.backlog = -1
listen.allowed_clients = 127.0.0.1
listen.owner = www
listen.group = www
listen.mode = 0666
user = www
group = www
pm = dynamic
pm.max_children = 3
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3
pm.max_requests = 8192
pm.process_idle_timeout = 10s
request_terminate_timeout = 120
request_slowlog_timeout = 0
pm.status_path = /php-fpm_status
slowlog = /data/log/slow.log
rlimit_files = 1200
rlimit_core = 0
catch_workers_output = yes
env[PATH] = /usr/local/bin:/usr/bin:/bin
env[TMP] = /tmp
env[TMPDIR] = /tmp
env[TEMP] = /tmp" > /etc/php7/php-fpm.conf
OK,PHP就算是安装配置完成了,不过暂时别启动,稍等会儿~
安装Caddy
Caddy
是一款使用Go
语言编写的Web服务器,很好用,自带Let's Encrypt
的支持,同时非常精简,就一个文件,极度节省系统资源,在咱们这16MB的小内存系统上,肯定是使用它来代替其他Web服务器咯!
Caddy
的安装也很简单,一条命令搞定:
apk add caddy
Caddy配置
Caddy
的配置文件位于 /etc/caddy/caddy.conf
,咱们简单配置下:
echo "16mb.tw {
gzip
tls admin@lovekk.org
root /data/www
fastcgi / /data/run/php-fpm.sock php
rewrite {
if {path} not_match ^\/admin
to {path} {path}/ /index.php?{query}
}
}" > /etc/caddy/caddy.conf
启动文件配置
由于康康在配置的时候指定了专门的目录来保存诸如pid
、sock
等文件,以及日志的路径等等,若不对启动文件进行相应配置,那么就会导致启动、停止出现问题,所以咱们更改下启动文件。
首先是PHP
的启动文件 /etc/init.d/php-fpm7
,更改 pidfile="/data/run/php-fpm.pid"
然后是Caddy
的启动文件 /etc/init.d/caddy
,更改 pidfile="/data/run/caddy.pid"
接着把启动项目加入到系统自启动中:
rc-update add caddy
rc-update add php-fpm7
博客创建
环境已经搭建好,不过咱们的博客还没弄呢!
首先创建如下目录
mkdir -p /data/run
mkdir -p /data/log
mkdir -p /data/www
接着到www
目录中下载Typecho
安装包
cd /data/www/
wget http://typecho.org/downloads/1.1-17.10.30-release.tar.gz
tar zxf 1.1-17.10.30-release.tar.gz
rm -f 1.1-17.10.30-release.tar.gz
cd build/
mv * ../
cd ..
rm -rf build/
最后配置下目录权限
chown -R caddy:caddy /data/www
OK,环境搭建完成了,接下来的就是直接按照正常的流程进行博客安装即可!
添加supervisord进程守护避免Caddy挂掉
刚才上来看,发现caddy竟然挂掉了,于是决定增加个进程监控,避免因各种原因导致Web进程挂掉。
apk add supervisord
mkdir /etc/supervisor.d/
supervisord的配置文件位于 /etc/supervisord.conf
,根据自己的需求更改下,默认也可以。
echo "[program:php]
user=root
command=/usr/sbin/php-fpm7 --nodaemonize --fpm-config /etc/php7/php-fpm.conf
startsecs=10
startretries=100
autorstart=true
autorestart=true" > /etc/supervisor.d/php.ini
echo "[program:caddy]
user=root
command=/usr/sbin/caddy -conf /etc/caddy/caddy.conf -log /data/log/caddy.log -agree
startsecs=10
startretries=100
autorstart=true
autorestart=true" > /etc/supervisor.d/caddy.ini
内存占用情况
一键脚本
为了方便以后的重复搭建,于是写了一个shell
脚本,脚本功能就是将当前运行的系统转换为Alpine
,并自动搭建Typecho
运行环境。
所有优化等配置调整均以16MB内存作为参照,大内存需要自己调整。
脚本只是为了自己以后搭建方便,并不保证脚本的安全性,且仅在LXC环境下测试过,若使用此脚本出现的任何问题,康康不承担任何责任哦!
项目地址:https://git.wskehao.com/ylqjgm/Alpine
使用方法:
wget --no-check-certificate https://git.wskehao.com/ylqjgm/Alpine/raw/branch/master/alpine.sh && chmod +x alpine.sh && ./alpine.sh
关注博客Telegram频道,获取更多资讯:https://t.me/zrj96
本文来自一个神奇的小站,经授权后发布,本文观点不代表初行博客立场,转载请联系原作者。
评论列表(9条)
所以一键脚本 root 密码多少 尴尬啦~
@夏目贵志:太老了,早就忘记了,小内存可以试试这个https://64mb.net/index.php/archives/44/
数据库怎么解决,异地数据库?
@tvoo:作者没提,以前在64M搭建过,sqlite好一些,mysql这种占用太高。
围观大佬
http://www.websoso.cn 企业搜索软件 想和贵站做个友情链接
你好,我是网站作者,因为目前域名已经更换了,是否能将文章中的域名也对应更换一下?
原16mb.cf已更换为16mb.tw,原16mb.cf做了301跳转。
是否能将本文中的16mb.cf更换为16mb.tw,谢谢了!
@康康:好的,我尽快更换。
@zrj766:非常感谢