remove somthings

This commit is contained in:
2025-07-01 23:56:42 +03:30
parent 4789a8f227
commit bc6a3c581f
23 changed files with 0 additions and 881 deletions

View File

@@ -1,172 +0,0 @@
# کد نویسی برای بات تلگرام
ربات **تلگرام** (**telegram** bot) یک نوع حساب کاربری ویژه در **تلگرام** است که به صورت اتوماتیک پیام ها را ارسال و دریافت می نماید . کاربران از طریق ارسال دستورات گوناگون با ربات ها در ارتباط هستند و امکان مدیریت ربات ها از طریق API **تلگرام** و درخواست های HTTPS وجود دارد . عبارت bot برای ربات ها نمایش داده می شود.
## ساخت بات با BotFather
اولین مرحله برای کد نویسی بات تلگرام ساختن بات است. از طریق [BotFather](https://telegram.me/BotFather) بات را خواهیم ساخت. پیام `start/` را در BotFather وارد کنید سپس روی **newbot - create a new bot/** کلیک کنید. بعد از مشاهده پیام **Alright, a new bot. How are we going to call it? Please choose a name for your bot.** یک اسم برای بات خود وارد کنید.
سپس بعد از مشاهده پیام **Good. Now let's choose a username for your bot. It must end in bot. Like this, for example: TetrisBot or tetris_bot.** یک نام **خاص و Unique انگلیسی** که حتما در آخرش کلمه **bot** را دارد وارد کنید.
زمانی که بات شما ساخته شد توکن بات را که زیر **Use this token to access the HTTP API** قرار دارد را کپی کنید و در محل امنی قرار دهید.
## آماده سازی محیط کد نویسی
به طور کلی از دو روش می توان برای بات های تلگرام برنامه نویسی کرد.
**روش اول: استفاده از Rest API رسمی تلگرام که نحوه استفاده از در سایت core.telegram.org/bots/api قابل دسترس است**
**روش دوم: استفاده از پکیج هایی که کد های پایه بات را برای زبان برنامه نویسی مورد نظر شما ساخته اند**
برخی از این پکیج های عبارت اند از:
برای سی شارپ ([Telegram.Bot](https://www.nuget.org/packages/Telegram.Bot))
این پکیج از طریق کامند زیر در **Dotnet CLI** نصب می شود
dotnet add package Telegram.Bot --version 19.0.0
برای پایتون ( [python-telegram-bot](https://pypi.org/project/python-telegram-bot/2.4/))
این پکیج نیز از طریق کامند زیر قابل نصب است
pip install python-telegram-bot==2.4
برای اینکه این آموزش بر Core و Universal بودن تاکید دارد ما از از طریق روش اول برای بات خود کد نویسی هر چند این روش کمی سخت تر است اما اگر به خوبی این روش را یادبگرید خود می توانید کتابخانه مانند دو نمونه بالا بنوسید
## کد نویسی برای بات
پروژه ای با زبان مورد نظر خود ایجاد کنید و کتابخانه هایی مورد نیاز برای **Rest API** را روی پروژه نصب یا Import کنید.
برای مثال اگر از زبان برنامه نویسی سی شارپ استفاده می کنید باید **RestSharp** را نصب کنید و نحوه کار با آن را بلد باشید و اگر از پایتون استفاده می کنید باید کتابخانه **Request** را نصب و Import کنید.
**قبل از شروع به این نکات درباره API تلگرام توجه کنید.**
+ تلگرام به حروف بزرگ و کوچک در API حساس است
+ تلگرام فقط از **POST** و **GET** پشتیبانی می کند
+ همه درخواست ها باید کاملا با **UTF-8** باشند
+ تلگرام از هر 4 روش رایج ارسال درخواست **(application/json, multipart/form-data ,QueryString, application/x-www-form-urlencoded)** پشتیبانی می کند
**پیشنهاد:** من به شما پیشنهاد می کنم از QueryString یا application/json استفاده کنید.
### روش QueryString چیست؟
در این روش پارامتر های تابع که می خواهیم اجرا کنیم به عنوان QueryString در Url گذاشته می شوند مانند:
https://test.ir/APIFunction?param1=inp1&param2=inp2
همانطور که در مثال بالا آشکار است هر چه بعد از **?** قرا ر می گیرد **Query String** است.
پارامتر 1 یا **param1** اسم متغیر اول ماست و **inp1** ورودی متغیر **param1** است.
سپس پارامتر های ورودی با علامت **&** جدا شده اند. و پارمتر دوم یا **param2** و ورود آن قرار گرفته است.
### روش application/json
در این روش Url فقط به آدرس تابع اشاره دارد نه به ورود های آن مانند:
https://test.ir/APIFunction
در این روش پارامتر ها به عنوان Json در بدنه ارسال می شوند. مانند زیر
{
"Body":{
"param1":"inp1",
"param2":"inp2",
},
البته ارسال بدنه با توجه به کتابخانه که برای API استفاده می کنید. متفاوت مثلا برای **RestSharp** از Request.AddBody باید استفاده کنید.
## استاندارد های استفاده از API تلگرام
**آدرس پایه API:**
https://api.telegram.org/bot<token>/<FuncName>
**توکن:** به جای **<token>** توکنی را که از بات فادر گرفتید قرار دهید
**نام تابع:** تابعی که می خواهید فراخوانی کنید را به جای **<Funcname>** قرار دهید
**موفق بودن یا نا موفق بودن درخواست**
اگر درخواست شما **موفقیت آمیز** باشد با **OK:True** مواجه می شوید و جواب درخواست را به عنوان **Result** به شما برگردانده می شود
**مثال:**
{
"ok":true,
"result":[]
}
اگر درخواست شما **ناموفق** باشد. **OK: False** می شود و شما پارامتر به عنوان **Result** نخواهید داشت همچنین **error_code** و **description** را به ترتیب برای شماره خطا و توصیف خطا دریافت خواهید کرد.
**مثال: **
{
"ok":false,
"error_code":404,
"description":"Not Found"
}
**بروزرسانی بات:**
هر بار که پیامی برای بات ارسال می شود را می توان با **getUpdate** بدست آورد. برای بدست آوردن لیست آپدیت می توانید Url زیر را GET کنید
https://api.telegram.org/bot<token>/getUpdates
این درخواست لیستی از Update ها بر می گرداند.
برای مشاهده شئ Update به https://core.telegram.org/bots/api#update مراجعه کنید
**دریافت اطلاعات کلی بات:**
برای دریافت اطلاعات کلی از آدرس زیر استفاده کنید
https://api.telegram.org/bot<token>/getMe
**جواب:**
{
"ok": true,
"result": {
"id": 6775339167,
"is_bot": true,
"first_name": "ForDocumentPack",
"username": "ForDocumentPackBot",
"can_join_groups": true,
"can_read_all_group_messages": false,
"supports_inline_queries": false
}
}
## ساخت پروژه ساده
می خواهیم یک پروژه کد نویسی کنیم که زمانی که بات روشن می شود یک پیام خوش آمد گویی ارسال کند.
برای این کار از طریق تابع **getUpdates** پیام هایی که بات داده شده است را مشاهده می کنیم مانند زیر:
{
"ok": true,
"result": [
{
"update_id": 529754041,
"message": {
"message_id": 1,
"from": {
"id": 407692495,
"is_bot": false,
"first_name": "Mahdiyar",
"last_name": "Abdollahi",
"username": "Mdr_abdollahi",
"language_code": "en"
},
"chat": {
"id": 407692495,
"first_name": "Mahdiyar",
"last_name": "Abdollahi",
"username": "Mdr_abdollahi",
"type": "private"
},
"date": 1697995311,
"text": "/start",
"entities": [
{
"offset": 0,
"length": 6,
"type": "bot_command"
}
]
}
}
]
}
**نکته: get_updates را در حلقه بی نهایت بی اندازید تا همیشه بروزرسانی شود**
**نکته: بررسی کنید تا به کسانی که به آنها پاسخ داده اید دوباره پاسخ ندهید.**
**نکته: اگر به جای getUpdates از** [WebHooks](https://core.telegram.org/bots/api#getting-updates) **استفاده کنید نیاز به بررسی پاسخ های تکراری نیست**
برای ارسال پیام نیاز به **chat_id** داریم.
result => message => chat => id
بعد از دریافت **chat_id** می توانیم با تابع **sendMessage** پیام برای کاربر ارسال کنید.
https://api.telegram.org/bot<token>/sendMessage
**نکته: حتما باید پارامتر chat_id و text ارسال شود**
**نکته: حتما باید بصورت POST ارسال شود و پارامتر ها به صورت application/json باشد**
شما می توانید تمامی تابع های API تلگرام را از سایت تلگرام مشاهده کنید -> https://core.telegram.org/bots/api

View File

@@ -1,41 +0,0 @@
# آموزش اجرای سرور بات تلگرام
در این سند قصد داریم که سرور بات تلگرام را به صورت لوکال بالا بیاوریم. توجه داشته باشید که شما می توانید از سرور های پیشفرض تلگرام به آدرس **api.telegram.org** استفاده کنید اما اگر قصد دارید که از قابلیت های ویژه مانند اتصال webhook لوکال استفاده نیاز به این سند دارید.
[کاربرد های سرور لوکال تلگرام](https://github.com/tdlib/telegram-bot-api#usage)
**این آموزش فقط برای سیستم های بر پایه Ubuntu 22.04 تست شده است**
## مرحله اول: نصب وابستگی ها
یک سری نرم افزار ها و پکیج ها را باید قبل از اجرای سرور نصب کرد
**اوپن اس اس ال - Open SSL**
sudo apt-get install libssl-dev
**کامپایلر سی پلاس پلاس نسخه 14 ما از g++ 14 استفاده خواهیم کرد**
sudo add-apt-repository ppa:ubuntu-toolchain-r/test
sudo apt update
sudo apt install g++
**زی لیب - zlib**
sudo apt install zlib1g
**جی پرف - gperf**
sudo apt install gperf
**سی میک - cmake**
sudo apt install cmake
## مرحله دوم: نصب
برای نصب دستورات زیر را در ترمینال وارد کنید
git clone --recursive https://github.com/tdlib/telegram-bot-api.git
cd telegram-bot-api
mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Release ..
cmake --build . --target install
```

View File

@@ -1,53 +0,0 @@
# استفاده از Web Hooks در گرفتن پیام های بات تلگرام
**توجه: پیش نیاز این سند Getting Started.MD است**
دو روش برای دریافت پیام ارسالی به بات در تلگرام وجود دارد. **Get Updates Function** و **Web Hooks** روش **Get Updates Function** را در سند قبلی استفاده و بررسی کردیم. برای درک Web Hook باید اول Get Updates را خوب متوجه شویم
## روش اول: Get Updates
در این روش که در سندی قبل از آن استفاده کردیم. شما به تلگرام مراجعه می کنید و تلگرام همه پیام هایی تاریخ بات را برای شما می فرستد در این روش چند چالش وجود دارد
+ **در هر درخواست تمامی پیام ها ارسال می شود این به معنی است که در یک بات با مخاطبان متوسط هر درخواست شامل صد ها هزار پیام است که قبلا به آن پاسخ داده اید و به آن ها دیگر نیازی ندارید**
+ **باید بررسی کنید که به کدام پیام پاسخ داده شده و به کدام پاسخ نداده شده است**
+ **باید از حلقه بی نهایت استفاده کنید تا همیشه از تلگرام درخواست کند. پیاده سازی حلقه بی نهاییت در بسیاری از نرم افزار ها مانند وب سایت بسیار چالش بر انگیز یا غیر ممکن است.**
راه کار بهتر روش Web Hooks است.
## روش دوم: Web Hooks
در این روش به جای اینکه مانند روش **Get Updates** شما به تلگرام مراجعه کنید. تلگرام به شما مراجعه می کند. **پیام های جدید را که قبلا دریافت نکرده اید** به شما می دهد. این روش هر سه مشکل **Get Updates** را بر طرف می کند. البته این روش نیز بی نقص نیست و چالش به همراه دارد. مانند:
+ **چون تلگرام باید برای شما چیزی ارسال کند نمی توان از این روش در فضای Local استفاده کرد**
+ **محدودیت توسط تلگرام برای این روش اعمال شده است که ممکن است رفع این محدودیت ها هزینه بر یا وقت گیر باشد**
### محدودیت های Web Hooks
+ **اگر از وب هوکس استفاده کنید دیگر نمی توانید از getUpdates استفاده کنید**
+ **فقط پورت های 443, 80, 88, 8443 برای اینکار قابل استفاده اند**
+ **فقط تلگرام به سایت هایی که دارای SSL هستند. پیام ها را ارسال می کند**
## تنظیم از Web Hooks
برای تنظیم وب هوک از طریق تابع **setWebhook** آدرسی که می خواهیم به آن پیام ها ارسال شود را به عنوان **Url** ارسال می کنیم
https://api.telegram.org/bot<token>/setWebhook
**نکنه: حتما از متد POST استفاده کنید و Url را با روش application/json بفرستید**
برای مشاهده پارامتر های اختیاری Web Hooks به لینک زیر مراجعه کنید
[https://core.telegram.org/bots/api#setwebhook](Web%20Hooks)
## پاک کردن Web Hooks
اگر به هر دلیلی خواستید وب هوک را پاک کنید یا از get Updates استفاده کنید با استفاده از تابع زیر وب هوکس پاک شده و Get Updates دوباره فعال می شود
https://api.telegram.org/bot<token>/deleteWebhook
## مشاهده وضعیت Web Hooks
با تابع زیر می توان وضعیت وب هوک، سرعت پاسخ دهی، آخرین خطا ها، آخرین هشدار ها و... را مشاهده کرد
https://api.telegram.org/bot<token>/getwebhookinfo
[برای مشاهده اطلاعات دریافتی از این تابع کلیک کنید](https://core.telegram.org/bots/api#webhookinfo)

0
Linux/LPIC1/15-wc.md Normal file
View File

View File

@@ -1,3 +0,0 @@
from django.contrib import admin
# Register your models here.

View File

@@ -1,6 +0,0 @@
from django.apps import AppConfig
class InfoConfig(AppConfig):
default_auto_field = "django.db.models.BigAutoField"
name = "info"

View File

@@ -1,3 +0,0 @@
from django.db import models
# Create your models here.

View File

@@ -1,24 +0,0 @@
from rest_framework import serializers
class MemoryInfoSerializer(serializers.Serializer):
total = serializers.IntegerField()
available = serializers.IntegerField()
percent = serializers.FloatField()
used = serializers.IntegerField()
free = serializers.IntegerField()
active = serializers.IntegerField()
inactive = serializers.IntegerField()
buffers = serializers.IntegerField()
cached = serializers.IntegerField()
shared = serializers.IntegerField()
class CpuInfoSerializer(serializers.Serializer):
info = serializers.FloatField()
class HardInfoSerializer(serializers.Serializer):
total = serializers.IntegerField()
used = serializers.IntegerField()
free = serializers.IntegerField()
percent = serializers.FloatField()

View File

@@ -1,3 +0,0 @@
from django.test import TestCase
# Create your tests here.

View File

@@ -1,7 +0,0 @@
from django.urls import path
from .views import *
urlpatterns = [
path("memory", MemoryInfoView.as_view(),name="memory"),
path("cpu", CpuInfoView.as_view(),name="cpu"),
path("hard",HardInfoView.as_view(),name='hard'),
]

View File

@@ -1,34 +0,0 @@
from django.shortcuts import render
from rest_framework.views import APIView
from rest_framework.response import Response
from .serializers import *
import psutil
import os
# Create your views here.
class MemoryInfoView(APIView):
def get(self, request, *args, **kwargs):
memo_info = psutil.virtual_memory()._asdict()
seri = MemoryInfoSerializer(data=memo_info)
if seri.is_valid():
return Response(seri.data)
return Response(seri.errors,status=400)
class CpuInfoView(APIView):
def get(self, request, *args, **kwargs):
cpu_info = psutil.cpu_percent()
info = {"info":cpu_info}
seri= CpuInfoSerializer(data=info)
if seri.is_valid():
return Response(seri.data)
return Response(seri.errors,status=400)
class HardInfoView(APIView):
def get(self,request,*args,**kwargs):
hard_info = psutil.disk_usage(os.getcwd())._asdict()
seri = HardInfoSerializer(data=hard_info)
if seri.is_valid():
return Response(seri.data)
return Response(seri.errors,status=400)

View File

@@ -1,22 +0,0 @@
#!/usr/bin/env python
"""Django's command-line utility for administrative tasks."""
import os
import sys
def main():
"""Run administrative tasks."""
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "sysinfo.settings")
try:
from django.core.management import execute_from_command_line
except ImportError as exc:
raise ImportError(
"Couldn't import Django. Are you sure it's installed and "
"available on your PYTHONPATH environment variable? Did you "
"forget to activate a virtual environment?"
) from exc
execute_from_command_line(sys.argv)
if __name__ == "__main__":
main()

View File

@@ -1,40 +0,0 @@
جمع‌آوری اطلاعات سیستم با استفاده از Django و Django Rest Framework
مقدمه
در این پروژه، از Django و Django Rest Framework استفاده شده‌است تا اطلاعاتی از سیستم مانند CPU، حافظه و ... جمع‌آوری شود.
راه‌اندازی
نصب مورد نیازها
برای نصب وابستگی‌های مورد نیاز:
bash
Copy code
pip install -r requirements.txt
راه‌اندازی دیتابیس
برای مهاجرت دیتابیس، دستورات زیر را اجرا کنید:
bash
Copy code
python manage.py makemigrations
python manage.py migrate
اجرای سرور
برای اجرای سرور توسط Django:
bash
Copy code
python manage.py runserver
API ها
دریافت اطلاعات CPU
URL: /api/cpu_info/
روش: GET
خروجی: اطلاعات مربوط به CPU
دریافت اطلاعات حافظه
URL: /api/memory_info/
روش: GET
خروجی: اطلاعات مربوط به حافظه
... (و همین طور برای سایر API ها)
جمع‌بندی
این پروژه به شما امکان می‌دهد تا با استفاده از یک وب API ساده، اطلاعات مختلف سیستم را مشاهده کنید.

View File

@@ -1,153 +0,0 @@
# Deploying a Laravel Application on Nginx
This guide covers the steps to deploy a Laravel application on an Nginx web server. Youll configure Nginx, install PHP and required extensions, set up Composer, and secure your Laravel application.
---
## Prerequisites
- **A Linux server** with root or sudo privileges.
- **Nginx installed** or installation instructions are provided below.
- **PHP and required extensions** for running Laravel applications.
- **Composer installed** for managing Laravel dependencies.
---
## Step 1: Install Nginx
1. **Update the package list**:
```bash
sudo apt update
```
2. **Install Nginx**:
```bash
sudo apt install nginx
```
---
## Step 2: Configure Nginx for Laravel
1. **Open the default Nginx configuration file**:
```bash
sudo nano /etc/nginx/sites-available/default
```
2. **Replace the existing content** with the following configuration. Make sure to replace `your_domain.com` with your domain or servers IP address.
```nginx
server {
listen 80;
server_name your_domain.com;
root /var/www/html/your_laravel_project/public;
index index.php index.html index.htm;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php7.4-fpm.sock; # Adjust PHP version if necessary
}
location ~ /\.ht {
deny all;
}
}
```
3. **Save and close the file**.
4. **Test the Nginx configuration** for syntax errors:
```bash
sudo nginx -t
```
5. **Restart Nginx** to apply the new configuration:
```bash
sudo systemctl restart nginx
```
---
## Step 3: Install PHP and Required Extensions
1. **Add the PHP PPA repository**:
```bash
sudo add-apt-repository ppa:ondrej/php
sudo apt update
```
2. **Install PHP and required extensions** for Laravel:
```bash
sudo apt install php7.4-fpm php7.4-mbstring php7.4-xml php7.4-zip php7.4-mysql php7.4-curl php7.4-gd
```
---
## Step 4: Install Composer
1. **Download and install Composer globally**:
```bash
curl -sS https://getcomposer.org/installer | sudo php -- --install-dir=/usr/local/bin --filename=composer
```
---
## Step 5: Deploy the Laravel Application
1. **Clone or upload your Laravel project** to the Nginx web root:
```bash
sudo mkdir -p /var/www/html/your_laravel_project
# Clone or upload your project files here
```
2. **Set appropriate permissions** for the Laravel `storage` and `bootstrap/cache` directories:
```bash
cd /var/www/html/your_laravel_project
sudo chown -R www-data:www-data storage bootstrap/cache
sudo chmod -R 775 storage bootstrap/cache
```
3. **Install Laravel dependencies** with Composer:
```bash
cd /var/www/html/your_laravel_project
composer install --no-dev --optimize-autoloader
```
4. **Generate an application key** for Laravel:
```bash
php artisan key:generate
```
---
## Step 6: Restart PHP-FPM
Restart PHP-FPM to apply any changes:
```bash
sudo systemctl restart php7.4-fpm # Adjust PHP version as needed
```
---
## Summary and Final Checks
Your Laravel application should now be deployed and accessible through Nginx. Visit `http://your_domain.com` in a browser to confirm that the application is working.
---
## Additional Notes
- **Security**: Ensure the `APP_ENV` in your `.env` file is set to `production` for live applications.
- **Permissions**: For added security, periodically review file and folder permissions, particularly within the `storage` and `bootstrap/cache` directories.
- **SSL/TLS**: For a production environment, set up SSL using [Certbot](https://certbot.eff.org/) for secure HTTPS access.
This guide provides the foundational steps to deploy a Laravel application on Nginx. Customize configurations further as per your project requirements.
## Author
[alinuxist](https://github.com/alinuxist)

View File

@@ -1,206 +0,0 @@
### Installing Packages from Ubuntu Repositories
1. Update your Ubuntu system:
```bash
sudo apt update
```
2. Install necessary packages:
```bash
sudo apt install python3-venv python3-dev libpq-dev postgresql postgresql-contrib nginx curl
```
### Creating the PostgreSQL Database and User
3. Log into an interactive Postgres session:
```bash
sudo -u postgres psql
```
4. Inside the PostgreSQL prompt, create a database for your project:
```sql
CREATE DATABASE myproject;
```
5. Create a database user for your project with a secure password:
```sql
CREATE USER myprojectuser WITH PASSWORD 'password';
```
6. Modify connection parameters for the user:
```sql
ALTER ROLE myprojectuser SET client_encoding TO 'utf8';
ALTER ROLE myprojectuser SET default_transaction_isolation TO 'read committed';
ALTER ROLE myprojectuser SET timezone TO 'UTC';
```
7. Grant the new user access to administer the new database:
```sql
GRANT ALL PRIVILEGES ON DATABASE myproject TO myprojectuser;
```
8. Exit the PostgreSQL prompt:
```sql
\q
```
### Creating a Python Virtual Environment for Your Project
9. Create a directory for your project files:
```bash
mkdir ~/myprojectdir
cd ~/myprojectdir
```
10. Create a Python virtual environment:
```bash
python3 -m venv myprojectenv
```
11. Activate the virtual environment:
```bash
source myprojectenv/bin/activate
```
12. Install Django, Gunicorn, and psycopg2:
```bash
pip install django gunicorn psycopg2-binary
```
### Creating and Configuring a New Django Project
13. Create a new Django project with a defined directory:
```bash
django-admin startproject myproject ~/myprojectdir
```
14. Adjust settings in the `settings.py` file:
- Set `ALLOWED_HOSTS` to `['*']`
- Configure `DATABASES` with PostgreSQL details
15. Add static root configuration to `settings.py`:
```python
import os
STATIC_ROOT = os.path.join(BASE_DIR, 'static/')
```
16. Migrate initial database schema:
```bash
~/myprojectdir/manage.py makemigrations
~/myprojectdir/manage.py migrate
```
17. Create an administrative user:
```bash
~/myprojectdir/manage.py createsuperuser
```
18. Collect static content:
```bash
~/myprojectdir/manage.py collectstatic
```
19. Allow port 8000:
```bash
sudo ufw allow 8000
```
20. Start Django development server:
```bash
~/myprojectdir/manage.py runserver 0.0.0.0:8000
```
21. Access your application in a web browser.
22. Stop Apache2 service:
```bash
sudo /etc/init.d/apache2 restart
```
### Testing Gunicorn
23. Test Gunicorn to ensure it can serve the application:
```bash
cd ~/myprojectdir
gunicorn --bind 0.0.0.0:8000 myproject.wsgi
```
24. Stop Gunicorn:
- Press `CTRL-C`
### Creating systemd Socket and Service Files for Gunicorn
25. Create a systemd socket file for Gunicorn:
```bash
sudo nano /etc/systemd/system/gunicorn.socket
```
26. Create and open a systemd service file for Gunicorn:
```bash
sudo nano /etc/systemd/system/gunicorn.service
```
27. Configure the service file with appropriate details.
### Checking for the Gunicorn Socket File
28. Check the status of the Gunicorn socket:
```bash
sudo systemctl status gunicorn.socket
```
29. Check for the existence of the Gunicorn socket file:
```bash
file /run/gunicorn.sock
```
30. Check Gunicorn socket logs:
```bash
sudo journalctl -u gunicorn.socket
```
### Testing Socket Activation
31. Test the socket activation mechanism:
```bash
sudo systemctl status gunicorn
```
32. Send a connection to the socket through curl:
```bash
curl --unix-socket /run/gunicorn.sock localhost
```
### Configuring Nginx to Proxy Pass to Gunicorn
33. Create and open a new server block in Nginx's sites-available directory:
```bash
sudo nano /etc/nginx/sites-available/myproject
```
34. Configure the server block with appropriate settings.
35. Enable the server block:
```bash
sudo ln -s /etc/nginx/sites-available/myproject /etc/nginx/sites-enabled
```
36. Test Nginx configuration for syntax errors:
```bash
sudo nginx -t
```
37. Restart Nginx:
```bash
sudo systemctl restart nginx
```
38. Open firewall to normal traffic on port 80:
```bash
sudo ufw delete allow 8000
sudo ufw allow 'Nginx Full'
```
### Conclusion
You should now be able to access your Django application via your server's domain or IP address.

View File

@@ -1,114 +0,0 @@
# Deploying .NET on Linux
This tutorial has been tested only on .NET 7 and Ubuntu 22.04.
## Getting the Output
First, let's install .NET:
```bash
sudo apt install dotnet-sdk-7.0
```
*Note: You can create a .NET project using `dotnet new mvc` command.*
Then, we need to publish our project:
```bash
dotnet publish
```
The location of the output file will be displayed after the command finishes. Typically, the project output will be placed in:
**bin/Debug/net7.0/publish**
## Installing Nginx
**Nginx** is a high-performance web server with low resource usage, distributed under the terms of the BSD license. It runs on Unix-like operating systems and is widely used, currently powering 12.07% of the internet's domains.
To install **Nginx** via `apt`, use the following command:
```bash
sudo apt install nginx
```
Then, disable the firewall with:
```bash
sudo ufw disable
```
If you encounter an error with this command, it means you don't have a firewall. In that case, skip this part.
If the installation is successful, you should see "Welcome to Nginx" when typing `localhost` in your browser.
## Configuring Nginx
Create a directory for your site:
```bash
sudo mkdir /var/www/app1
```
Copy the contents of the `publish` directory to the newly created directory:
```bash
sudo cp yourprojectFolder/bin/Debug/net7.0/publish /var/www/app1
```
Then, navigate to the Nginx configuration:
```bash
sudo vim /etc/nginx/sites-available/default
```
Replace the contents of the file with the following:
```nginx
server {
listen 80;
server_name example.com *.example.com;
location / {
proxy_pass http://localhost:5000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection keep-alive;
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
```
*Note: Replace `example.com` with your site address.*
Check the configuration file syntax:
```bash
sudo nginx -t
```
If no errors are reported, reload Nginx to apply the changes:
```bash
sudo nginx -s reload
```
## Adding the Site as a Service
Create a service file for your site:
```bash
sudo vim /etc/systemd/system/app1.service
```
Copy the following code into the file:
```plaintext
[Unit]
Description=dotnet webapp
[Service]
WorkingDirectory=/var/www/app1
ExecStart=/usr/bin/dotnet /var/www/app/projectname.dll
Restart=always
RestartSec=10
SyslogIdentifier=projectname
Environment=ASPNETCORE_ENVIRONMENT=Production
[Install]
WantedBy=multi-user.target
```
*Note: Replace `projectname` with your project's name.*
Enable and start the site, and check its status:
```bash
sudo systemctl enable app1.service
sudo systemctl start app1.service
sudo systemctl status app1.service
```
## Author
[Mahdiyar Abdollahi](https://github.com/IAmMahdiyar)