除卻域名的年費,我的博客站點是運行在云服務(wù)器上,如果沒有意外,維護的費用應(yīng)該是零。
云主機
云服務(wù)器我使用的是Google Cloud,谷歌云應(yīng)該是目前唯一一個承諾提供永遠(yuǎn)免費 Always Free
選項的云服務(wù)器提供商,其它云服務(wù)商應(yīng)該只提供12個月免費使用選項給新用戶。
當(dāng)然,谷歌云提供的永遠(yuǎn)免費
選項僅能是使用一個性能超弱的實例:
- 處于美國的機房
- 單個共享的CPU核心
- 600M的內(nèi)存
- 30G的存儲
性能可能還比不上一個樹莓派,但也已經(jīng)足夠讓我用來跑一個網(wǎng)站。
環(huán)境
操作系統(tǒng)我為方便使用了:Ubuntu 18.04 LTS
數(shù)據(jù)庫
數(shù)據(jù)庫因故使用 MySql 8.0,但這直接在apt-get install mysql-server
之后報錯,看/var/log/mysql/error.log
,顯示:
2018-08-12T17:55:07.393408Z 0 [System] [MY-013170] [Server] /usr/sbin/mysqld (mysqld 8.0.12) initializing of server has completed
2018-08-12T17:55:11.130992Z 0 [System] [MY-010116] [Server] /usr/sbin/mysqld (mysqld 8.0.12) starting as process 3112
2018-08-12T17:55:11.782754Z 0 [ERROR] [MY-012681] [InnoDB] InnoDB: mmap(137428992 bytes) failed; errno 12
2018-08-12T17:55:11.782817Z 1 [ERROR] [MY-012956] [InnoDB] InnoDB: Cannot allocate memory for the buffer pool
2018-08-12T17:55:11.782832Z 1 [ERROR] [MY-012930] [InnoDB] InnoDB: Plugin initialization aborted with error Generic error.
2018-08-12T17:55:11.782886Z 1 [ERROR] [MY-010334] [Server] Failed to initialize DD Storage Engine
2018-08-12T17:55:11.784009Z 0 [ERROR] [MY-010020] [Server] Data Dictionary initialization failed.
2018-08-12T17:55:11.784055Z 0 [ERROR] [MY-010119] [Server] Aborting
2018-08-12T17:55:11.789921Z 0 [System] [MY-010910] [Server] /usr/sbin/mysqld: Shutdown complete (mysqld 8.0.12) MySQL Community Server - GPL.
2018-08-12T17:56:06.388162Z 0 [System] [MY-010116] [Server] /usr/sbin/mysqld (mysqld 8.0.12) starting as process 3276
2018-08-12T17:56:07.253414Z 0 [ERROR] [MY-012681] [InnoDB] InnoDB: mmap(137428992 bytes) failed; errno 12
2018-08-12T17:56:07.253518Z 1 [ERROR] [MY-012956] [InnoDB] InnoDB: Cannot allocate memory for the buffer pool
2018-08-12T17:56:07.253535Z 1 [ERROR] [MY-012930] [InnoDB] InnoDB: Plugin initialization aborted with error Generic error.
2018-08-12T17:56:07.253564Z 1 [ERROR] [MY-010334] [Server] Failed to initialize DD Storage Engine
2018-08-12T17:56:07.255109Z 0 [ERROR] [MY-010020] [Server] Data Dictionary initialization failed.
2018-08-12T17:56:07.255993Z 0 [ERROR] [MY-010119] [Server] Aborting
2018-08-12T17:56:07.320087Z 0 [System] [MY-010910] [Server] /usr/sbin/mysqld: Shutdown complete (mysqld 8.0.12) MySQL Community Server - GPL.
直接內(nèi)存不足,mysqld無法啟動。
只好修改/etc/mysql/mysql.conf.d/mysqld.cnf
文件,在結(jié)尾增加:
performance_schema = off
一行,禁用performance_schema
節(jié)省內(nèi)存占用,mysql才得以正常啟動。
nginx
當(dāng)然,也還需要nginx,直接 apt-get install nginx
即可。
應(yīng)用
整個網(wǎng)站應(yīng)用我是使用go編寫,并且使用gorazor、esc等工具將用到的模板、靜態(tài)資源文件等到打包進可執(zhí)行文件中。
整個程序運行時占用不到20M內(nèi)存,還有百余兆空余內(nèi)存:
$ cat /proc/16537/status
Name: goblog
Umask: 0002
State: S (sleeping)
Tgid: 16537
Ngid: 0
Pid: 16537
PPid: 16403
TracerPid: 0
Uid: 1001 1001 1001 1001
Gid: 1002 1002 1002 1002
FDSize: 256
Groups: 4 20 24 25 29 30 44 46 108 114 1000 1001 1002
NStgid: 16537
NSpid: 16537
NSpgid: 16537
NSsid: 16403
VmPeak: 16820 kB
VmSize: 16820 kB
VmLck: 0 kB
VmPin: 0 kB
VmHWM: 13356 kB
VmRSS: 9564 kB
RssAnon: 5720 kB
RssFile: 3844 kB
RssShmem: 0 kB
VmData: 8920 kB
VmStk: 132 kB
VmExe: 4320 kB
VmLib: 8 kB
VmPTE: 80 kB
VmSwap: 0 kB
$ free -h
total used free shared buff/cache available
Mem: 581M 352M 66M 900K 162M 135M
Swap: 0B 0B 0B
流量
谷歌云服務(wù)的免費實例運行時不收錢,但實例跑網(wǎng)站產(chǎn)生的流量可能是需要錢的,比方說,從中國、澳洲產(chǎn)生的訪問流量則完全不免費。
怎么辦?
在網(wǎng)站前面直接再套一個cloudflare的CDN,cloudflare有提供免費的CDN供個人站點使用!
cloudflare溯源去谷歌云的話,顯然也不可能走中國、澳洲的流量。
總結(jié)
這樣,我們就可以安安靜靜的近乎永久免費的跑一個網(wǎng)站了。