本篇简述了关于如何在个人的服务器上搭建属于自己的博客。
一、先决条件
首先,你需要有一个服务器,一个公网 IP(如果想要在本地部署,需要使用内网穿透技术以发布个人网站,本篇并未涉及这些),一个域名。
我使用的是云服务器,2 core 2G RAM,同样在云服务器厂商购买了域名。
二、环境部署
可以使用你喜欢的 Linux 发行版,并且确保安装了 docker 环境,关于安装 docker 环境可以参考我的https://blog.ri4.xin/?p=47一文。
我们使用 WordPress 完成个人网站的搭建,利用 nginx-proxy-manager 进行反向代理。
三、开始部署
1、新建一个项目目录:
mkdir work-wordpress
mkdir work-wordpress/wordpress
mkdir word-wordpress/nginx-proxy-manager
2、编写 WordPress 的 docker compose 文件:
touch work-wordpress/wordpress/docker-compose.yaml
#docker-compose.yaml
networks:
wordpress-network:
external: true
services:
wordpress:
image: wordpress:latest
container_name: wordpress
# image: wordpress
restart: always
# ports:
# - 8080:80
environment:
WORDPRESS_DB_HOST: wordpress-db
WORDPRESS_DB_USER: <username>
WORDPRESS_DB_PASSWORD: <yourpassword>
WORDPRESS_DB_NAME: <dbname>
volumes:
- ./var:/var/www/html
depends_on:
- wordpress-db
networks:
- test-network
wordpress-db:
image: mysql:latest
container_name: wordpress-db
restart: always
environment:
MYSQL_DATABASE: <dbname>
MYSQL_USER: <username>
MYSQL_PASSWORD: <yourpassword>
MYSQL_ROOT_PASSWORD: <yourpassword>
volumes:
- ./db:/var/lib/mysql
networks:
- wordpress-network
3、编写 nginx-proxy-manager 的 docker compose:
touch word-wordpress/nginx-proxy-manager/docker-compose.yaml
#docker-compose.yaml
networks:
wordpress-network:
external: true
services:
app:
image: 'jc21/nginx-proxy-manager:latest'
container_name: nginx-proxy-manager
restart: always
networks:
- 'wordpress-network'
ports:
- '80:80'
- '81:81'
- '443:443'
volumes:
- ./data:/data
- ./letsencrypt:/etc/letsencrypt
4、新建 docker networks:
docker network create wordpress-network
5、在两个 docker-compose.yaml 文件目录下执行命令构建 docker container:
docker compose up -d
6、通过 IP 登录 nginx-proxy-manager ,需要先开启 port:81,在浏览器使用 IP:81 进入,然后设置反向代理:
7、进入你设置的 wordpress 网站域名
四、docker compose 编写技巧
我的老师说过,docker container 的世界里没有 IP 可以用,所以都用对方的 container name 作为 host
基本上在每个 docker compose 档案内 增加 network 大标题,然后取个名称,然后宣告 external ,然后每个 container 都要宣告 networks ,之后所有 container 的所有设定都填入对方的 host name 和 internal port 就能通了。
这流程从头到尾都没 IP
docker conatiner 之间通过自定义 network 进行通信,不对外暴露IP&端口,这种方式可以极大地减少体系复杂度,以便于简单完成网路部分部署。