ubuntu 安装docker,在docker下安装wordpress,mysql,并配置nginx转发端口和开启https

发布于 2023-05-26  30 次阅读


nginx docker wordpress

1. 安装docker

三选一安装docker

snap install docker         # version 20.10.24, or
apt  install docker.io      # version 20.10.21-0ubuntu1~22.04.3(我选的这个)
apt  install podman-docker  # version 3.4.4+ds1-1ubuntu1

2. 安装portainer(可以不装)

docker volume create portainer_data
docker run -d -p 8000:8000 -p 9443:9443 --name portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce:latest

输入ip:9443即可登录portainer设置密码和管理容器

3. 安装docker mysql

docker run \
	--name mysql1 --restart=always \
	-p 3306:3306 \
	-p 33060:33060 \
	-e MYSQL_ROOT_PASSWORD=root-secret-pw \
	-e MYSQL_ROOT_HOST=% \
	-d mysql:latest

主要是注意-e的参数

4. 安装docker wordpress

docker run --name wordpress1 --link mysql1 -p 8081:80 \
	-v /var/www/wordpress:/var/www/html \
	-d wordpress

5. 配置nginx转发端口至wordpress

在nginx主配置文件的http{}server{}之前添加include /etc/nginx/conf.d/*.conf;,然后在/etc/nginx/conf.d/目录下新建一个配置文件,以conf结尾,建议直接以域名命名

server {
    listen 443 ssl;
    listen [::]:443 ssl;
    server_name  domain.com; # 监听域名
	index index.php index.html index.htm;
    ssl_certificate      /etc/certcert/domain.com.crt;
    ssl_certificate_key  /etc/certcert/domain.com.key;
 
    # 最大上传大小
    client_max_body_size 100M;   # adjust to taste
 
    location / {
        proxy_pass http://127.0.0.1:8081/;
        proxy_http_version 1.1;
        proxy_buffering off;
        proxy_read_timeout    90;
        proxy_connect_timeout 90;
        proxy_redirect        off;
        proxy_set_header Host $host;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-Proto https;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Port 443;
        proxy_set_header Proxy "";
    }
}

#http重定向至https
server {
  listen 80;
  listen [::]:80;
  server_name test.com;
  return 301 https://$server_name$request_uri;
}

在子配置文件中填入以下代码转发:这样就成功将域名domain.com的请求转发到docker wordpress的映射端口了,但是还没有完全实现无端口访问,访问时还是会重定向到端口,我们要在wordpress的配置文件里加几行代码。

6. 配置wp-config.php

在wp-config.php里添加以下代码:

define('FORCE_SSL_ADMIN', true);

/** $_SERVER['REQUEST_URI'] = str_replace("/wp-admin/", "/blog/wp-admin/",  $_SERVER['REQUEST_URI']); 这里只是记录另一种转发,不用管*/ 

if($_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https'){

    $_SERVER['HTTPS'] = 'on';
    $_SERVER['SERVER_PORT'] = 443;
}

define('WP_HOME','https://domain.com/');
define('WP_SITEURL','https://domain.com/');

大功告成!此wp-config.php也是一种简单的给wordpress换域名的方法,无需替换数据库的域名

如果要更改最大文件上传限制可以在这个文件里增加几行代码:

@ini_set( 'upload_max_size' , '1000M' );
@ini_set( 'post_max_size', '1000M');
@ini_set( 'max_execution_time', '300' );


一沙一世界,一花一天堂。君掌盛无边,刹那成永恒。