برنامه نویسی

پیکربندی HTTPS برای WordPress در Docker با استفاده از NGINX به عنوان یک پروکسی معکوس – انجمن DEV

Summarize this content to 400 words in Persian Lang
اگر می خواهید وردپرس را در یک ظرف Docker میزبانی کنید اما در پیکربندی HTTPS مشکل دارید، مراحل زیر ممکن است به شما کمک کند!

آهنگسازی docker-compose.yml فایل

بیایید a ایجاد کنیم docker-compose.yml فایل برای تعریف خدماتی که به آن نیاز داریم.

ابتدا، ما قصد داریم تا را اضافه کنیم db به خدمات

db:
image: mysql:5.7
container_name: db
ports:
– “3306:3306”
environment:
MYSQL_DATABASE: wordpress
MYSQL_USER: notanotheruser
MYSQL_PASSWORD: 1234
MYSQL_ROOT_PASSWORD: root1234
volumes:
– db_data:/var/lib/mysql

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

ما در حال افشای آن هستیم port 3306 در صورتی که بخواهیم با MySQL Workbench به پایگاه داده متصل شویم تا نگاه بهتری داشته باشیم.
ما در حال عبور از environment variables برای راه اندازی سرور MySQL طبق مستندات مورد نیاز است

ما در حال ایجاد یک volume برای حفظ وضعیت سرور MySQL حتی پس از اینکه کانتینر سرویس را خاموش کردیم.

بعد از اینکه db را تنظیم کردیم، می خواهیم اضافه کنیم wordpress به خدمات

wordpress:
depends_on:
– db
image: wordpress:latest
container_name: wordpress
environment:
WORDPRESS_DB_HOST: db
WORDPRESS_DB_USER: notanotheruser
WORDPRESS_DB_PASSWORD: 1234
WORDPRESS_DB_NAME: wordpress
volumes:
– ./wordpress/wp-config.php:/var/www/html/wp-config.php

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

ما در حال اضافه کردن هستیم depends_on: db زیرا می خواهیم سرویس db قبل از سرویس wordpress راه اندازی شود.
ما در حال عبور از environment variables برای راه اندازی وردپرس طبق مستندات مورد نیاز است

باید رونویسی کنیم wp-config.php فایل در نصب وردپرس با خودمان فقط برای اضافه کردن یک خط که به ما امکان استفاده از https را می دهد و آن این است: $_SERVER[‘HTTPS’] = ‘on’;

آ wp-config.php فایل محلی باید به شکل زیر باشد:

/**
* The base configuration for WordPress
*
* The wp-config.php creation script uses this file during the installation.
* You don’t have to use the website, you can copy this file to “wp-config.php”
* and fill in the values.
*
* This file contains the following configurations:
*
* * Database settings
* * Secret keys
* * Database table prefix
* * ABSPATH
*
* This has been slightly modified (to read environment variables) for use in Docker.
*
* @link https://developer.wordpress.org/advanced-administration/wordpress/wp-config/
*
* @package WordPress
*/

// IMPORTANT: this file needs to stay in-sync with https://github.com/WordPress/WordPress/blob/master/wp-config-sample.php
// (it gets parsed by the upstream wizard in https://github.com/WordPress/WordPress/blob/f27cb65e1ef25d11b535695a660e7282b98eb742/wp-admin/setup-config.php#L356-L392)

// a helper function to lookup “env_FILE”, “env”, then fallback
if (!function_exists(‘getenv_docker’)) {
// https://github.com/docker-library/wordpress/issues/588 (WP-CLI will load this file 2x)
function getenv_docker($env, $default) {
if ($fileEnv = getenv($env . ‘_FILE’)) {
return rtrim(file_get_contents($fileEnv), “\r\n”);
}
else if (($val = getenv($env)) !== false) {
return $val;
}
else {
return $default;
}
}
}

// ** Database settings – You can get this info from your web host ** //
/** The name of the database for WordPress */
define( ‘DB_NAME’, getenv_docker(‘WORDPRESS_DB_NAME’, ‘wordpress’) );

/** Database username */
define( ‘DB_USER’, getenv_docker(‘WORDPRESS_DB_USER’, ‘example username’) );

/** Database password */
define( ‘DB_PASSWORD’, getenv_docker(‘WORDPRESS_DB_PASSWORD’, ‘example password’) );

/**
* Docker image fallback values above are sourced from the official WordPress installation wizard:
* https://github.com/WordPress/WordPress/blob/1356f6537220ffdc32b9dad2a6cdbe2d010b7a88/wp-admin/setup-config.php#L224-L238
* (However, using “example username” and “example password” in your database is strongly discouraged. Please use strong, random credentials!)
*/

/** Database hostname */
define( ‘DB_HOST’, getenv_docker(‘WORDPRESS_DB_HOST’, ‘mysql’) );

/** Database charset to use in creating database tables. */
define( ‘DB_CHARSET’, getenv_docker(‘WORDPRESS_DB_CHARSET’, ‘utf8’) );

/** The database collate type. Don’t change this if in doubt. */
define( ‘DB_COLLATE’, getenv_docker(‘WORDPRESS_DB_COLLATE’, ”) );

/**#@+
* Authentication unique keys and salts.
*
* Change these to different unique phrases! You can generate these using
* the {@link https://api.wordpress.org/secret-key/1.1/salt/ WordPress.org secret-key service}.
*
* You can change these at any point in time to invalidate all existing cookies.
* This will force all users to have to log in again.
*
* @since 2.6.0
*/
define( ‘AUTH_KEY’, getenv_docker(‘WORDPRESS_AUTH_KEY’, ‘a04e06eaef05d9dc187680cdccb8aae37d90bfcd’) );
define( ‘SECURE_AUTH_KEY’, getenv_docker(‘WORDPRESS_SECURE_AUTH_KEY’, ‘f1d35321ba3ff820430674efc877f53b64bdb50e’) );
define( ‘LOGGED_IN_KEY’, getenv_docker(‘WORDPRESS_LOGGED_IN_KEY’, ‘5d880df893cba59fed67def1acac2c61e46c4671’) );
define( ‘NONCE_KEY’, getenv_docker(‘WORDPRESS_NONCE_KEY’, ‘2fe4fdf4ff93153db924369eb7bbd823f446577c’) );
define( ‘AUTH_SALT’, getenv_docker(‘WORDPRESS_AUTH_SALT’, ‘326143348bb31e5451cf0e838048043ea39e5351’) );
define( ‘SECURE_AUTH_SALT’, getenv_docker(‘WORDPRESS_SECURE_AUTH_SALT’, ’33aa7ae0aa39497d0d13e84413061e0168eadea3′) );
define( ‘LOGGED_IN_SALT’, getenv_docker(‘WORDPRESS_LOGGED_IN_SALT’, ‘f032c820677ec84f4ef05a6d2e4c2547be1e7b1b’) );
define( ‘NONCE_SALT’, getenv_docker(‘WORDPRESS_NONCE_SALT’, ‘506e5adc0340e19f13b1018ecb7b7776e92b0a73’) );
// (See also https://wordpress.stackexchange.com/a/152905/199287)

/**#@-*/

/**
* WordPress database table prefix.
*
* You can have multiple installations in one database if you give each
* a unique prefix. Only numbers, letters, and underscores please!
*/
$table_prefix = getenv_docker(‘WORDPRESS_TABLE_PREFIX’, ‘wp_’);

/**
* For developers: WordPress debugging mode.
*
* Change this to true to enable the display of notices during development.
* It is strongly recommended that plugin and theme developers use WP_DEBUG
* in their development environments.
*
* For information on other constants that can be used for debugging,
* visit the documentation.
*
* @link https://developer.wordpress.org/advanced-administration/debug/debug-wordpress/
*/
define( ‘WP_DEBUG’, !!getenv_docker(‘WORDPRESS_DEBUG’, ”) );

/* Add any custom values between this line and the “stop editing” line. */

// If we’re behind a proxy server and using HTTPS, we need to alert WordPress of that fact
// see also https://wordpress.org/support/article/administration-over-ssl/#using-a-reverse-proxy
if (isset($_SERVER[‘HTTP_X_FORWARDED_PROTO’]) && strpos($_SERVER[‘HTTP_X_FORWARDED_PROTO’], ‘https’) !== false) {
$_SERVER[‘HTTPS’] = ‘on’;
}
// (we include this by default because reverse proxying is extremely common in container environments)

if ($configExtra = getenv_docker(‘WORDPRESS_CONFIG_EXTRA’, ”)) {
eval($configExtra);
}

/* That’s all, stop editing! Happy publishing. */

/** Absolute path to the WordPress directory. */
if ( ! defined( ‘ABSPATH’ ) ) {
define( ‘ABSPATH’, __DIR__ . “https://dev.to/” );
}

/** Sets up WordPress vars and included files. */
require_once ABSPATH . ‘wp-settings.php’;

$_SERVER[‘HTTPS’] = ‘on’;

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

به خاطر داشته باشید که تصویر وردپرس به خودی خود از HTTPS پشتیبانی نمی کند. بنابراین نیاز به یک پروکسی معکوس.

در نهایت باید اضافه کنیم webserver به خدمات

webserver:
depends_on:
– wordpress
image: nginx:latest
container_name: webserver
ports:
– “80:80”
– “443:443”
volumes:
– ./nginx/nginx.conf:/etc/nginx/conf.d/default.conf
– ./nginx/certs:/etc/nginx/certs

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

ما در حال اضافه کردن هستیم depends_on: wordpress زیرا می خواهیم سرویس wordpress قبل از سرویس وب سرور راه اندازی شود.
ما هر دو را افشا می کنیم port 80 و 443.
باید a را پاس کنیم nginx.conf فایلی که امکان پراکسی معکوس را نیز فراهم می کند .crt و .key فایل های SSL

آ nginx.conf فایل محلی باید به شکل زیر باشد:

server {
listen 80;
location / {
proxy_pass http://wordpress;
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 $scheme;
}
}

server {
listen 443 ssl;

ssl_certificate /etc/nginx/certs/nginx.crt;
ssl_certificate_key /etc/nginx/certs/nginx.key;

location / {
proxy_pass http://wordpress;
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 $scheme;
}
}

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

برای ارائه محتوای HTTPS، گواهی SSL مورد نیاز است.

برای اهداف توسعه، من از این ابزار آنلاین برای تولید گواهی امضا شده خودم استفاده کردم (.crt و .key فایل ها). با خیال راحت از certbot یا openssl استفاده کنید

در نهایت، با انگشت روی دست، آماده دویدن هستیم docker-compose up!

پس از مراحل نصب، اگر به تنظیمات بروید، خواهید دید که httpsبه اضافه شده است WordPress Address و Site Address

خودشه!

من برای راه اندازی https برای وردپرس مشکل داشتم، بنابراین فکر کردم وقتی فهمیدم باید آن را به اشتراک بگذارم. هر گونه بازخوردی را به اشتراک بگذارید! با تشکر و روز خوبی داشته باشید!

در اینجا مخزن GitHub با کد استفاده شده است.

اگر می خواهید وردپرس را در یک ظرف Docker میزبانی کنید اما در پیکربندی HTTPS مشکل دارید، مراحل زیر ممکن است به شما کمک کند!

آهنگسازی docker-compose.yml فایل

بیایید a ایجاد کنیم docker-compose.yml فایل برای تعریف خدماتی که به آن نیاز داریم.

ابتدا، ما قصد داریم تا را اضافه کنیم db به خدمات

db:
    image: mysql:5.7
    container_name: db
    ports:
      - "3306:3306"
    environment:
      MYSQL_DATABASE: wordpress
      MYSQL_USER: notanotheruser
      MYSQL_PASSWORD: 1234
      MYSQL_ROOT_PASSWORD: root1234
    volumes:
      - db_data:/var/lib/mysql
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

  • ما در حال افشای آن هستیم port 3306 در صورتی که بخواهیم با MySQL Workbench به پایگاه داده متصل شویم تا نگاه بهتری داشته باشیم.
  • ما در حال عبور از environment variables برای راه اندازی سرور MySQL طبق مستندات مورد نیاز است
  • ما در حال ایجاد یک volume برای حفظ وضعیت سرور MySQL حتی پس از اینکه کانتینر سرویس را خاموش کردیم.

بعد از اینکه db را تنظیم کردیم، می خواهیم اضافه کنیم wordpress به خدمات

wordpress:
    depends_on:
      - db
    image: wordpress:latest
    container_name: wordpress
    environment:
      WORDPRESS_DB_HOST: db
      WORDPRESS_DB_USER: notanotheruser
      WORDPRESS_DB_PASSWORD: 1234
      WORDPRESS_DB_NAME: wordpress
    volumes:
      - ./wordpress/wp-config.php:/var/www/html/wp-config.php
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

  • ما در حال اضافه کردن هستیم depends_on: db زیرا می خواهیم سرویس db قبل از سرویس wordpress راه اندازی شود.
  • ما در حال عبور از environment variables برای راه اندازی وردپرس طبق مستندات مورد نیاز است
  • باید رونویسی کنیم wp-config.php فایل در نصب وردپرس با خودمان فقط برای اضافه کردن یک خط که به ما امکان استفاده از https را می دهد و آن این است: $_SERVER['HTTPS'] = 'on';

آ wp-config.php فایل محلی باید به شکل زیر باشد:


/**
 * The base configuration for WordPress
 *
 * The wp-config.php creation script uses this file during the installation.
 * You don't have to use the website, you can copy this file to "wp-config.php"
 * and fill in the values.
 *
 * This file contains the following configurations:
 *
 * * Database settings
 * * Secret keys
 * * Database table prefix
 * * ABSPATH
 *
 * This has been slightly modified (to read environment variables) for use in Docker.
 *
 * @link https://developer.wordpress.org/advanced-administration/wordpress/wp-config/
 *
 * @package WordPress
 */

// IMPORTANT: this file needs to stay in-sync with https://github.com/WordPress/WordPress/blob/master/wp-config-sample.php
// (it gets parsed by the upstream wizard in https://github.com/WordPress/WordPress/blob/f27cb65e1ef25d11b535695a660e7282b98eb742/wp-admin/setup-config.php#L356-L392)

// a helper function to lookup "env_FILE", "env", then fallback
if (!function_exists('getenv_docker')) {
    // https://github.com/docker-library/wordpress/issues/588 (WP-CLI will load this file 2x)
    function getenv_docker($env, $default) {
        if ($fileEnv = getenv($env . '_FILE')) {
            return rtrim(file_get_contents($fileEnv), "\r\n");
        }
        else if (($val = getenv($env)) !== false) {
            return $val;
        }
        else {
            return $default;
        }
    }
}

// ** Database settings - You can get this info from your web host ** //
/** The name of the database for WordPress */
define( 'DB_NAME', getenv_docker('WORDPRESS_DB_NAME', 'wordpress') );

/** Database username */
define( 'DB_USER', getenv_docker('WORDPRESS_DB_USER', 'example username') );

/** Database password */
define( 'DB_PASSWORD', getenv_docker('WORDPRESS_DB_PASSWORD', 'example password') );

/**
 * Docker image fallback values above are sourced from the official WordPress installation wizard:
 * https://github.com/WordPress/WordPress/blob/1356f6537220ffdc32b9dad2a6cdbe2d010b7a88/wp-admin/setup-config.php#L224-L238
 * (However, using "example username" and "example password" in your database is strongly discouraged.  Please use strong, random credentials!)
 */

/** Database hostname */
define( 'DB_HOST', getenv_docker('WORDPRESS_DB_HOST', 'mysql') );

/** Database charset to use in creating database tables. */
define( 'DB_CHARSET', getenv_docker('WORDPRESS_DB_CHARSET', 'utf8') );

/** The database collate type. Don't change this if in doubt. */
define( 'DB_COLLATE', getenv_docker('WORDPRESS_DB_COLLATE', '') );

/**#@+
 * Authentication unique keys and salts.
 *
 * Change these to different unique phrases! You can generate these using
 * the {@link https://api.wordpress.org/secret-key/1.1/salt/ WordPress.org secret-key service}.
 *
 * You can change these at any point in time to invalidate all existing cookies.
 * This will force all users to have to log in again.
 *
 * @since 2.6.0
 */
define( 'AUTH_KEY',         getenv_docker('WORDPRESS_AUTH_KEY',         'a04e06eaef05d9dc187680cdccb8aae37d90bfcd') );
define( 'SECURE_AUTH_KEY',  getenv_docker('WORDPRESS_SECURE_AUTH_KEY',  'f1d35321ba3ff820430674efc877f53b64bdb50e') );
define( 'LOGGED_IN_KEY',    getenv_docker('WORDPRESS_LOGGED_IN_KEY',    '5d880df893cba59fed67def1acac2c61e46c4671') );
define( 'NONCE_KEY',        getenv_docker('WORDPRESS_NONCE_KEY',        '2fe4fdf4ff93153db924369eb7bbd823f446577c') );
define( 'AUTH_SALT',        getenv_docker('WORDPRESS_AUTH_SALT',        '326143348bb31e5451cf0e838048043ea39e5351') );
define( 'SECURE_AUTH_SALT', getenv_docker('WORDPRESS_SECURE_AUTH_SALT', '33aa7ae0aa39497d0d13e84413061e0168eadea3') );
define( 'LOGGED_IN_SALT',   getenv_docker('WORDPRESS_LOGGED_IN_SALT',   'f032c820677ec84f4ef05a6d2e4c2547be1e7b1b') );
define( 'NONCE_SALT',       getenv_docker('WORDPRESS_NONCE_SALT',       '506e5adc0340e19f13b1018ecb7b7776e92b0a73') );
// (See also https://wordpress.stackexchange.com/a/152905/199287)

/**#@-*/

/**
 * WordPress database table prefix.
 *
 * You can have multiple installations in one database if you give each
 * a unique prefix. Only numbers, letters, and underscores please!
 */
$table_prefix = getenv_docker('WORDPRESS_TABLE_PREFIX', 'wp_');

/**
 * For developers: WordPress debugging mode.
 *
 * Change this to true to enable the display of notices during development.
 * It is strongly recommended that plugin and theme developers use WP_DEBUG
 * in their development environments.
 *
 * For information on other constants that can be used for debugging,
 * visit the documentation.
 *
 * @link https://developer.wordpress.org/advanced-administration/debug/debug-wordpress/
 */
define( 'WP_DEBUG', !!getenv_docker('WORDPRESS_DEBUG', '') );

/* Add any custom values between this line and the "stop editing" line. */

// If we're behind a proxy server and using HTTPS, we need to alert WordPress of that fact
// see also https://wordpress.org/support/article/administration-over-ssl/#using-a-reverse-proxy
if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && strpos($_SERVER['HTTP_X_FORWARDED_PROTO'], 'https') !== false) {
    $_SERVER['HTTPS'] = 'on';
}
// (we include this by default because reverse proxying is extremely common in container environments)

if ($configExtra = getenv_docker('WORDPRESS_CONFIG_EXTRA', '')) {
    eval($configExtra);
}

/* That's all, stop editing! Happy publishing. */

/** Absolute path to the WordPress directory. */
if ( ! defined( 'ABSPATH' ) ) {
    define( 'ABSPATH', __DIR__ . "https://dev.to/" );
}

/** Sets up WordPress vars and included files. */
require_once ABSPATH . 'wp-settings.php';

$_SERVER['HTTPS'] = 'on';
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

به خاطر داشته باشید که تصویر وردپرس به خودی خود از HTTPS پشتیبانی نمی کند. بنابراین نیاز به یک پروکسی معکوس.

در نهایت باید اضافه کنیم webserver به خدمات

webserver:
    depends_on:
      - wordpress
    image: nginx:latest
    container_name: webserver
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./nginx/nginx.conf:/etc/nginx/conf.d/default.conf
      - ./nginx/certs:/etc/nginx/certs
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

  • ما در حال اضافه کردن هستیم depends_on: wordpress زیرا می خواهیم سرویس wordpress قبل از سرویس وب سرور راه اندازی شود.
  • ما هر دو را افشا می کنیم port 80 و 443.
  • باید a را پاس کنیم nginx.conf فایلی که امکان پراکسی معکوس را نیز فراهم می کند .crt و .key فایل های SSL

آ nginx.conf فایل محلی باید به شکل زیر باشد:

server {
    listen 80;
    location / {
        proxy_pass http://wordpress;
        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 $scheme;
    }
}

server {
    listen 443 ssl;

    ssl_certificate /etc/nginx/certs/nginx.crt;
    ssl_certificate_key /etc/nginx/certs/nginx.key;

    location / {
        proxy_pass http://wordpress;
        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 $scheme;
    }
}

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

برای ارائه محتوای HTTPS، گواهی SSL مورد نیاز است.

برای اهداف توسعه، من از این ابزار آنلاین برای تولید گواهی امضا شده خودم استفاده کردم (.crt و .key فایل ها). با خیال راحت از certbot یا openssl استفاده کنید

در نهایت، با انگشت روی دست، آماده دویدن هستیم docker-compose up!

docker-compose up

پس از مراحل نصب، اگر به تنظیمات بروید، خواهید دید که httpsبه اضافه شده است WordPress Address و Site Address

نتیجه https

خودشه!

من برای راه اندازی https برای وردپرس مشکل داشتم، بنابراین فکر کردم وقتی فهمیدم باید آن را به اشتراک بگذارم. هر گونه بازخوردی را به اشتراک بگذارید! با تشکر و روز خوبی داشته باشید!

در اینجا مخزن GitHub با کد استفاده شده است.

این همه مردمی است

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا