安装 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 :
如果出现了这个画面,那么咱就大功告成了!
更多: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.db
和 settings.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 :
初始账号密码应该是:
username: admin
password: admin
登录进来以后,应该能看到这样的几个文件夹:
那么我们的文件管理程序就大功告成了!
安装数据库
数据库我们选择开源的 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
检查下页面是否正常
这几个地方要修改下,改成如图这样的即可
一路安装即可,这样就完事了
如果要修改网站下面的什么文件,可以直接通过 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
Welcome — Caddy Documentation (caddyserver.com)
Docker 简介和安装 - Docker 快速入门 - 易文档 (easydoc.net)
出处:https://grimoire.cn/docker/site-with-blog.html
版权:本文《【Docker】部署自己的网站》版权归作者所有
转载:欢迎转载,但未经作者同意,必须保留此段声明;必须在文章中给出原文连接;否则必究法律责任