Detailed steps for host Nginx + Docker WordPress Mysql setup

  • 2020-12-18 02:01:49
  • OfStack

The environment

Linux 3.10.0-693.el7.x86_64 Docker version 18.09.0 docker-compose version 1.17.0

The installation

The dependencies required to install docker


$ sudo yum install -y yum-utils device-mapper-persistent-data lvm2

Install docker - ce


 $ sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
 $ sudo yum install docker-ce
 $ sudo systemctl start docker
 $ docker --version
 $ sudo docker run hello-world

Install docker - compose


$ sudo curl -L https://github.com/docker/compose/releases/download/1.17.0/docker-compose-`uname -s`-`uname -m` -o /usr/bin/docker-compose
$ sudo chmod +x /usr/bin/docker-compose
$ docker-compose --version

Write docker - compose. yml


$ mkdir ./blog
$ cd blog
$ sudo vim docker-compose.yml

version: '3'

services:
 db:
  image: mysql:5.7
  volumes: #  Data volume, map local folder 
  - db_data:/var/lib/mysql
  ports: #  If you do not write the port map, it cannot be connected externally mysql (below WordPress No problem with connection) 
  - "3306:3306"                       
  restart: always
  environment:
  MYSQL_ROOT_PASSWORD: xxx
  MYSQL_DATABASE: wordpress
  MYSQL_USER: wordpress
  MYSQL_PASSWORD: wordpress

 wordpress:
  depends_on: #  Topdependent  db service
  - db
  image: wordpress:latest
  volumes:
  - wp_site:/var/www/html
  ports:
  - "8000:80"
  restart: always
  privileged: true
  environment:
  #  You can use it directly   above  service  The name  +  Port to get the link  
  WORDPRESS_DB_HOST: db:3306
  WORDPRESS_DB_USER: wordpress
  WORDPRESS_DB_PASSWORD: wordpress
  #  Domain name 
  WORDPRESS_CONFIG_EXTRA: "define('WP_HOME','https://blog.amoyiki.com'); define('WP_SITEURL','https://blog.amoyiki.com');"

volumes:
 db_data:
 wp_site:

Run the container


#  Start the 
$ sudo docker-compose up -d
#  Shut down  
$ sudo docker-compose down

This can now be accessed using http://ip:port. If you find that you can't access it, you can view the container log for errors


$ sudo docker-compose ps
 Name    Command      State        Ports    

blog_db_1 docker-entrypoint.sh mysqld Up 0.0.0.0:3306->3306/tcp, 33060/tcp
blog_wordpress_1 docker-entrypoint.sh apach ... Up 0.0.0.0:8000->80/tcp 
#  Main rear  WordPress  It's the name of the service   This and  docker  View logs using different container names 
$ sudo docker-compose logs -f --tail=10 wordpress 
$ sudo docker-compose logs -f --tail=10 db

Use host Nginx to reverse docker wordpress

The configuration file for nginx is as follows (omitted irrelevant content)


user root; #  This is due to  docker  container  WordPress  File user is  www-data

server {
 listen 80;
 server_name *.amoyiki.com;
 return 301 https://$host$request_uri;                
}
upstream wordpress-workhorse {
 server 127.0.0.1:8000 fail_timeout=10s;
}
server { 
 server_name blog.amoyiki.com;
 listen 443 ssl;
 ssl on;
 ssl_certificate /ssl/path/fullchain.pem;
 ssl_certificate_key /ssl/path/privkey.pem;
 access_log /var/log/nginx/access.log main;
 #  In the host  WordPress  Data volume location 
 root /var/lib/docker/volumes/blog_wp_site/_data;


 location / {
  proxy_pass http://wordpress-workhorse;
  proxy_set_header Host $host;
  proxy_set_header X-Real-IP $remote_addr;
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  proxy_set_header X-Forwarded-Proto https;
 }
 
 location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
  expires 7d;
  access_log off;             
 }

 error_page 500 502 503 504 /50x.html;
 location = /50x.html {
  root html;
 }
} 

Error collection

nginx error Permission denied

[

"/var/lib/docker/volumes/myblog_wp_site/_data/wp-includes/css/dashicons.min.css" failed (13: Permission denied)

]

Before, nginx. conf user used the default nobody and could not read www-ES71en of wp in docker, so I directly mentioned nginx user to root, which can be optimized later


Related articles: