[Docker]快速建站

05 May 2018

前言

一直以来说是要创建一个自己的站点,但是在过程中一直实验失败,比如使用官方教程会和已有的程序冲突(特别是监听端口,由于是网页程序,端口号往往是80),直到我发现了docker。

过程

安装nginx

Nginx是一款轻小型的网站、反向代理服务器软件,作用在下面会提到。

apt-get install nginx

安装MySQL

MySQL用于存储WordPress的数据,其实也可以用docker进行安装,但是这里本机已经安装过了,就直接使用本机的。

apt-get install mysql-server

安装Docker

我的笔记本系统,在开发机离算是比较小众的一个系统,所以不是很适用官方参考文档的安装方法,因此在系统论坛上找到了安装说明,具体操作步骤如下:

# 安装软件源管理工具
sudo apt-get install apt-transport-https ca-certificates curl python-software-properties software-properties-common
# 添加软件包安装密钥
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add -
# 确认密钥(可省略)
sudo apt-key fingerprint 0EBFCD88
# 添加软件源
# 说明:wheezy是系统发行版代号,由于deepin是基于debian的发行版,所以使用debian对应版本的代号(通过cat /etc/debian_version查看数字编号,并查找对应的文本代号),如,笔者的版本代号为8.0,对应的就是jessie,将wheezy替换为jessie即可
sudo add-apt-repository  "deb [arch=amd64] https://download.docker.com/linux/debian wheezy stable"
# 更新列表,并安装
sudo apt-get update && sudo apt-get install -y docker-ce

安装OpenProject

OpenProject是一款项目管理应用,由于笔者挖的坑实在太多,又很懒,不使用项目管理工具来辅助的话,可能这辈子都填不完了。

#!/bin/bash
docker run -d -p 10080:80 --name openproject -e SECRET_KEY_BASE=secret \
  -v /opt/openproject/pgdata:/var/lib/postgresql/9.6/main \
  -v /opt/openproject/logs:/var/log/supervisor \
  -v /opt/openproject/static:/var/db/openproject \
  openproject/community

说明:
-v是挂载卷,格式为宿主机的路径:docker容器的路径
-p是端口映射,格式同样为宿主机端口:docker容器端口

安装GitLab

GitLab是一款git管理应用,使用过GitHub的对这个应该不会陌生,基本原理是一样的;因为有些项目并不想开源,所以要安装这个。

#!/bin/bash
docker run --detach \
    --hostname gitlab.endercaster.lan \
    --publish 11443:443 --publish 11080:80 --publish 11022:22 \
    --name gitlab \
    --restart always \
    --volume /opt/gitlab/config:/etc/gitlab \
    --volume /opt/gitlab/logs:/var/log/gitlab \
    --volume /opt/gitlab/data:/var/opt/gitlab \
    gitlab/gitlab-ce

说明:
–volume=-v
–publish=-p
hostname是通过host改出来的局域网域名,这里可以改进,在本机再开一个DNS

安装WordPress

WordPress我觉得就不用多说了,著名的五分钟建站博客。

#!/bin/bash
docker run -d -p 12080:80 --name wordpress -e SECRET_KEY_BASE=secret \
  -v /opt/wordpress/html:/var/www/html \
  wordpress

# 设置ServerName
docker exec -it wordpress bash
sed -i 's/#ServerName www.example.com/ServerName 你访问wordpress使用的域名/g' /etc/apache2/sites-enabled/000-default.conf 

配置MySQL

# 登入mysql
mysql -u root -p
-- 创建wordpress使用的数据库
create database wordpress;
-- 创建wordpress使用的账户,并授权
-- MySQL5.7
grant all on wordpress.* to wordpress@'%' identified by 'wordpress';
-- MySQL8.0更改了认证方式,新的认证方式WordPress不识别,所以此处使用原来的插件mysql_native_password认证
create user wordpress@'%' identified with mysql_native_password by 'wordpress';
grant all on wordpress.* to wordpress;

说明: 不用建表?对,还真不用,详情请参阅WordPress官方网站

配置nginx反向代理

前面说了,装Nginx是有用的,在同一台机子上我们搭建了三个网站,只有端口不同,我们不想要通过端口号来访问服务,怎么办?这就是Nginx反向代理的作用。 以WordPress为例

# 创建配置文件
touch /etc/nginx/sites-available/wordpress
cd /etc/nginx/sites-enabled
# 建立链接
ln -s ../sites-available/wordpress wordpress
# 编辑配置文件
vi wordpress

说明:
这里的wordpress是文件名,虽然不一定要和应用对应,但我还是建议这么做
那么问题来了,配置文件里写什么呢?

server {
    listen       80;
    # 访问使用的域名
    server_name  wordpress.endercaster.lan;
    location / {
        #这就是实际地址,此处做的实际上是一个端口转发
        proxy_pass http://127.0.0.1:12080;
        proxy_redirect off;

        # 具体哪一行我不知道,但是这里不设置的话会导致访问WordPress时CSS和js加载不出来
        proxy_set_header Host $http_host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

结语