مقدمه
اتوماسیون سرور مجازی اکنون به دلیل ماهیت یکبار مصرف محیط های کاربردی مدرن ، نقش اساسی در مدیریت سیستم ها ایفا می کند. ابزارهای مدیریت پیکربندی مانند Ansible معمولاً برای ساده سازی فرایند خودکار سازی تنظیم سرور مجازی با تعیین مراحل استاندارد برای سرور مجازی جدید استفاده می شود و در عین حال خطای انسانی مرتبط با تنظیمات دستی را نیز کاهش می دهد.
Ansible یک معماری ساده را ارائه می دهد که نیازی به نصب نرم افزار ویژه روی گره ها ندارد. همچنین مجموعه ای از ویژگی ها و ماژول های داخلی را فراهم می کند که نوشتن اسکریپت های اتوماسیون را تسهیل می کند.
در این راهنما نحوه استفاده از Ansible برای خودکارسازی مراحل موجود در راهنمای ما درباره نحوه نصب وردپرس با LAMP در اوبونتو 18.04 توضیح داده شده است. وردپرس محبوب ترین CMS (سیستم مدیریت محتوا) در اینترنت است که به کاربران امکان می دهد وبلاگ ها و وب سایتهای قابل انعطاف را فراتر از MySQL با پردازش PHP تنظیم کنند. پس از راه اندازی ، تقریباً تمام مراحل اجرا از طریق web frontend قابل انجام است.
پیش نیازها
برای اجرای تنظیم خودکار ارائه شده توسط playbook  که در این راهنما در مورد آن صحبت می کنیم ، به این موارد نیاز دارید:
• یک گره کنترل Ansible : یک دستگاه اوبونتو 18.04 که دارای Ansible نصب شده و تنظیم شده است تا با استفاده از کلیدهای SSH به میزبان های Ansible شما متصل شود. اطمینان حاصل کنید که گره کنترل دارای یک کاربر معمولی با مجوزهای sudo باشد و فایروال فعال نیز داشته باشد ، همانطور که در راهنمای راه اندازی سرور مجازی اولیه ما توضیح داده شده است. برای تنظیم Ansible ، لطفا راهنمای ما در مورد نحوه نصب و پیکربندی Ansible در اوبونتو 18.04 را دنبال کنید.
• یک یا چند هاست Ansible: یک یا چند سرور مجازی از راه دور Ubuntu 18.04 که قبلاً به کمک راهنمای نحوه استفاده از Ansible برای خودکارسازی تنظیمات اولیه سرور مجازی در اوبونتو 18.04 تنظیم شده اند.
قبل از ادامه کار ، ابتدا باید اطمینان حاصل کنید که گره کنترل Ansible شما قادر به اتصال و اجرای دستورات در هاست (های) Ansible باشد. برای بررسی اتصال ، لطفاً مرحله 3 نحوه نصب و پیکربندی Ansible در اوبونتو 18.04 را بررسی کنید.

این Playbook چه کاری انجام می دهد؟
این playbook  Ansible از طریق روشی که در راهنمای ما در مورد نحوه نصب وردپرس با LAMP در اوبونتو 18.04 ارائه شده است ، جایگزینی برای اجرای دستی فراهم می کند.
اجرای این playbook اقدامات زیر را در هاست Ansible شما انجام خواهد داد:
1) aptitude را نصب میکند ، که توسط Ansible به عنوان جایگزینی برای مدیر بسته apt ارجحیت داده میشود.
2)بسته های LAMP مورد نیاز و پسوندهای PHP را نصب میکند.
3) یک Apache VirtualHost جدید برای وب سایت وردپرس ایجاد و فعال مینماید.
4) ماژول بازنویسی Apache (mod_rewrite) را فعال میکند.
5) وب سایت پیش فرض Apache را غیرفعال میکند.
6) رمز ورود را برای کاربر root MySQL تنظیم میکند.
7) حساب های MySQL ناشناس را حذف و پایگاه داده را آزمایش میکند.
8) برای وب سایت وردپرس یک بانک اطلاعاتی MySQL و کاربر جدید ایجاد میکند.
9)UFW را تنظیم میکند تا ترافیک HTTP روی درگاه پیکربندی شده انجام شود (به طور پیش فرض 80).
10) وردپرس را دانلود و باز میکند.
11) مالکیت و مجوزهای صحیح دایرکتوری را تنظیم میکند.
12) با استفاده از الگوی ارائه شده ، فایل wp-config.php را تنظیم کنید.
پس از پایان کار playbook ، بر اساس گزینه هایی که در متغیرهای پیکربندی خود تعریف کرده اید ، یک نصب وردپرس در یک محیط LAMP اجرا می شود.
نحوه استفاده از این Playbook
اولین کاری که ما باید انجام دهیم این است که وردپرس را در playbook LAMP و متعلقات آن از منبع do-community / ansible-playbooks را دریافت کنیم. ما باید این منبع را به یک پوشه محلی در داخل گره کنترل Ansible تبدیل کنیم.
اگر قبلا با دنبال کردن راهنمای دیگری ، این منبع را کلون کرده اید ، به کپیansible-playbooks موجود خود دسترسی پیدا کنید و یک دستور git pull را اجرا کنید تا مطمئن شوید که مطالب به روز شده را دارید:
⦁ $ cd ~/ansible-playbooks

⦁ $ git pull
اگر این اولین بار است که از منابع do-community / ansible-playbooks استفاده می کنید ، باید با کلون کردن منبع در پوشه هوم فولدر خود شروع کنید:
⦁ $ cd ~

⦁ $ git clone https://github.com/do-community/ansible-playbooks.git

⦁ $ cd ansible-playbooks

فایل های مورد علاقه ما در داخل پوشه wordpress-lamp_ubuntu1804 قرار گرفته اند که دارای ساختار زیر است:
wordpress-lamp_ubuntu1804
├── files
│ ├── apache.conf.j2
│ └── wp-config.php.j2
├── vars
│ └── default.yml
├── playbook.yml
└── readme.md

در اینجا در مورد هر یک از این فایل ها آمده است:
files / apache.conf.j2: فایل الگو برای تنظیم Apache VirtualHost.
files / wp-config.php.j2: فایل الگو برای تنظیم فایل پیکربندی WordPress.
vars / default.yml: فایل متغیر برای شخصی سازی تنظیمات playbook.
playbook.yml: فایل playbook ، شامل کارهایی که باید روی سرور مجازی راه دور اجرا شود.
readme.md: فایل متنی حاوی اطلاعات مربوط به این playbook .
ما برای سفارشی سازی گزینه های playbook ، فایل متغیرهای آن را ویرایش خواهیم کرد. به دایرکتوری wordpress-lamp_ubuntu1804 دسترسی پیدا کنید و فایل vars / default.yml را با استفاده از ویرایشگر خط فرمان مورد نظر خود باز کنید:
⦁ $ cd wordpress-lamp_ubuntu1804

⦁ $ nano vars/default.yml
این فایل شامل چند متغیر است که باید به آن توجه کنید:
vars/default.yml

#System Settings
php_modules: [ ‘php-curl’, ‘php-gd’, ‘php-mbstring’, ‘php-xml’, ‘php-xmlrpc’, ‘php-soap’, ‘php-intl’, ‘php-zip’ ]

#MySQL Settings
mysql_root_password: “mysql_root_password”
mysql_db: “wordpress”
mysql_user: “sammy”
mysql_password: “password”

#HTTP Settings
http_host: “your_domain”
http_conf: “your_domain.conf”
http_port: “80”

لیست زیر شامل توضیح مختصری در مورد هر یک از این متغیرها و نحوه تغییر آنها می باشد:
php_modules: آرایه ای حاوی افزونه های PHP که باید برای پشتیبانی از راه اندازی وردپرس شما نصب شوند. شما نیازی به تغییر این متغیر ندارید ، اما در صورت نیاز برای ستاپ خاص شما، باید افزودنه های جدید به لیست اضافه کنید.
mysql_root_password: کلمه عبور مورد نظر برای حساب MySQL ریشه
mysql_db: نام پایگاه داده MySQL که باید برای وردپرس ایجاد شود.
mysql_user: نام کاربر MySQL که باید برای وردپرس ایجاد شود.
mysql_password: رمز عبور برای کاربر جدید MySQL.
http_host: نام دامنه شما.
http_conf: نام فایل پیکربندی که در Apache ایجاد می شود.
http_port: درگاه HTTP برای این هاست مجازی ، که به طور پیش فرض 80 است.
پس از اتمام به روزرسانی متغیرهای داخل vars / default.yml ، این فایل را ذخیره کنید و ببندید. اگر از nano استفاده کرده اید ، این کار را با فشار دادن CTRL + X ، Y انجام دهید. سپس enter را بزنید.
اکنون آماده اجرای این playbook در یک یا چند سرور مجازی هستید. بیشتر playbook ها به گونه پیش فرض تنظیم شده اند که در هر سرور مجازی موجود شما اجرا می شود. ما می توانیم از فلگ -l استفاده کنیم تا مطمئن شویم که فقط یک زیر مجموعه از سرور مجازی ها یا یک سرور مجازی منفرد تحت تأثیر Playbook قرار گرفته است. ما همچنین می توانیم از فلگ -u استفاده کنیم تا مشخص کنیم از کدام کاربر روی سرور مجازی از راه دور استفاده می کنیم تا دستورات playbook را روی میزبان از راه دور متصل کنیم.
برای اجرای playbook فقط در server1 ، با اتصال به عنوان sammy ، می توانید از دستور زیر استفاده کنید:
⦁ $ ansible-playbook playbook.yml -l server1 -u sammy

خروجی مشابه این دریافت خواهید کرد:
Output
PLAY [all] *****************************************************************************************************************************

TASK [Gathering Facts] *****************************************************************************************************************
ok: [server1]

TASK [Install prerequisites] ***********************************************************************************************************
ok: [server1]

TASK [Download and unpack latest WordPress] ********************************************************************************************
changed: [server1]

TASK [Set ownership] *******************************************************************************************************************
changed: [server1]

TASK [Set permissions for directories] *************************************************************************************************
changed: [server1]

TASK [Set permissions for files] *******************************************************************************************************
changed: [server1]

TASK [Set up wp-config] ****************************************************************************************************************
changed: [server1]

RUNNING HANDLER [Reload Apache] ********************************************************************************************************
changed: [server1]

RUNNING HANDLER [Restart Apache] *******************************************************************************************************
changed: [server1]

PLAY RECAP *****************************************************************************************************************************
server1 : ok=22 changed=18 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0

توجه: برای کسب اطلاعات بیشتر در مورد نحوه اجرای Ansible playbooks ، راهنمای Ansible Cheat Sheet Guide را بررسی کنید.
پس از پایان راه اندازی Playbook ، می توانید به مرورگر وب خود بروید تا نصب وردپرس را از همانجا به پایان برسانید.
به نام دامنه یا آدرس IP عمومی سرور مجازی خود بروید:
http: // server_host_or_IP
صفحه ای مانند این را مشاهده خواهید کرد:

پس از انتخاب زبانی که می خواهید برای نصب وردپرس خود استفاده کنید ، مرحله نهایی برای تنظیم کاربر و رمزعبور وردپرس به شما ارائه می شود تا بتوانید وارد کنترل پنل شوید:

با کلیک بر روی صفحه ، شما به صفحه ای منتقل می شوید که از شما خواسته می شود وارد شوید:

پس از ورود به سیستم ، شما به داشبورد مدیریت وردپرس منتقل می شوید:

برخی از مراحل بعدی رایج برای سفارشی سازی نصب وردپرس شامل انتخاب تنظیمات permalinks  برای پست های شما (می توانید در Settings > Permalinks بیابید) و انتخاب تم جدید (در Appearance > Themes) میباشد.
محتوای Playbook
می توانید تنظیمات سرور LAMP وردپرس را که در این آموزش مشاهده شده است ، در پوشه wordpress-lamp_ubuntu1804 در داخل منبع DigitalOcean Community Playbooks مشاهده کنید. برای کپی یا دانلود مستقیم محتوای اسکریپت ، روی دکمه Raw به سمت بالای هر اسکریپت کلیک کنید.
محتویات کامل Playbook و همچنین فایل های مرتبط با آن نیز برای راحتی شما در اینجا گنجانده شده است.
vars / default.yml
فایل متغیر default.yml حاوی مقادیری است که در وظایف playbook از جمله تنظیمات بانک اطلاعاتی و نام دامنه برای پیکربندی در Apache استفاده خواهد شد.
vars/default.yml
#System Settings
php_modules: [ ‘php-curl’, ‘php-gd’, ‘php-mbstring’, ‘php-xml’, ‘php-xmlrpc’, ‘php-soap’, ‘php-intl’, ‘php-zip’ ]

#MySQL Settings
mysql_root_password: “mysql_root_password”
mysql_db: “wordpress”
mysql_user: “sammy”
mysql_password: “password”

#HTTP Settings
http_host: “your_domain”
http_conf: “your_domain.conf”
http_port: “80”

files/apache.conf.j2
فایل apache.conf.j2 یک فایل الگوی Jinja 2 است که یک آپشن جدید Apache VirtualHost را پیکربندی می کند. متغیرهای مورد استفاده در این الگو در فایل متغیر vars / default.yml تعریف شده اند.
files/apache.conf.j2
<VirtualHost *:{{ http_port }}>
ServerAdmin webmaster@localhost
ServerName {{ http_host }}
ServerAlias www.{{ http_host }}
DocumentRoot /var/www/{{ http_host }}
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined

<Directory /var/www/{{ http_host }}>
Options -Indexes
</Directory>

<IfModule mod_dir.c>
DirectoryIndex index.php index.html index.cgi index.pl index.xhtml index.htm
</IfModule>

</VirtualHost>

files/wp-config.php.j2
فایل wp-config.php.j2 یکی دیگر از الگوهای Jinja است که برای تنظیم فایل اصلی پیکربندیWordPress استفاده می شود. متغیرهای مورد استفاده در این الگو در فایل متغیر vars / default.yml تعریف شده اند. کلیدهای احراز هویت منحصر به فرد با استفاده از یک عملکرد ترکیبی ایجاد می شوند.
files/info.php.j2
<?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 web site, you can
* copy this file to “wp-config.php” and fill in the values.
*
* This file contains the following configurations:
*
* * MySQL settings
* * Secret keys
* * Database table prefix
* * ABSPATH
*
* @link https://codex.wordpress.org/Editing_wp-config.php
*
* @package WordPress
*/

// ** MySQL settings – You can get this info from your web host ** //
/** The name of the database for WordPress */
define( ‘DB_NAME’, ‘{{ mysql_db }}’ );

/** MySQL database username */
define( ‘DB_USER’, ‘{{ mysql_user }}’ );

/** MySQL database password */
define( ‘DB_PASSWORD’, ‘{{ mysql_password }}’ );

/** MySQL hostname */
define( ‘DB_HOST’, ‘localhost’ );

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

/** The Database Collate type. Don’t change this if in doubt. */
define( ‘DB_COLLATE’, ” );

/** Filesystem access **/
define(‘FS_METHOD’, ‘direct’);

/**#@+
* 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’, ‘{{ ansible_date_time.iso8601_micro | hash(‘sha256′) }}’ );
define( ‘SECURE_AUTH_KEY’, ‘{{ ansible_date_time.iso8601_micro | hash(‘sha256′) }}’ );
define( ‘LOGGED_IN_KEY’, ‘{{ ansible_date_time.iso8601_micro | hash(‘sha256′) }}’ );
define( ‘NONCE_KEY’, ‘{{ ansible_date_time.iso8601_micro | hash(‘sha256′) }}’ );
define( ‘AUTH_SALT’, ‘{{ ansible_date_time.iso8601_micro | hash(‘sha256′) }}’ );
define( ‘SECURE_AUTH_SALT’, ‘{{ ansible_date_time.iso8601_micro | hash(‘sha256′) }}’ );
define( ‘LOGGED_IN_SALT’, ‘{{ ansible_date_time.iso8601_micro | hash(‘sha256′) }}’ );
define( ‘NONCE_SALT’, ‘{{ ansible_date_time.iso8601_micro | hash(‘sha256′) }}’ );

/**#@-*/

/**
* 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 = ‘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 Codex.
*
* @link https://codex.wordpress.org/Debugging_in_WordPress
*/
define( ‘WP_DEBUG’, false );

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

/** Absolute path to the WordPress directory. */
if ( ! defined( ‘ABSPATH’ ) ) {
define( ‘ABSPATH’, dirname( __FILE__ ) . ‘/’ );
}

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

playbook.yml
فایل playbook.yml جایی است که کلیه وظایف این مجموعه تعریف شده است. این کار با تعریف گروه سرور مجازی هایی که باید هدف این مجموعه باشند (all) شروع می شود ، و پس از آن برای تعریف اینکه وظایف باید بصورت پیش فرض با افزایش امتیاز (sudo) انجام شود یا خیر، از become: true استفاده می کند. سپس ، فایل متغیر vars / default.yml را برای بارگذاری گزینه های پیکربندی شامل می شود.
playbook.yml

– hosts: all
become: true
vars_files:
– vars/default.yml

tasks:
– name: Install prerequisites
apt: name=aptitude update_cache=yes state=latest force_apt_get=yes
tags: [ system ]

– name: Install LAMP Packages
apt: name={{ item }} update_cache=yes state=latest
loop: [ ‘apache2’, ‘mysql-server’, ‘python3-pymysql’, ‘php’, ‘php-mysql’, ‘libapache2-mod-php’ ]
tags: [ system ]

– name: Install PHP Extensions
apt: name={{ item }} update_cache=yes state=latest
loop: “{{ php_modules }}”
tags: [ system ]

# Apache Configuration
– name: Create document root
file:
path: “/var/www/{{ http_host }}”
state: directory
owner: “www-data”
group: “www-data”
mode: ‘0755’
tags: [ apache ]

– name: Set up Apache VirtualHost
template:
src: “files/apache.conf.j2”
dest: “/etc/apache2/sites-available/{{ http_conf }}”
notify: Reload Apache
tags: [ apache ]

– name: Enable rewrite module
shell: /usr/sbin/a2enmod rewrite
notify: Reload Apache
tags: [ apache ]

– name: Enable new site
shell: /usr/sbin/a2ensite {{ http_conf }}
notify: Reload Apache
tags: [ apache ]

– name: Disable default Apache site
shell: /usr/sbin/a2dissite 000-default.conf
notify: Restart Apache
tags: [ apache ]

# MySQL Configuration
– name: Set the root password
mysql_user:
name: root
password: “{{ mysql_root_password }}”
login_unix_socket: /var/run/mysqld/mysqld.sock
tags: [ mysql, mysql-root ]

– name: Remove all anonymous user accounts
mysql_user:
name: ”
host_all: yes
state: absent
login_user: root
login_password: “{{ mysql_root_password }}”
tags: [ mysql ]

– name: Remove the MySQL test database
mysql_db:
name: test
state: absent
login_user: root
login_password: “{{ mysql_root_password }}”
tags: [ mysql ]

– name: Creates database for WordPress
mysql_db:
name: “{{ mysql_db }}”
state: present
login_user: root
login_password: “{{ mysql_root_password }}”
tags: [ mysql ]

– name: Create MySQL user for WordPress
mysql_user:
name: “{{ mysql_user }}”
password: “{{ mysql_password }}”
priv: “{{ mysql_db }}.*:ALL”
state: present
login_user: root
login_password: “{{ mysql_root_password }}”
tags: [ mysql ]

# UFW Configuration
– name: “UFW – Allow HTTP on port {{ http_port }}”
ufw:
rule: allow
port: “{{ http_port }}”
proto: tcp
tags: [ system ]

# WordPress Configuration
– name: Download and unpack latest WordPress
unarchive:
src: https://wordpress.org/latest.tar.gz
dest: “/var/www/{{ http_host }}”
remote_src: yes
creates: “/var/www/{{ http_host }}/wordpress”
tags: [ wordpress ]

– name: Set ownership
file:
path: “/var/www/{{ http_host }}”
state: directory
recurse: yes
owner: www-data
group: www-data
tags: [ wordpress ]

– name: Set permissions for directories
shell: “/usr/bin/find /var/www/{{ http_host }}/wordpress/ -type d -exec chmod 750 {} \\;”
tags: [ wordpress ]

– name: Set permissions for files
shell: “/usr/bin/find /var/www/{{ http_host }}/wordpress/ -type f -exec chmod 640 {} \\;”
tags: [ wordpress ]

– name: Set up wp-config
template:
src: “files/wp-config.php.j2”
dest: “/var/www/{{ http_host }}/wordpress/wp-config.php”
tags: [ wordpress ]

handlers:
– name: Reload Apache
service:
name: apache2
state: reloaded

– name: Restart Apache
service:
name: apache2
state: restarted

با خیال راحت این فایل ها را به بهترین وجه متناسب با نیازهای فردی خود در گردش کارتان تغییر دهید.
نتیجه
در این راهنما ، ما از Ansible برای خودکارسازی روند نصب و راه اندازی وب سایت وردپرس با LAMP روی سرور مجازی اوبونتو 18.04 استفاده کرده ایم.
اگر می خواهید کارهای دیگری در این playbook  را برای سفارشی سازی تنظیمات سرور مجازی خود انجام دهید ، لطفاً به راهنمای مقدماتی Ansible ( پیکربندی مدیریت 101: نوشتن Ansible Playbooks) مراجعه کنید.

 

از این لینک ها زیر می توانید آمورش های بیشتری برای لینوکس پیدا کنید :

نحوه تایید صحت رمز عبور با Apache در اوبونتو 18.04

نحوه نصب و استفاده از TimescaleDB در CentOS 7

نحوه تایید صحت رمز عبور با Apache در اوبونتو 18.04 (شروع سریع)

نحوه راه اندازی Eclipse Theia Cloud IDE Platform در Debian 10

نحوه نصب و استفاده ازRadamsa برای فوز کردن برنامه ها (تکنیک تست خودکار نرم افزار) و خدمات شبکه روی Ubuntu 18.04

نحوه نصب Docker Compose در Debian 10

چگونه می توان با کتابخانه (library) درخواست ها در پایتون شروع به کار کرد

نحوه اجرای صفحه گذاری در MySQL با PHP روی اوبونتو 18.04

نحوه تنظیم پلتفرم Eclipse Theia Cloud IDE در CentOS 7

بسته بندی برنامه Laravel 6 برای توسعه با Docker Compose در اوبونتو 18.04

نحوه بهینه سازی درخواست های MySQL با ذخیره سازی ProxySQL در اوبونتو 16.04

نحوه استفاده از Ansible برای نصب و راه اندازی وردپرس با LAMP در اوبونتو 18.04

چگونه می توان پلتفرم كد سرور Cloud IDE را در اوبونتو 18.04 تنظیم كرد (شروع سریع)

چگونه می توان از رول های ansible برای انتزاع محیط زیرساختی خود استفاده کرد

نحوه پیکربندی یک خوشه Galera با MySQL در سرورهای اوبونتو 18.04

نحوه تهیه نسخه پشتیبان و بازیابی یک خوشه Kubernetes در vpsgol با استفاده از Velero

نحوه نصب و استفاده از PostgreSQL در CentOS 7

چگونه می توان پلتفرم Eclipse Theia Cloud IDE را روی اوبونتو 18.4 تنظیم کرد

نحوه استقرار و مدیریت DNS با استفاده از DNSControl در Debian 10

چگونه می توان پلتفرم Cloud IDE کد سرور را روی CentOS 7 تنظیم كرد

کلمات کلیدی خرید سرور

خرید vps – خرید سرور مجازی – خرید سرور – سرور هلند – فروش vps – سرور مجازی آمریکا – خریدvps – سرور مجازی هلند – فروش سرور مجازی – سرور آمریکا – vps – سرور مجازی انگلیس – سرور مجازی آلمان – سرور مجازی کانادا – خرید vps آمریکا – خرید وی پی اس – سرور – خرید سرور مجازی هلند – vps خرید – سرور مجازی فرانسه – سرور مجازی هلند – خرید vps آمریکا – خرید سرور مجازی هلند – خرید وی پی اس – خرید vps هلند – خرید vps فرانسه