记录一次无比曲折的docker环境安装drupal8的过程。目前从网上搜到的例子都是很复杂的,并且直接将drupal映射到volumes,我想要安装简单的纯drupal环境,并且可以在本地随时编辑drupal文件。
需要的环境
- docker
- docker-compose
1. 创建docker-compose.yml配置文件
# docker-compose.yml
version: "3"
services:
web:
image: nginx:$NGINX_TAG
container_name: "${PROJECT_NAME}_nginx"
ports:
- $NGINX_PORT
volumes:
- "./drupal/web:/var/www/html"
- "./drupal/nginx.conf:/etc/nginx/conf.d/default.conf"
depends_on:
- php
php:
image: drupal:$DRUPAL_TAG
container_name: "${PROJECT_NAME}_drupal"
volumes:
- "./drupal/web:/var/www/html"
restart: always
depends_on:
- mysql
mysql:
image: mysql:$MYSQL_TAG
container_name: "${PROJECT_NAME}_mysql"
command: mysqld --default-authentication-plugin=mysql_native_password
environment:
MYSQL_ROOT_PASSWORD: $DB_ROOT_PASSWORD
MYSQL_USER: $DB_USER
MYSQL_PASSWORD: $DB_PASSWORD
MYSQL_DATABASE: $DB_NAME
volumes:
- "./drupal/mysql:/var/lib/mysql"
ports:
- $DB_PORT
restart: always
2. 创建.env文件
# .env
PROJECT_NAME=drupal8
DRUPAL_VERSION=8.8.3
DRUPAL_TAG=8.8-fpm-alpine
NGINX_TAG=alpine
NGINX_PORT=8080:80
### database ###
MYSQL_TAG=8
DB_NAME=drupal
DB_USER=admin
DB_PASSWORD=admin
DB_ROOT_PASSWORD=root
DB_PORT=33060:3306
3. 下载drupal8安装文件
正常情况下上面的drupal8 container会下载安装文件并放到对应的文件夹里,但是有时候会下载出错或者并没有下载文件,所以创建我们可以手动下载drupal并放到对应的目录下。
大家可以到Drupal官网下载,也可以通过执行下面到文件下载。
# drupal-install.sh
#! /bin/bash
[[ -f .env ]] && source .env
if [ $DRUPAL_VERSION ]
then
echo "Start with Drupal version ${DRUPAL_VERSION}"
else
echo "Drupal version is not defined. Set the default version to 8.6.12"
DRUPAL_VERSION='8.6.12'
fi
mkdir drupal/web
curl -fSL "https://ftp.drupal.org/files/projects/drupal-${DRUPAL_VERSION}.tar.gz" -o drupal.tar.gz
mv drupal.tar.gz drupal/web
cd drupal/web
tar -zx --strip-components=1 -f drupal.tar.gz
rm drupal.tar.gz
启动docker之前先执行上面的文件sh docker-install.sh
下载drupal
4. 启动docker
上面的文件都写好了之后,就可以启动docker了
docker-compose up
启动成功之后可以通过 http://localhost:8080 访问drupal站点了。安装drupal连接数据库的时候,host 填写mysql,port填写3306。
5. 问题记录
mysql 8连接的问题
mysql 8 修改了密码连接方式,所以我在用navicat连接mysql的时候总是在出错,然后在docker-compose.yml里的mysql下添加了一句命令修改密码验证方式command: mysqld --default-authentication-plugin=mysql_native_password
参考文章和网址
drupal:https://hub.docker.com/_/drupal
mysql:https://hub.docker.com/_/mysql
Local Drupal 8 Development with Docker
Local environment with Docker4Drupal