ایجاد یک برنامه Django و اتصال آن به یک بانک اطلاعاتی
به خاطر چارچوب وب آزاد و منبع باز که در پایتون نوشته شده است ، Django امکان مقیاس پذیری ، قابلیت استفاده مجدد و توسعه سریع را فراهم می آورد.
در این آموزش می بینید که چگونه پایه و اساس اولیه یک سایت وبلاگی با اتصال به یک پایگاه داده MySQL را تنظیم کنید. این امر شامل ایجاد ساختار اسکلت برنامه وبلاگ با استفاده از django-admin ، ایجاد بانک اطلاعاتی MySQL و سپس اتصال برنامه وب به دیتابیس خواهد بود.
توجه داشته باشید که این امر محیط توسعه را برای شما فراهم می کند تا بتوانید در برنامه وبلاگ خود کار کنید ، اما شما باید قبل از اینکه وبلاگ خود را به صورت زنده در اینترنت قرار دهید ، کارهای دیگری انجام دهید ، نام های دامنه را تعیین و لایه های امنیتی بیشتری اضافه کنید.
پیش نیازها
باید یک محیط Python در سرور مجازی خود تنظیم کنید. در این آموزش ، ما از سرور مجازی اوبونتو 20.04 استفاده خواهیم کرد ، اما از آنجا که تمرکز این آموزش بر روی Django است ، این اصول باید برای سایر سیستم عامل ها نیز کاربرد داشته باشد.
برای راه اندازی پایتون ، آموزش نحوه نصب پایتون 3 و تنظیم یک محیط برنامه نویسی را در سرور مجازی اوبونتو 20.04 دنبال کنید.
با قرارگیری پایتون در جای خود ، می توانیم به سراغ ایجاد برنامه خود برویم.
مرحله 1 – MySQL را نصب کنید
ما از MySQL به عنوان بانک اطلاعاتی خود استفاده خواهیم کرد. ممکن است شما بخواهید از بانک اطلاعاتی دیگری استفاده کنید یا از قبل یک پایگاه داده نصب کرده باشید ، در این صورت باید این مرحله را رد کنید.
برای نصب MySQL در سرور مجازی Ubuntu 20.04 ، دستور زیر را تایپ کنید:
⦁ $ sudo apt install mysql-server
⦁
باید خروجی زیر را دریافت کنید:
Output
● mysql.service – MySQL Community Server
Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled)
Active: active (running) since Thu 2020-05-07 20:22:51 UTC; 3min 7s ago
Main PID: 2052 (mysqld)
Status: “Server is operational”
Tasks: 38 (limit: 1137)
Memory: 317.4M
CGroup: /system.slice/mysql.service
└─2052 /usr/sbin/mysqld
اطمینان حاصل کنید که بازخورد دریافتی بیانگر فعال بودن سرور مجازی MySQL شماست. پس از تایید این موضوع ، می توانید این آموزش را ادامه دهید.
مرحله 2 – اسکلت اولیه پروژه Django را ایجاد کنید
به منظور ایجاد زمینه کاری برای برنامه خود ، باید اسکلت پروژه را با استفاده از دستور django-admin تولید کنیم. این پروژه تولید شده پایه و اساس برنامه وبلاگ ما خواهد بود.
به دایرکتوری بروید که می خواهید برنامه وبلاگ خود را بسازید. در این دیرکتوری ، یک دیرکتوری خاص برای ساخت برنامه ایجاد خواهیم کرد. برای برنامه ای که در حال ساخت هستید ، نام دیرکتوری را چیزی معنی دار در نظر بگیرید. به عنوان نمونه ، ما آن را my_blog_app می نامیم.
⦁ $ mkdir my_blog_app
⦁
اکنون به پوشه تازه ایجاد شده بروید:
⦁ $ cd my_blog_app
⦁
در مرحله بعد ، وارد محیط برنامه نویسی شوید که می خواهید برای کار در Django استفاده کنید. می توانید از یک دیرکتوری موجود استفاده کنید یا یک دیرکتوری جدید ایجاد کنید. ما دیرکتوری خود را env می نامیم ، اما شما باید از اسمی استفاده کنید که برای شما معنی دارد. پس از ایجاد ، می توانید آن را فعال کنید.
⦁ $ python3 -m venv env
⦁
⦁ . env/bin/activate
اگر قبلا Django را نصب نکرده اید ، آن را در این محیط نصب کنید:
⦁ (env) Sammy@ubuntu:$ pip install django
⦁
در حالی که در دیرکتوری my_blog_app هستیم، با اجرای دستور زیر ، پروژه ای را تولید می کنیم:
⦁ (env) Sammy@ubuntu:$ django-admin startproject blog
⦁
با رفتن به دایرکتوری blog/ تأیید کنید که کار کرده است:
⦁ (env) Sammy@ubuntu:$ cd blog
⦁
دایرکتوریblog/ باید پس از اجرای دستور قبلی django-admin در دایرکتوری فعلی ، ~ / my_blog_app / ایجاد شود.
برای تأیید اینکه موارد لازم ایجاد شده است ، ls را اجرا کنید. باید یک دیرکتوری وبلاگ و یک فایل management.py وجود داشته باشد:
Output
blog manage.py
اکنون که دایرکتوری پروژه را ایجاد کرده اید که شامل شروع اولیه برنامه وبلاگ شماست ، می توانیم به مرحله بعدی برویم.
مرحله 3 – تنظیمات را ویرایش کنید
از آنجا که ما پروژه اسکلت را تولید کرده ایم ، اکنون یک فایل settings.py داریم.
برای اینکه وبلاگ ما زمان صحیحی با ناحیه ما ارتباط داشته باشد ، فایل settings.py را ویرایش می کنیم تا از منطقه زمانی فعلی شما استفاده کند. می توانید از این لیست مناطق زمانی به عنوان مرجع استفاده کنید. به عنوان مثال ، ما از وقت America/New_York استفاده خواهیم کرد.
می خواهیم فایل را ویرایش کنیم ، بنابراین بیایید مسیر فایل را با ویرایشگر متن مورد نظر خود باز کنیم. در اینجا ، ما از nano استفاده خواهیم کرد.
⦁ (env) Sammy@ubuntu:$ nano ~/my_blog_app/blog/blog/settings.py
⦁
از آنجا که ما در حال ویرایش قسمت TIME_ZONE هستیم ، مانند زیر به قسمت پایین فایل خواهیم رفت.
settings.py
…
# Internationalization
# https://docs.djangoproject.com/en/2.0/topics/i18n/
LANGUAGE_CODE = ‘en-us’
TIME_ZONE = ‘UTC’
USE_I18N = True
USE_L10N = True
USE_TZ = True
…
ما می خواهیم خط TIME_ZONE را طوری تغییر دهیم که در منطقه زمانی فعلی شما تنظیم شود. در این مثال از منطقه زمانی نیویورک استفاده خواهیم کرد:
settings.py
…
# Internationalization
# https://docs.djangoproject.com/en/2.0/topics/i18n/
LANGUAGE_CODE = ‘en-us’
TIME_ZONE = ‘America/New_York’
USE_I18N = True
…
بیایید فایل را باز نگه داریم زیرا باید مسیری را برای فایل های استاتیک خود اضافه کنیم. فایلهایی که از برنامه وب Django شما دریافت می شوند به فایل های استاتیک شناخته می شوند. این فایل ها می تواند شامل تمام فایل های لازم برای ارائه کامل صفحه وب از جمله JavaScript ، CSS و تصاویر باشد.
به انتهای فایل تنظیمات بروید و مطابق شکل زیر STATIC_ROOT را اضافه کنید:
settings.py
…
# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/2.0/howto/static-files/
STATIC_URL = ‘/static/’
STATIC_ROOT = os.path.join(BASE_DIR, ‘static’)
اکنون که منطقه زمانی و مسیر فایل های استاتیک را اضافه کرده ایم ، باید IP بعدی خود را به لیست هاست های مجاز اضافه کنیم. به خط فایل settings.pyبروید. جایی که ALLOWED_HOSTS نوشته شده، در قسمت بالای فایل settings.py خواهد بود.
settings.py
…
# SECURITY WARNING: don’t run with debug turned on in production!
DEBUG = True
ALLOWED_HOSTS = [‘your server IP address’]
# Application definition
…
آدرس IP سرور مجازی خود را بین براکت و علامت تک نقل قول اضافه کنید.
پس از رضایت از تغییراتی که ایجاد کرده اید ، فایل را ذخیره کنید. اگر در حال استفاده از nano هستید ، می توانید این کار را با فشار دادن CTRL + X و سپس y برای تأیید تغییرات انجام دهید.
شما فایل settings.pyخود را با موفقیت ویرایش کرده اید تا منطقه زمانی مناسب پیکربندی شده باشد. همچنین مسیر فایل های استاتیک خود را اضافه کرده اید و آدرس IP را برای برنامه خود ALLOWED_HOST قرار داده اید.
در آخر ، اجازه دهید یک کاربر ادمین ایجاد کنیم تا بتوانید از رابط مدیر Djano استفاده کنید. بیایید این کار را با دستور Creatuperuser انجام دهیم:
⦁ (me_env) $ python manage.py createsuperuser
⦁
از شما یک نام کاربری ، یک آدرس ایمیل و رمز عبور برای کاربر خواسته می شود.
در این مرحله می توانیم به تنظیم اتصال بانک اطلاعاتی خود بپردازیم.
مرحله 4 – اتصال دهنده پایگاه داده MySQL را نصب کنید
برای استفاده از MySQL با پروژه خود ، به یک کتابخانه اتصال دهنده پایگاه داده Python 3 که سازگار با Django است ، نیاز خواهیم داشت. بنابراین ، ما اتصال دیتابیس را نصب خواهیم کرد ، mysqlclient ، که یک نسخه forked از MySQLdb است.
ابتدا اطمینان حاصل کنید که python3-dev را نصب کرده اید. با اجرای دستور زیر می توانید python3-dev را نصب کنید:
⦁ (env) Sammy@ubuntu:$ sudo apt install python3-dev
⦁
اکنون می توانیم هدرها و كتابخانه های توسعه Python و MySQL را نصب كنیم:
⦁ (env) Sammy@ubuntu:$ sudo apt install python3-dev libmysqlclient-dev default-libmysqlclient-dev
⦁
برای پذیرش نصب ، y و ENTER را فشار دهید.
پس از اتمام نصب ، از pip3 برای نصب کتابخانه mysqlclient از PyPi استفاده خواهیم کرد. از آنجا که نسخه pip به pip3 اشاره می کند ، می توانیم از pip استفاده کنیم.
⦁ (env) Sammy@ubuntu:$ pip install mysqlclient
⦁
خروجی مشابه این را دریافت خواهید کرد ، تأیید میکند که به درستی در حال نصب است:
successfully installed mysqlclient
…
Successfully installed mysqlclient-1.4.6
اکنون با استفاده از کتابخانه اتصال دهنده mysqlclient PyPi با موفقیت MySQL را نصب کردیم.
مرحله 5 – ایجاد بانک اطلاعاتی
اکنون که اسکلت برنامه Django شما راه اندازی شده است و mysqlclient و mysql-server نصب شده اند ، باید برای سازگاری MySQL ، backend Django را پیکربندی کنیم.
به صورت ریشه MySQL با دستور زیر وارد شوید:
⦁ (env) Sammy@ubuntu:$ sudo mysql -u root
⦁
وقتی اعلان تغییر می کند می دانیم که در سرور مجازی MySQL قرار داریم:
Mysql>
بگذارید پایگاه داده های فعلی را با دستور زیر بررسی کنیم:
⦁ Mysql> SHOW DATABASES;
⦁
با فرض اینکه هنوز هیچ پایگاه داده ای ایجاد نکرده اید ، خروجی مشابه زیر را مشاهده خواهید کرد:
Output
+——————–+
| Database |
+——————–+
| information_schema |
| mysql |
| performance_schema |
| sys |
+——————–+
4 rows in set (0.00 sec)
توجه: اگر هنگام تلاش برای اتصال با خطایی مواجه شدید ، تأیید کنید که رمزعبورتان درست است و MySQL را به درستی نصب کرده اید. در غیر اینصورت آموزش نحوه نصب و پیکربندی MySQL را دوباره مرور کنید.
به طور پیش فرض ، شما 4 پایگاه داده را تاکنون ایجاد کرده اید ، data_schema ، MySQL ، performance_schema و sys. نیازی به اتصال به این موارد نداریم ، زیرا حاوی اطلاعاتی مهم برای خود سرور مجازی MySQL هستند.
اکنون ، که با موفقیت به سرور مجازی MySQL خود وارد شده اید ، بانک اطلاعاتی اولیه را ایجاد می کنیم که داده ها را برای وبلاگ مان نگه می دارد.
برای ایجاد یک پایگاه داده در MySQL ، دستور زیر را با استفاده از یک اسم معنی دار برای پایگاه داده خود اجرا کنید:
⦁ Mysql> CREATE DATABASE blog_data;
⦁
پس از ایجاد موفقیت آمیز پایگاه داده ، خروجی زیر را مشاهده خواهید کرد:
Output
Query OK, 1 row affected (0.00 sec)
توجه: اگر خروجی زیر را مشاهده می کنید:
database creation failed
ERROR 1007 (HY000): Can’t create database blog_data; database exists
یعنی ، همانطور که خطا بیان می کند ، یک بانک اطلاعاتی با نام blog_data از قبل وجود دارد.
و اگر خطای MySQL زیر را مشاهده کردید ، به این معنی است که یک خطای نحوی MySQL وجود دارد. بررسی کنید که فرمان را دقیقاً مطابق با این آموزش وارد کرده اید.
database creation failed
ERROR 1064 (42000): You have an error in your SQL syntax;
سپس ، تأیید کنید که اکنون پایگاه داده در لیست پایگاههای داده موجود شما قرار دارد:
⦁ $ SHOW DATABASES;
⦁
باید ببینید که پایگاه داده blog_data در میان پایگاه داده های موجود در خروجی است:
output
+——————–+
| Database |
+——————–+
| information_schema |
| blog_data |
| mysql |
| performance_schema |
| sys |
+——————–+
5 rows in set (0.00 sec)
در مرحله بعد ، قصد داریم یک حساب کاربری MySQL جداگانه ایجاد کنیم که ما بطور انحصاری برای کار با بانک اطلاعات جدید خود استفاده خواهیم کرد. ایجاد بانکهای اطلاعاتی و حسابهای خاص می تواند ما را از منظر مدیریتی و امنیتی پشتیبانی کند. ما در این راهنما از نام djangouser استفاده خواهیم کرد ، اما شما میتوانید از هر نامی استفاده کنید.
ما قصد داریم این حساب را ایجاد کنیم ، رمزعبور راتنظیم کنیم و به دیتابیس ایجاد شده دسترسی پیدا کنیم. می توانیم با تایپ دستور زیر این کار را انجام دهیم. به یاد داشته باشید یک رمزعبور قوی برای کاربر پایگاه داده خود در جایی که password را داریم انتخاب کنید:
⦁ Mysql> CREATE USER ‘djangouser’@’%’ IDENTIFIED WITH mysql_native_password BY ‘password’;
⦁
در مرحله بعد ، به دیتابیس اطلاع دهید که djangouser ما باید دسترسی کامل به دیتابیسی که ایجاد میکنیم داشته باشد:
⦁ Mysql> GRANT ALL ON blog_data.* TO ‘djangouser’@’%’;
⦁
اکنون یک بانک اطلاعاتی و یک حساب کاربری دارید که هرکدام به طور خاص برای Django ساخته شده است. باید امتیازات را flush کنیم تا نمونه فعلی MySQL از تغییرات اخیر ما اطلاع یابد:
⦁ Mysql> FLUSH PRIVILEGES;
⦁
با اتمام آن ، می توانید با وارد کردن EXIT یا با فشار دادن CTRL + D از سرور مجازی MySQL خارج شوید.
مرحله 6 – اتصال پایگاه داده MySQL را به برنامه خود اضافه کنید
سرانجام ، اعتبارات اتصال بانک اطلاعاتی را به برنامه Django شما اضافه خواهیم کرد.
توجه: لازم است به یاد داشته باشید که تنظیمات اتصال ، مطابق مستندات Django ، به ترتیب زیر استفاده می شوند:
OPTIONS
– NAME, USER, PASSWORD, HOST, PORT
– MySQL option files.
بیایید تغییرات لازم را برای اتصال برنامه وبلاگ Django به MySQL ایجاد کنیم.
به فایل settings.py بروید و خطوط فعلی DATABASES را با موارد زیر جایگزین کنید. ما دیکشنری پایگاه داده شما را پیکربندی خواهیم کرد تا بداند که از MySQL به عنوان backend دیتابیس شما استفاده کند و از چه فایلی برای خواندن اعتبارات اتصال بانک اطلاعاتی شما استفاده کند.
⦁ (env) Sammy@ubuntu:$ nano ~/my_blog_app/blog/blog/settings.py
⦁
خطوط موجود را در آنجا پاک کرده و آن را با خطوط زیر جایگزین کنید ، حتماً تعداد مناسب پرانتز را حفظ کنید.
settings.py
…
# Database
# https://docs.djangoproject.com/en/3.0/ref/settings/#databases
DATABASES = {
‘default’: {
‘ENGINE’: ‘django.db.backends.mysql’,
‘OPTIONS’: {
‘read_default_file’: ‘/etc/mysql/my.cnf’,
},
}
}
…
فایل را ذخیره کنید و ببندید.
سپس ، اجازه دهید فایل پیکربندی را ویرایش کنیم تا اعتبارات MySQL شما را داشته باشد. برای ویرایش فایل و افزودن اطلاعات زیر از nano به عنوان sudo استفاده کنید:
⦁ (env) Sammy@ubuntu:$ sudo nano /etc/mysql/my.cnf
⦁
خطوط زیر را اضافه کنید و اطلاعات مربوط به خود را درج کنید.
my.cnf
…
[client]
database = blog_data
user = djangouser
password = your_actual_password
default-character-set = utf8
توجه خواهید کرد که utf8 به عنوان رمزگذاری پیش فرض تنظیم شده است ، که یک روش معمول برای رمزگذاری داده های تک کد در MySQL است. وقتی مطمئن شدید که جزئیات شما صحیح است ، فایل را ذخیره کنید و ببندید.
پس از ویرایش فایل ، لازم است که MySQL را مجدداً راه اندازی کنیم تا تغییرات به مرحله اجرا درآیند.
⦁ (env) Sammy@ubuntu:$ sudo systemctl daemon-reload
⦁
⦁ (env) Sammy@ubuntu:$ sudo systemctl restart mysql
لطفاً توجه داشته باشید که راه اندازی مجدد MySQL چند ثانیه طول می کشد ، بنابراین لطفاً صبور باشید.
مرحله 7 – اتصال MySQL به برنامه را آزمایش کنید
لازم است تأیید کنیم که تنظیمات موجود در Django سرور مجازی MySQL را به درستی تشخیص می دهد. ما می توانیم این کار را با اجرای سرور مجازی انجام دهیم. در صورت عدم موفقیت ، این بدان معنی است که اتصال به درستی کار نمی کند. در غیر این صورت ، اتصال معتبر است.
بیایید ابتدا تغییرات خود را در django با دستور زیر اعمال کنیم:
⦁ (env) Sammy@ubuntu:$ python manage.py migrate
⦁
باید به دیرکتوری زیر برویم:
⦁ (env) Sammy@ubuntu:$ cd ~/my_blog_app/blog/
⦁
از آنجا ، می توانیم دستور زیر را اجرا کنیم:
⦁ (env) Sammy@ubuntu:$ python manage.py runserver your-server-ip:8000
⦁
اکنون خروجی مشابه زیر را مشاهده خواهید کرد:
Output
Performing system checks…
System check identified no issues (0 silenced).
You have 13 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions.
Run ‘python manage.py migrate’ to apply them.
January 4, 2018 – 15:45:39
Django version 2.0.1, using settings ‘blog.settings’
Starting development server at http://your-server-ip:8000/
Quit the server with CONTROL-C.
توجه: در خروجی خواهید دید که جابه جایی های بی رویه داشته اید. اما نگران نباشید ، در آموزش های بعدی به این موضوع پرداخته می شود. این مسئله بر تنظیم اولیه برنامه ما تأثیر نمی گذارد. لطفا پیش بروید.
دستورالعمل های خروجی را دنبال کنید و پیوند پیشنهادی ، http: // your-server-ip: 8000 / را دنبال کنید تا برنامه وب خود را مشاهده کنید و تأیید کنید که به درستی کار می کند.
اگر صفحه شما شبیه به تصویر بالا ظاهر می شود ، برنامه Django شما مطابق آنچه انتظار می رود کار می کند!
هنگامی که آزمایش برنامه تان به پایان رسید ، می توانید CTRL + C را فشار دهید تا دستور Runnerver متوقف شود. با این کار شما به محیط برنامه نویسی خود باز خواهید گشت.
هنگامی که آماده ترک محیط Python خود هستید ، می توانید دستور غیرفعال کردن را اجرا کنید:
⦁ (env) Sammy@ubuntu:$ deactivate
⦁
غیرفعال کردن محیط برنامه نویسی شما را به سمت فرمان نهایی ترمینال باز می گرداند.
نتیجه
در این آموزش پایه و اساس اولیه وبلاگ Django خود را ایجاد کرده اید. MySQL را نصب و پیکربندی کرده و به backend Django وصل کرده اید. همچنین برخی از اطلاعات مهم مانند TIME_ZONE و ALLOWED_HOSTS را به فایل تنظیمات برنامه خود اضافه کرده اید.
اکنون که این تنظیمات و پیکربندی های اولیه کامل شده است ، می توانید شروع به توسعه مدل ها و اعمال برنامه های جابه جایی در برنامه Django خود کنید.
از این لینک ها زیر می توانید آمورش های بیشتری برای لینوکس پیدا کنید :
نصب و پیکربندی Ansible در اوبونتو 18.04 – نصب MySQL در اوبونتو 18.04
نظارت بر سلامت سرور با Checkmk در اوبونتو – اجرای چند نسخه PHP بر روی یک سرور
نصب Nginx، MySQL، PHP در CentOS 7 – نصب و پیکربندی Elasticsearch در اوبونتو 18.04
راه اندازی سرور اولیه با اوبونتو 20.04 – تنظیم کلیدهای SSH در Ubuntu 20.04
نصب و استفاده از PostgreSQL در اوبونتو 20.0 – نحوه نصب MySQL در اوبونتو 20.04
نصب Python 3 روی سرور Ubuntu 18.04 – نحوه نصب Python 3 روی سرور Ubuntu 20.04
نصب Linux،Apache،MySQL،PHP LAMP در اوبونتو 20.04 – نصب وب سرور Apache در CentOS 8
نحوه نصب Drupal با Docker Compose – نحوه نصب Nginx در اوبونتو 20.04
7 مورد از اقدامات امنیتی برای محافظت از سرورهای شما – نحوه نصب و ایمن سازی Redis در اوبونتو 20.04
نحوه نصب و ایمن سازی Redis در اوبونتو 18.04 – اضافه کردن فضای Swap در اوبونتو 20.04
چگونه می توان فایروال را با UFW در اوبونتو 20.04 تنظیم کرد – نظارت بر اطلاعیه و مسیر BGP با BGPalerter اوبونتو 18.04
نصب و ایمن سازی phpMyAdmin در اوبونتو 20.04 – نصب و استفاده از Composer در اوبونتو 20.04
ریست کردن رمز ورود ریشه MySQL یا MariaDB – استفاده از نوع داده MySQL BLOB برای ذخیره تصاویر
نصب Nginx در اوبونتو 18.04 – نصب توزیع Anaconda پایتون در اوبونتو 20.04
نحوه نصب جاوا با Apt در اوبونتو 18.04 – نحوه نصب Django و تنظیم محیط توسعه در اوبونتو 16.04
نصب جنگو و تنظیم محیط توسعه در اوبونتو 20.04 – نحوه ایجاد سرور Minecraft در اوبونتو 18.04
نحوه راه اندازی یک پروژه Node با Typescript – نحوه نصب و پیکربندی VNC در اوبونتو 18.04
ایجاد یک برنامه Django و اتصال آن به یک بانک اطلاعاتی – نصب و پیکربندی VNC در اوبونتو 20.04
نصب MariaDB در اوبونتو 20.04 – فعال سازی و اتصال رابط کاربری Django
تنظیم پلتفرم Cloud IDE کد سرور را در اوبونتو 18.04 – پیکربندی Apache HTTP با رویداد MPM و PHP-FPM
کلمات کلیدی خرید سرور
خرید vps – خرید سرور مجازی – خرید سرور – سرور هلند – فروش vps – سرور مجازی آمریکا – خریدvps – سرور مجازی هلند – فروش سرور مجازی – سرور آمریکا – vps – سرور مجازی انگلیس – سرور مجازی آلمان – سرور مجازی کانادا – خرید vps آمریکا – خرید وی پی اس – سرور – خرید سرور مجازی هلند – vps خرید – سرور مجازی فرانسه – سرور مجازی هلند – خرید vps آمریکا – خرید سرور مجازی ارزان هلند – vps – خرید vps هلند – خرید سرور مجازی آمریکا – خرید vps فرانسه – تست vps – سرور مجازی تست – سرور مجازی ویندوز – ارزانترین vps – خرید وی پی اس – vps ارزان –
https://vpsgol.net/product/vps-germany/
https://vpsgol.net/product/vps-usa/
https://vpsgol.net/product/vps-france/
https://vpsgol.net/product/vps-canada/
https://vpsgol.net/product/vps-poland/
https://vpsgol.net/product/vps-netherlands/
https://vpsgol.net/product/vps-england/