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