菜鸟如何使用云服务器和Common Lisp从零建立个人网站

目录

1. 购买云服务器

我本人在腾讯云服务器,新用首单户第一年价格优惠,价格仅为99元一年。确实很便宜。根据腾讯云官网上的说明选择套餐即可, 当需要选择云服务器计算机系统时,需要重点关注一下,一般用于作网站服务器、应选择linux系列系统,我选择了较通用的centos系统

2. 云服务器初始化

云服务器在我这样的菜鸟看来就是一台远程控制的电脑,而租用一台远程电脑,则像极了10几年前上网吧, 只是这台电脑将长期属于你,所以你需要认真配置好它,而它除了用来当云端硬盘外,还可以用来作服务器建站等。

当成功购买云服务器后,云平台(如腾讯或阿里等)都会提供较傻瓜的远程控制功能,只要输入初始密码,就可以远程登录你的 云服务器桌面。是的,即使是安装了centos系统的云服务器,也预装了图形桌面,但是往往登录后非常卡顿。此时 你需要尝试并习惯远程登录到云服务器的命令行(command line或CLI)界面。就我所知,腾讯和阿里云平台都提供了 相关功能。

当然,这不够好。你需要学习使用ssh远程登录到云服务器的命令行终端。关于该操作的所有疑问,本人是从零摸索完成的,假定你也能顺利地从腾讯或阿里 云的官网文档搜索而解决。

3. 安装Common Lisp编程环境

Common Lisp是一种通用的编程语言,它非常酷,学习它你需要掌握最少的语法,但却能轻松地做到包括建立网站之类的很多事。 本文推荐的Common Lisp编程环境是sbcl+emacs+slime。 sbcl是Common Lisp语言的一个实现。你可以把它当作一个linux系统下的软件,而你可以通过如下终端命令来安装该软件。


	  sudo yum apt-install sbcl
      
安装完该两个程序后,你可以在终端键入程序名称以运行程序。 试试在sbcl中写代码:

	  (+ 1 1)
	  (if (> 3 2)
	  (print "Three is greater than two."))
      
恭喜你!已在云端成功安装了LISP语言环境。

emacs的安装同理。它是一个很受黑客欢迎的代码编辑器,关于emacs的基本操作知识你需要google。
现在需要安装slime了,它是一个emacs编辑器中的插件,用于在emacs中运行sbcl,相关的安装配置说明网络上已有很多,我只贴出我正在使用的几行配置代码。


	  (setq inferior-lisp-program "sbcl -K utf-8") 
	  ;;该路径也就是slime工具包的下载路径,本行代码使该路径在emacs中可见
	  (add-to-list 'load-path "/root/lisp-environment/slime-master/")  
	  ;;emacs启动时初始化slime
	  (require 'slime)    
	  (require 'slime-autoloads)    
	  (slime-setup '(slime-fancy))
      
在熟悉了emacs的快捷按键之后,你已经可以轻松地在云服务器上使用Common Lisp写代码了。

4. 安装Common Lisp web服务包库hunchentoot

在习惯了使用quicklisp安装lisp软件包后,才真正让我领略了Common Lisp语言编程的便捷。 我们马上要用到的web网络服务包名为hunchentoot,尽管名字很生僻,不妨碍我们分分钟安装和掌握它。 我们需要先安装quicklisp。你应该在谷歌搜索quicklisp并进入官网(我并不很清晰记得以下步骤,如果你发现你无法做到,请给我留言以索取帮助), 你从官网中获得一个setup.lisp文件,它将用于在sbcl中安装quicklisp。而你需要做的仅仅是在sbcl(也即slime)中执行代码:


	  (load "/path/to/setup.lisp")
      

根据相应的提示操作,你将成功安装quicklisp。 然后你就可以愉快地使用quicklisp以迅捷安装lisp软件包了。以下代码将安装hunchentoot并发布一个hello的网布到你的服务器对应的IP地址。


	;; 安装hunchentoot及多个常用的web编程软件包。
	(ql:quickload '(yason parenscript str cl-who cl-fad drakma hunchentoot hunchentoot-test cl-html-parse flexi-streams ))
	;; 定义一个包web,它引用了hunchentoot等软件包。
	(defpackage :web
        (:use :cl :cl-who :hunchentoot  :hunchentoot-test :parenscript))
	;; 进入web包
	(in-package :web)
	;; 启用一个对应于云服务器80端口的web网络服务端。
	(defvar *ac* (make-instance 'hunchentoot:easy-acceptor :port 80))
	(start *ac* )
	;;; 定义一个hello网页define-easy-handler 和remote-addr为hunchentoot包的函数,而format,get-universal-time为lisp内置函数。
	(define-easy-handler (hello :uri "/hello")
	(name)
	;;获取访问者的ip以存入变量name。
	(setf name (remote-addr *request*))
	(format nil "Hello world of Common Lisp via websiteYo, ~A!  The Lisp time is ~A."
		      name (get-universal-time)))
      

运行后你在任意联网的网络客户端(手机、PAD、计算机)即可访问该网页了,它的路径是"http://你的服务器的公网ip/hello"

HELLO网页示意图

此时,你最好顺便购买一个域名,并绑定到你的服务器IP,记得同步在工信部备案:)。