دیپلوی سایت وردپرسی در مسیر اصلی سامانه غیر وردپرسی

همیشه یکی از دغدغه های سامانه ها برای تبلیغات بحث سئو در گوگل و سایر موتورهای جستجو است و از آن جایی که سئو سایت های وردپرسی بسیار ساده تر از سامانه هایی که با سایر تکنولوژي های فرانت مثل nuxt-js ، next-js یا حتی برخی دیگر مثل react یا vue که سئو ندارند می باشد معمولا گزینه پیشنهادی متخصین سئو دیپلوی یک سامانه وردپرسی برای بخش مجله یک سامانه است و با توجه به اینکه سئو subdomain پایین تر می باشد معمولا خواسته ها آن ها به اینصورت است که سایت وردپرسی در یک مسیر از سامانه اصلی قرار بگیرد.با توجه به اینکه مستندات آموزشی در ارتباط با این مسئله کمتری وجود دارد در این پست مراحل کامل دیپلوی یک سامانه وردپرسی در مسیر یک سامانه که بک اند آن جنگو می باشد را توضیح دادم.Django + WordPress together on nginxاین نکته در نظر داشته باشید که شما میتوانید از این آموزش برای سامانه هایی که بکند آن جنگو نمی باشد نیز استفاده کنید.در این مستند قرار است یک سایت وردپرس را در یک route از اپلیکیشن جنگویی ( your-domain-name.com/mag) به دو روش سنتی و Dockerize دیپلوی کنیم.در این مستند صرفا دیپلوی قسمت وردپرسی درکنار اپلیکیشن جنگویی توضیح داده شده است و به دیپلوی سامانه جنگویی اشاره ای نشده است. همچنین هیچگونه ارتباطی بین دو سامانه وردپرسی با جنگویی برقرار نیست و دقیقا مشابه زمانی که سایت وردپرسی در یک سابدامین mag.your-domain.name.com بالاست در این آموزش در مسیر your-domain-name.com/mag اجرا میشود.روش Dockerize شده:در این آموزش از دیتابیس mysql و وب سرور nginx استفاده شده است. در نظر داشته باشید برای دیپلوی وردپرس بر روی وب سرور nginx نیاز است از وردپرس نسخه fpm استفاده کنیدنکته: برای این روش نیاز است داکر بر روی سرور شما نصب باشد برای نصب داکر با توجه به نسخه لینوکس سرور خود میتوانید از این لینک استفاده کنید.در مسیر اصلی سامانه یک دایرکتوری به اسم domain خود ایجاد کرده و فایل docker-compose.yml‍ در آن ایجاد کنید. در این مستند اسم دایرکتوری ما mag می باشد.version: '3.9' ​ services: wordpress: image: wordpress:6.2.2-fpm restart: on-failure environment: WORDPRESS_DB_HOST: db WORDPRESS_DB_USER: mysql WORDPRESS_DB_PASSWORD: 123456 WORDPRESS_DB_NAME: wp working_dir: /var/www/mag ports: - 9000:9000 volumes: - ./mag_data:/var/html/mag depends_on: - mysql ​ mysql: image: mysql:5.7 restart: on-failure environment: MYSQL_ROOT_PASSWORD: 123456 MYSQL_DATABASE: wp MYSQL_USER: mysql MYSQL_PASSWORD: 123456 volumes: - db:/var/lib/mysql ​ nginx: image: nginx:1.25.0-alpine restart: on-failure volumes: - ./nginx_conf:/etc/nginx/conf.d - wordpress:/var/www/mag ports: - 8080:80 depends_on: - wordpress volumes: mysql: جهت سهولت آموزش enviroment ها در docker compose مشخص شده است شما میتوانید env های خود را در یک فایل مجزا تعریف و در docker compose با استفاده از env-file تعریف کنیددر مسیر فایل docker-compose.yml یک فایل nginx.conf ساخته و تنظیمات زیر را اعمال نماییدuser www-data; worker_processes auto; pid /run/nginx.pid; include /etc/nginx/modules-enabled/*.conf; ​ events { worker_connections 768; # multi_accept on; } ​ ​ http { ## # Basic Settings ## ​ sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 65; types_hash_max_size 2048; # server_tokens off; ​ # server_names_hash_bucket_size 64; # server_name_in_redirect off; ​ include /etc/nginx/mime.types; default_type application/octet-stream; ​ server { listen 80; client_max_body_size 200M; server_name your-domain-name.com; access_log /home/ubuntu/app/run/logs/nginx-access.log; error_log /home/ubuntu/app/run/logs/nginx-error.log warn; location ^~ /mag { root /var/www/; index index.php; # Add a trailing slash if missing if (!-f $request_filename) { rewrite [^/]$ $uri/ permanent; } ​ try_files $uri $uri/ /mag/index.php?$args; ​ location ~ \.php { try_files $uri =404; fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_index index.php; fastcgi_pass wordpress:9000; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param PATH_INFO $fastcgi_path_info; include fastcgi_params; } ​ } ​ location /robots.txt { root /home/ubuntu/app/ui; if ($request_uri ~ ^/robots.txt/$) { return 301 /robots.txt; } try_files $uri =404; } } # other location config نکاتفایل nginx.conf صرفا یک نمونه می باشد و شما میتوانید با توجه به نیازمندی های مدنظر تغییر دهید.مسیر robots.txt الزامی نیست و صرفا برای crawler های گوگل جهت بررسی سامانه شما استفاده میشود و ارتباطی با دیپلوی وردپرس شما ندارد.در این مستند سایت وردپرسی شما در مسیر /mag اجرا میشود در صورت نیاز میتوانید در مسیر مدنظر خود آن را اجرا نمایید.پس از انجام مراحل بالا دستور docker compose up -d را اجرا نموده و سپس سایت وردپرسی شما در مسیر your-domain-name.com/mag قابل استفاده می باشد.در صورت بروز مشکل میتوانید به این سایت مراجعه کنید. این مستند با روش داکرایز شده از این آموزش تهیه شده است.روش سنتیدر مسیر ‍‍/var/www/‍ یک دایرکتوری به اسم مسیری که مدنظرتان برای اجرای سایت وردپرسی است ایجاد کنید. در این آموزش /mag است پس یک دایرکتوری به همین اسم ایجاد میکنیم.سپس وردپرس را از طریق لینک زیر دریافت کنید.wget https://wordpress.org/latest.tar.gzسپس با استفاده از دستور ‍tar -xzvf latest.tar.gz فایل را اکسترکت کنید و فایل latest.tar.gz را پاک کنید و در مسیر /var/www/ دستور زیر را وارد کنید.sudo chown -R www-data:www-data magسپس دیتابیس mysql را از طریق این لینک در سرور نصب کنید یک دیتابیس و یوزر جدید برای اتصال وردپرس به دیتابیس طبق آموزش ایجاد کنید.سپس یک فایل nginx.conf در مسیر /etc/nginx/sites-available/ ایجاد کنید و تنظیمات زیر را در آن قرار دهید.user www-data; worker_processes auto; pid /run/nginx.pid; include /etc/nginx/modules-enabled/*.conf; ​ events { worker_connections 768; # multi_accept on; } ​ ​ http { ## # Basic Settings ## ​ sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 65; types_hash_max_size 2048; # server_tokens off; ​ # server_names_hash_bucket_size 64; # server_name_in_redirect off; ​ include /etc/nginx/mime.types; default_type application/octet-stream; ​ server { listen 80; client_max_body_size 200M; server_name your-domain-name.com; access_log /home/ubuntu/app/run/logs/nginx-access.log; error_log /home/ubuntu/app/run/logs/nginx-error.log warn; location ^~ /mag { root /var/www/; index index.php; # Add a trailing slash if missing if (!-f $request_filename) { rewrite [^/]$ $uri/ permanent; } ​ try_files $uri $uri/ /mag/index.php?$args; ​ location ~ \.php { try_files $uri =404; fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_index index.php; fastcgi_pass 127.0.0.1:9000; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param PATH_INFO $fastcgi_path_info; include fastcgi_params; } ​ } ​ location /robots.txt { root /home/ubuntu/app/ui; if ($request_uri ~ ^/robots.txt/$) { return 301 /robots.txt; } try_files $uri =404; } } # other location configدر مسیر /etc/nginx/site-enabled/ دستور زیر را وارد کنید.sudo ln -s /etc/nginx/sites-available/nginx.conf .nginx خود را با دستور sudo service nginx restart ری استارت کنید. در صورت نبود مشکل باید nginx شما به درستی فعال باشد. برای بررسی مشکل میتوانید دستور sudo nginx -t را اجرا کنید.حال سایت وردپرسی شما در ادرس your-domain-name.com/mag در کنار سایت جنگویی شما بالا می باشد و تمام مسیرهایی که در وردپرس فعال می باشد با /mag نیاز است اجرا شود.خوشحال میشم نظرتون در ارتباط با این آموزش بدونم و در صورت بروز مشکل یا سوال میتوانید از طریق ایمیل زیر با من در ارتباط باشیدpejmanghafouricorp@gmail.com