MENU

【Docker】部署自己的网站

October 5, 2022 • Docker

安装 docker

首先我们更新下服务器软件

sudo apt-get update
sudo apt-get upgrade

然后我们安装 docker

curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

稍微等待一会儿,安装完成以后,我们查看一下版本号:

mrsen@desktop:~$ docker -v
Docker version 20.10.18, build b40c2f6

接下来我们给 docker 换个源

sudo  vim /etc/docker/daemon.json

将这些数据写进去:

{
  "registry-mirrors": [
    "http://docker.mirrors.ustc.edu.cn",
    "http://hub-mirror.c.163.com",
    "http://registry.docker-cn.com"
  ]
}

然后重启下docker

sudo systemctl restart docker

我们尝试运行下 docker:

mrsen@desktop:~$ docker ps -a
Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get "http://%2Fvar%2Frun%2Fdocker.sock/v1.24/containers/json?all=1": dial unix /var/run/docker.sock: connect: permission denied

!!注意: 如果产生了如上的报错,则表示 docker 需要在 root 权限下运行,如果不想切换到 root 用户,可以尝试这个:!!

sudo gpasswd -a $USER docker 
newgrp docker
# 将当前用户加入 docker 群组,并且切换到 docker 群组中
# 如果不行就在 root 用户下直接开干吧,勇敢点!

准备工作

创建一个文件夹用来存放docker容器的数据

sudo mkdir -p ~/docker
# 这个代表在当前用户文件夹下创建一个名为 docker 的文件夹
# 我只是做一个样例,实际安装的时候请自行选择路径

然后我们创建一个网络:

docker network create example_net

我们检查下是否创建成功

docker network ls
NETWORK ID     NAME          DRIVER    SCOPE
3447a91e9bd6   bridge        bridge    local
6e5b947ca9d2   example_net   bridge    local
da90d970b57e   host          host      local
9fc38aa66b38   none          null      local

我们接下来可能会需要数个域名,因为 dns 解析需要时间,我们可以提前到 dns 服务提供商那里解析

安装反向代理服务器

这里我们选择更为简单的 caddy 来替代 nginx ,在安装之前,我们先尝试创建一个 Caddyfile,这个文件将会被作为 caddy 的配置文件:

mkdir -p ~/docker/caddy
sudo vim ~/docker/caddy/Caddyfile

我们把这些内容写进去:

:80 {
        root * /usr/share/caddy
        file_server
}

Ok,我们来安装 caddy

docker run -itd \
    -p 80:80 \
    -p 443:443 \
    -p 443:443/udp \
    -v ~/docker/caddy/config:/config \
    -v ~/docker/caddy/data:/data \
    -v ~/docker/caddy/site:/srv \
    -v ~/docker/caddy/Caddyfile:/etc/caddy/Caddyfile \
    --net example_net \
    --name caddy \
caddy:alpine

# 因为 caddy 是反向代理服务器,所以需要将自己的 80, 443, 以及 443/udp 端口暴露出去,
# 暴露 443/udp 是因为 caddy 可以通过配置启用实验性的 http3/quic 协议,这个协议需要使用 443/udp

检查下是否正确启动了

mrsen@desktop:~/docker/caddy$ docker ps -a
CONTAINER ID   IMAGE          COMMAND                  CREATED         STATUS         PORTS                                                                                                                       NAMES
f65bba2ca1fe   caddy:alpine   "caddy run --config …"   8 seconds ago   Up 6 seconds   0.0.0.0:80->80/tcp, :::80->80/tcp, 0.0.0.0:443->443/tcp, :::443->443/tcp, 0.0.0.0:443->443/udp, :::443->443/udp, 2019/tcp   caddy

然后我们访问下 http://your-ip

image-20221005015453277

如果出现了这个画面,那么咱就大功告成了!

更多:caddy 官网

安装 filebrowser

filebrower是一个简洁的文件管理系统

照例,因为要挂载文件,我们依旧先手动创建下这个文件

sudo mkdir -p ~/docker/caddy/site/filebrowser
sudo touch ~/docker/caddy/site/filebrowser/filebrowser.db
# 数据库空着就行

sudo vim ~/docker/caddy/site/filebrowser/settings.json
# 我们写一下配置文件

~/docker/caddy/site/filebrowser/settings.json 写入如下内容:

{
  "port": 80,
  "baseURL": "",
  "address": "",
  "log": "stdout",
  "database": "/database/filebrowser.db",
  "root": "/srv"
}

我们为 filebrowser.dbsettings.json 增加下权限

cd ~/docker/caddy/site/filebrowser
sudo chmod 666 filebrowser.db settings.json
# 为这两个文件增加读写权限

然后我们安装 filebrowser

docker run -itd \
    -v ~/docker/caddy:/srv \
    -v ~/docker/caddy/site/filebrowser/filebrowser.db:/database/filebrowser.db \
    -v ~/docker/caddy/site/filebrowser/settings.json:/config/settings.json \
    -e PUID=$(id -u) \
    -e PGID=$(id -g) \
    --net example_net \
    --name filebrowser \
    filebrowser/filebrowser:s6

检查下是否安装成功

mrsen@desktop:~/docker/caddy/site/filebrowser$ docker ps -a
CONTAINER ID   IMAGE                        COMMAND                  CREATED              STATUS                          PORTS                                                                                                                       NAMES
0201afc646e3   filebrowser/filebrowser:s6   "/init"                  About a minute ago   Up About a minute (healthy)   80/tcp                                                                                                                      filebrowser
f65bba2ca1fe   caddy:alpine                 "caddy run --config …"   20 minutes ago       Up 20 minutes                   0.0.0.0:80->80/tcp, :::80->80/tcp, 0.0.0.0:443->443/tcp, :::443->443/tcp, 0.0.0.0:443->443/udp, :::443->443/udp, 2019/tcp   caddy
如果 filebrowser 的状态不是 healthy,那么可以尝试下这个:
docker stop filebrowser
# 暂停 filebrowser

docker start -i filebrowser
# 在前台启动 filebrowser,这将会打印出日志
# 然后就可以根据日志来判断出当前的状态了
# 如果出现 permission xxx,应该是权限相关的问题

我们修改下 Caddyfile,让 caddy 反向代理下 filebrowser

filebrowser.your-domain.com {
    reverse_proxy filebrowser:80
}

重启下 caddy:

docker restart caddy

记得提前去 dns 服务提供商那里解析下 filebrowser.your-domain.com

这个域名换成其他的也是可以的,但是记得解析下就行,因为博主是在本机安装的,我就直接用其他端口莽了,不过原理都是一样的

有个需要注意的地方,最好是先让 dns 的解析生效了之后,再配置 caddyfile,因为 caddy 会尝试用这个域名申请 ssl 证书,如果域名解析未生效,可能会导致 ssl 证书申请失败,从而导致无法访问!

访问 https://filebrowser.your-domain.com

image-20221005024417325

初始账号密码应该是:

username: admin
password: admin

登录进来以后,应该能看到这样的几个文件夹:

image-20221005024555367

那么我们的文件管理程序就大功告成了!

安装数据库

数据库我们选择开源的 mariadb:这个数据库与 mysql 是兼容的

docker run -itd \
    -v ~/docker/mariadb:/var/lib/mysql \
    -e MARIADB_ROOT_PASSWORD=my_password \
    --net example_net \
    --name mariadb \
mariadb
这个没有什么好说的,记得把里面的密码替换成自己的就行

我们进入 mariadb,在里面创建一个数据库 typecho 给 typecho 存放自己的数据

在运行这些指令的时候,也可以使用类似于 navicat 之类的数据库管理工具,不过作为硬核教程,咱这里直接命令行开冲!
docker exec -it mariadb /bin/bash # 进入 mariadb 容器内
mysql -p # 使用密码连接数据库

我们创建下新的数据库:

MariaDB [(none)]> create database typecho;

检查下是否创建成功了:

MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| typecho            |
+--------------------+
5 rows in set (0.001 sec)

数据库安装成功!

安装typecho

直接创建即可

docker run -itd \
    -e TYPECHO_DB_ADAPTER=Pdo_Mysql \
    -e TYPECHO_DB_HOST=mariadb \
    -e TYPECHO_DB_PORT=3306 \
    -e TYPECHO_DB_USER=root \
    -e TYPECHO_DB_PASSWORD=my_password \
    -e TYPECHO_DB_DATABASE=typecho \
    -e TYPECHO_SITE_URL=your-domain.cn \
    --name typecho \
    --net example_net \
    -v ~/docker/caddy/site/your-domain.cn:/app/usr \
joyqi/typecho:nightly-php8.0-apache

修改下 Caddyfile , 加入 typecho 相关的信息

filebrowser.your-domain.com {
    reverse_proxy filebrowser:80
}

your-domain.com {
    reverse_proxy typecho:80
}

重启下 Caddy 容器

docker restart caddy

检查下页面是否正常

image-20221005032304307

这几个地方要修改下,改成如图这样的即可

image-20221005032530031

一路安装即可,这样就完事了

image-20221005032655202

如果要修改网站下面的什么文件,可以直接通过 https://filebrowser.your-domain.com 进行修改,非常方便

备忘录

1. 为什么不用 docker-compose?

emm,也许是我认为我的服务器可能会部署更多拓展的内容?

2. 为什么我没办法运行起来?

啊这,我真的不知道,本文中给出的指令都是博主在 ubuntu22.04-server 版的虚拟机里测试过的,理论应该没有问题的

3. 为什么要这样技术选型?

嘛,个人博客,不在乎性能,能跑就行,简单点嘛

4. 其他指令

docker ps -a # 所有的容器
docker stop container-name         # 暂停一个容器
docker start container-name     # 启动一个容器
docker start -i container-name  # 在前台启动一个容器
docker rm container-name        # 删除一个容器
docker rmi contaienr-name        # 删除一个镜像
docker restart container-name     # 重启一个容器
docker exec -it docker-name /bin/bash    # 进入一个容器
docker exec -it docker-name /bin/sh        # 进入一个容器(一般是 alpine 镜像)
docker network create network_name            # 创建一个网络
docker network connect container-name        # 将容器加入到一个网络中
docker network disconnect container-name    # 将容器从一个网络中删除
docker update --restart=always container-name # 设置容器重启
docker inspect container-name # 查看 container 详细信息

5. 参考链接

joyqi/typecho - Docker Image | Docker Hub

mariadb - Official Image | Docker Hub

caddy - Official Image | Docker Hub

filebrowser/filebrowser - Docker Image | Docker Hub

Installation - File Browser

Welcome — Caddy Documentation (caddyserver.com)

Docker 简介和安装 - Docker 快速入门 - 易文档 (easydoc.net)

作者:NorthCity1984
出处:https://grimoire.cn/docker/site-with-blog.html
版权:本文《【Docker】部署自己的网站》版权归作者所有
转载:欢迎转载,但未经作者同意,必须保留此段声明;必须在文章中给出原文连接;否则必究法律责任

Last Modified: October 15, 2022