یک توسعه‌دهنده

یک توسعه دهنده که بیشتر از توسعه،‌ فیلم می‌بینه و کتاب می‌خونه :)

راه اندازی وبلاگ

پنجشنبه, ۳ فروردين ۱۴۰۲، ۱۲:۲۶ ب.ظ

برای نوشتن به‌دنبال مدیوم مناسبی بودم. بعد از اتفاقات اخیر اعتماد به سرویس‌های داخلی حالا نگم به صفر ولی به زیر ده درصد رسیده. پس از ویرگول و سرویس‌های وبلاگ‌دهی نمی‌خواستم استفاده کنم.

پس باید از نرم‌افزارهایی مثل وردپرس، جوملا و ... استفاده می‌کردم. ولی خب، یه مشکل، وردپرس و امثال وردپرس همه‌چیز هستند و هیچ‌چیز هم نیستند. پس تمام این گزینه‌ها هم رفت کنار. ابزاری به اسم Ghost اومد روی میز. بعد از کمی مطالعه در موردش و تحقیق، دیدم ابزار خوبی‌یه و افراد دیگه‌ای هم هستند که از گوست برای ساختن بلاگشون استفاده کردن.

من از داکر برای بالا آوردن وبلاگم استفاده کردم. و سرور هم داخل ایران نیست، پس مشکل خاصی با داکر ندارم. ولی اگه سرور داخل ایران دارید باید از سرویس‌هایی مثل شکن برای دور زدن تحریم‌ها استفاده کنید.

خیلی هم best practice داکر رو ننوشتم. پس بهتره مثل من انجام ندین :)) و از .env استفاده کنید. ولی خب این فایل docker-compose و تنظیمات nginx من برای بالا آوردن وبلاگه:

version: "3"

services:
  ghost:
    image: ghost:latest
    container_name: ghost
    restart: always
    environment:
      url: <DOMAIN>
      database__client: mysql
      database__connection__host: db
      database__connection__user: <DB_USER>
      database__connection__password: <DB_PASSWORD>
      database__connection__database: <DB_NAME>
    ports:
      - 2368:2368
    volumes:
      - ghost_data:/var/lib/ghost/content
    depends_on:
      - db

  db:
    image: mysql:latest
    container_name: db
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: <DB_ROOT_PASSWORD>
      MYSQL_DATABASE: <DB_NAME>
      MYSQL_USER: <DB_USER>
      MYSQL_PASSWORD: <DB_PASSWORD>
    volumes:
      - mysql_data:/var/lib/mysql

  nginx:
    image: nginx:latest
    container_name: nginx
    restart: always
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro
      - ./nginx/conf.d:/etc/nginx/conf.d:ro
      - /etc/letsencrypt:/etc/letsencrypt:ro # next blog post
    depends_on:
      - ghost

volumes:
  ghost_data:
  mysql_data:

از دیتابیس mysql برای نگهداری دیتا استفاده می‌کنم.

تنظیمات nginx.conf و blog.conf هم به ترتیب:

user  nginx;
worker_processes  auto;
worker_rlimit_nofile 100000;

# error_log  /var/log/nginx/error.log notice;
error_log /var/log/nginx/error.log crit;

pid        /var/run/nginx.pid;

events {
    worker_connections  4096;
    use epoll;
    multi_accept on;
}

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    open_file_cache max=200000 inactive=20s;
    open_file_cache_valid 30s;
    open_file_cache_min_uses 2;
    open_file_cache_errors on;


    server_tokens off;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;
    # access_log off;


    sendfile        on;
    tcp_nopush     on;
    tcp_nodelay	on;


    gzip  on;
    gzip_min_length 10240;
    gzip_comp_level 1;
    gzip_vary on;
    gzip_disable msie6;
    gzip_proxied expired no-cache no-store private auth;
    gzip_types
        # text/html is always compressed by HttpGzipModule
        text/css
        text/javascript
        text/xml
        text/plain
        text/x-component
        application/javascript
        application/x-javascript
        application/json
        application/xml
        application/rss+xml
        application/atom+xml
        font/truetype
        font/opentype
        application/vnd.ms-fontobject
        image/svg+xml;

    # allow the server to close connection on non responding client, this will free up memory
    reset_timedout_connection on;

    # request timed out -- default 60
    client_body_timeout 10;

    # if client stop responding, free up memory -- default 60
    send_timeout 2;

    # server will close connection after this time -- default 75
    keepalive_timeout 30;

    # number of requests client can make over keep-alive -- for testing environment
    keepalive_requests 100000;

    include /etc/nginx/conf.d/*.conf;
}
server {
	listen 443 ssl http2;
	server_name <DOMAIN>;
	ssl_certificate /etc/letsencrypt/live/mrleftctrl.com/fullchain.pem;
	ssl_certificate_key /etc/letsencrypt/live/mrleftctrl.com/privkey.pem;
	include /etc/letsencrypt/options-ssl-nginx.conf;

	location / {
	        proxy_redirect off;
	        proxy_pass http://ghost:2368;
	        proxy_http_version 1.1;
	        proxy_set_header Upgrade $http_upgrade;
	        proxy_set_header Connection "upgrade";
        	proxy_set_header Host $host;
	        proxy_set_header X-Real-IP $remote_addr;
        	proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
	}
}

ساختار درختی فایل‌ها هم به شکل زیر هست:

├── docker-compose.yaml
├── nginx
│   ├── conf.d
│   │   └── blog.conf
│   └── nginx.conf

احتمالا تو پست بعدی هم در مورد SSL/TLS و نحوه‌ی ست کردنش روی یک دامنه می‌نویسم.

  • liniolon

ghost cms

nginx

نظرات (۰)

هیچ نظری هنوز ثبت نشده است
ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
تجدید کد امنیتی

تمام حقوق مادی و معنوی این وبلاگ متعلق به وبلاگ سرزمین برنامه نویسی بوده و هر گونه کپی بردای بدون ذکر منبع غیرمجاز و از نظر ما حرام است