轻车熟路-搭建基础服务器(Docker)

以前念大学的时候,阿里云刚推出9.9学生价服务器,我立刻就买了,一折腾就是到毕业,也算是阿里云的老用户了,哈哈。

很多前后端初学者能够编写出一个网站,或者是静态页面,或者是简单的动态网站,或者是开源的商城等,但是仅仅会在本地运行,对内网、公网、域名的概念并不是很清晰,本篇博客介绍从购买域名、云服务器到端口管理、搭建环境、建立反向代理服务器、启动一个wordpress博客的过程。

1. 购买域名

首先打开万网( https://wanwang.aliyun.com )并登录阿里云账号,没有的话,先自行注册一个,完成实名认证。
输入自己喜欢的域名,加入清单

接着调到确认订单页,新用户会提示“创建新的信息模板”

勾选 我已阅读,理解并接受〔域名服务条款〕 然后点击立即购买,支付就可以了。

2. 购买云服务器

打开阿里云首页(https://www.aliyun.com),点最新活动,找到“云服务器特惠”

然后进入配置选择页面,选择自己想要的配置,根据自己的预算选择。注意选择合适的地区,我人在广州,所以我选择华南地域,新购的服务器将创建在华南,当然选别的地区也可以,只是访问延迟会大一丢丢,也不是大很多,如果是用作企业服务,那要看用户集中分布在哪个地区,进而选择。

选择好之后,进入确认订单页面,密码选项选择“创建后设置”,勾选《云服务器 ECS 服务条款》,支付即可

3. 访问云服务器

打开“云服务器管理控制台”https://ecs.console.aliyun.com,切换到实例列表,如果实例列表是空的,请选择你购买时相应的地区

因为刚刚没有设置服务器的密码,这里我们要创建密钥用于登录

创建完成后请一定下载私钥(pem格式的一个文件),您只有一次下载私钥的机会,这是你登录服务器的凭证,所以要妥善保管好。回到“密钥对管理”列表,点击绑定密钥对,从左侧选择刚刚购买的云服务器,确定

紧接着回到实例列表,勾选实例并点重启按钮,这一步可能会要求短信验证码验证

稍等大约1分钟即可完成重启,此时下载好远程连接工具,我喜欢使用xshell进行连接(下载地址),注意选择免费版本(Home & School user),然后到邮箱会收到下载链接

安装方式很简单,一直按下一步即可。安装好之后打开

现在输入我们的远程连接命令 ssh root@你的服务器公网IP ,IP的在下图这个位置

此时应该会弹出“SSH用户身份验证”框,点浏览按钮找到你之前现在的pem文件即可

如果出现类似这样的一行,那么恭喜你,成功登录了服务器

4. 开放80端口和443端口

回到云服务器管理控制台,点击“安全组”子页面,点击配置规则

像下图一样添加80端口和443端口的规则,0.0.0.0/0指所有IP(点这学习),简单的理解,安全组就是服务器的防火墙。

5. 在云服务器里安装软件

回到我们刚刚登录的xshell的界面
因为我们服务器安装的是Centos 7系统,该系统使用yum命令安装软件
顺序输入以下命令完成docker的安装:

  1. yum install -y docker //安装docker服务
  2. systemctl enable docker //让其能够开机自启
  3. systemctl start docker //启动docker服务
  4. pip install docker-compose //安装docker-compose

6. 启动wordpress博客

顺序执行以下命令:

mkdir -p /data/docker/wordpress //创建一个项目文件夹
cd /data/docker/wordpress //切换到这个文件夹
vi docker-compose.yml //编辑docker编排文件

按i进入输入模式,然后粘贴以下内容,注意缩进的层级关系不能出错:

version: '3.1'
  services:
    web:
      image: wordpress
    restart: always
    ports:
      - 80:80
     environment:
       WORDPRESS_DB_PASSWORD: example

mysql:
  image: mysql:5.7
  restart: always
  environment:
    MYSQL_ROOT_PASSWORD: example
  volumes:
    - ./mysql:/var/lib/mysql

然后按esc键退出编辑模式,输入:wq保存并退出
执行如下命令即可运行

docker-compose up -d

等待命令执行结束,如果在浏览器里输入你的公网IP地址访问出现了wordpress的安装界面,那么恭喜你成功了。

7. 配置域名解析

现在,你有一个域名了,也有一台运行了WEB服务的云服务器了,但是它们之间除了都是你名下的之外没有半毛钱关系。你需要让它们建立起联系。
打开云解析dns页面(https://dc.console.aliyun.com/dns/) ,点击域名右侧的“解析设置”,我们要添加两条A解析记录:

@表示直接解析一级域名itmx.xyz到IP地址120.78.94.84

*表示解析所有二级域名(如a.itmx.xyz,b.itmx.xyz等)到IP地址120.78.94.84

添加完成之后,我们在浏览器中打开itmx.xyz,应该会提示没有备案:

根据《非经营性互联网信息服务备案管理办法》,网站需要完成备案或接入,所以如果出现该页面,建议进入阿里云备案系统(https://beian.aliyun.com)根据要求进行网站备案。阿里云通过拦截80端口的http请求头Host字段检查域名是否备案,为了测试我们网站的配置是否正确,我们可以暂时通过443端口使用HTTPS访问我们的博客。

8. 保驾护航,为网站配置SSL证书

了解HTTPS(知乎)
首先我们打开https://freessl.org ,输入我们的域名,点击“创建免费的SSL证书”按钮

第二步,输入你的邮箱,然后点击创建,得到如下页面

为了证明这个域名是你的,你需要添加一条TXT解析记录,打开DNS域名解析页面(https://dc.console.aliyun.com/dns),如下图填写上图的数据

添加好之后点击上上图的“点击验证”按钮,稍等片刻,出现证书下载按钮后,点击“证书下载”按钮下载证书到本地(点此了解证书格式),压缩包内文件如下

到这里我们就已经生成好HTTPS所需要的证书了。为了直观显示和便于使用,我们将文件名分别改为:www.itmx.xyz.crt 和 www.itmx.xyz.key,没错,pem后缀改成了crt后缀。


没错,截图少了www,你知道就OK

紧接着我们要将这个证书应用到我们的服务器上。
因为wordpress已经占用了80和443端口,我们先将wordpress关闭,执行以下命令关闭wordpress

cd /data/docker/wordpress docker-compose down

然后执行以下命令安装RZ服务用于直接在ssh连接上传输文件:

yum install -y lrzsz

然后创建一个nginx-proxy的工作目录(了解nginx-proxy

mkdir /data/docker/nginx-proxy cd /data/docker/nginx-proxy vi docker-compose.yml

按i进入编辑模式,粘贴以下内容

main:
  image: daocloud.io/daocloud/nginx-proxy
  net: "host"
  volumes:
    - /var/run/docker.sock:/tmp/docker.sock:ro
    - ./certs:/etc/nginx/certs:ro
  # - ./nginx.conf:/etc/nginx/nginx.conf:ro
  # - ./vhost.d:/etc/nginx/vhost.d:ro
  restart: always

按esc键退出编辑模式,输入:wq保存并退出
执行以下命令启动nginx-proxy

docker-compose up -d

输入以下命令保存文件到服务器

cd /data/docker/nginx-proxy/certs
//进入证书存放的文件夹
rz
//传输文件到当前文件夹,选择itmx.xyz.crt和itmx.xyz.key即可


图中文件夹名少了www哦,接下来对wordpress稍改即可,执行以下命令

cd /data/docker/wordpress //进入wordpress工作目录
vi docker-compose.yml //修改成如下内容,注意域名和IP修改为自己的

version: '3.1'
  services:
    web:
      image: wordpress
      restart: always
      expose:
        - 80
      environment:
        WORDPRESS_DB_PASSWORD: example
        VIRTUAL_HOST: itmx.xyz,www.itmx.xyz
        CERT_NAME: www.itmx.xyz
      volumes:
        - ./wp-content:/var/www/html/wp-content

  mysql: 
    image: mysql:5.7
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: example
    volumes:
      - ./mysql:/var/lib/mysql

保存之后启动wordpress

docker-compose up -d

接下来打开https://你的域名,快去分享给你的小伙伴访问吧~

9. 结语

我相信,如果你是一个新手,你不太可能跟随该博客一帆风顺的安装到最后,你可能会因为中英文符号导致某条命令运行不了,或者yml文件的层级关系有误导致无法启动,又或者是系统环境改变有些命令执行之后没有效果,亦或者是我辑文时手误输错了命令,等等,但是只要你跟随这一个思路,坚定你自己的目标,你是一定可以成功的。写博客的人之所以能够从容地描述开发过程,不是博主们运气好,没踩到坑,而是他们每次都从坑里爬了出来,踩的坑多了,自然而然地就知道怎样避坑了。

enjoy yourself.