使用docker-compose来部署WordPress
文章目录
[隐藏]
- 部署方式介绍
- 准备工作
- 准备配置
- 启动容器
- 结束语
很早的时候想维护一个个人Blog,一开始通过 github home page + jekyll,奈何没精力再去把ruby玩溜,自己也不是个擅长改写前端页面的人,无疾而终。今天终于鼓起勇气,买了服务器和域名,部署了wordpress,毕竟wordpress易用易上手,模板也多,也就懒得自己改了。既然本Blog是运行在Docker之上的,那第一篇文章也就来说说这个吧。
部署方式介绍
- 我的服务器安装的是Arch Linux,自己也是比较喜欢这个极简的Linux发行版。
- 我使用了docker-compose来做镜像编排工具,nginx,mysql(mairadb),wordpress分别运行于不同的容器。
- 托上面两个先决条件的福,下面的内容大家根据自己的实际环境,酌情选择。
准备工作
安装Docker
托Arch Linux的福,安装Docker非常简单。
pacman -S docker
安装docker-compose
同样是托Arch的福,安装依旧简单粗暴。
pacman -S docker-compose
准备配置
首先我们需要做的是准备好docker wordpress运行的用户,执行以下命令,添加一个叫wordpress的新用户,将它添加到docker用户组,并为它设置密码
useradd -m -s /bin/zsh wordpress usermod -a -G docker wordpress passwd wordpress
紧接着,创建一些目录,保存docker-compose配置文件,存储运行产生的文件,让数据库落地到本机而不是容器,执行以下命令
su - wordpress cd mkdir wordpress-compose touch docker-compose.yml mkdir -p wordpress-compose/db-data mkdir -p wordpress-compose/logs/nginx mkdir -p wordpress-compose/nginx mkdir -p wordpress-compose/wordpress
这些目录和文件的功能分别如下:
目录或文件 含义
- wordpress-compose 容器相关根目录
- wordpress-compose/db-data 数据库数据存储目录
- wordpress-compose/logs/nginx nginx存储目录
- wordpress-compose/nginx nginx配置文件
- wordpress-compose/wordpress wordpress本体,因为安装插件等会改变php文件
接下来我们编写必要的nginx配置文件。在wordpress-compose/nginx下新建wordpress.conf文件,文件中写入下面这些配置,一个很经典的php-fpm的nginx配置文件。
server { listen 80; server_name www.gsgtzq.com; root /var/www/html; index index.php; access_log /var/log/nginx/wordpress-access.log; error_log /var/log/nginx/wordpress-error.log; location / { try_files $uri $uri/ /index.php?$args; } location ~ .php$ { try_files $uri =404; fastcgi_split_path_info ^(.+.php)(/.+)$; fastcgi_pass wordpress:9000; fastcgi_index index.php; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param PATH_INFO $fastcgi_path_info; } }
接下来就是docker-compose配置文件的编写了,首先将工作目录切换至刚刚创建的wordpress-compose目录,用自己熟悉的编辑器打开docker-compose.yml文件。
vim docker-compose.yml
先是nginx部分,我使用最新的nginx镜像,暴露80端口给本机,挂载conf.d、log、/var/www/html目录到本机,连接nginx和wordpress容器。
nginx: image: nginx:latest ports: - '80:80' volumes: - ./nginx:/etc/nginx/conf.d - ./logs/nginx:/var/log/nginx - ./wordpress:/var/www/html links: - wordpress restart: always
然后是mysql部分,我使用了mairadb的最新镜像,挂载mysql数据存储点到本机,链接mysql和wordpress容器,通过环境变量设置mysql的默认root密码。
mysql: image: mariadb:latest volumes: - ./db-data:/var/lib/mysql environment: - MYSQL_ROOT_PASSWORD=123345 restart: always
最后是wordpress本体,我使用wordpress:php7.1-fpm的镜像,挂载/var/www/html目录到本机,链接连接mysql容器和wordpress,并且使用环境变量,指定mysql主机名,表前缀,和库名。
wordpress: image: wordpress:php7.1-fpm volumes: - ./wordpress:/var/www/html environment: - WORDPRESS_DB_NAME=wpdb - WORDPRESS_TABLE_PREFIX=wp_ - WORDPRESS_DB_HOST=mysql links: - mysql restart: always
到此位置,docker-compose的配置文件全部编写完毕。
启动容器
编排文件已写完,接下来启动容器即可。
docker-compose up -d
当收到三个done以后,编排好的容器就正式启动了,我们现在可以访问本机的IP或域名来访问wordpress了。
我还可以使用下面这些命令来检查容器的运行情况,注意,docker-compose命令只有在刚才写好配置文件的目录下执行才有效果。
命令 含义
- docker ps -a 查看当前所有运行的docker容器
- docker-compose logs wordpress 查看wordpress容器的日志
- docker-compose ps 查看当前编排好的应用的所有容器状态
- docker-compose top 查看当前编排好的应用中各容器中的进程情况
具体还有一些其他的办法,可以通过查阅docker手册和docker-compose文档来进行使用。
结束语
到此为止,使用docker来运行wordpress已经完成,从开始折腾Docker到现在少说1个半月过去了,也是学习到了非常多的东西,目前而言公司的项目想用起docker来还是有不少难度,我思考了很多使用docker对传统部署和开发带来冲击的问题,例如对开发人员的要求其实高了很多,尤其是在运维这块,基础环境部署等等……但很希望自己能把它用好了,开发受益,运维也受益。
原文出处:gsgtzq -> http://www.gsgtzq.com/2017/07/17/running-wordpress-with-docker/