├── docker-compose.yml └── README.md /docker-compose.yml: -------------------------------------------------------------------------------- 1 | --- 2 | version: '2' 3 | services: 4 | db: 5 | image: mysql:5.7 6 | restart: always 7 | environment: 8 | MYSQL_ROOT_PASSWORD: salamdonya 9 | MYSQL_DATABASE: wordpress 10 | MYSQL_USER: wordpress 11 | MYSQL_PASSWORD: salamdonya 12 | volumes: 13 | - db:/var/lib/mysql 14 | 15 | wordpress: 16 | depends_on: 17 | - db 18 | image: wordpress:latest 19 | ports: 20 | - 80:80 21 | restart: always 22 | environment: 23 | WORDPRESS_DB_HOST: db:3306 24 | WORDPRESS_DB_PASSWORD: salamdonya 25 | 26 | volumes: 27 | db: 28 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Wordpress with docker 2 | 3 | Create wordpress site and mysql database with nginx 4 | 5 | 6 | **Stap1:** pull all needed images 7 | ```bash 8 | docker pull wordpress:latest 9 | docker pull nginx:latest 10 | docker pull mysql:5.7 11 | ``` 12 | 13 | **Stap2:** create network and check it 14 | ```bash 15 | docker network create --driver bridge --subnet=172.30.10.0/24 wp-net 16 | docker network ls 17 | docker inspect wp-net 18 | ``` 19 | 20 | **Stap3:** create volume and check it 21 | ```bash 22 | docker volume create --driver local --name wp-data 23 | docker volume create --driver local --name db-data 24 | docker volume ls 25 | docker inspect wp-data 26 | docker inspect db-data 27 | ``` 28 | 29 | **Stap4:** create nginx directory 30 | ```bash 31 | mkdir -p /home/ahmad/DockerMe/wp/nginx/conf.d 32 | mkdir -p /home/ahmad/DockerMe/wp/nginx/cert 33 | tree /home/ahmad/DockerMe/wp 34 | ``` 35 | 36 | **Stap5:** run mysql service and check it 37 | ```bash 38 | docker run -itd --name mysql --hostname mysql \ 39 | --network=wp-net --network-alias=db --ip=172.30.10.10 \ 40 | --restart=always --memory=512m \ 41 | --mount=source=db-data,target=/var/lib/mysql \ 42 | -e MYSQL_ROOT_PASSWORD=EUEBmxTYtgrXdsdsnfHJJwE9V9fKK7Anha \ 43 | -e MYSQL_DATABASE=wordpress \ 44 | -e MYSQL_USER=wordpress \ 45 | -e MYSQL_PASSWORD=EUEBmxTYtgrXdsdsnfHJJwE9V9fKK7Anha \ 46 | mysql:5.7 47 | ``` 48 | 49 | **Stap6:** check mysql services 50 | ```bash 51 | docker ps 52 | docker stats mysql 53 | docker exec -i mysql mysql -u root -pEUEBmxTYtgrXdsdsnfHJJwE9V9fKK7Anha <<< "show databases" 54 | ``` 55 | 56 | **Stap7:** run wordpress service and check it 57 | ```bash 58 | docker run -itd --name wordpress --hostname wordpress \ 59 | --network=wp-net --network-alias=wp --ip=172.30.10.20 \ 60 | --restart=always --memory=1024m \ 61 | --mount=source=wp-data,target=/var/www/html/ \ 62 | -e WORDPRESS_DB_PASSWORD=EUEBmxTYtgrXdsdsnfHJJwE9V9fKK7Anha \ 63 | -e WORDPRESS_DB_HOST=db:3306 \ 64 | --link mysql:db \ 65 | wordpress:latest 66 | ``` 67 | 68 | **Stap8:** check wordpress services 69 | ```bash 70 | docker ps 71 | docker stats --no-stream 72 | docker logs -f wordpress 73 | curl -I -L 172.30.10.20 74 | ``` 75 | 76 | **Stap9:** create nginx config file for wordpress proxy pass 77 | ```bash 78 | vim /home/ahmad/DockerMe/wp/nginx/conf.d/wordpress.conf 79 | server { 80 | listen 80; 81 | server_name test.dockerme.ir; 82 | location / { 83 | proxy_pass http://wordpress:80; 84 | proxy_set_header Host $http_host; # required for docker client's sake 85 | proxy_set_header X-Real-IP $remote_addr; # pass on real client's IP 86 | proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 87 | proxy_set_header X-Forwarded-Proto $scheme; 88 | add_header X-Powered-By "Ahmad Rafiee | DockerMe.ir"; 89 | } 90 | } 91 | ``` 92 | 93 | **Stap10:** run nginx services and check it 94 | ```bash 95 | docker run -itd --name nginx --hostname nginx \ 96 | --network=wp-net --network-alias=web --ip=172.30.10.30 \ 97 | --restart=always --memory=512m \ 98 | --volume=/home/ahmad/DockerMe/wp/nginx/conf.d:/etc/nginx/conf.d \ 99 | --volume=/home/ahmad/DockerMe/wp/nginx/cert:/etc/nginx/cert \ 100 | --publish=80:80 --publish=443:443 \ 101 | --link wordpress:wp \ 102 | nginx:latest 103 | ``` 104 | 105 | **Stap11:** check nginx services 106 | ```bash 107 | docker ps 108 | docker stats --no-stream 109 | curl -I -L http://test.dockerme.ir 110 | ``` 111 | 112 | **Stap12:** backup databases 113 | ```bash 114 | docker exec -i mysql mysqldump -u root -pEUEBmxTYtgrXdsdsnfHJJwE9V9fKK7Anha --all-databases --single-transaction --quick > full-backup-$(date +%F).sql 115 | ``` 116 | 117 | 118 | ## Short way 119 | ### Run mysql and wordpress without nginx. 120 | **Step1:** run mysql container 121 | ```bash 122 | docker run -it -d --name db -e MYSQL_ROOT_PASSWORD=salamdonya -e MYSQL_DATABASE=wordpress -e MYSQL_USER=wordpress -e MYSQL_PASSWORD=salamdonya mysql:5.7 123 | ``` 124 | **Step2:** run wordpress container 125 | ```bash 126 | docker run -it -d -p 80:80 --link db:db --name wordpress -e WORDPRESS_DB_HOST=db:3306 -e WORDPRESS_DB_PASSWORD=salamdonya wordpress:latest 127 | ``` 128 | 129 | # Run wordpress with docker-compose command. 130 | **step1:** create compose file 131 | ```bash 132 | vim docker-compose.yml 133 | version: '3' 134 | services: 135 | mysql: 136 | image: 'mysql:5.7' 137 | container_name: mysql 138 | restart: always 139 | environment: 140 | - MYSQL_ROOT_PASSWORD=EUEBmxTYtgrXdsdsnfHJJwE9V9fKK7Anha 141 | - MYSQL_DATABASE=wordpress 142 | - MYSQL_USER=wordpress 143 | - MYSQL_PASSWORD=EUEBmxTYtgrXdsdsnfHJJwE9V9fKK7Anha 144 | wordpress: 145 | image: 'wordpress:latest' 146 | container_name: wordpress 147 | restart: always 148 | environment: 149 | - WORDPRESS_DB_HOST=mysql:3306 150 | - WORDPRESS_DB_USER=wordpress 151 | - WORDPRESS_DB_PASSWORD=EUEBmxTYtgrXdsdsnfHJJwE9V9fKK7Anha 152 | - WORDPRESS_DB_NAME=wordpress 153 | links: 154 | - 'mysql:db' 155 | nginx: 156 | image: 'nginx:latest' 157 | container_name: nginx 158 | restart: always 159 | volumes: 160 | - '/home/ahmad/DockerMe/wp/nginx/conf.d:/etc/nginx/conf.d' 161 | - '/home/ahmad/DockerMe/wp/nginx/cert:/etc/nginx/cert' 162 | ports: 163 | - '80:80' 164 | - '443:443' 165 | links: 166 | - 'wordpress:wp' 167 | ``` 168 | **Step2:** check compose file syntax 169 | ```bash 170 | docker-compose config 171 | ``` 172 | 173 | **Step3:** run compose file with docker-compose commands 174 | ```bash 175 | docker-compose up -d 176 | ``` 177 | **Step4:** check running services and services logs 178 | ```bash 179 | docker-compose ps 180 | docker-compose logs -f --tail 10 181 | ``` 182 | 183 | ## License 184 | [DockerMe.ir](https://dockerme.ir) 185 | --------------------------------------------------------------------------------