راه اندازی وبلاگ
برای نوشتن بهدنبال مدیوم مناسبی بودم. بعد از اتفاقات اخیر اعتماد به سرویسهای داخلی حالا نگم به صفر ولی به زیر ده درصد رسیده. پس از ویرگول و سرویسهای وبلاگدهی نمیخواستم استفاده کنم.
پس باید از نرمافزارهایی مثل وردپرس، جوملا و ... استفاده میکردم. ولی خب، یه مشکل، وردپرس و امثال وردپرس همهچیز هستند و هیچچیز هم نیستند. پس تمام این گزینهها هم رفت کنار. ابزاری به اسم 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 و نحوهی ست کردنش روی یک دامنه مینویسم.
