[Docker]快速建站
前言
一直以来说是要创建一个自己的站点,但是在过程中一直实验失败,比如使用官方教程会和已有的程序冲突(特别是监听端口,由于是网页程序,端口号往往是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;
}
}
结语
- Docker在节约时间上真是太好用了
- Nginx的反向代理配置起来比Apache方便很多